Giter Club home page Giter Club logo

spring_simpleboard's Introduction

spring_simpleboard

spring boot로 만드는 간단한 게시판.

================================================================ 개요 . 기본적인 SpringBoot, Spring Security, Spring Data JPA 숙달 . 전반적인 게시판의 기본 구성 개발 . 1차 포트폴리오 프로젝트 . 개발 인원 : 1명

================================================================ 개발 환경 . 사용 언어 : JAVA . spring boot . spring Data JPA . spring Security . visual studio code . git . Mysql . view template : mustache

================================================================ 주요 기능 . 회원 -> sign up -> 일반 security -> OAuth [추가 목표] -> 기타 로그인 [추가 목표] -> sign in -> 일반 security -> OAuth [추가 목표] -> 기타 로그인 [추가 목표] -> sign out -> 일반 security -> OAuth [추가 목표] -> 기타 로그인 [추가 목표] -> quit -> 일반 security -> OAuth [추가 목표] -> 기타 로그인 [추가 목표] . 게시판 . board -> 기본적인 CRUD . post -> 기본적인 CRUD -> paging . comment -> 기본적인 CRUD -> paging

================================================================
기능별 상세 : 회원 인증 관련 [authentication] . 회원 인증의 경우 가입, 로그인, 로그아웃, 탈퇴으로 이루어진다. 세부적인 방법은 기본적인 security로 인증처리를 진행하는 것과 OAuth을 사용하여 진행하는 것으로 구성된다. . sign up -> spring security : email, password 를 사용하여 member 정보 저장, sign up -> OAuth [추가 목표] : 구글 계정을 사용하여 sign up

. sign in -> spring security : email, password를 사용하여 member 정보 확인, sign in -> OAuth [추가 목표] : 구글 계정을 사용하여 sign in

. sign out -> spring security : 단순 sign out 처리 -> OAuth [추가 목표] : 구글 계정 사용하여 sign out . quit -> 회원 탈퇴 시 password 일치여부 확인 및 지정된 문자열 입력 후 회원탈퇴 처리 진행.

. member 정보 -> 계정 : email 로 구분 -> password : BCrypt 활용하며 password 암호화 하여 저장. -> 추가적인 프로필 정보[추가 목표]

기능별 상세 : 게시판 . 게시판은 게시판 명을 지니는 항목이며 여러개의 게시글을 포함한다. 게시판의 이름은 게시판을 생성할 때 지정하며 게시판 수정 기능에서도 게시판 이름을 변경할 수 있다. 게시판의 생성 및 변경은 관리자 만 가능하며 일반 회원 및 비회원은 일절 관여할 수 없다. 게시판을 삭제하는 경우 해당 게시판에 속한 게시글, 그 게시글에 속한 댓글들은 모두 삭제된다. . 게시판 생성 -> 게시글들을 포함할 수 있는 게시판을 생성 -> 게시판 생성의 경우 ROLE_ADMIN 만 가능. -> 게시판 생성 시 필요 정보 : 게시판 명 . 게시판 수정 -> 게시판의 정보를 수정 -> 게시판 수정의 경우 ROLE_ADMIN 만 가능. : 게시판 명 . 게시판 제거 -> 게시판과 관련된 모든 정보 게저 -> 게시판 제거의 경우 ROLE_ADMIN 만 가능. : 해당 게시판 제거 : 게시판 속 모든 게시글 제거 : 해당 게시글들에 대한 모든 댓글 제거 . 특정 등급만 작성할 수 있도록 제한 추가 [추가 목표]

기능별 상세 : 게시글 . 특정 게시판에 속한 게시글을은 모든 유저들이 "조회"할 수 있다. 조회 시 server에서 지정한 paging 갯수에 따른 page로 제공된다. 모든 ROLE_USER는 게시글을 "작성"할 수 있는 "권한"을 지닌다. 해당 권한을 지닌 유저는 게시글을 작성할 수 있고 자신이 작성한 게시글에 대해서만 "수정"을 할 수 있다. ADMIN을 제외하면 본인이 작성한 게시글에 대해서만 "삭제"를 할 수 있다. 각 게시글은 조회수를 지니며 cdate와 mdate를 노출한다.(혹은 둘중 하나만) . 게시글 조회 -> 게시글의 조회에는 별도 제한을 두지 않는다. -> 비밀 게시글[추가 목표] . 게시글 생성 -> 해당 게시글이 게시될 게시판을 선택한다. -> 해당 게시판에 게시글을 작성한다. -> 생성의 경우 ROLE_ADMIN, ROLE_USER 만 가능하다. -> 작성, 수정, 삭제는 ADMIN, USER 만 가능하다. -> 수정 및 삭제의 경우 ROLE_ADMIN 혹은 ROLE_USER 등급의 게시글 작성자만 가능하다. . 게시글 수정 -> 해당 게시글을 선택하여 수정 -> 제목 및 내용 등 수정후에 저장. -> 해당 게시글의 수정은 ROLE_ADMIN, ROLE_USER 작성자만 가능하다. . 게시글 삭제 -> 해당 게시글을 삭제 -> 게시글에 속한 댓글들도 삭제된다. -> 게시글의 삭제는 ROLE_ADMIN, ROLE_USER 작성자만 가능하다.

