[교육 내 팀 프로젝트]
Security Ticket
Excel·이메일 중심의 수동 보안 점검 프로세스를 웹 기반으로 전환한 관리 시스템
- 기간
- 2025.04 - 2025.05
- 팀 구성
- BE 8인 / FE 3인
- 역할
- 사용자 관리 도메인 및 백엔드 API 설계
- 기술 스택
- Java · Spring Boot · JPA · MyBatis · MySQL · Redis · Nginx · Docker
대표 성과
- 복합 검색 쿼리 구조 개선 (평균 24.45ms → 16.85ms)
1. 시스템 아키텍처
- 개발 환경: 폐쇄망 기반 온프레미스 환경에서 GitLab으로 소스를 관리하고 Nexus를 통해 의존성 패키지를 제공했습니다.
- 배포 구조: 개발·스테이징 영역이 분리된 온프레미스 배포 환경에서 개발했습니다.
ERD

2. 핵심 문제 해결 및 성과
Case 1. 조회 특성에 맞춘 JPA·MyBatis 하이브리드 전략
1) 문제 맥락
- 복합 조건 검색에 JPA Specification을 사용하면서 가독성이 낮아지고, 복잡한 쿼리를 작성하거나 튜닝하기 어려워졌습니다.
2) 선택 기준과 구현
- 복합 조회에만
MyBatis를 부분적으로 도입했습니다. - 추가 1) choose 중첩 → OR 조건을 통합해 쿼리 재사용성을 높였습니다.
- 추가 2) JOIN → EXISTS 서브쿼리 기반 카운팅을 통해 쿼리를 최적화했습니다.
3) 검증 결과
| 항목 | JPA Specification | MyBatis (최종) | 개선율 |
|---|---|---|---|
| 평균 응답시간 | 24.45ms | 16.85ms | 31.1% ↓ |
| 최대 응답시간 | 83.67ms | 54ms | 35%↓ |
| 처리량(TPS) | 55.71 | 68.90 | 23.7%↑ |
로컬 환경에서 동시 사용자 10명, 각 50회 요청으로 측정했으며, 동일한 데이터와 인덱스 조건을 유지했습니다.
- 평균 응답시간:24.45ms → 16.85ms (31.1% 개선)으로 단축했습니다.
4) 설계 회고
- 복합 조회를 MyBatis로 분리하고 COUNT 쿼리의 불필요한 JOIN을 EXISTS로 재구성한 결과, 동일한 로컬 테스트 조건에서 응답 시간을 줄였습니다.
3. 관련 블로그 포스팅
- JPA vs MyBatis 성능 비교와 하이브리드 전략– 동적 쿼리에서 MyBatis를 통한 성능 향상