uswLectureEvaluation/SUWIKI-Spring

DB 개선하고 싶은 부분들

Closed this issue · 0 comments

거의 불가능한

  • user_idx : user_id가 FK로 있지 않은 테이블들이 있음 -> FK로 수정 (엔티티상에서 @JoinColumn 도 추가)

사실 운영 DB 스키마를 바꾸는건 너무 위험하고,, 기존의 레코드들에 적용시키는건 너무 일이 커지기도 합니다.
현재로써는 우아하게 할 방법을 찾아보고는 있는데... 방법을 찾게 된다면 이슈 업데이트하겠습니다

해볼만한

  • User : 생성자에서 id를 받고 있습니다. 테스트를 위해서라면 모킹으로 해결할 수 있기 때문에 금방 리팩토링할 수 있어보입니다
  • User : loginId, email에 대한 UNIQUE 제약 조건 추가. 단, ddl-auto update로도 반영되지 않기 때문에 개발 DB, 운영 DB를 따로 조작해야 하는 문제가 있습니다.
  • lecture INDEX : 현재는 PK 외에 따로 인덱싱은 되어있지 않아서 추가 -> 검색 쿼리 최적화!
  • refresh_token, confirmation_token : 레디스로 관리 -> 조회 속도 최적화. 데이터 마이그레이션 필요 (비용 vs Ec2 메모리 리스크 선택해야 함)
  • 레코드 생성, 수정일자 : 엔티티상에서 BaseTimeEntity 상속
  • lecture.currently_open : 현재 학기에 열린 강의 조회 API (새로 개발중인 API입니다)에서 기존의 lecture.semester_list로 문자열 조건부 쿼리를 날리기 -> boolean으로 찾기
  • user_idx : FK로 되어있는 테이블들이 있음 (e.g. view_exam) -> user_id로 컬럼명 변경
  • api_logger : 쿼리가 발생할 때마다 추가적인 로깅이 발생 -> 로그 추적이 어려워짐. EC2 로그(logback.xml) 로 대체하는 것이 어떨까 생각중입니다. (도현님 허락이 필요할 듯 합니다!)
  • @Comment 를 이용한 DB 컬럼 주석 생성 (Spring 2.6~)
  • ExamPostReport, EvaluatePostReport ⚠️ : 현재 AdminController상에서 엔티티 객체를 그대로 반환합니다. BaseTimeEntity를 상속하려고 했으나 클라이언트에서 문제가 발생할 것 같아서 보류중입니다.

확정

  • BaseTimeEntity : modified_date 필드 추가. 기존에 상속받는 엔티티들은 모두 같은 이름으로 사용중. 오류 없을 것으로 보입니다
  • 소프트 딜리트 : 기본적으로 레코드의 변경 이력을 기록하는 것이 좋기 때문에, BaseEntity로 소프트 딜리트 관련 필드 추가할 예정입니다.
  • 엔티티 필드에 대한 validation : @NotNull, @Size 등 비즈니스 로직상의 제약 조건을 지정할 예정입니다.