기능별 상세 : 댓글 . 댓글은 특정 게시판에 종속되는 항목이다. 모든 댓글은 모든 회원에게 "조회" 될 수 있다. 댓글은 게시글이 지워질 때 같이 "삭제"된다. 각 댓글의 작성은 댓글 작성 "권한"을 지닌 모든 유저가 가능하다. 댓글의 "수정", "삭제"는 작성한 본인만 가능하다. . 댓글 조회 -> 댓글의 조회에는 별도 제한을 두지 않는다. . 댓글 생성 -> 댓글의 작성은 ROLE_ADMIN, ROLE_USER 만 가능하다. . 댓글 수정 -> 댓글의 수정은 ROLE_ADMIN, ROLE_USER 작성자만 가능하다. . 댓글 삭제 -> 댓글의 삭제는 ROLE_ADMIN, ROLE_USER 작성자만 가능하다. . 대댓글[추가 목표] -> 댓글에 대댓글을 달 수 있다. [단 depth는 1로 제한을 한다.] . 댓글 좋아요 [추가 목표] -> 각 댓글은 좋아요를 받을 수 있고 댓글 옆에 좋아요 수가 노출된다. -> 댓글의 작성자가 본인의 댓글에 좋아요를 하는 것은 제한 된다.
-> 좋아요를 했던 댓글에 좋아요를 다시 취소할 수 있다. 기능별 상세 : 각 Role . 역할은 유저의 역할에 따른 대분류를 나타내며 한 계정은 복수의 Role을 지닐 수 있다. . ADMIN -> 관리자 역할 . USER -> service 사용자 역할

기능별 상세 : 각 Role 별 Authority . 각 권한은 특정 Role에 종속되며 어떤 역할인지에 따라 구성이 달라 질 수 있다. 각 권한은 여러 Role에 동시에 포함될 수 있다. . ADMIN의 Authorities -> BAORD 관련 -> BOARD_CREATE : 게시판 생성 권한 -> BOARD_READ : 게시판 조회 권한 -> BOARD_UPDATE : 게시판 수정 권한 -> BOARD_DELETE : 게시판 삭제 권한 . USER의 Authorities -> BOARD 관련 -> BOARD_READ : 게시판 조회 권한 -> POST 관련 -> POST_CREATE : 게시글 생성 권한 -> POST_READ : 게시글 조회 권한 -> POST_UPDATE : 게시글 수정 권한 -> POST_DELETE : 게시글 삭제 권한 -> COMMENT 관련 -> COMMENT_CREATE : 댓글 생성 권한 -> COMMENT_READ : 댓글 조회 권한 -> COMMENT_UPDATE : 댓글 수정 권한 -> COMMENT_DELETE : 댓글 삭제 권한

============================================= 각 Entity 설계 . 모든 DateTime 은 UTC 기준으로 삽입 할 예정.

member : 회원 정보 . id : Long . email : String . password : String . mdate : LocalDateTime ? . cdate : LocalDateTime ? . roles [list - role] : Long [column name : role_id]

board : 게시판 . id : Long . name : String

post : 게시글 . id : Long . board : Long [column name : board_id] . member : Long [column name : member_id] . title : String . content : String => @Lob 사용 . cdate : LocalDateTime ? . mdate : LocalDateTime ?

comment : 댓글 . id : Long . member : Long [column name : member_id] . post : Long [column name : post_id] . comment : String . cdate : LocalDateTime ? . mdate : LocalDateTime ?

role : 역할 . id : Long . name : String . authorities [list - authority] : Long [column name : authority_id]

authority : 권한 . id : Long . name : String . roles [list - role] : Long [column name : role_id]

============================================= 각 Entity 별 상관관계 정의

각 Role은 여러 Authority를 보유할 수 있다. 한 개의 Authority는 여러 role에 포함 될 수 있다. -> role과 athority : oneToMany -> authority와 role : oneToMany => ManyToMany ? 관계 주체 : role로 지정

member는 여러 Role을 지닐 수 있다. 한 개의 Role은 여러 User에 포함될 수 있다. -> member와 role : oneToMany -> role과 member : oneToMany => ManyToMany ? 관계 주체 : member로 지정

member 는 여러 post를 작성할 수 있다 한 개의 post는 단 하나의 member만 지닌다. -> member와 post : oneToMany -> post와 member : ManyToOne => ManyToOne : post가 Many 관계 주체 : member로 지정

