하나의 프로젝트 안에 여러 개의 프로젝트가 들어갈 수 있게 멀티 모듈 프로젝트를 생성
common, user-api, board-api, gateway가 있는 프로젝트 만들
멀티 모듈 프로젝트 생성
모듈 생성
프로젝트 우클릭 - New - Module 클릭

모듈 이름을 입력하고 생성한다.
모듈 세 개 추가

settings.gradle 설정
프로젝트의 settings.gradle에 생성한 모듈들을 추가해준다.
rootProject.name = 'multi'
include 'user-api'
include 'common'
include 'board-api'

필요 없는 파일 삭제
프로젝트의 src는 사용할 일이 없기 떄문에 src 폴더를 삭제해준다.
각각의 모듈에서 필요 없는 파일들은 삭제하고, src 폴더와 build.gradle 파일만 남긴다.

build.gradle 수정 (공통 부분 작성)
프로젝트의 build.gradle을 수정한다.
모듈들에서 공통으로 사용하는 라이브러리들을 넣어준다.
plugins {
id 'java'
id 'org.springframework.boot' version '3.4.2'
id 'io.spring.dependency-management' version '1.1.7'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
bootJar.enabled = false
repositories {
mavenCentral()
}
// 공통 설정 부분
subprojects {
apply plugin: 'java'
apply plugin: 'java-library'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'org.springframework.boot'
compileJava {
sourceCompatibility = 17
targetCompatibility = 17
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
compileOnly 'org.projectlombok:lombok:1.18.36'
annotationProcessor('org.projectlombok:lombok')
}
tasks.named('test') {
useJUnitPlatform()
}
}
새로 생성한 모듈들의 build.gradle에서 중복 부분을 제거한다.
group = 'com.example.user'
version = '0.0.1-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
}
만약 board-api에서 common 모듈의 클래스, 메서드, 라이브러리를 사용할 수 있게 하려면
implementation으로 board-api의 build.gradle 파일에 추가해준다.
dependencies {
implementation project(':common')
}
포트 번호 설정 (application.yml)
실행할 모듈의 application.yml에 포트 번호 설정을 추가해준다.
// user-api
server:
port: 8081
// board-api
server:
port: 8082
모듈을 실행하면 각각 설정한 포트에서 실행 중인 걸 확인할 수 있다.

