
프로그래머스 ‘반성문 토이 프로젝트’의 서막…👀
회의록
프로젝트 일정
1차 팀 회의록
2차 MVP Task
프로젝트 개요
🥅 프로젝트 목적
Next.js 프레임워크 이용 경험
SSR, SSG 경험
- 팀 프로젝트 협업 경험
- React
- Typescript
- Eslint, Prettier
- API 연동
📝 프로젝트 범위
- 큰 범위: 포스트 작성, 카테고리 분류, 댓글 기능을 가진 간단한 블로그
- 세부 범위(수정 가능):
포스트작성 (이미지 업로드 가능)
· 포스트 작성 UI 개발
· 포스트 작성 기능 개발
포스트 댓글 기능, 좋아요, 댓글 알림
· 포스트 댓글, 좋아요
· 포스트 댓글 저장, 삭제 기능 개발. 포스트 좋아
포스트 카테고리 분류, 포스트 검색
· 포스트 카테고리, 포스트 검색 UI 개발
· 포스트 카테고리, 포스트 검색 기능 개발
· DB 구성 (Supabase 외 가능)
· 와이어프레임 작성 (FigJam,Figma)
🛠️ 기술 스택 (협의예정)
Next.js (Javascript 이용)
- React (Typescript)
- FigJam
- Figma
- Excalidraw
🗒️ 진행 상황
FigJam 완성
Excalidraw 와이프레임 완성
기능 역할 분담
메인페이지 UI
포스트 작성 UI
모달 (댓글) UI

🗓️ 주차별 팀장

6.26~7.2 이승희
7.3~7.9 김주하
7.10~7.16 이현정
7.17~7.23 이범진
7.23~7.29 김희석
백엔드
DB ERD

