채용 지원자 관리(ATS: Applicant Tracking System) 백엔드 애플리케이션 지원자 조회, 필터 검색(학력/전공/경력/보유 기술), 진행 상태 변경을 제공합니다. QueryDSL 기반 고급 검색, ID 기반 페이징, OpenAPI 3.0 문서 자동화가 적용되어 있습니다.
| 영역 | 기술 |
|---|---|
| Language | Java 17 |
| Framework | Spring Boot 3.5.7 |
| DB | MySQL |
| ORM | JPA(Hibernate 6) + QueryDSL 5 |
| API Docs | SpringDoc OpenAPI 3.0 (Swagger UI) |
| Build Tool | Gradle |
| 기타 | Lombok |
본 프로젝트는 GitHub Actions + AWS EC2 + Nginx + 도메인(Cloudflare) + 외부 DB 조합으로 완전 자동 배포 환경을 구성했습니다.
| 단계 | 설명 |
|---|---|
| 1. Push to main | 개발자가 코드를 push 하면 배포 자동 시작 |
| 2. GitHub Actions | Gradle Build → JAR 생성 |
| 3. Secure Copy(SCP) | EC2 서버로 JAR 자동 업로드 |
| 4. SSH Remote Deploy | EC2 서버에서 기존 프로세스 종료 + 새로운 버전 실행 |
| 5. Reverse Proxy (Nginx) | 외부 요청을 80/443 → Spring Boot(8080)으로 포워딩 |
| 6. HTTPS 인증 | Let’s Encrypt 인증서 자동 갱신 |
| 7. 외부 DB 연동 | MySQL은 개인 NAS/서버에 구축하여 비용 최적화, EC2 ↔ DB 접속은 Tailscale VPN 으로 안전하게 통신 |
src/main/java/io/npee/ats
├─ global # 공통 설정/예외
│ ├─ config # QueryDSL, Swagger 설정 등
│ └─ error # 전역 예외 처리기
│
└─ domain
└─ applicant # 지원자 도메인
├─ entity # JPA 엔티티
├─ dto
│ ├─ request # 요청 DTO
│ ├─ response # 응답 DTO
│ └─ projection # QueryDSL Projection DTO
├─ enum # 프로세스 상태, 학력 등
├─ repository # JPA + QueryDSL Repository
├─ service # 비즈니스 로직
└─ controller # REST API
- 학력(고졸/준학사/학사(대졸)/석사/박사)
- 전공 계열
- 보유 기술 복수 검색
- 경력 연차 범위
- 진행 상태(지원/서류합격/면접대기/합격)
QueryDSL GroupBy + ID Pagination + Sub Query 조합
필터 스킬 검색 시에도 지원자의 모든 보유 기술을 반환합니다.
- 지원 → 서류합격 → 면접대기 → 합격 흐름
- Enum 기반 예외 처리 + 응답 DTO 출력
주의: 해당 프로젝트는 외부에서 접근할 수 없는 개인 서버의 DB를 사용하고 있어, 로컬 환경에서 실행하려면 로컬 DB를 구축해야 합니다.
spring:
application:
name: ats
datasource:
url: ${DB_URL}
username: ${DB_USER}
password: ${DB_PASSWORD}
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
ddl-auto: none
show-sql: true
properties:
hibernate:
format_sql: true
dialect: org.hibernate.dialect.MySQL8Dialect
springdoc:
api-docs:
version: OPENAPI_3_0./gradlew clean build
./gradlew bootRun| 대상 | 방식 |
|---|---|
| Service | Repository Mock + Projection Factory |
| Projection | 실제 객체 생성 (Factory Pattern) |
| Repository | QueryDSL Integration Test (미구현) |
- JWT 인증 + 관리자 권한 추가
- ElasticSearch 기반 검색 고도화
- 이력서-공고 관계 중심의 관리
