My-Music-Note는 일기와 음악을 통한 나만의 AI친구 서비스입니다.
- 개발도구: Intellij IDEA - Ultimate
- 언어: Java 17 LTS
- 빌드도구: Gradle
- 개발
- Spring Boot: 3.3.4
- Spring Data JPA
- 테스트
- Junit5
- AssertJ
- Mockito
- SonarCloud
- AWS Infra
- VPC
- EC2
- ALB
- ASG
- NAT Gateway
- CI/CD
- AWS S3
- AWS CodeDeploy
- GitHub Actions
- Docker
- 데이터베이스
- AWS RDS PostgreSQL 16.3
- ERD
- ERDCloud
- ETC
- Post Man
프로젝트 초기에는 아래와 같은 기술적 과제와 한계가 있었습니다.
이를 해결하기 위해 다양한 기술 스택과 AWS 서비스를 활용하여 다음과 같은 방안을 도입했습니다.
- 문제점: 단일 서버 구성으로 장애 발생 시 서비스가 중단될 위험이 있었으며, 트래픽 증가 시 확장성이 부족했습니다.
- 해결방안:
Auto Scaling Group과 Application Load Balancer
를 결합하여 고가용성 아키텍처를 구축했습니다.Blue/Green 배포
방식을 적용하여 무중단 배포를 실현했습니다.JMeter
를 이용해 가상 사용자 4000명 테스트를 진행했으며, Auto Scaling Group이 트래픽 부하에 따라 3분 내에 새로운 인스턴스를 자동 생성하여 부하를 분산했습니다.
- 문제점: 수동 배포로 인해 시간 소요 및 인적 오류 가능성이 높았으며, 배포 중 다운타임이 발생했습니다.
- 해결방안:
Gradle
과npm
의 캐싱을 통해 빌드 시간을 약 40% 단축했습니다.Docker 기반 배포
로 일관된 배포 환경을 구현했습니다.GitHub Actions
와AWS CodeDeploy
를 결합해 CI/CD 파이프라인을 자동화했으며, Blue/Green 배포 방식으로 서비스의 가용성을 유지했습니다.
- 문제점:
- Public/Private Subnet 간의 역할 구분 및 접근 제한이 불명확했습니다.
- Backend 계층으로 외부 트래픽이 직접 도달할 수 있는 보안 취약점이 있었습니다.
- 해결방안:
Session Manager
를 도입하여 SSH 없이 안전하게 EC2에 접근하며, 추가 Bastion Host 비용을 절감했습니다.- Frontend와 Backend 계층에
ALB와 ASG 연동 보안 그룹
을 설정하여 보안 수준을 강화했습니다. - HTTPS 통신 암호화를 위해
SSL 인증서
를 Application Load Balancer에 적용했습니다.
- 문제점: 브랜드 도메인과 서브도메인 미설정으로 서비스 인지도와 사용자 경험이 저하되었습니다.
- 해결방안:
Route53
을 활용하여 musicdiaryclub.com 도메인과api.musicdiaryclub.com
,www.musicdiaryclub.com
서브도메인을 설정했습니다.
- 문제점: 코드 품질 검사를 수동으로 진행해 시간과 비용이 과다하게 소모되었습니다.
- 해결방안:
SonarCloud
를 도입하여 GitHub Actions와 연동, Pull Request 단계에서 코드 스멜과 보안 취약점을 실시간 분석했습니다.
- 인프라 관리비용 최소화를 위해
Jenkins
대신Github Ations
사용 S3
는CodeDeploy
가 실행시킬 Script를 저장CodeDeploy
를 사용하는 목적은Blue/Green
배포 +ASG
로 생성된EC2
배포 자동화의 목적Docker
를 사용함으로서 동일한 환경을 제공