1. 프로젝트 개요
- HRBank: 사원 정보의 생성·수정·삭제 이력과 백업 관리 기능을 제공하는 인사 관리 플랫폼
- 주요 기능
- 사원/부서 데이터 CRUD 처리
- 변경 이력 자동 기록 및 조회
- 백업 생성 및 상태별 최신 백업 조회
- 기술 스택:
- Spring Boot (Spring Data JPA, Spring MVC)
- PostgreSQL
- MapStruct, Lombok
- H2
- Swagger/OpenAPI
- Criteria API
2. 담당한 작업
-
일정 관리
-
출석 관리

- 직원 정보 수정 이력 관리 구현
- 이력 등록
- 직원 추가·수정·삭제 시점에 유형, 대상 직원 사번, 변경된 속성의 전/후 값, 메모, IP 주소, 시간을 자동으로 기록
- 추가/수정 화면에서 입력된 메모를 DTO에 포함하여 저장
- IP는 X-Forwarded-For 로 추출
- 이력 목록 조회
- 조회 조건: 사번, 메모, IP, 시간 범위, 유형
- 부분 일치(사번/메모/IP), 범위 조회(시간), 전체 일치(유형) 지원
- Cursor 기반 페이징: 이전 페이지 마지막 요소의 ID와 정렬 필드(IP, 시간 중 선택) 활용
- 이력 상세 변경 내용 조회
- 직원 삭제 시 연동
- 소프트 삭제 로직 전 후에 DELETED 등록
- 프로필 이미지 물리/DB 삭제 처리
3. 성과
- 안정적 페이징 : Cursor-Based 방식 도입으로 대량 데이터에서도 일정 응답 속도 달성
- 유연한 필터링 : 복잡한 완전/부분 일치, 범위 조회 필터링 구현
- Mapper : MapStruct로 Request/DTO ↔ Entity 변환 통합
- Git 기능 : 협업 방법 및 branch, merge , pull 기능 습득
4. 문제점 및 해결 과정
문제점 1
ERROR: update or delete on table "employees" violates foreign key constraint
"change_logs_employee_id_fkey" on table "change_logs"
- 직원 삭제 API 호출 시, employees 테이블의 행을 삭제하려 하면 change_logs 테이블이 해당 employee_id를 참조하고 있어 외래키 제약
- 원인
- DB 설계
- change_logs 테이블의 employee_id 컬럼이 employees.id를 외래키로 참조
- 문제 발생
- 직원 물리 삭제 시 해당 employee_id를 참조하는 change_logs 레코드가 남아 있기 때문에 외래키 제약 위반 에러가 발생