API 규격서
공통 응답
성공 - API 호출이 정상적으로 호출 되었을때
{ "status": "success", "message": message, "data": {} }
실패
{ "status": HttpStatus Code, "message": Error Message }
게시글
Get /posts?page={page번호}&limit={limit 개수} - 게시글 목록 가져오기
{ "status": "success", "data": [ { "postId": 115, "title": "깃 푸쉬를 잘못해 버렸습니다", "content": "안녕하세요 FE[4기] 이범진이라고 합니다. 다름이 아니라 8/14일 오전11시경 깃을 메인 브렌치에 push해버리는 행위를 해버렸습니다. 이에 대해 깊이 반성하는 바이며 멘토님의 도움으로 잘 처리 되었습니다. 앞으로 이런일이 일어나지 않도록 주의 또 주의하겠습니다!", "templateType": "{\"color\":\"#FFCAC8\",\"icon\":\"/static/media/icon_06.5d612ff1ca48627ec9da.png\"}", "isAnonymous": false, "team": "", "createAt": "2023-08-15T16:59:12.727Z", "updateAt": "2023-08-15T16:59:12.727Z", "user": { "name": "이범진" "nickName":"익명의머쓱이" }, "commentCount": 1, "likeCount": 2, "forgiveCount": 0 }, { "postId": 115, "title": "깃 푸쉬를 잘못해 버렸습니다", "content": "안녕하세요 FE[4기] 이범진이라고 합니다. 다름이 아니라 8/14일 오전11시경 깃을 메인 브렌치에 push해버리는 행위를 해버렸습니다. 이에 대해 깊이 반성하는 바이며 멘토님의 도움으로 잘 처리 되었습니다. 앞으로 이런일이 일어나지 않도록 주의 또 주의하겠습니다!", "templateType": "{\"color\":\"#FFCAC8\",\"icon\":\"/static/media/icon_06.5d612ff1ca48627ec9da.png\"}", "isAnonymous": false, "team": "", "createAt": "2023-08-15T16:59:12.727Z", "updateAt": "2023-08-15T16:59:12.727Z", "user": { "name": "이범진" "nickName":"익명의머쓱이" }, "commentCount": 1, "likeCount": 2, "forgiveCount": 0 } ] }
Get /posts/{postId} - 게시글 상세 가져오기
{ "status": "success", "data": { "postId": 59, "title": "안녕하세요", "content": "안녕하세요안녕하세요안녕하세요안녕하세요안녕하세요안녕하세요안녕하세요안녕하세요안녕하세요안녕하세요안녕하세요안녕하세요안녕하세요안녕하세요안녕하세요", "templateType": "{\"color\":\"#FBD0F5\",\"icon\":\"/static/media/icon_01.055ca01df9ce11e1611569c493fc8a7a.svg\"}", "isAnonymous": false, "team": "", "createAt": "2023-08-01T11:17:25.408Z", "updateAt": "2023-08-01T11:17:25.408Z", "user": { "name": "희석", "nickName": "익명의머쓱이" }, "comment": [ { "commentId": 1, "comment": "ㅋㅋㅋㅋㅋㅋ", "createAt": "2023-07-08T15:50:00.000Z", "updateAt": "2023-07-08T15:50:01.000Z", "user": { "userId":33 "name": "희석" } } ], "isLike": true, "isForgive": true, "likeCount": 2, "forgiveCount": 1 } }
Post /posts - 게시글 작성하기
body { "title" : "머쓱이 반성문!!!!!", "content" : "2023년 07월 06일 저는 노션을 완성하지 못해 반성문을 작성합니다.", "templateType": "{"color":"#FFCAC8","icon":"/static/media/icon_01.055ca01df9ce11e1611569c493fc8a7a.svg"}", "team":"동영팀" }
댓글작성
Post /posts/{postId}/comments - 댓글 작성
header { "Content-Type":"application/json", "Authorization":"Bearer {Access Token}" } body { "comment":"ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ", }
Put /posts/{postId}/comments/{commentId} - 댓글 수정
body
{ "comment":"수정할 메시지 입니다." }
응답
{ "message":"본인 댓글만 수정 할 수 있습니다." } { "message":"댓글 수정을 완료하였습니다." }
Delete /posts/{postId}/comments/{commentId} - 댓글 삭제
{ "message":"본인 댓글만 삭제 할 수 있습니다." } { "message":"댓글 삭제를 완료하였습니다." }
좋아요
put /posts/{postId}/likes - 좋아요
body {}
용서
put /posts/{postId}/forgive - 용서하기
회원
post /auth/signup - 회원가입
body { "loginId":"heeseok", "password":"qwer1234!", "name":"김희석", }
post /auth/signin - 로그인
body { "loginId":"heeseok", "password":"qwer1234" }
응답
{ "status": "success", "message": "로그인 성공", "data": { "access_token": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjI1LCJsb2dpbklkIjoidGVzdCIsImlhdCI6MTY5MDg4NjAwNywiZXhwIjoxNjkwOTcyNDA3fQ.DEUwv93ieOAR3hd3V54vMvD1jVoh8JW46KThSkPcd1U", "user": { "userId": 25, "loginId": "test", "name": "희석" } } }
delete /auth/user - 회원탈퇴
{ "status":"success", "message":"유저 삭제 완료" }
put /auth/password - 비밀번호 변경
{ "password":"qwer1234!" }
get /posts/mypost - 내 게시물 조회
{ "status": "success", "data": [ { "postId": 115, "title": "깃 푸쉬를 잘못해 버렸습니다", "content": "안녕하세요 FE[4기] 이범진이라고 합니다. 다름이 아니라 8/14일 오전11시경 깃을 메인 브렌치에 push해버리는 행위를 해버렸습니다. 이에 대해 깊이 반성하는 바이며 멘토님의 도움으로 잘 처리 되었습니다. 앞으로 이런일이 일어나지 않도록 주의 또 주의하겠습니다!", "templateType": "{\"color\":\"#FFCAC8\",\"icon\":\"/static/media/icon_06.5d612ff1ca48627ec9da.png\"}", "isAnonymous": false, "team": "", "createAt": "2023-08-15T16:59:12.727Z", "updateAt": "2023-08-15T16:59:12.727Z", "user": { "name": "이범진", "nickName": "익명의머쓱이" }, "commentCount": 1, "likeCount": 2, "forgiveCount": 1 }, { "postId": 114, "title": "반성합니다.", "content": "과제를 하면서 실수로 메인 브랜치에 커밋을 남겨버렸습니다.\n\n앞으로 과제를 할때 꼭!!!!! 브랜치 확인하고 푸쉬하는 습관을 반드시! 갖겠습니다..\n", "templateType": "{\"color\":\"#B8B5FF\",\"icon\":null}", "isAnonymous": false, "team": "", "createAt": "2023-08-10T19:28:14.765Z", "updateAt": "2023-08-10T19:28:14.765Z", "user": { "name": "이범진", "nickName": "익명의머쓱이" }, "commentCount": 0, "likeCount": 0, "forgiveCount": 0 } ] }