SASAP!CK 프로젝트는 대규모 트래픽 상황에서도 안정적인 서비스를 제공하기 위해 마이크로서비스 아키텍처 (MSA) 를 기반으로 설계된 쇼핑몰 시스템입니다.
-
블랙프라이데이와 같은 쇼핑 이벤트나 시즌 동안 급증하는 사용자 요청을 원활하게 처리하며 주문, 결제, 사전 예약, 검색, 재고 관리, 쿠폰 등의 핵심 쇼핑 기능을 제공하는 통합 플랫폼 서비스입니다.
-
각 서비스는 독립적으로 확장 가능하도록 설계되어, 높은 유연성을 갖추고 있습니다. 이를 통해 갑작스러운 트래픽 급증 상황에서도 신속한 응답 속도와 서비스의 안정성을 보장하여 UX를 긍정적으로 유지할 수 있습니다.
- 대규모 트래픽 대응
- 스케일아웃을 통해 서버를 분산하여 대규모 트래픽 상황에서도 유저 요청을 안정적으로 처리
- 부하 테스트 및 성능 최적화
- 주요 비즈니스 API의 처리량을 200.0/sec 이상으로 달성
- 성능 병목 구간을 분석하여 요청 처리 속도를 최적화
- 기술 선택 및 전략 고민
- 각 기술의 trade-off를 분석하여 서비스 요구 사항에 맞는 최적의 기술과 아키텍처 선택
- 성능, 유지보수성, 확장성을 고려한 전략 수립
- 모니터링 및 CPU 최적화
- ELK 기반 모니터링 시스템으로 서버 상태와 자원 사용량을 추적
- CPU 성능 최적화를 통해 서버 부하를 줄이고 효율성 향상
- 배포 및 운영
- 효율성과 일관성을 위해 Docker 및 Docker Compose 사용
- CI/CD 파이프라인을 자동화하기 위해 GitHub Actions와 ECR 사용
상품, 사전예약주문, 모니터링 |
장바구니, 주문, CI/CD |
유저, 인증, 쿠폰, CI/CD |
결제, 검색엔진, 게이트웨이 대기열, 모니터링 |
분류 | 사용 기술 |
---|---|
Framework / Library | Spring Boot, Gradle, Spring Cloud Gateway, Spring Security, Spring Data JPA, QueryDSL, Redisson, AWS Lambda |
Messaging | Apache Kafka |
DevOps | AWS EC2, Docker, Docker Compose, Github Actions, Kibana, LogStash, MetricBeat |
Data Source | AWS RDS (MySQL), AWS S3, Redis, Cassandra, ElasticSearch |
Test | Apache JMeter, Postman, IntelliJ Http Client |
External Library | Slack API, Toss Payments API |
항목 | URL / 정보 |
---|---|
API Docs (Postman) | API Docs (Postman) |
Gateway Server | http://13.209.108.47:19091 |
System Monitoring (Kibana) | http://13.209.108.47:5601 |
- 추가 예정
- Elastic Search 기반의 상품 목록 조회 및 검색 서비스 구현
- Toss Payments 테스트 결제 모듈을 이용한 결제 서비스 구현
- Redis Sorted Set을 이용한 게이트웨이 대기열 도입
- Redis 캐싱을 활용한 장바구니/상품 카테고리 기능 구현
- Feign Client 다중 호출 기반 주문 서비스 구현
- Redis Redisson 분산 락과 Apache Kafka를 이용한 서비스 구현
- 쿠폰 발급
- 상품 재고 감소
- 사전 예약 주문
- AWS S3+Lambda를 활용한 외부이미지 저장소 구축
- ELK 스택 기반의 시스템 모니터링 시스템 구축
- CI/CD Pipeline 구축에 GitHub Actions와 AWS ECR 사용
1️⃣ Elastic Search 도입으로 검색 성능 최적화
- 기존 DB 조회 방식은 전체 테이블을 스캔하는 방식으로 속도가 느리고 대용량 데이터 처리 불가
- 대용량 데이터 처리, 실시간 색인 및 검색이 가능한 Elastic Search 도입
- 상세내용
2️⃣ Redis sorted set을 이용한 게이트웨이 대기열
- 서비스의 전체적인 트래픽을 조절하기 위해 게이트웨이 대기열 도입
- proceed queue, wait queue, active queue를 만들어 사용자 활동 추적
- 상세내용
3️⃣ 상품 저장소를 Cassandra로 선택하여 스케일아웃 상황에 유리하도록 구축
- 조회성능에 유리한 NoSQL 중 확장성 및 가용성이 더 좋은 카산드라를 메인 저장소로 선택
- 상품 상세조회 외 모든 조회는 ElasticSearch 기반으로 구현함으로써 카산드라의 단점을 보완
- 상세내용
4️⃣ Redis 기반 캐싱을 통한 장바구니 및 카테고리 조회 성능 최적화
- Redis 도입으로 장바구니와 카테고리 데이터 캐싱을 통한 성능 최적화 및 데이터베이스 부하 감소
- 장바구니는 실시간 업데이트 및 30일 TTL 적용, 카테고리 데이터는 빠른 조회를 위한 캐싱 처리
- 상세내용
5️⃣ Redisson 분산 락을 활용해 쿠폰발행/재고차감/사전예약수량의 동시성 이슈를 해결
- Redis의 분산락인 Redisson 도입으로 데이터 무결성을 유지
- 여러 서버에서 동시에 요청이 들어올 경우에도 안전하게 쿠폰발행과 재고차감, 사전예약주문을 진행
- 상세내용
6️⃣ Kafka를 이용하여 대규모 트래픽 처리 및 모듈 간 비동기 메시지 전송
- 높은 처리량과 빠른 응답 속도를 제공하기 위해 비동기 처리를 위한 Kafka 도입
- 사전예약주문/쿠폰발행/결제 로직에서 활용
- 상세내용
7️⃣ 이미지 저장과 썸네일 생성을 외부에서 처리하여 API 성능 개선
- 이미지를 DB에 저장하면서 발생하는 오버헤드를 낮추기 위해 외부저장소인 AWS S3에서 처리
- 썸네일 생성도 서버리스인 Lambda에서 처리하여 기존 서버의 책임을 외부로 분할
- 상세내용
- 상품목록조회는 많은 필터링 조건, 정렬 조건 등으로 많은 컬럼들에 인덱싱 처리가 필요
- 데이터 인덱싱, 빠른 조회를 지원하는 Elastic Search 검색 플랫폼을 도입하여 상세조회만 카산드라에서 조회되고 모든 검색과 목록 조회는 Elastic Search 기반으로 진행되도록 구현
- Elastic Search 도입으로 상품목록 조회 API 처리량이 약 114.3% 증가한 성과를 얻음
- 상세내용
- 대규모 트래픽 환경에서 쿠폰 발급 시 쿠폰 수량이 공유자원이므로 동시성 이슈가 발생
- 비관적 락을 통해 동시성 문제를 해결하였으나 분산 서버에 맞지 않는다고 판단. 또한, 낮은 처리량으로 인해 분산락 + Kafka를 통해 문제점 개선
- 분산락과 Kafka 도입 후 쿠폰 발급 API 처리량이 약 344% 이상 향상
- 상세내용