on
커뮤니티 홈페이지 사이트를 만들어보자 - 1
커뮤니티 홈페이지 사이트를 만들어보자
spring security
, spring boot
, jpa
등등 최대한 써먹을 수 있는 것들 다 써서 근사한 커뮤니티 사이트를 만들어볼 것이다.
요구 사항
- 게시판 커뮤니티
Vue.js
,Spring boot
로 만들기 - 연습의 목적- 게시판의 종류는 3가지. 공지, 질문, 자유 게시판 3개.
- 향후
admin
page에서 관리자는 다른 게시판을 추가할 수 있어야 한다. - 관리자는 게시판을 비활성화 시킬 수 있다.
- 향후
- 관리자 페이지가 있어야 한다.
- 회원의 ‘마이 페이지’가 있어야 한다.
- 댓글 기능이 있어야 한다.
- 대댓글 기능도 있어야 한다. 깊이는 1개까지.
- 게시글과 댓글에는 좋아요 또는 싫어요를 누를 수 있어야 한다. (한 사람당 최대 1번만 누를 수 있다)
- 게시글을 적을 수 있어야 한다.
- 로그인 인증, 사용자 권한 관련 요구사항
Spring security
를 사용해서 구현하자.- 관리자 계정이 존재해야 한다.
- 관리자는 회원 정보의 삭제/수정의 권한이 있다.
- 관리자는 게시글, 게시판에 대한 수정/삭제, 비활성화 권한이 있다.
- OAuth2를 사용해 Kakao로 로그인이 가능하게끔 만들어야 한다.
세부적인 기능에 관해서는 위의 기본 기능들을 모두 구현하고 추가하면서 유지보수에 대한 연습을 해볼 생각이다.
DB 설계
Board
: 게시판에 관한 테이블. 공지, 자유, 질문 게시판과 같이 게시판의 특성을 나타내준다.Posting
: 게시글에 관한 테이블. 우리가 게시판에 올릴 게시글에 관한 테이블이다.User
: 사용자에 관한 테이블.Comment
: 댓글 게시판. 대댓글 기능을 가질 수 있게끔 설계했다.Preference
: 좋아요/싫어요 정보와 누가 눌렀는지에 대한 정보를 갖고 있는 테이블.
여기를 보고 대댓글에 관한 DB 테이블을 설계하는 방법에 대해 배웠다.
좋아요/싫어요 테이블은 기본적으로 사용자 : 게시글/댓글
관계이고, 이는 m : n
관계이기 때문에 @ManyToMany
를 해줘야 한다. 그러나 이렇게 하는 것은 안좋은 방법이기에 m : 1, 1 : n
으로 풀어내기 위한 테이블을 설계해야 했다. 해당 테이블이 Preference
테이블이다. 결국 좋아요의 수를 아는 방법은 어떤 게시물의 idx를 가진Preference
테이블들에서 status
가 1인 것들의 개수를 세면 된다. 중복에 관해서는 사용자의 idx또한 좋아요/싫어요 테이블이 갖고 있기 때문에 같은 status를 2번 입력하는 경우는 무시하게끔 코드를 작성하면 된다.
Next
일단 로그인은 나중에 구현할 것이다. 따라서 게시판을 빠르게 구현해보도록 할 것인데, MVC패턴을 적용해서 개발을 할 것이다. Repository
, Service
, Domain(Entity)
을 구현해야 한다.
기본적인 기능들을 만들었다면, Controller
를 만들어서 url에 라우팅을 해주면 될 것 같다.
느낀점
테이블 설계를 이전에 해봤기에 수월하다고 느꼈지만, 좋아요/싫어요
, 대댓글
테이블 같은 경우는 어떻게 만들어야할지 몰라서 찾아보게 됐다. Vue.js
에 대한 설정만 더 만져주면 될 것 같다.