BE/Spring Boot

[Spring Boot] 멀티 모듈 프로젝트 생성 / API Gateway 연결

셰욘 2025. 3. 18. 20:13
728x90

하나의 프로젝트 안에 여러 개의 프로젝트가 들어갈 수 있게 멀티 모듈 프로젝트를 생성

 

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로 보내진다.

728x90