요구 사항 |
선택한 기술 |
기술선택 이유 |
DB 부하 개선 |
|
|
응답속도 개선 |
|
|
처리량 개선 |
|
|
동시성 문제 개선 |
Redis |
Redis Cache 사용 |
- Redis는 인메모리 데이터 저장소로서, 디스크 기반의 데이터 접근보다 훨씬 빠른 속도를 제공합니다. 이를 통해 전체 성능 향상을 기대할 수 있습니다.
- Redis의 단일 스레드 구조는 모든 명령을 순차적으로 처리하며, 단순 연산에 대해서는 원자성이 보장됩니다. 이로 인해 데이터 일관성 및 무결성을 유지하는 데 도움이 되며, 시스템 안정성을 향상할 수 있습니다.
- 동일한 데이터가 데이터베이스를 통해 반복적으로 조회되는 경우 응답 속도와 자원 사용에 손실이 발생합니다. Redis 캐시를 사용하여 데이터베이스 부하를 줄이고, 애플리케이션의 응답 시간을 개선했습니다. |
| 검색 | QueryDSL | - QueryDSL은 검색 조건의 유연성과 다양한 단어 처리를 간편하게 제공하여 대소문자 구분 없이 특정 단어를 포함하는 이벤트를 효과적으로 찾을 수 있습니다.
- QueryDSL의 동적 쿼리 작성 기능과 높은 코드 가독성 덕분에 복잡한 검색 요구 사항도 쉽게 처리할 수 있습니다. 또한, 타입 안전성을 지원하는 QueryDSL은 안정적인 쿼리 작성을 보장하며, 이를 통해 유지보수 과정에서도 큰 이점을 가져올 것으로 기대되었습니다.
이러한 장점들 덕분에 QueryDSL은 데이터베이스 작업에 효율적이고 신뢰할 수 있는 도구로 선택되었습니다. |
| 트래픽 분산 | AWS ALB | - 저렴한 EC2 단일 인스턴스로 프로젝트 목표인 1000 TPS를 초과하는 것은 한계가 있다고 판단했습니다. 따라서 동일한 스펙의 추가 서버를 배치하여 부하를 분산하는 Scale-out 전략을 사용해, 비용 효율적으로 성능을 향상했습니다.
- ALB(Application Load Balancer)는 OSI 모델의 레이어 7(Application layer)에서 동작하며, HTTP/HTTPS 프로토콜 기반으로 작동합니다. 웹 애플리케이션 및 RESTful API에서 더욱 유연하고 다양한 기능을 제공하기 때문에, ALB의 사용이 적절하다고 판단했습니다. |
| 수요에 따른
EC2 인스턴스
개수 조절 | AWS Auto Scaling | - 공연 예매 사이트의 특성상 특정 시간대에 트래픽이 집중되는 현상이 발생합니다. 이러한 상황에서 서버 수를 동적으로 조절하여 자원 사용량을 최적화하고 비용 절감 효과를 극대화할 수 있습니다. |
| CI/CD | GitHub Actions | - GitHub Actions는 GitHub 플랫폼에 통합되어 있어서, 별도의 CI/CD 도구를 설정할 필요 없이 프로젝트에 손쉽게 적용할 수 있습니다. 또한, 워크플로우를 코드 저장소 내에서 정의하고 관리함으로써 사용자 경험의 편의성이 크게 향상됩니다. |
| 배포 환경 일관성 | Docker | - AWS Auto Scaling과 Load Balancer 기술을 사용함으로써, 지속적인 EC2 인스턴스 교체가 발생합니다. 이에 따라 배포 환경 간의 차이가 생겨 심각한 서비스 장애를 초래할 수 있습니다.
이 문제를 해결하기 위해 Docker를 도입하여 애플리케이션과 모든 의존성을 컨테이너로 패키징 했습니다. 이를 통해 개발, 테스트, 운영 환경이 일관된 상태를 유지하게 되어 안정성을 높였습니다. 또한, GitHub Actions를 활용한 CI/CD 구현으로 애플리케이션 배포 및 확장 과정이 빠르고 효율적으로 진행되었습니다. |
| 모니터링 | Grafana, Pinpoint | Grafana
- Grafana를 사용하면, AWS CloudWatch와의 통합을 통해 AWS 로드 밸런서 그룹과 관련된 다양한 성능 지표를 한 곳에서 확인하고 관리할 수 있습니다. 직관적이고 사용자 친화적인 대시보드를 제공하며, 시각적으로 풍부한 대시보드, 맞춤형 시각화, 알림 기능 등을 활용해 서버 성능을 효과적으로 관리하고 문제에 신속하게 대응할 수 있는 도구로 선택되었습니다.
Pinpoint
- Pinpoint를 도입한 이유는 애플리케이션 성능 모니터링, 분산 추적, 코드 레벨의 세부 정보 등의 기능을 활용하여 애플리케이션 성능 이슈를 빠르게 파악하고 효과적으로 대응할 수 있도록 지원하기 때문입니다. |
| Test | jmeter | 분산 테스트 기능을 활용하여 여러 대의 서버를 사용해 대량의 가상 사용자를 동시에 생성하고 테스트할 수 있어, 실제 사용자 트래픽을 가장 정확하게 모방할 수 있습니다. 또한 다양한 조건과 로직을 적용하여 맞춤형 테스트 시나리오를 작성할 수 있습니다. |