© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🌈
API 정리 원본 API 💡
API Host ⇒ https://kdt.frontend.4th.programmers.co.kr:5001
기본 요구사항 사용자는 회원가입과 로그인을 할 수 있습니다. 사용자는 채널에 올라온 글을 볼 수 있습니다. 사용자는 가입자를 이름으로 검색을 할 수 있습니다. 사용자는 포스트 혹은 가입자를 검색할 수 있습니다. 인증된 사용자는 자신의 정보를 변경할 수 있습니다. 인증된 사용자는 채널에 올라온 글을 볼 수 있습니다. 인증된 사용자는 채널에 포스트를 남길 수 있습니다. 인증된 사용자는 포스트를 좋아요 할 수 있습니다. 인증된 사용자는 포스트에 댓글을 남길 수 있습니다. 인증된 사용자는 자신의 알림 목록을 확인 할 수 있습니다. 엉뚱한 페이지에 접속하면 404 페이지를 보여주세요. 선택 요구사항 사용자는 현재 접속 중인 사용자를 볼 수 있습니다. 인증된 사용자는 다른 가입자에게 메시지를 보낼 수 있습니다. 인증된 사용자는 자신에게 온 메시지 목록을 확인 할 수 있습니다. 인증된 사용자는 특정 사용자와의 메시지 대화 내역을 확인 할 수 있습니다. 인증된 사용자는 프로필 이미지 변경 및 포스트를 작성할 때 이미지를 첨부할 수 있습니다. 파일 업로드를 구현해보세요. 테스트 할 것: User 객체의 followers, following
데이터 모델 User Channel Post Like Comment Notification 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
📌 알림 나의 알림 목록 ✅ 💡
나의 알림 목록을 불러옵니다.
GET /notifications
Request Header Response 알림 확인 처리 ✅ 💡
나에게 온 알림을 읽음처리 합니다.
PUT /notifications/seen
Request Header Response
알림 생성 ✅ 💡
상대방에게 알림을 보냅니다.
POST /notifications/create
원래는 서버에서 해주는게 맞는 작업이지만 API 호출로 알림을 보낼 수 있도록 작성했습니다.
Request Header Request Body notificationTypeId
는 type에 해당하는 객체의 id를 넣어주세요.
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
Authorization: bearer JWT토큰
isCover: false
image: Binary
Authorization: bearer JWT토큰
isCover: true
image: Binary
Authorization: bearer JWT토큰
{
"fullName": String, // 닉네임
"username": String // x
}
Authorization: bearer JWT토큰
offset: Optional<Number>
limit: Optional<Number>
offset: Optional<Number>
limit: Optional<Number>
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 // 사용되지 않음
}
Authorization: bearer JWT토큰
postId: String
title: String
image: Binary | null
imageToDeletePublicId: Optional
channelId: String
Authorization: bearer JWT토큰
Authorization: bearer JWT토큰
Authorization: bearer JWT토큰
Authorization: bearer JWT토큰
{
"comment": String,
"postId": String
}
Authorization: bearer JWT토큰
Authorization: bearer JWT토큰
Authorization: bearer JWT토큰
Authorization: bearer JWT토큰
{
"notificationType": "COMMENT" | "FOLLOW" | "LIKE" | "MESSAGE",
"notificationTypeId": String,
"userId": String, // 알림을 받을 사람의 id ?
"postId": Nullable<String>
}
Authorization: bearer JWT토큰
Authorization: bearer JWT토큰
Authorization: bearer JWT토큰
Authorization: bearer JWT토큰
Authorization: bearer JWT토큰
{
"message": String,
"receiver": String // 사용자 id
}
Authorization: bearer JWT토큰
{
"sender": String // 사용자 id
}