Today I Learned
팀 프로젝트가 마무리됨과 함께 돌이켜 보면, 프로젝트 초기 ERD 구성을 할 때 팀장으로서 주도적으로 ERD를 구성하지 못했다는 느낌을 받았다. 그래서 오늘은 스스로가 부족하다고 느꼈던 ERD 구성을 만들었던 팀 프로젝트를 바탕으로 혼자 한 번 만들어 보려고 한다.
이는 앞으로 남은 2번의 팀 프로젝트에서 조금이나마 더 주도적으로 프로젝트에 참여하고 이를 통하여 프로젝트의 초기부터 마무리까지 프로젝트의 흐름을 머릿속에 그리고 이해하기 위해서이다.
- 목표
🔥 만들었던 팀 프로젝트를 바탕으로 ERD 구성하기
[ ERD ]
TimeStamped
@Getter
@Setter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class TimeStamped {
@CreatedDate
@Column(updatable = false, nullable = false)
@Temporal(TemporalType.TIMESTAMP)
private LocalDateTime createdAt;
@LastModifiedDate
@Column
@Temporal(TemporalType.TIMESTAMP)
private LocalDateTime updatedAt;
@CreatedBy
@Column(updatable = false, nullable = true)
@Temporal(TemporalType.TIMESTAMP)
private String createdBy;
@LastModifiedBy
@Column(updatable = true)
@Temporal(TemporalType.TIMESTAMP)
private String updatedBy;
@Column(name = "deleted_at", nullable = true, updatable = true)
private LocalDateTime deletedAt;
@Column(name = "deleted_by", nullable = true, updatable = true)
private String deletedBy;
@Column(name = "is_deleted", nullable = false)
private boolean isDeleted = false;
public void markDeleted(User user) {
this.deletedAt = LocalDateTime.now();
this.deletedBy = user.getUsername();
this.isDeleted = true;
}
}
ERD
- 모든 Entity가 TimeStamped를 상속받고 있지만 이를 모두 표현하면 테이블의 필드가 너무 많아지기 때문에 편의상 생략하였습니다.
- @Enumerated(EnumType.STRING) 은 문자열로 변환되어 저장되기 때문에 DataType을 VARCHAR(255)로 표기하였습니다.
- ex) p_user 테이블의 enum클래스를 사용하는 role(필드)의 DataType은 VARCHAR(255)입니다.
[ 의문점 ]
- Store와 Location이 @ManyToOne인 이유
🤔 하나의 Stroe(가게)는 하나의 Location(위치)을 가지기 때문에 일대일 관계를 가져야 하는 것이 아닌가?
💁 Location(위치)과 Store(가게)의 관계를 현실 세계에서 생각해 보면, 하나의 Location(위치)에는 여러 개의 Store(가게)가 있을 수 있습니다. ex) 한 도시에 여러 개의 가게들이 위치할 수 있다고 생각하면 될 거 같습니다.
팀 프로젝트를 진행하며 초기 ERD 구성의 중요성을 느꼈다. 아직 ERD를 구성하며 관계를 맺는 부분에서 헷갈리는 부분이 있지만, 미래의 나 자신은 그런 일이 없도록 한 발 한 발 천천히 나아가자! 🏃➡️
읽어주셔서 감사합니다 😊
'해피 코딩 > Today I Learned' 카테고리의 다른 글
[TIL 23] DDD 이해하기 (0) | 2024.09.09 |
---|---|
[TIL 22] 팀 프로젝트 물류 도메인 시스템 구조 (0) | 2024.09.06 |
[TIL 20] Redis를 사용하여 로그아웃 블랙리스트 처리하기 (0) | 2024.09.03 |
[TIL 19] Ai가 대세! Gemini API 사용하기 (2) | 2024.09.01 |
[TIL 18] 프로젝트에 Swagger 적용하기 (4) | 2024.09.01 |