1. 왜 MSA로 전환했을까?
우리 서비스는 처음부터 모놀리식 아키텍처로 개발되었습니다. 모놀리식 구조는 초기 개발과 배포가 빠르다는 장점이 있었지만, 서비스가 성장하면서 몇 가지 문제점이 나타났습니다.
🚨 모놀리식의 한계
- 배포와 유지보수의 어려움: 서비스의 한 부분만 수정해도 전체 애플리케이션을 다시 빌드하고 배포해야 했습니다.
- 확장성 문제: 특정 기능(예: 인증 서비스)에 트래픽이 집중될 경우, 전체 애플리케이션의 성능이 저하되었습니다.
- 팀별 독립 개발의 어려움: 모든 팀이 하나의 코드베이스에서 작업해야 했기 때문에, 병목 현상이 발생했습니다.
- 기술 스택 변경의 어려움: 새로운 기술을 적용하려면 전체 애플리케이션을 수정해야 했습니다.
이러한 문제를 해결하기 위해 MSA (Microservices Architecture) 로 전환을 결정했습니다.
2. MSA로 전환하면서 변화한 점
🔄 AuthService 분리
먼저 인증 및 권한 관리를 담당하는 AuthService를 모놀리식에서 분리하여 독립적인 마이크로서비스로 만들었습니다.
✅ AuthService 주요 변경점
- 독립적인 서비스로 분리하여 개별 배포 가능
- Spring Cloud Gateway를 활용하여 인증 API를 게이트웨이를 통해 통합 관리
- JWT 기반 인증 시스템을 적용하여 확장성과 보안 강화
- Redis를 활용한 세션 관리 및 캐싱 적용
📌 환경별 설정 분리
기존 모놀리식에서는 application.yml 하나의 설정 파일에서 모든 환경을 관리했지만, MSA에서는 서비스마다 개별 설정을 유지할 수 있도록 변경했습니다.
✅ 환경별 application.yml 관리 방식
application-common.yml: 공통 설정 (JPA, Redis, Eureka 등)application-dev.yml: 개발 환경 설정 (로컬 DB, Swagger 활성화 등)application-prod.yml: 운영 환경 설정 (보안 강화, 환경 변수 적용 등)
🛠 JWT & Redis 도입
AuthService를 분리하면서 JWT 기반 인증을 적용했고, 세션 관리와 캐싱을 위해 Redis를 도입했습니다.
✅ JWT & Redis 적용 방식
- JWT: 인증 시 Access Token & Refresh Token 발급
- Redis: 블랙리스트 토큰 저장 및 세션 관리
- 환경 변수 기반 관리:
JWT_SECRET값을 환경변수로 설정하여 보안 강화
jwt:
secret: ${JWT_SECRET:default-secret-key}
access:
expiration: ${JWT_ACCESS_EXPIRATION:1800000} # 30분
refresh:
expiration: ${JWT_REFRESH_EXPIRATION:604800000} # 7일
⚡ 배포 및 운영 자동화
모놀리식에서 MSA로 전환하면서 배포 방식도 개선했습니다.
✅ 변경된 배포 프로세스
- Docker 기반 컨테이너화 (
Dockerfile및docker-compose.yml활용) - Kubernetes 환경에서 마이크로서비스 관리
- CI/CD 파이프라인을 구축하여 자동 배포 (GitHub Actions, Jenkins 활용)
3. 마이크로서비스 전환 후 효과
MSA로 전환한 이후, 서비스 운영에서 다음과 같은 변화를 경험했습니다.
✅ 주요 개선 사항
- 배포 속도 향상: 개별 서비스 단위로 배포할 수 있어, 작은 변경도 빠르게 반영 가능
- 확장성 증가: 트래픽이 몰리는 서비스만 개별적으로 스케일 업 가능
- 유지보수 편의성 증가: 팀별로 독립적으로 개발 및 배포 가능
- 보안 강화: 인증 서비스 분리로 보안 정책을 강화하고 관리 효율 증가
4. 앞으로의 계획
이번 MSA 전환을 시작으로, 앞으로 다른 서비스들도 점진적으로 분리할 계획입니다.
🚀 추가적으로 분리 예정인 서비스
- UserService: 사용자 관리 기능 분리
- FeedService: 피드 및 게시글 관리 기능 분리
- NotificationService: 알림 서비스 분리
MSA는 단순한 구조 변경이 아니라, 운영과 개발 방식을 근본적으로 개선하는 과정입니다.
앞으로도 지속적인 개선을 통해 더 나은 서비스를 제공할 수 있도록 노력하겠습니다! 💪
'DevOps' 카테고리의 다른 글
| Spring Boot 개발 환경을 위한 도커 세팅, 그리고 실전 팁들 🐳 (0) | 2025.04.04 |
|---|---|
| 🛠 Spring Boot 서버 GitHub Actions 자동 배포 정리 (Self-hosted runner) (0) | 2025.04.03 |
| MSA로 인증과 회원을 분리하고 JWT 연동 구조 설계하기 (0) | 2025.03.25 |