HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🐣
프론트엔드 데브코스 4기 교육생
/
🍏
김나영팀
/
앙골라 ANGOLA
앙골라 ANGOLA
/
🌈
API 정리
🌈

API 정리

원본 API데이터 모델📌 어드민어드민 📌 인증로그인 ✅회원가입 ✅로그아웃 ✅인증 ❓📌 사용자사용자목록 ✅ 현재 접속 중인 사용자목록 사용자 정보 ✅프로필 이미지 변경 ✅커버 이미지 변경 x📌 설정내 정보 변경 ✅비밀번호 변경 ✅📌 채널채널 목록채널 정보특정 채널의 포스트 목록 ✅특정 사용자의 포스트 목록 ✅특정 채널에 포스트 작성하기 ✅특정 포스트 상세보기 ✅내가 작성한 포스트 수정하기내가 작성한 포스트 삭제하기 ✅📌 좋아요특정 포스트 좋아요 ✅특정 포스트 좋아요 취소 ✅📌 댓글특정 포스트에 댓글 달기 ✅특정 포스트에 단 내 댓글 지우기 ✅📌 알림나의 알림 목록 ✅알림 확인 처리 ✅알림 생성 ✅📌 팔로우특정 유저 팔로우 ✅특정 유저 언팔 ✅📌 메시지나의 메세지(소통한 유저 목록)특정 사용자와 소통한 메세지 목록특정 사용자에게 메세지 전송메세지 확인 처리📌 검색사용자 검색 ✅전체 검색(포스트, 사용자) ✅

원본 API

school.programmers.co.kr
https://school.programmers.co.kr/app/courses/17516/curriculum/lessons/196672#part-46405
💡
API Host ⇒ https://kdt.frontend.4th.programmers.co.kr:5001
기본 요구사항
  • 사용자는 회원가입과 로그인을 할 수 있습니다.
  • 사용자는 채널에 올라온 글을 볼 수 있습니다.
  • 사용자는 가입자 목록을 볼 수 있습니다.
  • 사용자는 가입자를 이름으로 검색을 할 수 있습니다.
  • 사용자는 가입자의 정보를 볼 수 있습니다.
  • 사용자는 포스트 혹은 가입자를 검색할 수 있습니다.
  • 인증된 사용자는 자신의 정보를 변경할 수 있습니다.
  • 인증된 사용자는 채널에 올라온 글을 볼 수 있습니다.
  • 인증된 사용자는 채널에 포스트를 남길 수 있습니다.
  • 인증된 사용자는 포스트를 좋아요 할 수 있습니다.
  • 인증된 사용자는 포스트에 댓글을 남길 수 있습니다.
  • 인증된 사용자는 자신의 알림 목록을 확인 할 수 있습니다.
  • SPA 형태로 만들어주세요.
  • 엉뚱한 페이지에 접속하면 404 페이지를 보여주세요.
선택 요구사항
  • 사용자는 현재 접속 중인 사용자를 볼 수 있습니다.
  • 인증된 사용자는 다른 가입자에게 메시지를 보낼 수 있습니다.
  • 인증된 사용자는 자신에게 온 메시지 목록을 확인 할 수 있습니다.
  • 인증된 사용자는 특정 사용자와의 메시지 대화 내역을 확인 할 수 있습니다.
  • 인증된 사용자는 프로필 이미지 변경 및 포스트를 작성할 때 이미지를 첨부할 수 있습니다. 파일 업로드를 구현해보세요.
  • 다크 모드를 적용해보세요.
  • 테스트 할 것: User 객체의 followers, following
 

데이터 모델

User
 
Channel
 
Post
 
Like
 
Comment
 
Notification
Response
 
Follow
 
Conversation
 
Message
 
 

📌 어드민

어드민

💡
각 서버에 어드민 계정이 따로 있고, 공통적으로 다음 계정으로 생성됩니다.
포스트를 남기기 위해서는 채널이 필요하기 때문에 채널 생성이 필요합니다.
채널 추가는 어드민 계정으로 가능하고 다음과 같이 요청을 보낼 수 있습니다.
POST /channels/create
 
