새소식

Project

BOOK BOOK 부끄부끄 (Part.01)

  • -

 

 

글을 읽고 설레는 마음... BOOK BOOK 😚

 

 

내가 일상에서 끄적이는 글들이 책으로 발간된다는 상상을 할 수 있을까요?

 

무료한 일상에 달콤한 글을 읽고 설레보고 싶지 않을까요?

 

프로젝트 부끄 부끄입니다.

 

 

 

 

 

👨‍🏫 프로젝트 요약

 

 

1. 작가가 게시글을 작성하고, 그 게시글들을 모아 책을 출판할 수 있는 프로그램 (BrunchStory 사이트 모방)

 

2. 멤버는 게시글을 읽고 댓글을 남길 수 있으며, 작가 구독 및 특정 주제를 '좋아요'해서 알람(이메일) 받아볼 수 있게하기

 

3. JWT를 이용한 Security 기능 구현으로 각 Role(관리자, 작가, 멤버)에 따른 권한 구분

 

4. github : https://github.com/gotoAbraxas/brunchstory/tree/dev

(현재 dev 브런치에서 작업 중으로 main은 사용하지 않음)

 

GitHub - gotoAbraxas/brunchstory

Contribute to gotoAbraxas/brunchstory development by creating an account on GitHub.

github.com

 

 

 

 

 

✨ 목표

 

1. View보다는 데이터 설계를 중점적으로 진행해보기

 

2. 창의적인 프로젝트 만들기

3. JPA, JaCoCo 또는 restdocs, hateoas, MONGO DB, redis, elk, scheduler 및 security 이용해보기

 

 

 

 

 

🕐 진행 기간

2023.07.21 - 2023.08.03

 

 

 

 

 

 

 

👨‍👩‍👧‍👦 팀원 소개

