ID: key_26_22_05_25_사전_P2 Created date: 5월 25 2026 월요일
연관 문서
개발 일정 > 사전 준비 서버 (befw-app-server) | DB (PostgreSQL)
개요
서버 ORM 전략을 확정한다. 결정된 ORM은 DB 설계 기반의 엔티티 구성 및 쿼리 방식 전반에 영향을 미친다.
후보 비교
| 항목 | JPA (Spring Data JPA) | MyBatis | JOOQ |
|---|---|---|---|
| 진입 장벽 | 낮음 | 중간 | 높음 |
| 복잡 쿼리 | HQL/Native Query 필요 | XML/어노테이션 SQL | 타입-세이프 DSL |
| 유지보수 | 엔티티 중심 | SQL 파일 분산 | 컴파일 타임 검증 |
| befw 호환 | befw-lib-core 연동 확인 필요 | — | — |
| PostgreSQL JSONB | 지원 (단, 커스텀 타입 필요) | 직접 SQL | 완전 지원 |
Claude Code 작업 수행서
목표
ORM 결정 후 프로젝트 초기 의존성 및 공통 베이스 엔티티를 구성한다.
작업 지시
CIRA 프로젝트의 ORM을 [JPA / MyBatis / JOOQ 중 결정값] 으로 설정하고
다음 작업을 수행해줘.
[프로젝트 경로]
- C:\workspace\tsh\boilerplate\be\befw\dd\cira
[수행 작업]
1. build.gradle 의존성 추가
- Spring Data JPA (또는 MyBatis-Spring-Boot-Starter / JOOQ)
- PostgreSQL JDBC 드라이버
- Flyway Core + flyway-database-postgresql
2. application.yml 설정
- datasource (host, port, dbname, user, password — placeholder 처리)
- jpa.hibernate.ddl-auto: validate (Flyway가 DDL 관리하므로 validate 고정)
- flyway 설정 (locations, baseline-on-migrate: false)
3. 공통 BaseEntity 생성
- 경로: src/main/java/.../common/entity/BaseEntity.java
- 필드: id (UUID), createdAt, updatedAt, deletedAt
- JPA 사용 시: @MappedSuperclass + @EntityListeners(AuditingEntityListener)
- befw-lib-core에 BaseEntity가 이미 존재하면 상속 활용
4. CLAUDE.md "ORM 전략" 섹션 업데이트
- 선택 ORM 및 이유
- 쿼리 작성 규칙 (복잡 쿼리 처리 방식)
- N+1 방지 전략
완료 기준
| 항목 | 기준 |
|---|---|
| 의존성 추가 | ./gradlew dependencies 정상 실행 |
| DB 연결 | 애플리케이션 기동 시 datasource 연결 성공 |
| BaseEntity | 컴파일 오류 없음 |
| CLAUDE.md | ORM 전략 섹션 반영 완료 |
선행 조건
- P1_befw-lib-core-기능-파악 완료 (BaseEntity 중복 여부 확인)