❗ auth에 Bearer token에 admin 계정 토큰 넣어주기

Request Body

 
 

📌 인증

로그인 ✅

💡
사용자가 이메일과 비밀번호로 서비스에 로그인합니다.
POST /login

Request Body

Response

200 OK

회원가입 ✅

💡
사용자가 이메일과 비밀번호로 서비스에 가입합니다.
POST /signup

Request Body

Response

200 OK

로그아웃 ✅

💡
사용자가 로그아웃 합니다.
POST /logout

인증 ❓

💡
사용자가 인증이 되었는지 확인합니다.
GET /auth-user

Request Header

Response

📌 사용자

사용자목록 ✅

💡
사용자 목록을 불러옵니다.
GET /users/get-users

Request Params

Response

현재 접속 중인 사용자목록

💡
현재 접속 중인 사용자 목록을 불러옵니다.
GET /users/online-users

Response

사용자 정보 ✅

💡
특정 사용자 정보를 불러옵니다.
GET /users/{userId}

Response

프로필 이미지 변경 ✅

 
💡
나의 프로필 이미지를 변경합니다.
POST /users/upload-photo

Request Header

Request Body

FormData
isCover를 반드시 false로 넣어야 합니다.

Response

커버 이미지 변경 x

💡
나의 커버 이미지를 변경합니다.
POST /users/upload-photo

Request Header

Request Body

FormData
isCover를 반드시 true로 넣어야 합니다.

Response

 

📌 설정

내 정보 변경 ✅

💡
나의 정보를 변경합니다.
PUT /settings/update-user

Request Header

Request Body

Response

 

비밀번호 변경 ✅

💡
내 계정 비밀번호를 변경합니다.
PUT /settings/update-password

Request Header

Request Body

 

📌 채널

채널 목록

💡
채널 목록을 불러옵니다.
GET /channels

Response

채널 정보

💡
특정 채널 정보를 불러옵니다.(채널 이름이 한글일 때, 인코딩 필요)
GET /channel/{channelName}

Response

📌 포스트

특정 채널의 포스트 목록 ✅

💡
특정 채널의 포스트 목록을 불러옵니다.
GET /posts/channel/{channelId}

Request Params

Response

특정 사용자의 포스트 목록 ✅

💡
특정 사용자의 포스트 목록을 불러옵니다.
GET /posts/author/{authorId}

Request Params

Response

특정 채널에 포스트 작성하기 ✅

💡
특정 채널에 포스트를 작성합니다.
POST /posts/create

Request Header

Request Body

FormData
 

Response

⇒ POST type의 데이터가 옴 !

특정 포스트 상세보기 ✅

💡
특정 포스트의 정보를 불러옵니다.
GET /posts/{postId}

Response

내가 작성한 포스트 수정하기

💡
내가 작성한 포스트를 수정합니다.
PUT /posts/update

Request Header

Request Body

FormData
이미지를 삭제하려면 imageToDeletePublicId에 imagePublicId를 넣어주세요.

내가 작성한 포스트 삭제하기 ✅

💡
내가 작성한 포스트를 삭제합니다.
DELETE /posts/delete

Request Header

Request Body

 

📌 좋아요

특정 포스트 좋아요 ✅

💡
특정 포스트에 좋아요합니다.
POST /likes/create

Request Header

Request Body

Response

특정 포스트 좋아요 취소 ✅

💡
특정 포스트에 좋아요한 것을 취소합니다.
DELETE /likes/delete

Request Header

Request Body

Response

 

📌 댓글

특정 포스트에 댓글 달기 ✅

💡
특정 포스트에 댓글을 작성합니다.
POST /comments/create

Request Header

Request Body

Response

특정 포스트에 단 내 댓글 지우기 ✅

💡
특정 포스트에 작성한 내 댓글을 삭제합니다.
DELETE /comments/delete

