MSA 구조에서 공통 클래스를 다루는 방법은 다양합니다. 일반적으로는 공통 클래스를 별도의 모듈 또는 라이브러리로 분리하여 관리하는 방법을 많이 사용합니다. 이렇게 분리된 공통 모듈은 각각의 MS 서버에서 필요할 때마다 참조하여 사용할 수 있습니다.
또한, 다른 MS 서버들과의 통신을 위한 API 인터페이스를 정의하고 공통 클래스를 활용하여 데이터를 교환하는 경우도 있습니다. 이렇게하면 복붙으로 인한 중복코드를 피하고 재사용성을 높일 수 있습니다.
실무에서는 각 팀이 독립적으로 개발하거나 유지 보수를 하기 때문에 공통 클래스를 분리하여 관리하는 것이 일반적입니다. 이를 통해 코드의 일관성과 유지보수성을 높일 수 있습니다.
코드 재사용
일관성 유지
버그 수정 및 업데이트 용이성
효율성 증가
의존성 관리
유연성 감소
코드 복잡성 증가
오버헤드 발생
경험에서 나오는 단점
plugins {
id 'java'
id 'org.springframework.boot' version '3.2.4' apply false
id 'io.spring.dependency-management' version '1.1.4'
}
group = 'org.example'
version = '0.0.6' // 새로운 jar 파일로 만들고 싶으면 버전 수정
java {
sourceCompatibility = '17'
}
repositories {
mavenCentral()
}
dependencyManagement {
imports {
mavenBom org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES
}
}
dependencies {
// 공통 라이브러리로 만들 코드에 필요한 의존성 작성
}
tasks.named('test') {
useJUnitPlatform()
}
파일 구성하기
global 내에 있는 모든 코드는 공통 라이브러리로 만들 코드를 작성
recources 아래 파일 구성
- 다른 스프링부트 프로젝트에서는 해당 라이브러리를 Bean에 자동 등록해주지 않아 등록해주도록 만들어주는 파일이다 아래 코드는 파일 내용이다.
org.example.share.config.AutoConfig
- AutoConfig 코드
@Configuration
@ComponentScan("org.example.share")
public class AutoConfig {
}
위와 같이 파일을 구성하고 build 하면 지정한 버전으로 jar파일이 생긴다.
위에서 생긴 jar파일을 필요한 프로젝트의 로컬 위치에 넣어주고 build.gradle 수정
dependencies {
implementation files('share-0.0.1-SNAPSHOT.jar')
}
아래와 같이 jar 파일의 내용을 화살표로 열 수 있다면 성공이다
위에서와 같이 공통 라이브러리를 생성하는데 성공하고 적용까지 해보았다. 다만 Nexus나 Jenkins를 이용해서 파일을 배포하거나 하지 않아서 추가 공통 라이브러리가 필요할 때마다 다시 만들어서 넣어줘야 하는 불편함이 생겼다.