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개의 어플리케이션이 실행된 모습을 확인할 수 있다.