이 글에서는 동시에 많은 사용자가 접속하는 상황에도 대응 가능한 "선착순 이벤트" 시스템 설계 경험을 공유해 드리고자 합니다. 기술 스택 : Java 17, Sprint boot 3, Redis, RabbitMQ, AWS, Mysql 8, Pinpoint 3, nGrinder1. 들어가며선착순 이벤트는 무료로 이력서 피드백을 제공하는 사이트에서 이벤트를 진행했습니다. 선착순 이벤트 요구사항은 다음과 같습니다.1. 이벤트 기간 동안, 매일 특정 시간 오픈하며 총 신청 인원을 한정한다. 2. 신청 인원은 당일 정해진 양을 초과해서는 안된다. 3. 신청은 1인당 1번만 신청할 수 있다. 2. 동시성 이슈 문제기존의 선착순 이벤트에서는 RDB에 의존하여 수량 체크가 이루어졌기 때문에, 동시성 이슈로 인하여 ..
nGrinder로 동시 요청 성능 테스트를 하던 중, 예상보다 성공 수가 적어 실시간으로 성공/실패 상황을 모니터링할 수 있는 도구를 찾던 과정에서 Pinpoint 알게 되어, 이번 글에는 Pinpoint에 대해 알아보았던 것과 이를 운영 서버에 적용하는 과정을 공유하려고 합니다. 1. Pinpoint 란?Pinpoint는 네이버에서 만든 APM (Application Performance Management) 도구로, 분산된 애플리케이션의 성능을 모니터링하고 분석하는 데 사용됩니다. 실시간으로 애플리케이션의 서버맵, 실시간 활성 스레드 차트, 요청/응답 차트, API 호출 상세 기록, 서버의 상태성능을 추적하고, 문제 발생 시 그 원인을 쉽게 찾을 수 있습니다. 2. Pinpoint 구성 ..
개인 프로젝트를 운영하던 중 예기치 못한 문제가 발생하여 원인 분석과 해결하는 과정을 정리해보았습니다. 개발 환경 : AWS EC2 프리티어(ubuntu 24), Nginx 1.24.0, Sentry1. 문제 시작개인적으로 운영하는 사이트에서 백엔드 API 요청 시 500 에러가 발생하였습니다. (어라? 어제까지는 잘 됐는데..) 2. 원인 분석일단 원인을 찾기 위해 모니터링 툴인 Sentry 들어가서 이슈를 확인했는데 새로운 이슈는 없었습니다.그 다음, 운영 서버에 들어가서 백엔드 프로젝트에 에러 로그를 보았습니다.하지만 에러 로그에는 기록이 남겨있지 않았습니다. 요청 로그에도 요청한 기록이 없었습니다. 백엔드에 문제가 아니라 "다른 문제일 수도 있겠구나" 생각이 들어서 Nginx 로그를 ..
블루-그린 배포 방식인 Nginx의 로드 밸런싱 기능과 헬스체크를 통해 무중단 배포에 대해 알아보겠습니다. 무중단 배포 시나리오는 다음과 같습니다.새로운 배포 시 두 인스턴스 중 하나만 업데이트하고 Nginx가 트래픽을 새 인스턴스로 라우팅하도록 합니다.배포가 완료되면, 나머지 인스턴스도 동일하게 업데이트합니다.이 과정에서 Nginx가 트래픽을 분산하여 중단 없이 배포를 수행할 수 있습니다. 개발 환경 : AWS EC2(ubuntu 24), Nginx 1.24.0, Spring Boot 31. 헬스 체크 API 만들기헬스 체크는 애플리케이션 인스턴스가 정상적으로 작동하는지 확인하는 메커니즘입니다.간단한 헬스 체크 API 만듭니다.@RestControllerpublic class KeepAliveCont..