이번 4편부터는 드디어 구현을 시작하는데, 먼저 개발 로드맵 다시 살펴보자.
개발 로드맵
[1단계] MSA 인프라 및 핵심 비즈니스 구축 (Base MVP)
API, 테이블, 인프라 설계서 작성- Eureka Server(디스커버리) 및 Config Server(설정 관리) 구축
- User 서비스, Band 서비스, Post 서비스 생성 및 유레카 등록
[핵심 기능] Spotify API 연동 및 Post/Song 위키형 게시판 CRUD 완성 (인증 없이 우선 개발)
[장애 격리] Post 서비스 내에 Resilience4j 서킷 브레이커 및 @Retryable 재시도 로직 적용 및 검증
[2단계] 게이트웨이 라우팅/보안 필터 및 커뮤니티 확장 (Feature MVP)
- Gateway 서비스 구축 및 각 서비스로의 패스 라우팅(Routing) 적용
[인증/인가 빌드업] User 서비스에서 로그인 검증 후, Gateway에서 JWT 토큰을 발급·검증하는 흐름 완성
[인증 기반 개발] 게이트웨이가 넘겨준 헤더(X-User-Id)를 활용해 BandMember 매핑 및 프라이빗 타임라인(접근 제어) 구현 - Chat 서비스 추가 분리 및 WebSocket + STOMP 기반 1:1 DM 구축
[3단계] 인프라 고도화 및 아키텍처 검증 (Architecture MVP)
- GitHub Actions와 Docker를 이용한 AWS 멀티 컨테이너 배포 파이프라인 구축
- Prometheus + Grafana를 연동하여 서버 메트릭 모니터링 환경 구축
- JMeter / k6 부하테스트를 통해 외부 API 지연 발생 시 서킷 브레이커 동작(Fallback) 검증 및 Redis 캐싱 적용 전후 TPS 비교
- 실사용자 배포 및 피드백 수집
맞다. 지금까지 딱 1줄 했다.
갈 길이 멀다... 얼른 MSA 환경부터 구성해 보자.
MSA 환경 구성
- 유레카 서버 프로젝트 생성

- 프로메테우스와 액츄에이터(모니터링용)
- 컨피그 클라이언트(yml 설정을 받아오기 위해)
- 유레카 서버
- 컨피그 서버 프로젝트 생성

- 프로메테우스, 액츄에이터
- 컨피그 서버
- 스프링 웹 ( 이후 공통 모듈로부터 주입받을 예정 )
(다른 서비스에 yml 파일을 전달할 때, HTTP REST API 방식으로 전달한다.
이때 필요한 내장 TomCat을 스프링 웹 의존성으로 지원받기 때문이다.)
- 게이트웨이 프로젝트 생성

- 프로메테우스, 액츄에이터
- 유레카 클라이언트
- 컨피그 클라이언트
- 롬복
- 스프링 시큐리티
- R4j
- 스프링 클라우드 게이트웨이
- Validation
+) Jwt 의존성 추가
(외부 라이브러리라서 수동으로 추가해야 한다.)
공통 모듈
공통 모듈에 어느 의존성까지 주입해야 하는지 고민해봐야 할 것 같다.
지금은 아래와 같이 설정했다.
plugins {
id 'java-library'
id 'io.spring.dependency-management'
}
dependencyManagement {
imports {
mavenBom "org.springframework.boot:spring-boot-dependencies:3.5.14"
}
}
dependencies {
// 모니터링 의존성 추가 예정
// jpa
api 'org.springframework.boot:spring-boot-starter-data-jpa'
// querydsl
implementation 'com.querydsl:querydsl-jpa:5.1.0:jakarta'
// Srping Web
implementation 'org.springframework.boot:spring-boot-starter-web'
annotationProcessor 'com.querydsl:querydsl-apt:5.1.0:jakarta'
annotationProcessor 'jakarta.annotation:jakarta.annotation-api'
annotationProcessor 'jakarta.persistence:jakarta.persistence-api'
// lombok
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
}
롬복은 api로 설정해도 annotationProcessor까지는 전파가 안된다고 해서
어차피 각 서비스에서도 의존성을 추가해줘야 해서 나중에 제거할 수도 있을 것 같다.
그리고 이후 prometheus나 actuator를 추가할 것 같다.
또, 루트 폴더 아래에 build.gradle에서도 의존성을 주입할 수 있다.
plugins {
id 'java'
id 'org.springframework.boot' version '3.5.14'
id 'io.spring.dependency-management' version '1.1.7'
}
// root project 실행 가능 Jar 파일 생성기능 Off
bootJar.enabled = false
allprojects {
group = 'com.bandfeed'
version = '0.0.1-SNAPSHOT'
description = 'bandfeed'
repositories {
mavenCentral()
}
}
// 루트 모듈을 제외한 하위 프로젝트 공통 설정
subprojects {
apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
tasks.named('test') {
useJUnitPlatform()
}
}
project(':common') {
bootJar.enabled = false
jar.enabled = true
}
project(':apps:gateway-server') {
apply plugin: 'org.springframework.boot'
}
project(':apps:config-server') {
apply plugin: 'org.springframework.boot'
}
project(':apps:eureka-server') {
apply plugin: 'org.springframework.boot'
}
// 그 외 마이크로 서비스들 추가 예정
그래서 유레카 서버, 컨피그 서버, 게이트웨이 서버 같은 인프라 서버들과
비즈니스로직을 처리하는 각 마이크로 서비스들에게 의존성을 다르게 주입하는 전략을 고민 중이다.
- 인프라 서버들은 루트 폴더 아래 build.gradle로부터만 의존성을 주입받는다.
- 그 외 서비스들은 루트 폴더 아래 build.gradle 의존성 + 공통모듈 의존성을 모두 주입받는다.
- band-service 프로젝트 생성

오늘 한 것:
- 프로젝트 Repo 생성 및 모노레포 멀티모듈 구성
- 컨피그 Repo 생성 및 연동
- 유레카-컨피그-게이트웨이서버 동작 확인
- 공통모듈 추가 및 BaseEntity 동작 확인
- 밴드 서비스 추가
내일 할 것 :
- 루트 폴더 아래 build.gradle에 band-service 추가
- user-service, wiki-service, chat-service 프로젝트 생성
- band-service, wiki-service MVP 개발
Todo List :
- user-service 구현 및 게이트웨이 시큐리티 기능 추가
- R4j 적용 및 FeignClient, Kafka 연동
- chat-service에서 사용할 ws 개념 알아보기
- chat-service MVP 개발
- 이벤트 로직이 필요한 파트 구현
- 통합 시나리오 테스트용 .http 파일 작성
- 모니터링 설정 추가
- CI 코드 작성
- AWS 배포
- CD 구현
- 배포환경에서 부하테스트
- 프런트 개발
- 프런트 배포
- 프런트로 동작 테스트
- 버그 수정
- 실 사용자 피드백받기 및 반영
'개인 프로젝트' 카테고리의 다른 글
| [Spotify Web API 6편] Band 서비스 구현 (0) | 2026.06.10 |
|---|---|
| [Spotify Web API 5편] Docker 및 공통모듈 세팅 (0) | 2026.06.07 |
| [Spotify Web API 3편] 애그리거트 경계 설정 및 SA 문서 작성 (0) | 2026.06.06 |
| [Spotify Web API 2편] API 분석 (0) | 2026.06.05 |
| [Spotify Web API 1편] 주제 및 기능 설계 (0) | 2026.06.05 |
