240122 TIL - 1차 프로젝트(Entity null 필드, 데이터 불러오는 방법 고민)

jkeum·2024년 1월 23일
0

TECHIT-BackendSchool

목록 보기
28/50
post-thumbnail

Q. Entity에서 null 가능한 필드?

  1. @Column 어노테이션의 nullable 속성:
    @Column 어노테이션에 nullable 속성이 설정되어 있으면, 해당 필드가 데이터베이스 컬럼에 매핑될 때 null을 허용할지 여부를 명시할 수 있음.
    기본적으로, nullable 속성은 true로 설정됨.

  2. 필드의 자바 타입:
    기본 데이터 타입(예: int, long, double 등)은 null을 허용하지 않음.
    래퍼 클래스(예: Integer, Long, Double 등)와 다른 객체 타입은 null을 허용할 수 있음.

  3. 연관 관계 어노테이션:
    @ManyToOne@OneToOne과 같은 연관 관계 어노테이션을 사용하는 필드는 기본적으로 null을 허용함.
    데이터베이스 설계에 따라 달라질 수 있으며, 필요에 따라 @JoinColumn 어노테이션의 nullable 속성을 false로 설정하여 null을 허용하지 않도록 할 수 있음.

Q. 예약 불가능한 날짜 데이터를 사용하는 방법

현재 상태

: Hotel 테이블에 unavailableDates 필드 존재. 여기에 예약 불가능한 날짜를 Set으로 저장하고자 함.

멘토님께 질문

예약 가능한 날짜와 불가능한 날짜를 프론트에 활성화/비활성화 해야 하는데 이 정보를 어떻게 가져와야 좋을지 모르겠습니다. 지금 DB에 설정해둔 방법 외에 추가로 생각한 방법은 예약 테이블에 체크인/체크아웃 날짜를 저장해두니까 그 두 정보를 가지고 해당 숙소에서 예약이 불가능한 날짜를 체크인 날짜부터 체크아웃 날짜까지로 설정하는 방법도 생각해봤습니다. 이 두 방법 외에 다른 더 좋은 방법이나 일반적으로 사용하는 방법이 있는지 궁금합니다.

A. 멘토님 답변

어떤 기능을 구현할 때 일반적인 방법이라는 게 정해져있지는 않다. 각 프로젝트 성격, 상황에 따라 달라질 수 있기 때문에 어떠한 특정 방법이 정답이라고 말하는 것은 좋지 않다.

얘기한 두 방법 중에서는 체크인/체크아웃 날짜를 가지고 사용하는 방법이 현재 상황에 더 적합해보인다. HashSet으로 예약이 불가능한 날짜를 따로 저장해두려면 DB에 새로운 컬럼이 생기게 되고, 해시테이블도 추가로 생기게 된다.
체크인/체크아웃 날짜를 이미 저장해두기 때문에 DTO를 사용해서 해당 정보를 프론트에 보내고, 프론트에서 체크인 날짜부터 체크아웃 날짜까지는 비활성화하는 방법으로 하는 게 합리적으로 보인다.

비즈니스 로직으로 처리할 수 있는 방법이 있다면 디비에 정보를 계속 추가하는 대신에 비즈니스 로직을 이용해서 처리해주는 게 좋다.

느낀 점

멘토님께 처음으로 직접 질문을 해봤다. 과정을 잘 정리해서 말씀해주셔서 쉽게 이해할 수 있었다.

질의응답 내용을 바로 팀노션에 정리했는데, 이렇게 하니까 들은 답변을 상세하게 기록할 수 있었고 바로 다시 복기를 할 수 있어서 기억에도 더 오래 남는다.
역시 기록이 중요하다. 그리고 기록은 미루지 않는 게 좋다.

내가 생각했던 방법이 사실 DB 설계할 때 깊게 고민하지 않고 생각했던 방법인데 그 방법이 비즈니스 로직을 사용해서 합리적인 방법이라고 하니 지금까지 쌓아온 개발 경험이 이렇게 쓰이는구나 싶었다. 다른 팀원분이 생각한 방법도 틀린 방법은 아니기 때문에 새롭게 생각할 수 있는 관점을 배웠다. 혼자 생각하고 혼자 그대로 진행했으면 이렇게 고민하는 시간, 멘토님과의 질의응답 시간을 가지지 못했을 것이다. 팀플이 중요한 이유이기도 하면서 동시에 팀플에서 소통이 중요한 이유도 되는 것 같다.

profile
It's me, jkeum!

0개의 댓글