Gateway 모듈 생성
위에서 모듈을 생성한 것처럼 Gateway 모듈을 생성해준다.
Gateway 라이브러리 추가
build.gradle에 라이브러리를 추가해준다.
group = 'com.example.user'
version = '0.0.1-SNAPSHOT'
ext {
set('springCloudVersion', '2024.0.0')
}
dependencyManagement {
imports {
mavenBom("org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}")
}
}
dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
}
gateway 설정 (application.yml)
server:
port: 8080
spring:
application:
name: api-gateway
cloud:
gateway:
routes:
# /user 로 시작하는 url이면 user-api 연결
- id: user-api
uri: http://localhost:8082
predicates:
- Path=/user/**
# /board 로 시작하는 url이면 board-api 연결
- id: board-api
uri: http://localhost:8081
predicates:
- Path=/board/**
클라이언트는 게이트웨이를 통해서 요청을 보낼 수 있다.
게이트웨이가 요청 url을 보고 url에 맞는 서버로 요청을 보낸다.
게이트웨이가 8000 포트로 실행 중일 때,
localhost:8000/board/list 로 요청을 보내면 board-api로 보내진다.

'BE > Spring Boot' 카테고리의 다른 글
[Spring Boot] Gateway에서 인가 처리 (Filter) (0) | 2025.03.21 |
---|---|
[Spring Boot] Eureka란? / 스프링 부트에서 Eureka, Gateway 설정 (0) | 2025.03.19 |
[Spring Boot] Spring Cloud란? / Spring Cloud Gateway (0) | 2025.03.18 |
[Spring Boot] STOMP란? / 간단한 채팅방 구현 (0) | 2025.03.18 |
[Spring Boot] WebSocket과 Kafka로 실시간 채팅 구현 (0) | 2025.03.18 |
하나의 프로젝트 안에 여러 개의 프로젝트가 들어갈 수 있게 멀티 모듈 프로젝트를 생성
common, user-api, board-api, gateway가 있는 프로젝트 만들
멀티 모듈 프로젝트 생성
모듈 생성
프로젝트 우클릭 - New - Module 클릭

모듈 이름을 입력하고 생성한다.
모듈 세 개 추가

settings.gradle 설정
프로젝트의 settings.gradle에 생성한 모듈들을 추가해준다.
rootProject.name = 'multi' include 'user-api' include 'common' include 'board-api'

필요 없는 파일 삭제
프로젝트의 src는 사용할 일이 없기 떄문에 src 폴더를 삭제해준다.
각각의 모듈에서 필요 없는 파일들은 삭제하고, src 폴더와 build.gradle 파일만 남긴다.

build.gradle 수정 (공통 부분 작성)
프로젝트의 build.gradle을 수정한다.
모듈들에서 공통으로 사용하는 라이브러리들을 넣어준다.
plugins { id 'java' id 'org.springframework.boot' version '3.4.2' id 'io.spring.dependency-management' version '1.1.7' } group = 'com.example' version = '0.0.1-SNAPSHOT' java { toolchain { languageVersion = JavaLanguageVersion.of(17) } } bootJar.enabled = false repositories { mavenCentral() } // 공통 설정 부분 subprojects { apply plugin: 'java' apply plugin: 'java-library' apply plugin: 'io.spring.dependency-management' apply plugin: 'org.springframework.boot' compileJava { sourceCompatibility = 17 targetCompatibility = 17 } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' compileOnly 'org.projectlombok:lombok:1.18.36' annotationProcessor('org.projectlombok:lombok') } tasks.named('test') { useJUnitPlatform() } }
새로 생성한 모듈들의 build.gradle에서 중복 부분을 제거한다.
group = 'com.example.user' version = '0.0.1-SNAPSHOT' repositories { mavenCentral() } dependencies { }
만약 board-api에서 common 모듈의 클래스, 메서드, 라이브러리를 사용할 수 있게 하려면
implementation으로 board-api의 build.gradle 파일에 추가해준다.
dependencies { implementation project(':common') }
포트 번호 설정 (application.yml)
실행할 모듈의 application.yml에 포트 번호 설정을 추가해준다.
// user-api server: port: 8081 // board-api server: port: 8082
모듈을 실행하면 각각 설정한 포트에서 실행 중인 걸 확인할 수 있다.

Gateway 모듈 생성
위에서 모듈을 생성한 것처럼 Gateway 모듈을 생성해준다.
Gateway 라이브러리 추가
build.gradle에 라이브러리를 추가해준다.
group = 'com.example.user' version = '0.0.1-SNAPSHOT' ext { set('springCloudVersion', '2024.0.0') } dependencyManagement { imports { mavenBom("org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}") } } dependencies { implementation 'org.springframework.cloud:spring-cloud-starter-gateway' }
gateway 설정 (application.yml)
server: port: 8080 spring: application: name: api-gateway cloud: gateway: routes: # /user 로 시작하는 url이면 user-api 연결 - id: user-api uri: http://localhost:8082 predicates: - Path=/user/** # /board 로 시작하는 url이면 board-api 연결 - id: board-api uri: http://localhost:8081 predicates: - Path=/board/**
클라이언트는 게이트웨이를 통해서 요청을 보낼 수 있다.
게이트웨이가 요청 url을 보고 url에 맞는 서버로 요청을 보낸다.
게이트웨이가 8000 포트로 실행 중일 때,
localhost:8000/board/list 로 요청을 보내면 board-api로 보내진다.

'BE > Spring Boot' 카테고리의 다른 글
[Spring Boot] Gateway에서 인가 처리 (Filter) (0) | 2025.03.21 |
---|---|
[Spring Boot] Eureka란? / 스프링 부트에서 Eureka, Gateway 설정 (0) | 2025.03.19 |
[Spring Boot] Spring Cloud란? / Spring Cloud Gateway (0) | 2025.03.18 |
[Spring Boot] STOMP란? / 간단한 채팅방 구현 (0) | 2025.03.18 |
[Spring Boot] WebSocket과 Kafka로 실시간 채팅 구현 (0) | 2025.03.18 |