Request Header

Request Body

Response

 

📌 알림

Notification

나의 알림 목록 ✅

💡
나의 알림 목록을 불러옵니다.
GET /notifications

Request Header

Response

알림 확인 처리 ✅

💡
나에게 온 알림을 읽음처리 합니다.
PUT /notifications/seen

Request Header

Response

notion image
 

알림 생성 ✅

💡
상대방에게 알림을 보냅니다.
POST /notifications/create
원래는 서버에서 해주는게 맞는 작업이지만 API 호출로 알림을 보낼 수 있도록 작성했습니다.

Request Header

Request Body

notificationTypeId는 type에 해당하는 객체의 id를 넣어주세요.
  • COMMENT일 경우엔 댓글 id
  • FOLLOW일 경우엔 팔로우 id
  • LIKE일 경우엔 좋아요 id
  • MESSAGE일 경우엔 메시지 id
    • postId는 type이 FOLLOW일 경우엔 null로 보내주세요.

Response

 

📌 팔로우

특정 유저 팔로우 ✅

💡
특정 유저를 팔로우합니다.
POST /follow/create

Request Header

Request Body

Response

특정 유저 언팔 ✅

💡
특정 유저를 언팔합니다.
DELETE /follow/delete

Request Header

Request Body

Response

 

📌 메시지

나의 메세지(소통한 유저 목록)

💡
나와 메시지함을 불러옵니다.
GET /messages/conversations

Request Header

Response

특정 사용자와 소통한 메세지 목록

💡
특정 사용자와 소통한 메시지 목록을 불러옵니다.
GET /messages

Request Header

Request Params

Response

특정 사용자에게 메세지 전송

💡
특정 사용자에게 메시지를 전송합니다.
POST /messages/create

Request Header

Request Body

Response

메세지 확인 처리

💡
특정 사용자와 나눈 메시지를 읽음처리 합니다.
PUT /messages/update-seen

Request Header

Request Body

 

📌 검색

사용자 검색 ✅

💡
사용자를 검색합니다.
GET /search/users/{query}

Response

전체 검색(포스트, 사용자) ✅

💡
포스트와 사용자를 검색합니다.
GET /search/all/{query}

