기존의 Django 레거시를 갈아 엎기로 하고나서, 처음으로 한 것은 게시판 테이블을 다시 설계한 것이다.
www.inhabas.com 의 가장 핵심기능은 대부분 게시판이다.
기존의 레거시에서는 모든 게시판 종류마다 (게시판 테이블 + 댓글 테이블 + 파일 테이블) 이렇게 되어있었다.
자유게시판과 같이 새로운 게시판이 하나 더 늘어나면 게시판콤보세트(게시판 테이블 + 댓글 테이블 + 파일 테이블) 를 하나 만들고, 중복되는 비지니스 코드를 만들고, 권한검사에 추가하는 로직을 짰다.
근데 중복되는 비지니스 코드를 줄인다고, 엔티티매퍼를 따로 설정해서 게시글 타입 번호로 if else 엄청 쓰고, 그 중간에 권한 검사 if else 엄청 남발해서,,,,, 허허,,,,
그 개고생을 하면서 느낀것!
- 유지보수 불가능!
- 게시판의 성격은 달라질 수 있지만, 파일과 댓글의 기본적인 crud 는 모두 동일하다!
=> 새로운 게시판도 쉽게 추가할 수 있도록, 확장에 열려있으면서
새로 추가되는 게시판에 파일과 댓글을 바로 연결되게 할 수 있을까?
1. 재설계한 게시판 테이블!
: 아래와 같이 설계했을 때, 쉽게 확장가능하게 될 것 같다는 느낌이 들었다.
대충 그린 db 설계도
대충 그려본 객체 관계도
그 당시 깃헙 이슈: https://github.com/InhaBas/Inhabas.com-api/issues/8
2. 수정사항, 관리자 메뉴 관리 기능 추가
: 향후 이 프로젝트를 지속하는 인원이 없어질 것을 대비해, 관리자가 메뉴를 관리할 수 있는 최소한의 기능을 추가하기로 함.
요구사항 정리
- 기존 게시판 이름 변경 기능
- 기존 게시판 삭제 기능
- 신규 게시판 개설 기능 : 게시판의 종류 선택가능(리스트형, 카드형 등)
현재는 게시판이 리스트 형태와 카드 형태의 게시판이 있다.
추후에는 또 어떤 형태가 나올지는 모르지만, 게시판 형태도 지정할 수 있도록 하려면 db 에 형태값을 저장해야하는데, 어떤 엔티티가 그걸 저장하게 하느냐가 관건이었다.
게시판 엔티티는, 게시판 테이블에서 row 에 해당하는 값으로 사실 "게시글"을 의미한다고 볼 수 있다.
게시판의 형태는 게시글의 내용과는 다른 성격이어서,
기존의 게시판 엔티티가 형태의 관한 정보를 갖는 건 바람직하지 않다고 생각했다.
그래서 게시판 뿐 아니라 다른 전체 메뉴의 정보를 담당하는 Menu 라는 엔티티를 만들었고,
홈페이지에 들어가면 보이는 메뉴그룹들을 위해서 MenuGroup 이라는 엔티티를 또 만들어서 매핑해주었다.
귀찮아서 datagrip 으로 뽑아본 테이블 구조
menu 정보는 잘 변하지 않는 정보니까, 스프링부트가 처음 뜰 때 들고와서 캐시하고 있도록 해야겠다!
당시 깃헙 이슈: https://github.com/InhaBas/Inhabas.com-api/issues/32
'웹 프로젝트 (IBAS) > SpringBoot api 개편' 카테고리의 다른 글
[SpringBoot] 6. ManyToMany 를 "일대다/다대일"로 풀어서 사용하기 (+ 영속성 전이 문제) (0) | 2022.03.20 |
---|---|
[Spring boot] 5. 멀티모듈? MSA? 좋은 아키텍쳐가 뭐야?! (1) | 2022.03.09 |
[Spring Boot] 4. 로컬 개발을 위한 CORS 설정 - (1) w3c recommendation (0) | 2022.02.28 |
[Spring Boot] 3. OAuth2 인증 설계 및 구현 (feat. Security FilterChain 분석) (0) | 2022.02.28 |
[Spring Boot] 2. 서버 개발 환경 분리 (Spring Cloud Config 적용) 및 배포 자동화 (0) | 2022.02.28 |