데이터 모델 - jinkshower/galmanhae GitHub Wiki

1차 ERD 설계

  • 날씨, 혼잡도, 장소를 각각 객체로 관리하는게 더 나을 거라고 판단
  • 각각을 객체로 만들었고 Jpa의 @Embeddable을 사용.
  • 날씨 점수, 혼잡도 점수 등의 상태는 enum으로 객체 내에서 관리, 각 enum이 관리하는 상태는 기획서의 밑 부분 '문장상세'에 있음.

구현 UML.

2차 ERD 설계

  • 문제 : 이전의 비즈니스 로직이 강하게 결합되어 있던 Place 테이블은 점수, 등급 등의 정책이 바뀌거나 사용하는 데이터가 추가(미세먼지 등)되면 다량의 데이터를 수정, 이전 row들을 삭제하는게 나은 invalid row로 만듦.

  • 해결 : Place, Weather, Congestion의 세개의 테이블로 분리, 비즈니스 로직을 테이블에서 걷어냄. 테이블 관리를 data 패키지에서 하고 저장, 조회패키지가 data패키지를 사용만 하는 식으로 변경

  • 결과 : 정책이 바뀌거나 다뤄야 할 데이터가 추가, 삭제 되더라도 테이블 컬럼을 append하기만 하면 되고, 정책은 애플리케이션 코드에서 변경하면 되니 유지보수가 더 쉬워짐.

  • Weather, Congestion 테이블 measured_at, place_id를 복합인덱스로 설정. -> 해당 테이블의 쿼리는 언제나 가장 최신의 place_id를 가진 row임. 따라서 가장 쿼리가 많이 되는 기준의 column을 인덱스로 두어 빠른 조회를 꾀함

image