목적 : 배포된 프로젝트를 통하여, 배운 내용을 바로 적용시켜 고도화해보거나, 추가적인 공부를 위한 용도
- MongoDB Board 개인 스터디 내용을 활용하여, MySQL 시스템으로 전환하였고, 현재는 팀 프로젝트로까지 발전했습니다.
- Passport 로그인 방식 -> JWT 로그인 방식으로 전환
- Bootstrap 4.6.2을 활용한 페이지 구성 & 프론트와 백엔드의 통신과정 이해
1. JWT를 활용한 로그인, 회원가입
2. Access 토큰 이외 Refresh 토큰을 추가하여 보안 강화
3. 로컬 스토리지를 활용한 토큰 저장 & 로그아웃
4. MD5 해시 함수를 활용하여 사용자 비밀번호 단방향 암호화
5. 기본적인 게시판 CRUD
6. 페이징 기능 & 해당 페이지에 보여줄 게시글 수 지정 가능
7. (제목, 내용), (제목), (내용), (작성자)의 종류로 게시글 검색 가능
8. 해당 게시글 조회 시, 조회 수 증가 & 추천 기능
9. 해당 게시글과 현재 로그인된 사용자를 비교하여 특정 권한 지정
10. 주소 상의 쿼리 스트링을 활용하여, 이전 페이지 기억
11. 유저 프로필 변경 기능
12. CodeDeploy, CodePipeLine을 통한 CI/CD 구현
HOME
GET / - 홈 화면 렌더링
GET /about - 홈페이지에 대한 설명 페이지 렌더링
USER
POST /user/login - 로그인 post 요청
POST /user/register - 회원가입 post 요청
GET /user/profile - 프로필 열람 시, 유저 토큰 검사 요청
PATCH /user/profile - 프로필 편집
GET /user/token/refresh - refresh 토큰 받아서, access token 재발급
GET /user/login - 로그인 페이지 렌더링
GET /user/register - 회원가입 페이지 렌더링
GET /user/profile/output - 프로필 페이지 렌더링
BOARD
GET /board - 조건에 따른 글 데이터 전달
-
-
위 메뉴 'Board'를 클릭 시, /board API 호출
-
글 ID, 제목, 조회 수, 작성자, 작성 시간 등을 표시할 수 있다.
-
글의 (제목, 글),(제목),(글),(작성자)로 게시글을 검색할 수 있다.
-
페이지가 존재하고, 페이지당 표시될 게시글의 수를 정할 수 있다.
-
New 버튼 클릭 시, 브라우저 내 로컬 스토리지에서 토큰 검사 (토큰이 없을 시, 로그인 화면으로 이동)
-
-
-
프론트로부터 page, limit, Search 종류 등을 전달받아, 해당 조건에 맞는 게시글로 응답
-
page 값이 1000 이상일 시, 에러 메시지 반환
-
page 값이 1000미만이고, 최대 페이지를 넘는 경우, 최대 페이지로 반환
-
limit 값이 5, 10, 20 이외의 값일 시, 에러 메시지 반환
-
POST /board - 글 생성
GET /board/:id - id 번호의 글 페이지 렌더링
-
-
/board 페이지에서 해당 글을 클릭 시, 현재 페이지 & 검색어 등을 기억하며, /board/:id API 호출
-
그 후, 페이지에서 항상 작성된 글과 현재 로그인한 사용자와 매칭하여 작성자가 맞는다면, [Back] 버튼 이 외 [Edit], [Delete] 버튼 노출
-
[Back] & [Edit] -> 현재 페이지 & 검색어 등을 기억, [Delete] 버튼 작동 시, 1페이지로 이동
-
-
-
호출 요청을 받고, 파라미터의 id를 파싱 하여 해당 id의 게시글 데이터로 응답과 함께, 작성된 페이지 렌더링
-
API 요청당 조회 수 +1
-
DELETE /board/:id - id 번호의 글 삭제
PATCH /board/:id/edit - id 번호의 글 edit 후 post
POST /board/:id/recommand - id 번호의 글 추천
-
-
토큰이 없을 시, 로그인 화면으로 이동
-
추천 버튼 클릭 시, 해당 글의 id & JWT 토큰과 함께 추천 API 호출
-
추천 API 호출 후, 419코드를 응답받게 되면, Refresh 토큰으로 Access 재발급 요청
-
유저가 이미 추천한 글일 시, 추천 취소됨 표시
-
유저가 추천하지 않은 글일 시, 추천됨 표시
-
-
-
user_post테이블로부터, 해당 유저가 해당 글을 추천한 적이 있는지 확인
-
추천한 적이 없다면, 추천 데이터 생성 후, 해당 글의 추천 수 +1
-
추천한 적이 있다면, 추천 데이터 삭제 후, 해당 글의 추천 수 -1
-
GET /board/:id/auth - 해당 글 작성자와 로그인 중인 사용자 일치 확인(인증)
-
프론트로부터 토큰을 전달받고, 토큰 검사 후, 주소상 게시글의 id가 토큰에 존재하는 사용자가 작성한 글이 맞는지 확인
-
그 후, 해당 글 페이지의 [back] or [back, edit, delete] button 출력여부 결정
GET /board/post/new - 글 생성 페이지 렌더링
GET /board/:id/edit - id 번호의 글 데이터와 함께, edit 페이지 렌더링
Main
홈 화면 | 로그인 | 회원가입 | 프로필 |
Board
게시판 메인 | 게시글 제한 | 글 & 제목 검색 | 유저 검색 |
Board Content
게시글 생성 | 게시글 읽기 | 게시글 수정 | 게시글 삭제 |
"dependencies": {
"@sentry/node": "^7.49.0",
"aws-sdk": "^2.1338.0",
"bcrypt": "^5.0.1",
"body-parser": "^1.20.0",
"config": "^3.3.7",
"ejs": "^3.1.8",
"express": "^4.18.1",
"jsonwebtoken": "^8.5.1",
"method-override": "^3.0.0",
"morgan": "^1.10.0",
"multer": "^1.4.5-lts.1",
"multer-s3": "^2.10.0",
"mysql2": "^2.3.3",
"sequelize": "^6.21.3",
"sequelize-cli": "^6.4.1",
"winston": "^3.8.2",
"winston-daily-rotate-file": "^4.7.1"
},
"devDependencies": {
"eslint": "^8.36.0",
"eslint-config-prettier": "^8.7.0",
"eslint-plugin-prettier": "^4.2.1",
"prettier": "^2.8.4",
"standard-version": "^9.5.0"
}