Project/AutoSchedule

2일차 - JPA 엔티티 구현

sowon02 2025. 10. 31. 20:39

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) — 실시간 편집 잠금

 

domain 폴더 생성

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