Java / Spring Boot
성능 병목을 분석하고 근본 원인을 해결하는 백엔드 개발자입니다. CalmDesk 프로젝트에서 N+1 쿼리로 인한 DB 부하와 EC2 CPU 크레딧 고갈 문제를 추적해 구조를 개선했고, 수치로 검증된 결과까지 만들었습니다.
문제를 찾고, 쿼리를 바꾸고, 부하 테스트로 증명하는 방식으로 일합니다.
관리자 팀/멤버 조회 API에서 발생한 지연을 추적하던 중, 단순한 응답 속도 문제가 아니라 EC2 CPU 크레딧 고갈까지 연결된 병목을 확인했습니다. JPA Fetch Join과 Bulk IN 쿼리로 조회 구조를 다시 설계해 인프라와 애플리케이션 양쪽의 부담을 함께 줄였습니다.
WebSocket·SSE 기반 실시간 데이터 스트리밍과 멀티테넌시 아키텍처를 통한 기업 간 완전한 데이터 격리를 구현한 기업용 B2B HR·웰빙 SaaS 통합 관리 플랫폼.
React ➡️ Nginx ➡️ Spring Boot API ➡️
Redis Cache ➡️ MySQL
GET /api/admin/team/members (관리자 팀 멤버 현황 조회 API)PUB /pub/chat/message (WebSocket 실시간 그룹/개인 채팅 메시지 발송)
GET /api/admin/team/members) 호출 시 25초의 심각한 지연 및 AWS EC2(T3 Micro) CPU 크레딧 고갈(스로틀링) 현상을 확인했습니다.
@Query JOIN FETCH와 Bulk IN 쿼리를 활용해 150개의 단건 쿼리를 3회의 벌크 쿼리로 통합했고, 연산 부하를 줄여 EC2 인스턴스 지표 정상화 및 단일 응답 기준 0.9초 복구를 달성했습니다.
token vs
authToken)와 공통 Axios 인스턴스를 거치지 않고 Axios를 직접 import한 문제를 교차 분석해 원인을 특정했습니다.
큐빙 기록·학습·랭킹·커뮤니티·피드백을 하나의 서비스 흐름으로 통합한 스피드큐빙 풀스택 웹 플랫폼.
화면 구현에 그치지 않고 인증, API 계약, DB 모델, 테스트 자동화, REST Docs, 성능 비교, AWS 배포와 운영 검증까지 서비스 단위로 완성했습니다.
React ➡️ Vite ➡️ AWS S3 ➡️ CloudFront
Nginx ➡️ Spring Boot API ➡️ Redis / RDS MySQL
user_pbs 기준으로 직접 조회하는 V1 구조에서
대량 데이터 기준 응답 시간이 길어졌다. 300,000 PB 기준으로
GET /api/rankings 평균 응답 시간이 7,245.23ms,
p95가 12,429.58ms까지 증가했다.records, user_pbs를 기준 데이터로
유지하되, 기본 랭킹 조회는 Redis ZSET 읽기 모델로 분리했다. 기록 생성/수정/삭제로 PB가
바뀌면 Redis 랭킹도 함께 동기화하고, 닉네임 검색이나 Redis가 준비되지 않은 상태에서는 MySQL 대체 경로를 사용하도록 구성했다.
수기·엑셀 기반 병원 관리의 비효율을 해결하기 위한 통합 병원 ERP 시스템.
예약, 진료, 근태 관리를 포함한 병원 운영 전 영역을 디지털화한 프로젝트입니다.
JSP / JSTL ➡️ Spring Boot API ➡️ Oracle DB
CONSTRAINT FK_...,
CONSTRAINT CHK_STATUS CHECK (STATUS IN ('Y', 'N', 'R')) 등 데이터베이스 단의 무결성 검증
설정 주도
LISTAGG(name, ',') WITHIN GROUP (ORDER BY id) 및 서브쿼리 활용으로 데이터 병합 과정의 N+1 문제
해결. View 도입으로 비즈니스별 복잡한 Join 성능 향상 및 SQL 복잡도 감소
CONSTRAINT CHK_STATUS CHECK (STATUS IN ('Y', 'N', 'R'))와 같은 DB 단
CHECK 제약조건을 적용했습니다. 이후 공통 더미 데이터를 배포해 팀 전체 개발 환경을 동기화하고, 설계 단계부터 데이터 무결성 기준을 확립해
구조적 품질을 높였습니다.
LISTAGG와 View
도입으로
복잡한 쿼리 성능을 구조적으로 개선한 점