동현 유
척척석사
동현 유
전체 방문자
오늘
어제
  • 분류 전체보기 (178)
    • BlockChain (48)
      • [paper] Consensus (13)
      • [paper] Execution (19)
      • [paper] Storage (5)
      • [paper] ZKP (1)
      • [paper] Oracle (1)
      • Blockchains (9)
    • Java (19)
      • Java의 정석 (13)
      • Java 파헤치기 (5)
    • Python (20)
      • Python 뜯어보기 (6)
      • 데이터 분석 기초 (5)
      • Python 기초 강의 (6)
      • Python 기초 강의 부록 (3)
    • Golang (0)
    • MySQL (3)
      • programmers (2)
      • 기본 문법 (0)
    • 웹 프로젝트 (IBAS) (36)
      • Django 레거시 (14)
      • SpringBoot api 개편 (14)
      • Infra (3)
      • 서버 장애 기록 (4)
      • 신입팀원 교육 자료 (1)
    • CS (30)
      • Operating System (22)
      • Computer Security (3)
      • Network (4)
      • DBMS (1)
    • 책 (10)
      • 도메인 주도 설계 철저 입문 (9)
      • Real MySQL 8.0 (1)
    • BOJ 문제 풀이 (3)
    • 이러쿵저러쿵 (7)
    • 회고 (1)

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.
동현 유
웹 프로젝트 (IBAS)/SpringBoot api 개편

[Spring Boot] 1. 게시판 테이블 재설계

[Spring Boot] 1. 게시판 테이블 재설계
웹 프로젝트 (IBAS)/SpringBoot api 개편

[Spring Boot] 1. 게시판 테이블 재설계

2022. 2. 28. 12:29

기존의 Django 레거시를 갈아 엎기로 하고나서, 처음으로 한 것은 게시판 테이블을 다시 설계한 것이다.

 

www.inhabas.com  의 가장 핵심기능은 대부분 게시판이다.

 

기존의 레거시에서는 모든 게시판 종류마다 (게시판 테이블 + 댓글 테이블 + 파일 테이블) 이렇게 되어있었다.

 

자유게시판과 같이 새로운 게시판이 하나 더 늘어나면 게시판콤보세트(게시판 테이블 + 댓글 테이블 + 파일 테이블) 를 하나 만들고, 중복되는 비지니스 코드를 만들고, 권한검사에 추가하는 로직을 짰다.

 

근데 중복되는 비지니스 코드를 줄인다고, 엔티티매퍼를 따로 설정해서 게시글 타입 번호로 if else 엄청 쓰고, 그 중간에 권한 검사 if else 엄청 남발해서,,,,, 허허,,,,

 

그 개고생을 하면서 느낀것!

  • 유지보수 불가능!
  • 게시판의 성격은 달라질 수 있지만, 파일과 댓글의 기본적인 crud 는 모두 동일하다!

=> 새로운 게시판도 쉽게 추가할 수 있도록, 확장에 열려있으면서

새로 추가되는 게시판에 파일과 댓글을 바로 연결되게 할 수 있을까?

 

 


 

1. 재설계한 게시판 테이블!

  : 아래와 같이 설계했을 때, 쉽게 확장가능하게 될 것 같다는 느낌이 들었다.

대충 그린 db 설계도

게시판의 공통속성을 뽑아내서 baseBoard 를 만들고, 거기에 file, comment, member 등을 연결

 

대충 그려본 객체 관계도

객체 관계도도 한번 그려봄. 제대로 uml 공부해보질 않아서, 대충 선만 연결함.

그 당시 깃헙 이슈: https://github.com/InhaBas/Inhabas.com-api/issues/8

 

게시판, 댓글, 파일 관련 db 작업 및 엔티티 매핑 · Issue #8 · InhaBas/Inhabas.com-api

홈페이지 특성 상 게시판 종류가 많다. db table 의 대부분이 게시판. 강의, 공모전, 일반 게시판, 외에도 다른 게시판들이 더 존재.. 아래와 같이 게시판의 공통부분을 BaseBoard 로 묶어주면, 다른 게

github.com

 

 

 


2. 수정사항, 관리자 메뉴 관리 기능 추가

  : 향후 이 프로젝트를 지속하는 인원이 없어질 것을 대비해, 관리자가 메뉴를 관리할 수 있는 최소한의 기능을 추가하기로 함.

요구사항 정리
  • 기존 게시판 이름 변경 기능
  • 기존 게시판 삭제 기능
  • 신규 게시판 개설 기능 : 게시판의 종류 선택가능(리스트형, 카드형 등)

현재는 게시판이 리스트 형태와 카드 형태의 게시판이 있다.

 

추후에는 또 어떤 형태가 나올지는 모르지만, 게시판 형태도 지정할 수 있도록 하려면 db 에 형태값을 저장해야하는데, 어떤 엔티티가 그걸 저장하게 하느냐가 관건이었다.

 

게시판 엔티티는, 게시판 테이블에서 row 에 해당하는 값으로 사실 "게시글"을 의미한다고 볼 수 있다.

게시판의 형태는 게시글의 내용과는 다른 성격이어서,

기존의 게시판 엔티티가 형태의 관한 정보를 갖는 건 바람직하지 않다고 생각했다.

 

그래서 게시판 뿐 아니라 다른 전체 메뉴의 정보를 담당하는 Menu 라는 엔티티를 만들었고,

홈페이지에 들어가면 보이는 메뉴그룹들을 위해서 MenuGroup 이라는 엔티티를 또 만들어서 매핑해주었다.

 

 

귀찮아서 datagrip 으로 뽑아본 테이블 구조

수정사항이 반영된 ERD
수정사항이 반영된 테이블 구조

 

menu 정보는 잘 변하지 않는 정보니까, 스프링부트가 처음 뜰 때 들고와서 캐시하고 있도록 해야겠다!

 

당시 깃헙 이슈: https://github.com/InhaBas/Inhabas.com-api/issues/32

 

관리자 메뉴 수정 기능 추가로 인한 DB 설계 변경 · Issue #32 · InhaBas/Inhabas.com-api

향후 동아리 내에 엔지니어가 없어질 것을 대비하여, 웹 페이지를 어느정도 관리자가 관리할 수 있는 기능을 추가하기로 함. 메뉴 이름 수정 기능 게시판 삭제 게시판 추가 menu 에는 게시판 종류

github.com

 

'웹 프로젝트 (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
  • 1. 재설계한 게시판 테이블!
  • 2. 수정사항, 관리자 메뉴 관리 기능 추가
동현 유
동현 유
Fault Tolerant System Researcher for more Trustful World and Better Lives. (LinkedIn: https://www.linkedin.com/in/donghyeon-ryu-526b8a276/)

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.