member는 여러 comment를 작성 할 수 있다. 한개의 comment는 하나의 member만 지닌다. -> comment와 member : ManyToOne -> member와 comment : OneToMany => ManyToOne : comment가 Many 관계 주체 : member로 지정

post는 여러 comment를 보유할 수 있다. 한개의 comment는 하나의 post만 지닐 수 있다. -> post와 comment : oneToMany -> comment와 Post : ManyToOne => ManyToOne : comment가 Many 관계 주체 : post로 지정.

board는 여러 post를 보유할 수 있다. 한개의 post는 하나의 board만 지닐 수 있다. -> board와 post : onToMany -> post와 board : ManyToOne => ManyToOne : post가 Many 관계주체 : post로 지정. -> post가 board를 단방향으로 지니면 될듯.

================================================ service 개요 : member

  • member의 조회, 가입, 로그인, 로그아웃, 탈퇴를 담당한다.
  • 각 member의 role에 대한 조회, 생성, 수정, 삭제를 담당한다.
  • 각 role에 속한 authority에 대해서 조회, 생성, 수정, 삭제를 담당한다.

service 개요 : board

  • board의 조회, 생성, 수정, 삭제을 담당한다.

service 개요 : post

  • post에 대한 조회, 생성, 수정, 삭제를 담당한다.
  • post에 속할 수 있는 comment에 대해서 조회, 생성, 수정, 삭제를 담당한다.

=============================================== 각 [member]contorller에 따른 url 과 method 구조

[member]

  • member 목록 조회 : GET , ~/members
  • member 조회 : GET , ~/members/{id}
  • member 생성 : POST , ~/members/create
  • member 수정 : POST , ~/members/{id}
  • member 삭제 : DELETE , ~members/{id}
  • sign up : member create 와 동일
  • sign in : POST , ~/members/sign-in
  • sign in process : GET , ~/members/sign-in-process
  • sign out : POST , ~/members/sign-out

[Role]

  • role 목록 조회 : GET , ~/roles
  • role 상세 조회 : GET , ~/roles/{id}
  • role 생성 : POST , ~/roles/create
  • role 수정 : POST , ~/roles/{id}
  • role 삭제 : DELETE , ~/roles/{id}

[Authority]

  • authority 목록 조회 : GET , ~/authorities
  • authority 상세 조회 : GET , ~/authorities/{id}
  • authority 생성 : POST , ~/authorities/create
  • authority 수정 : POST , ~/authorities/{id}
  • authority 삭제 : DELETE , ~/authorities/{id}

=================================================== 각 [baord] contorller에 따른 url 과 method 구조 [board]

  • board 목록 조회 : GET , ~/boards
  • board 상세 조회 : GET , ~/boards/{id} -> 해당 board 상세 조회 시 게시판 명과 해당 board에 속한 post 목록을 전달해줘야함. -> board, page, 필요 시 검색 키워드 적용[추가 목표]
  • board 생성 : POST , ~/boards/create
  • board 수정 : POST , ~/boards/{id}
  • board 삭제 : DELETE , ~/boards/{id}

=================================================== 각 [post]contorller 에 따른 url 과 method 구조 [post]

  • post 상세 조회 : GET , ~/posts/{id}
  • post 생성 : POST , ~/posts/create
  • post 수정 : POST , ~/posts/{id}
  • post 삭제 : DELETE , ~/posts/{id}
  • post like 처리[추가 목표] : POST , ~/posts/{id}/like
  • post like 취소[추가 목표] : DELETE , ~/posts/{id}/like

[comment]

  • comment 생성 : POST , ~/comments/create
  • comment 수정 : POST , ~/comments/{id}
  • comment 삭제 : DELETE , ~/comments/{id}
  • comment like 처리[추가 목표] : POST , ~/comments/{id}/like
  • comment like 취소[추가 목표] : DELETE , ~/comments/{id}/like

=================================================== 추가 목표 중 우선순위 . OAuth 적용 . 추가적인 member profile 기능 -> profile 이미지 지정 및 인삿말 정도? . Board 검색 기능 . Post like 기능 . Comment 에 Comment 달기 기능. . Comment like 기능 -> 회원 등급 분류 및 지정 기능. . 게시판에 특정 등급만 작성 가능하도록 제한 기능 . 게시판에 주딱 파딱 지정 기능 -> board manager 지정 . 익명 게시판 기능.

. 기타 서비스 인증 로그인.

================================================== about page 추가 . 개발 목표, 프로젝트에 대한 간단한 설명 . 사용 언어 . 개발 환경 . 해당 프로젝트 개발 이력? .

spring_simpleboard's People

Contributors

kikaio avatar sweetmeatsboy avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.