HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
♥️
2기 최종 프로젝트 팀별 공간
/
[팀 09] 오프와 에프
[팀 09] 오프와 에프
/
📝
API 명세서
📝

API 명세서

목록
📍 Domains
 

API 설계
완료
기능
도메인
HTTP verbs
Path
응답/요청
담당자
FE 연결
완료
로그인
회원
센터
POST
/api/v1/users/login
📢
요청/응답 값
Kid
FE 연결
완료
현재 로그인한 사용자
GET
/api/v1/users
📢
요청/응답 값
Kevin
FE 연결
완료
회원가입
POST
/api/v1/users
📢
요청/응답 값
Kevin
FE 연결
완료
이메일 중복 체크
POST
/api/v1/users/email
📢
요청/응답 값
Kevin
FE 연결
완료
닉네임 중복 체크
POST
/api/v1/users/nickname
📢
요청/응답 값
Kid
FE 연결
완료
비밀번호 변경
PUT
/api/v1/users/password
📢
요청/응답 값
Kid
FE 연결
완료
회원정보 수정
PUT
/api/v1/users
📢
요청/응답 값
Kid
FE 연결
완료
회원 프로필 이미지 수정
PUT
/api/v1/users/profile
📢
요청/응답 값
Kevin
FE 연결
완료
회원정보 조회(타인)
GET
/api/v1/users/{id}
📢
요청/응답 값
Kevin
FE 연결
완료
회원탈퇴
DELETE
/api/v1/users
📢
요청/응답 값
Kid
FE 연결
완료
비밀번호 찾기 - 메일로 인증번호
POST
/api/v1/users/password/{email}
📢
요청/응답 값
Kevin
완료
비밀번호 찾기 - 인증번호 검증
GET
/api/v1/users/password
📢
요청/응답 값
Kevin
완료
비밀번호 찾기 - 비밀번호 수정
PUT
/api/v1/users/missedPassword
📢
요청/응답 값
Kevin
완료
장소 등록
장소
관리자
POST
/api/v1/places
📢
요청/응답 값
Charlie
완료
장소 목록 조회
GET
/api/v1/places?
📢
요청/응답 값
Charlie
FE 연결
완료
장소 상세 조회
GET
/api/v1/places/{place_id}
📢
요청/응답 값
Charlie
FE 연결
완료
유저가 북마크한 장소 목록 조회
장소
북마크
GET
/api/v1/places/bookmark
📢
요청/응답 값
Kate
FE 연결
FE 연결
완료
코스 등록
코스
POST
/api/v1/courses
📢
요청/응답 값
Frank
FE 연결
완료
코스 수정
PUT
/api/v1/courses/{course_id}
📢
요청/응답 값
Frank
FE 연결
완료
코스 목록 조회 (검색)
GET
/api/v1/courses
📢
요청/응답 값
Frank
FE 연결
완료
코스 상세 조회
GET
/api/v1/courses/{course_id}
📢
요청/응답 값
Frank
FE 연결
완료
코스 삭제
DELETE
/api/v1/courses/{course_id}
📢
요청/응답 값
Frank
FE 연결
완료
유저가 북마크한 코스 목록 조회
코스
북마크
GET
/api/v1/courses/bookmark
📢
요청/응답 값
Frank
완료
나의 코스 조회
회원
코스
GET
/api/v1/courses/users
📢
요청/응답 값
Frank
완료
타인의 코스 조회
GET
/api/v1/courses/users/{user_id}
📢
요청/응답
Frank
FE 연결
완료
코스에 댓글 등록
코스
댓글
POST
/api/v1/courses/{course_id}/comments
📢
요청/응답 값
Charlie
FE 연결
완료
해당 코스 댓글 전체 조회
GET
/api/v1/courses/{course_id}/comments
📢
요청/응답 값
Charlie
FE 연결
완료
해당 코스의 댓글 수정
PUT
/api/v1/courses/{course_id}/comments/{comment_id}
📢
요청/응답 값
Charlie
FE 연결
완료
해당 코스의 댓글 삭제
DELETE
/api/v1/courses/{course_id}/comments/{comment_id}
📢
요청/응답 값
Charlie
FE 연결
완료
장소에 댓글 등록
장소
댓글
POST
/api/v1/places/{place_id}/comments
📢
요청/응답 값
Kid
FE 연결
완료
해당 장소 댓글 전체 조회
GET
/api/v1/places/{place_id}/comments
📢
요청/응답 값
Kid
FE 연결
완료
해당 장소 댓글 수정
PUT
/api/v1/places/{place_id}/comments/{comment_id}
📢
요청/응답 값
Kid
FE 연결
완료
해당 장소 댓글 삭제
DELETE
/api/v1/places/{place_id}/comments/{comment_id}
📢
요청/응답 값
Kid
FE 연결
완료
내가 작성한 댓글 목록 조회
회원
댓글
GET
/api/v1/comments
📢
요청/응답 값
Charlie
FE 연결
완료
타인이 작성한 댓글 목록 조회
회원
댓글
GET
/api/v1/comments?userId=
📢
요청/응답 값
Charlie
FE 연결
완료
코스 좋아요 등록/삭제(토글)
좋아요
GET
/api/v1/likes/courses/{id}
📢
요청/응답 값
Kate
FE 연결
완료
장소 좋아요 등록/삭제(토글)
GET
/api/v1/likes/places/{id}
📢
요청/응답 값
Kate
FE 연결
완료
코스북마크 등록/삭제
북마크
GET
/api/v1/bookmarks/courses/{id}
📢
요청/응답 값
Kate
FE 연결
완료
장소 북마크 등록/삭제
GET
/api/v1/bookmarks/places/{id}
📢
요청/응답 값
Kate
FE 연결
완료
📢
요청/응답 값
하정
완료
📢
요청/응답 값
하정

