


슬슬 ZEP 캐릭터 코디하기가 빡세짐. 이미 한번씩 다 해본 것만 눈에 들어옴.
전화영어하는데 드라마 The Inbestigators 시즌3 캔슬 이야기를 하려고 했는데 드라마라고 하니까,
선생님이 몹시 흥분하며 김수현 이야기를 했다..... 신도 안 믿는데 오마이갓 소리만 나왔음.
이게 바로 나라 망신...?
[MSA] 개인 프로젝트 Monolithic to MSA 전환기 - (2) 멀티 모듈 구성하기
이제 본격적으로 모놀리식 아키텍쳐 프로젝트를 MSA 아키텍쳐로 전환해보고자 합니다! 이번 포스팅에서는 단일 모듈로 구성되어 있는 프로젝트를 멀티 모듈로 구성하는 과정을 담아보겠습니다.
ksh-coding.tistory.com
1. root 디렉토리에 settings.gradle, build.gradle 넣어 줌.
2. common 자바 모듈 만듦.
3. global 패키지 먼저 만들고 BaseEntity.java 만들었더니 어노테이션 import가 안됨.
package com.fn.global;
import java.time.LocalDateTime;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import jakarta.persistence.Column;
import jakarta.persistence.EntityListeners;
import jakarta.persistence.MappedSuperclass;
import lombok.Getter;
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseEntity {
@CreatedDate
@Column(updatable = false, nullable = false)
private LocalDateTime createdAt;
@LastModifiedDate
private LocalDateTime updatedAt;
@Column(nullable = false)
private boolean isDeleted = false;
private LocalDateTime deletedAt;
@CreatedBy
@Column(updatable = false)
private String createdBy;
@LastModifiedBy
private String updatedBy;
private String deletedBy;
// @PreUpdate
// public void setDeleted() {
// if (isDeleted) {
// deletedAt = LocalDateTime.now();
// deletedBy = getAuthenticatedUsername();
// }
// }
//
// private String getAuthenticatedUsername() {
// Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
// if (authentication == null || !authentication.isAuthenticated()) {
// return "SYSTEM";
// }
// Object principal = authentication.getPrincipal();
// return (principal instanceof UserDetails) ? ((UserDetails) principal).getUsername() : "UNKNOWN";
// }
}
4. ChatGPT한테 물어봤더니 Application에 @EnableJpaAuditing 넣어야 한다고 함.
근데 이건 자바 모듈이라니까 JpaConfig를 만들라고 함. 그래서 만들었더니 그것도 어노테이션 import 안됨.
package com.fn.global.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@Configuration
@EnableJpaAuditing
public class JpaConfig {
}
5. 그렇다면 SpringBoot 모듈로 만들어야 하나? → 😇튜터님: 그냥 SpringBoot 플러그인만 넣으면 될듯ㅇㅇ
6. common/build.gradle에 id 'org.springframework.boot' version '3.4.3' 추가
7. 터미널에 .gradlew :common:dependencies 명령어 넣어보니 springJPA dependencies가 FAILED 상태

8. 플러그인에 id 'io.spring.dependency-management' version '1.1.7' 안 넣어서 그런 거였음.
9. exception은 1차 팀장님이 세팅해둔 거 훔쳐옴.
- common/build.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '3.4.3'
id 'io.spring.dependency-management' version '1.1.7'
}
group = 'com.fn'
version = 'unspecified'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
// implementation 'org.springframework.boot:spring-boot-starter-security'
compileOnly 'org.projectlombok:lombok:1.18.30'
annotationProcessor 'org.projectlombok:lombok:1.18.30'
testImplementation platform('org.junit:junit-bom:5.10.0')
testImplementation 'org.junit.jupiter:junit-jupiter'
}
tasks.test {
useJUnitPlatform()
}
root/settings.gradle각 서비스에서 의존성에 아래처럼 추가해서 쓰면 됨.
dependencies {
implementation project(':common')
}
그런데 company/build.gradle에 common 의존성 추가해주니 못 찾겠다 🐶🐶🐶
당연히 내가 잘못했겠지만 너가 좀 알아서 에러 처리 좀 해줬으면 좋겠다… (양심없음

- 해결 - 외쳐, 갓용쌤
- 최상위 디렉토리에만 settings.gradle이 있어야 함. → company/settings.gradle 삭제
- JPA 설정 안했다고 에러 남 → 데이터베이스 연결해주니까 에러 없어짐!!
Company 만들어서 함 테스트해봤는데 잘 들어온다!!


업체 c만 하고 자야지...
'TIL' 카테고리의 다른 글
TIL25. 상품 만들기 (1) 생성, 조회 (0) | 2025.03.18 |
---|---|
TIL24. 업체 만들기 (0) | 2025.03.17 |
TIL22. SAGA Pattern + JMeter (0) | 2025.03.13 |
TIL21. 물류 관리 및 배송 시스템 프로젝트 시작!! (0) | 2025.03.12 |
TIL20. Kafka (0) | 2025.03.11 |