Response

 
{ "coverImage": String, // 커버 이미지 x "image": String, // 프로필 이미지 o "role": String, // x "emailVerified": Boolean, // 사용되지 않음 x "banned": Boolean, // 사용되지 않음 x "isOnline": Boolean, x "posts": Post[], "likes": Like[], "comments": String[], "followers": [], // Follow[] 유저가 신청 "following": [ // 자기가 신청 { "_id": "6169e91316cb2265df003c6d", // 팔로잉 객체 고유 id "user": "6169e58216cb2265df003bf4", // 현재 유저의 id "follower": "6169e206aa57d952c6dc1edd", // 나를 팔로우하는 유저의 id "createdAt": "2021-10-15T20:48:19.816Z", "updatedAt": "2021-10-15T20:48:19.816Z", "__v": 0 } ], "notifications": Notification[], "messages": Message[], x "_id": String, // userId "fullName": String, "email": String, "createdAt": String, "updatedAt": String } // Follow { "_id": String, "user": String, // 사용자 id "follower": String, // 사용자 id "createdAt": String, "updatedAt": String }
{ "authRequired": Boolean, // 사용되지 않음 "posts": String[], "_id": String, "name": String, "description": String, "createdAt": String, "updatedAt": String }
{ "likes": Like[], // 이 포스트가 받은 좋아요 목 "comments": Comment[], "_id": String, "image": Optional<String>, // 사용되지 않음 "imagePublicId": Optional<String>, // 사용되지 않음 "title": String, "channel": Channel, // 사용되지 않음 "author": User, "createdAt": String, "updatedAt": String // 사용되지 않음 }
{ "_id": String, // like 객체 자체 id "user": String, // 좋아요를 누른 사람의 id "post": String, // 포스트 id "createdAt": String, "updatedAt": String }
{ "_id": String, // comment 자체 id "comment": String, "author": User, // comment를 작성한 유저 "post": String, // 포스트 id "createdAt": String, "updatedAt": String }
{ "seen": Boolean, "_id": String, // Notification 자체의 id "author": User, // 알림을 생성한 사람의 User 객체 id "user": User | String, // 알림을 받는 사람의 User 객체 id "post": Nullable<String>, // 특정 Post의 id "follow": Optional<Follow>, // Follow 객체의 id "like": Optional<Like> "comment": Optional<Comment>, // Comment 객체의 id ? or Comment 객체 자체 "message": Optional<String>, // Messsage 객체의 id "createdAt": String, "updatedAt": String }
{ "_id": String, "user": String, // 사용자 id, 팔로우 당한 사람 "follower": String, // 사용자 id, 팔로우 신청한 사람ㄱ "createdAt": String, "updatedAt": String }
{ "_id": String[], "message": String, "sender": User, "receiver": User, "seen": Boolean, "createdAt": String }
{ "_id": String, "message": String, "sender": User, "receiver": User, "seen": Boolean, "createdAt": String, "updatedAt": String }
email: admin@programmers.co.kr password: programmers
{ "authRequired": Boolean // 채널 내용을 로그인한 사람만 볼 수 있는지 여부 "description": String // 채널 설명 "name": String // 채널 이름 }
{ "email": String, "password": String }
// 이거 둘다 리턴해야함 { "user": User, "token": String }
{ "email": String, "fullName": String, "password": String }
// 이거도 둘다 리턴해야함 { "user": User, "token": String }
Authorization: bearer JWT토큰
// userId (뭔가 인증이 확인됨을 알려주는 트리거?) User
offset: Optional limit: Optional
User[]
User[]
User
Authorization: bearer JWT토큰
isCover: false image: Binary
User
Authorization: bearer JWT토큰
isCover: true image: Binary
User
Authorization: bearer JWT토큰
{ "fullName": String, // 닉네임 "username": String // x }
User
Authorization: bearer JWT토큰
{ "password": String }
Channel[]
Channel
offset: Optional<Number> limit: Optional<Number>
Post[]
offset: Optional<Number> limit: Optional<Number>
Post[]
Authorization: bearer JWT토큰
title: String, image: Binary | null, channelId: String
{ "likes": Like[], "comments": Comment[], "_id": String, "image": Optional<String>, // 사용되지 않음 "imagePublicId": Optional<String>, // 사용되지 않음 "title": String, "channel": Channel, // 사용되지 않음 "author": User, "createdAt": String, "updatedAt": String // 사용되지 않음 }
Post
Authorization: bearer JWT토큰
postId: String title: String image: Binary | null imageToDeletePublicId: Optional channelId: String
Authorization: bearer JWT토큰
{ "id": String }
Authorization: bearer JWT토큰
{ "postId": String }
Like
Authorization: bearer JWT토큰
{ "id": String }
Like
Authorization: bearer JWT토큰
{ "comment": String, "postId": String }
Comment
Authorization: bearer JWT토큰
{ "id": String }
Comment
Authorization: bearer JWT토큰
Notification[]
Authorization: bearer JWT토큰
Authorization: bearer JWT토큰
{ "notificationType": "COMMENT" | "FOLLOW" | "LIKE" | "MESSAGE", "notificationTypeId": String, "userId": String, // 알림을 받을 사람의 id ? "postId": Nullable<String> }
Notification
Authorization: bearer JWT토큰
{ "userId": String }
Follow
Authorization: bearer JWT토큰
{ "id": String }
Follow
Authorization: bearer JWT토큰
Conversation[]
Authorization: bearer JWT토큰
userId: String
Message[]
Authorization: bearer JWT토큰
{ "message": String, "receiver": String // 사용자 id }
Message
Authorization: bearer JWT토큰
{ "sender": String // 사용자 id }
User[]
(User | Post)[]