본문 바로가기
해피 코딩/Today I Learned

[TIL 21] 팀 프로젝트 ERD 다시 그려보기

by happy-coding 2024. 9. 4.

 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를 구성하며 관계를 맺는 부분에서 헷갈리는 부분이 있지만, 미래의 나 자신은 그런 일이 없도록 한 발 한 발 천천히 나아가자! 🏃‍➡️

 

읽어주셔서 감사합니다 😊