📍 Domains

Before

User

type User { "id": String! "nickname": String! // 중복체크 해야할 듯? "email": String! // 유효한 이메일인지 && 중복체크 "avatar": String? // 회원가입 할 때는 넣지않고 나중에 edit "birth": String! // "1994-06-16" 형식 "gender": "man" | "woman" "createdAt": String! "updatedAt": String! ... }

Post

type Post { "id": String! "title": String! "user": User! "fromLocation": String! "toLocation": String! "viaLocations": String[]! "periods": 당일 | 1~3일 | 4~7일 | 8~15일 | 15일이상 "likes": Number! "hashtags": String[] "createdAt": String! "updatedAt": String! ... }

Comment

type Comment { "id": String! ... "createdAt": String! "updatedAt": String! }

Tag

type Tag { "id": String! "tag": String! "createdAt": String! "updatedAt": String! }
 

📍 Actions

User - 로그인

[POST] 유저는 로그인을 할 수 있다. (로그인하면 토큰 발급)

BE
  • 이메일이 틀렸을 경우, 비밀번호가 틀렸을 경우 validation → FE는 에러처리할 것
POST /login Request body { "email": String! "password": String! } Response { "user": User "token": String }
 

User - 회원가입

[POST] 유저는 회원가입 중간에 이메일 중복확인을 해야한다.

POST / Request body { "email": String! } Response { "duplicate": Boolean }

[POST] 유저는 회원가입 중간에 닉네임 중복확인을 해야한다.

POST / Request body { "nickname": String! } Response { "duplicate": Boolean }

[POST] 유저는 회원가입을 할 수 있다.

FE (프론트에서 서버로 보내기전에 1차적으로 방어)
  1. 이메일 중복확인을 완료하지 않았거나 중복된 이메일이면 회원가입 버튼이 동작하지 않도록 해야함
  1. 닉네임 중복확인을 완료하지 않았거나 중복된 닉네임이라면 회원가입 버튼이 동작하지 않도록 해야함
  1. 동일한 비밀번호가 아닐 경우를 고려해야함
BE
  1. 비밀번호 확인 : 비밀번호, 비밀번호 확인 필드 모두 보내서 백엔드에서 한번 더 검증 → validation 체크 후 에러있으면 에러 리턴
  1. 중복된 닉네임, 이메일이면 에러리턴
POST /signup Request body { "email": String! "password": String! "passwordCheck": String! "nickname": String! "birth": String! "gender" : "man" | "woman" } Response { // User와 token을 반환할지 or 응답만 OK로 내려줄지? // 에러나면 에러메세지 }

[이거 GET인가요 POST인가요?] 유저는 로그아웃을 할 수 있다.

GET? Request body { } Response { }
 

[POST] 유저는 본인 정보를 수정할 수 있다. (이거 와이어프레임 보면서 협의 후 결정하는게 좋을듯,,)

POST Request body { ㅇㄴㅁ } Response { ㄹㅇㄹ }
 

Post

[GET] 전체 Post 인기순으로 불러오기 (메인페이지에서 Posts를 불러오는 기능, limit-pagination 필요할듯??)

GET Response { // 이거 어떻게 불러와야할지 아직 모르겠어요 }

[GET] 전체 Post 최신순으로 불러오기 (메인페이지에서 Posts를 불러오는 기능, limit-pagination 필요할듯??)

GET Response { // 이거 어떻게 불러와야할지 아직 모르겠어요 }

[GET] 전체 Post 불러오기 (메인페이지에서 Posts를 불러오는 기능, limit-pagination 필요할듯??)

GET Response { // 이거 어떻게 불러와야할지 아직 모르겠어요 }
 

[GET] Post 검색하기 (메인페이지에서 키워드로 Post 검색하는 기능)

GET Response { posts: Post[] }
 

[GET] user의 Posts 불러오기 (유저페이지에서 필요)

GET Response { posts: Post[] }

[GET]특정 Post 1개 불러오기 (상세게시물 보기)

GET post/{postId} Response { post: Post }
 

[POST] 새로운 게시물 작성하기 (필요한거 매우 많음)

POST /post Request body { } Response { }
 

[PUT] 유저는 본인 게시물을 수정할 수 있다.

Request body { } Response { }

[DELETE] 유저는 본인 게시물을 삭제할 수 있다.

Request body { } Response { }
 

Comment

[GET] user가 단 댓글들 불러오기 (유저페이지에서 필요)

GET Response { comments: Comment[] }

[PUT] 유저는 본인 댓글을 수정할 수 있다.

Request body { } Response { }

[DELETE로 할까요 PUT으로 할까요?] 유저는 본인 댓글을 삭제할 수 있다.

Request body { } Response { }
 

Bookmark

[GET] user가 북마크한 Posts 불러오기 (유저페이지에서 필요)

GET Response { }