Backend
home
🪧

Springboot MSA(Microservice Architecture) 세팅 가이드

생성 일시
2025/02/17 12:43
태그
SpringBoot
게시일
2025/02/17
최종 편집 일시
2025/02/17 12:59

MSA 세팅 가이드

인프런 강의를 들으면서 스프링 프로젝트의 MSA 세팅 관련하여 공부한 내용을 정리해보고자 포스팅을 하였다.

1. 먼저 src 폴더를 삭제한다.

2. build.gradle setting 을 다음과 같이 한다.

plugins { id 'java' id 'org.springframework.boot' version '3.3.2' id 'io.spring.dependency-management' version '1.1.6' } group = 'kuke' version = '1' allprojects { repositories { mavenCentral() } apply plugin: 'java' apply plugin: 'org.springframework.boot' apply plugin: 'io.spring.dependency-management' java { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } dependencies { compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testCompileOnly 'org.projectlombok:lombok' testAnnotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' } tasks.named('test') { useJUnitPlatform() } }
Java
복사
allprojects 에 dependencies와 java 관련 정보를 넣는다.
apply plugin을 통해 각각의 프로젝트에 설정한 plugin들이 적용될 수 있도록 설정한다.

3. 여러 개 서비스로 분리하여 폴더 생성 및 관련 정보 세팅

폴더 구조
. ├── HELP.md ├── README.md ├── build │ └── reports │ └── problems │ └── problems-report.html ├── build.gradle ├── common ├── gradle │ └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── service │ ├── article │ │ ├── build │ │ │ ├── classes │ │ │ │ └── java │ │ │ │ └── main │ │ │ │ └── kuke │ │ │ │ └── board │ │ │ │ └── article │ │ │ │ └── ArticleApplication.class │ │ │ ├── generated │ │ │ │ └── sources │ │ │ │ ├── annotationProcessor │ │ │ │ │ └── java │ │ │ │ │ └── main │ │ │ │ └── headers │ │ │ │ └── java │ │ │ │ └── main │ │ │ ├── resources │ │ │ │ └── main │ │ │ │ └── application.yml │ │ │ └── tmp │ │ │ └── compileJava │ │ │ └── previous-compilation-data.bin │ │ ├── build.gradle │ │ └── src │ │ ├── main │ │ │ ├── java │ │ │ │ └── kuke │ │ │ │ └── board │ │ │ │ └── article │ │ │ │ └── ArticleApplication.java │ │ │ └── resources │ │ │ └── application.yml │ │ └── test │ │ ├── java │ │ └── resources │ ├── article-read │ │ ├── build │ │ │ ├── classes │ │ │ │ └── java │ │ │ │ └── main │ │ │ │ └── kuke │ │ │ │ └── board │ │ │ │ └── articleread │ │ │ │ └── ArticleReadApplication.class │ │ │ ├── generated │ │ │ │ └── sources │ │ │ │ ├── annotationProcessor │ │ │ │ │ └── java │ │ │ │ │ └── main │ │ │ │ └── headers │ │ │ │ └── java │ │ │ │ └── main │ │ │ ├── resources │ │ │ │ └── main │ │ │ │ └── application.yml │ │ │ └── tmp │ │ │ └── compileJava │ │ │ └── previous-compilation-data.bin │ │ ├── build.gradle │ │ └── src │ │ ├── main │ │ │ ├── java │ │ │ │ └── kuke │ │ │ │ └── board │ │ │ │ └── articleread │ │ │ │ └── ArticleReadApplication.java │ │ │ └── resources │ │ │ └── application.yml │ │ └── test │ │ ├── java │ │ └── resources │ ├── comment │ │ ├── build │ │ │ ├── classes │ │ │ │ └── java │ │ │ │ └── main │ │ │ │ └── kuke │ │ │ │ └── board │ │ │ │ └── comment │ │ │ │ └── CommentApplication.class │ │ │ ├── generated │ │ │ │ └── sources │ │ │ │ ├── annotationProcessor │ │ │ │ │ └── java │ │ │ │ │ └── main │ │ │ │ └── headers │ │ │ │ └── java │ │ │ │ └── main │ │ │ ├── resources │ │ │ │ └── main │ │ │ │ └── application.yml │ │ │ └── tmp │ │ │ └── compileJava │ │ │ └── previous-compilation-data.bin │ │ ├── build.gradle │ │ └── src │ │ ├── main │ │ │ ├── java │ │ │ │ └── kuke │ │ │ │ └── board │ │ │ │ └── comment │ │ │ │ └── CommentApplication.java │ │ │ └── resources │ │ │ └── application.yml │ │ └── test │ │ ├── java │ │ └── resources │ ├── hot-article │ │ ├── build │ │ │ ├── classes │ │ │ │ └── java │ │ │ │ └── main │ │ │ │ └── kuke │ │ │ │ └── board │ │ │ │ └── hotarticle │ │ │ │ └── HotArticleApplication.class │ │ │ ├── generated │ │ │ │ └── sources │ │ │ │ ├── annotationProcessor │ │ │ │ │ └── java │ │ │ │ │ └── main │ │ │ │ └── headers │ │ │ │ └── java │ │ │ │ └── main │ │ │ ├── resources │ │ │ │ └── main │ │ │ │ └── application.yml │ │ │ └── tmp │ │ │ └── compileJava │ │ │ └── previous-compilation-data.bin │ │ ├── build.gradle │ │ └── src │ │ ├── main │ │ │ ├── java │ │ │ │ └── kuke │ │ │ │ └── board │ │ │ │ └── hotarticle │ │ │ │ └── HotArticleApplication.java │ │ │ └── resources │ │ │ └── application.yml │ │ └── test │ │ ├── java │ │ └── resources │ ├── like │ │ ├── build │ │ │ ├── classes │ │ │ │ └── java │ │ │ │ └── main │ │ │ │ └── kuke │ │ │ │ └── board │ │ │ │ └── like │ │ │ │ └── LikeApplication.class │ │ │ ├── generated │ │ │ │ └── sources │ │ │ │ ├── annotationProcessor │ │ │ │ │ └── java │ │ │ │ │ └── main │ │ │ │ └── headers │ │ │ │ └── java │ │ │ │ └── main │ │ │ ├── resources │ │ │ │ └── main │ │ │ │ └── application.yml │ │ │ └── tmp │ │ │ └── compileJava │ │ │ └── previous-compilation-data.bin │ │ ├── build.gradle │ │ └── src │ │ ├── main │ │ │ ├── java │ │ │ │ └── kuke │ │ │ │ └── board │ │ │ │ └── like │ │ │ │ └── LikeApplication.java │ │ │ └── resources │ │ │ └── application.yml │ │ └── test │ │ ├── java │ │ └── resources │ └── view │ ├── build.gradle │ └── src │ ├── main │ │ ├── java │ │ │ └── kuke │ │ │ └── board │ │ │ └── view │ │ │ └── ViewApplication.java │ │ └── resources │ │ └── application.yml │ └── test │ ├── java │ └── resources └── settings.gradle
Java
복사
폴더 구조상 6개의 서비스 폴더로 구분하였다.
해당 6개 폴더에 각각의 Application 클래스를 생성한다.
package kuke.board.article; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class ArticleApplication { public static void main(String[] args) { SpringApplication.run(ArticleApplication.class, args); } }
Java
복사
application.yml 파일에는 server port 번호를 입력한다.
server.port: 9000
YAML
복사
각 폴더의 build.gradle에는 다음과 같이 세팅한다.
spring-web 의존 라이브러리를 세팅
dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' }
Java
복사
각각의 서비스별로 어플리케이션이 실행된 것을 확인할 수 있다.
article
article-read
comment
hot-article
like
view
최종적으로 6개의 어플리케이션이 실행된 모습을 확인할 수 있다.