개요 사이드 프로젝트를 진행하며 Swagger를 설정하는 과정에서 "Failed to load API definition" 이슈가 발생했습니다.이 문제를 해결한 경험을 공유하고자 합니다. 스웨거의 버전은 2.3.0을 사용하고있습니다.implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.3.0' [트러블슈팅] Failed to load API definition스웨거에서 "Failed to load API definition" 오류와 함께 java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)' 라는 메세지..
개요 안녕하세요. 스프링부트로 직접 만들면서 배우는 대규모 시스템 설계를 듣고 기록을 위해 작성한 글입니다. 환경 설정 - 데이터베이스 : MySQL- 테스트데이터 : 12,000,000건 Create SQL (DDL) CREATE TABLE `article` ( `article_id` bigint(20) NOT NULL, `title` varchar(255) NOT NULL, `content` text NOT NULL, `board_id` bigint(20) NOT NULL, `writer_id` bigint(20) NOT NULL, `created_at` datetime NOT NULL DEFAULT current_timestamp(), `modified_at` datetime NOT N..
전시 티켓 환불 로직 개선기 안녕하세요. 저는 지난 분기에 티켓의 환불 로직을 개선하는 작업을 맡았습니다.기존에는 관리자가 환불을 진행할 때, 동기 처리로 요청 중 하나라도 실패하면 환불이 모두 실패한 것처럼 보였습니다.PG사에서 정상적으로 취소된 티켓도 환불 요청 상태로 남아있어 관리자가 수동으로 상태를 변경해야 했습니다. 문제 해결을 위해 아래와 같이 개선 작업을 진행했습니다.환불 요청 서비스는 티켓들이 환불이 가능한지 유효성 검사만 진행하며 각 환불은 이벤트를 통해 비동기로 처리했습니다.환불이 진행될 때 레디슨을 활용하여 환불 고유 번호를 기준으로 분산락을 적용했습니다.SSE와 Redis Pub/Sub을 활용하여 관리자가 환불에 대한 실시간 알림을 적용했습니다.환불 로직을 개선한 경험을 공유드리고..
개요 현재 서비스의 VPC는 4개의 퍼블릭 서브넷으로 이루어져 있고, RDS 또한 퍼블릭 서브넷에 위치되어있습니다. VPC를 새로 생성해서 퍼블릭 서브넷과 프라이빗 서브넷을 나누어 인스턴스는 퍼블릭, RDS는 프라이빗으로 관리할 수 있도록 마이그레이션 작업을 진행하려고합니다. VPC 생성 큰 서비스를 운영하는 것이 아니기에 172.16.0.0 ~ 172.31.255.255의 클래스 B 대역을 사용하겠습니다. 보안 그룹 생성 EC2는 인터넷 게이트웨이를 통해 퍼블릭으로 접근을 하기 때문에 인바운드 규칙 편집에 들어가서 HTTP(80), HTTPS(443), SSH(22)를 열어줍니다. RDS는 EC2를 통해 접근할 수 있도록 EC2의 보안 그룹을 소스에 적용합니다. (EC2 내부망을 통한 RDS 접근)..