1. 엔티티 설정 이유
- 프로젝트의 모든 기능(회원가입이나 일정 등록, 최적화 등)은 결국 데이터를 다루는 구조에 의존
- 엔티티는 DB와 자바 객체 사이의 "다리" 역할을 하여 데이터의 형태나 관계, 제약을 정의할 수 있다
- 따라서 API나 서비스 로직을 만들기 전 엔티티를 먼저 정리해야 이후 변경이 최소화 됨
- DB 설계 (Flyway) → JPA 엔티티 매핑 → CRUD 로직 순으로 진행
2. 설계 기준 및 방향
- 설계 기준은 어제 작업했던 Flyway V1__init.sql에 정의된 테이블 구조를 기준으로 1:1 매핑
- 중복 코드 최소화를 위해 Lombok(@Getter, @Setter) 라이브러리를 사용
- 특히 다음 기준을 지켜 설계 :
- DB의 제약 조건(NOT NULL, CASCADE, UNIQUE)을 최대한 JPA 어노테이션으로 표현
- PostgreSQL 전용 타입(jsonb, timestamptz)은 Java에서 대응 가능한 타입(String, OffsetDateTime)으로 매핑
- 연관관계는 모두 지연 로딩(LAZY) 으로 설정해 불필요한 조인 방지
- @Version을 사용해 낙관적 락(동시 수정 감지) 구현
- 예약어(user) 테이블은 @Table(name = "\"user\"") 형태로 안전하게 매핑
3. 주요 엔티티 구조
| 엔티티 | 테이블 | 핵심 필드 | 주요 관계 |
| User | "user" | id, email, name, createdAt | 예약어 테이블이라 @Table(name="\"user\"") |
| Team | team | id, name, createdAt | - |
| TeamMember | team_member | (teamId,userId), role | 복합키 @EmbeddedId 사용, role은 Enum(String) 매핑이며 기본값은 MEMBER |
| WorkHour | work_hour | id, dow, startMin, endMin | dow는 1~7 범위 제약(CHECK), user는 nullable(익명 근무 시간 가능) |
| CalendarEvent | calendar_event | id, title, startsAt, endsAt, fixed, version | team(N:1), owner(N:1), @Version(낙관적 락) |
| Task | task | id, title, durationMin, dueAt, priority, splittable, version |
team(N:1), assignee(N:1), @Version(동시 수정 감지) |
| Schedule | schedule | id, rangeStart, rangeEnd, score, createdAt | team(N:1), createdBy(N:1) |
| Assignment | assignment | id, title, startsAt, endsAt, source, slotIndex, meta(jsonb) |
schedule(N:1, 필수), task(N:1, 옵션), meta는 PostgreSQL jsonb, 엔티티에선 String으로 저장 |
| SlotLock | slot_lock | slotKey, expiresAt | user(N:1) — 실시간 편집 잠금 |

java\com\example\sbb\에 domain 폴더를 만들고 엔티티 파일을 만듦
자세한건 깃허브에서 확인 가능
https://github.com/sowon2222/autoschedule/tree/main/src/main/java/com/example/sbb/domain
autoschedule/src/main/java/com/example/sbb/domain at main · sowon2222/autoschedule
회의, 개인 일정, 작업 시간을 입력하면 AI가 자동으로 최적화된 스케줄을 생성해주는 팀 일정 관리 시스템 - sowon2222/autoschedule
github.com
다음 단계에서는 Repository와 Service 계층을 구현, CRUD 기능 분리 / Spring Data JPA 검증할 예정
'Project > AutoSchedule' 카테고리의 다른 글
| 4일차 - 프론트엔드 환경 세팅 & 구조 설계 (0) | 2025.11.03 |
|---|---|
| 3일차 - 로그인, 회원가입 (0) | 2025.11.03 |
| 1일차 - 기능 구체화 & DB 설계 (0) | 2025.10.31 |
| AutoSchedule 개발 일정 (0) | 2025.10.31 |
| Auto Schedule 소개 (0) | 2025.10.30 |