1. 최웅진 (https://velog.io/@leo_c)
2. 이태열 (https://gotoabraxas.tistory.com)
3. 최영준 (hthttps://velog.io/@dudwns1852)
4. 정준기 (htthttps://devwarriorjungi.tistory.com)

 

 

 

 

 

 

 

 

🌅 사용기술

 

 

 

 

 

 

 

 

 

🎨 ERD

 

● 1차 ERD (2023.07.21)

팀원끼리 어떤 프로젝트를 진행할지 고민하였고 후보는 아래와 같습니다.

 

1) 배달어플같은 프로그램

일반회원, 패스 구매한 유료회원, 관리자가 있고 배달이 출발되면 이메일이 발송되는 프로그램.

주변에 위치한 음식점, 메뉴별 음식 조회가 가능한 프로그램

 

2) 포켓몬 게임

유저, 체육관관장, 관리자가 있고 상대방이 대결을 신청하면 이메일이 발송되는 프로그램

그리고 포켓몬 데이터들을 조회하고, 서로 싸울 수 있는 프로그램

 

3) BrunchStory 같은 작가와 독자 프로그램

현 프로젝트

 

지금껏 배운 내용을 제일 잘 시행해볼 수 있는 주제라고 생각하여 BrunchStory 느낌의 프로그램을 만들기로 결정했습니다.

 어떤 기능이 있을지 아주 기초적인 구상을 하였습니다.

 

 

● 2차 ERD (2023.07.24)

https://www.erdcloud.com/d/jSQSELacfupGRbBEx

 

BrunchStory

Draw ERD with your team members. All states are shared in real time. And it's FREE. Database modeling tool.

www.erdcloud.com

 

제일 초기 시안으로 ERD CLOUD를 이용하여 구체적인 틀을 구성하였습니다.

 

User, Author, Book, Subject, Like, Subscribe의 큰 Entity를 만들고 그들간의 관계를 생각하고,

어떤 기능이 추가될 지 생각했습니다.

 

 

 

 

● 3차 ERD (2023.07.26)

 

IntelliJ에서 전체적인 Entity 코드를 작성하며 각 Entity 별 관계 맵핑을 해주었고,

mySQL을 연결하여 ERD를 추출하였습니다.

 

내용은 1차와 변경사항이 없었습니다.

 

 

 

● 4차 ERD (2023.07.27)

 

프로젝트 구조에 대해 생각해보다가 너무 복잡해질 것 같다는 의견이 나왔습니다.

ManytoMany 관계를 줄이는 쪽으로 변경되었습니다.

 

 

 

 

 

● 5차 ERD (2023.07.28)

 

Security 기능을 반드시 사용해보자는 의견으로, Role 테이블을 만들고 어떻게 구조가 바뀔지 생각하였습니다.

그리고 일반 멤버가 작가로 승급했을 때, 작가인지 여부를 파악하기위해 members에 Boolean isWriter column을 만들어서

true면 작가, false면 일반 유저로 구분하려 했습니다.

 

Admin은 따로 테이블을 만들어 고정값으로 member 중 1명으로 만들어두려했습니다.

 

 

 

 

● 최종 ERD (2023.08.03)

 

승급신청으로 writerapply 테이블, 그리고 role 테이블은 만들지 않고 enum으로 값을 받아오게하였습니다.

 

member에서 작가여부를 확인하려했던 isWriter column은 없애고, role column을 만들어서

ROLE_MEMBER, ROLE_AUTHOR, ROLE_ADMIN으로 역할을 구분하였습니다.

 

ADMIN도 테이블을 만들지 않고

resource 패키지 안에 import.sql을 만들어 초기값으로 들어가게 해두었습니다.

 

 

 

 

 

 

 

 

 

 

 

 

📃 프로젝트 구조

 

구조는 RestAPI의 자원구조를 활용하였습니다.

MVC에서 V인 View는 없는 MC(?) 구조로 구현하려고 노력했습니다.

 

 

 

💻 구현 기능

 

● 공통 기능

① 회원가입  (회원가입시 기본적으로 Role이 ROLE_Member로 멤버 기능을 갖게함)

② 로그인

③ 각종 기능이 작동하기 위한 조회 기능 (예 - 특정 작가를 구독중인 멤버 조회하기 등)

 

 

● Member 기능

① 회원 탈퇴

② 댓글 작성, 수정, 삭제하기

③ 특정 작가 구독하기

④ 특정 게시글 좋아요하기

⑤ 특정 글 주제에 흥미(interest) 등록하기

⑥ 알람 설정하기

⑦ 책 읽기

⑧ 작가 승급 신청하기

 

 

● Author 기능

① 게시글 작성하기

② 게시글 삭제하기

③ 책 출간하기

 

 

● Admin 기능

① 작가 신청 승인/ 삭제

② 회원 삭제 등 관리자 기능

 

 

● Email 기능

① 매일 아침 9시 특정 주제에 게시글이 좋아요 5개 이상 받았다면, 해당 주제에 흥미가 있는 멤버에게 메일 보내주기

② 작가가 게시글을 작성할 때마다, 해당 작가를 구독한 멤버에게 메일 보내주기

 

 

● Security 기능

① JWT 토큰으로 사용자 인증

② Config 파일로 회원이 아닌 사람(Member, Author, Admin)인 익명의 사람이 회원가입 및 로그인 가능하게 구현

③ @PreAuthorize 어노테이션을 통해 각 메소드별 권한 요구

 

 

 

 

🎁 팀원별 Comment

 

 

 

 

 

 

 

 

 

 

 

 

 

🚧 프로젝트 향후 방향

 

① 웹 구현

프로그램으로만 구현되었으나, 웹소켓까지 공부하여 실시간 데이터가 반영되는 웹 구현이 목표입니다.

 

 

② 기능적인 문제

1) 회원삭제

현재 회원 삭제에 대해 사용자 인증만 확인하고 권한 인증 기능이 빠져있음.

즉, 다른 회원이 자신을 삭제할 수 있는 상태입니다.

Admin 및 회원 본인만이 삭제할 수 있도록 변경할 예정입니다.

회원 삭제시 연결된 외래키 삭제가 구현되지 않은 상태입니다. (삭제가 안됨...)

 

 

2) EventListener을 이용한 메일 발송

작가가 글을 작성하였을 때, 해당 작가를 구독한 사람에게 메일이 발송되게하는 기능이 테스트되지 못했습니다.

(테스트 완료)

또한 구독뿐만 아니라 알람까지 설정을 하여야 메일이 발송되는게 목적이므로,

알람까지 설정되었을 때 메일이 발송되게 코드를 수정할 예정입니다.

 

3) Quartz Scheduler를 이용하지 못한 점

Quartz Scheduler 세팅은 해두었지만, 실제로 프로젝트를 종료했을 때 해당 기능은 사용하지 않았습니다.

EventListener로 대체하였기 때문에 이부분은 삭제해야합니다.

 

 

 

 

 

 

'Project' 카테고리의 다른 글

SNS 사이트 구현하기 (임시)  (0) 2023.08.24
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.