HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🧚
[1기]최종 프로젝트 데브코스
/
🗺️
[팀17] 영업이익 17조 💰
/
🐣
백둥이
/
↔️
api 설계
↔️

api 설계

목록 숨기기
회원카카오 인증 ✔PathRequest ParameterResponse Message사용자 정보 확인 ✔PathRequest HeaderResponse Message가입 유무 확인 ✔PathRequest HeaderResponse Message닉네임 중복 확인 ✔PathPath Segment ParameterResponse Message회원가입 ✔PathRequest BodyResponse Message카카오 로그인 에러코드Kakao 인증 참고Kakao 인증 참고지도홈, 지도 조회 ✔PathRequest ParameterResponse Message게시물게시물 열람 ✔PathPath Segment ParameterResponse Message게시물 생성 ✔Pathform-datacom예시Response Message게시물 엿보기 ✔PathPath Segment ParameterResponse Message게시물 삭제 ✔PathPath Segment ParameterResponse Message에러 처리에러 예시백엔드 에러 적용 코드Should Have마이페이지PathResponse Message

회원

OAuth2 토큰, 로그인, 회원가입과 관련된 api 문서.

카카오 인증 ✔

Path

get /oauth2/authorization/kakao

Request Parameter

Name
Required
Type
Description
redirect_uri
O
String
리다이렉트 uri ex) http://localhost:3000/oauth/redirect

Response Message

  • Bearer jwt access 토큰이 포함된 redirect uri
  • 응답코드 : HTTP OK 200

사용자 정보 확인 ✔

Path

get /api/v1/users/me

Request Header

  • Authentication
    • jwt access token (Bearer)

Response Message

Name
Type
Description
nickname
String
사용자 이름
profileImageUrl
String
프로필 이미지 URL

가입 유무 확인 ✔

Path

get api/v1/users/duplicate

Request Header

  • Authentication
    • jwt access token (Bearer)

Response Message

Name
Type
Description
isDuplicate
Boolean
가입 유무
nickname
String
사용자 이름
profileImageUrl
String
프로필 이미지 URL

닉네임 중복 확인 ✔

Path

get api/v1/users/{nickname}

Path Segment Parameter

Name
Required
Type
Description
nickname
O
String
사용자 이름 (URL safe // 정규표현식 ) var regType1 = /^[A-Za-z0-9+]{2,20}$/;  출처 https://ondemand.tistory.com/183 [Cloud Computing On Demand]

Response Message

Name
Type
Description
nickname
String
사용자 이름 (영어 소문자, 영어 대문자, 숫자만 가능)
isDuplicate
Boolean
중복 여부 (중복 True, 아니면 False)
  • 응답코드 : HTTP OK 200
  • 에러 코드
    • Error
      status
      code
      message
      Description
      NICKNAME_ERROR
      400
      "U003"
      "Nickname Is Out Of The Regex"
      정규식과 맞지 않는 사용자 이름

회원가입 ✔

Path

post api/v1/users/signup

Request Body

Name
Required
Type
Description
nickname
O
String
사용자 이름
nickname은 사용자가 직접 설정한다.

Response Message

Name
Type
Description
nickname
String
사용자 이름
imageUrl
String
프로필 이미지 URL
  • 응답 코드 : HTTP CREATED(201)
  • 에러 코드
    • Error
      status
      code
      message
      Description
      NICKNAME_DUPLICATED
      400
      "U001"
      "Nickname Is Duplicated"
      닉네임이 이미 존재
      ALREADY_CREATED
      400
      "U002"
      "User Already Created"
      중복가입 (중복 확인 후 회원가입 중에 누군가 먼저 가입한 상태)
      NICKNAME_ERROR
      400
      "U003"
      "Nickname Is Out Of The Regex"
      정규식과 맞지 않는 사용자 이름

카카오 로그인 에러코드

Error
status
code
message
Description
NICKNAME_NULL
400
"L001"
"Nickname Not Exist"
회원의 닉네임 존재하지 않음 (회원가입 중 닉네임 설정 다시 필요)
USER_NOT_EXIST
400
"L002"
"User Not Exist"
회원가입필요
KAKAO_ERROR
500
"L003"
"Kakao Server Error"
카카오 서버 에러
SERVER_ERROR
500
"L004"
"DB Server Error"
DB 서버 에러

Kakao 인증 참고

Kakao 인증 참고

Kakao Developers
이 문서는 REST API를 사용한 로그인 구현 방법을 안내합니다. 이 문서에 포함된 기능 일부는 [도구] > [REST API 테스트]를 통해 사용해 볼 수 있습니다. 카카오 로그인 구현에 필요한 로그인 버튼 이미지는 [도구] > [리소스 다운로드]에서 제공합니다. 해당 로그인 버튼은 디자인 가이드를 참고하여 서비스 UI에 적합한 크기로 수정하여 사용할 수 있습니다.
Kakao Developers
https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api
Kakao Developers

지도

홈, 지도 조회 ✔

지도 화면에 표시되어질 게시물(필름)의 목록을 조회하는 api입니다.

Path

get api/v1/maps

Request Parameter

null

Response Message

Name
Type
Description
posts
List
게시물 목록
  • posts
Name
Type
Description
postId
Number
게시물 아이디
state
String
게시물 열람여부 (Closed, Openable, Opened)
location
List
위치 정보
  • location
    • Name
      Type
      Description
      latitude
      String
      위도
      longitude
      String
      경도
  • 응답코드 : HTTP OK (200)
  • 에러
    • Error
      status
      code
      message
      Description
      LOCATION_ERROR
      400
      "M001"
      "Location Input Error"
      위경도 입력 에러(범위 벗어남)

게시물

게시물 열람 ✔

Path

get api/v1/posts/detail/{postId}

Path Segment Parameter

Name
Required
Type
Description
postId
O
Number
게시물 아이디

Response Message

Name
Type
Description
postId
Number
게시물 아이디
title
String
게시물 제목
content
String
게시물 내용
imageUrls
List
게시물 이미지 URL
authorNickname
String
작성자 이름
authorImageUrl
String
작성자 이미지 URL
createdAt
String
게시물 작성일시 "yyyy-MM-dd" 형식
authorityImageList
List
열람 권한 유저 리스트
location
List
좌표
openerNickname
String
최초 열람 유저 닉네임
openerImageUrl
String
최초 열람 유저 이미지
isOpened
Boolean
최초 열람 여부 (최초 열람일 경우 True, 아니면 False)
openedAt
String
게시물 최초열람일시 "yyyy-MM-dd" 형식
previewText
String
엿보기 문구
  • ImageUrls = []
    • Name
      Type
      Description
      imageOrder
      Number
      게시물 이미지 표시순서
      imageUrl
      String
      게시물 이미지 Url
  • authorityImageList = []
    • Name
      Type
      Description
      imageOrder
      Number
      프로필 이미지 표시 순서
      authorityId
      Number
      권한 목록 아이디
      imageUrl
      String
      프로필 이미지 경로 최대 길이 200자
  • location
    • Name
      Type
      Description
      latitude
      String
      위도
      longitude
      String
      경도
  • 응답코드 : HTTP OK (200)
  • 에러코드
    • Error
      status
      code
      message
      Description
      POST_ID_ERROR
      400
      "P001"
      "Post Id Not Exist"
      존재하지 않는 Id
      POST_FORBIDDEN
      403
      "P002"
      "Post Access Benied"
      열람권한 없음
      CLOSED_POST_ERROR
      403
      "P010"
      "Post Closed"
      열수 없는 포스트

게시물 생성 ✔

Posts (필름)을 생성하는 API입니다. 생성 후 썸네일을 위해 정보를 전달한다.

Path

post api/v1/posts
 

form-data

Key
Value
com
json포멧의 String
files
file []

com

Name
Required
Type
Description
title
O
String
게시물 제목
previewText
O
String
엿보기 문구
latitude
O
String
좌표
longitude
O
String
좌표
availableAt
O
String
열 수 있는 날 "yyyy-MM-dd"
content
ㅤ
String
게시물 내용 (imageFiles 혹은 content 둘중 하나는 무조건 포함)

예시

펼쳐보기
{ "title": "testpost1-title", "previewText": "testpost1-previewText", "latitude": "37.491837217869616", "longitude": "127.02959879978368", "availableAt": "2021-12-11", "content": "testpost1-content / testtesttet" }
files = []
notion image

Response Message

Name
Type
Description
postId
Number
게시물 아이디
title
String
게시물 제목
previewText
String
엿보기 문구
availableAt
String
열 수 있는 날 ("yyyy-MM-dd" 형식)
state
String
게시물 열람여부 (Closed, Openable, Opened)
location
Object
좌표
authorityCount
Number
열람가능 인원 수 (본인 포함, 아래 리스트 포함)
authorityImageList
List
열람가능 맴버 프로필 이미지 (MAX 4개 정보만 전달)
  • location
    • Name
      Type
      Description
      latitude
      String
      위도
      longitude
      String
      경도
  • authorityImageList = []
    • Name
      Type
      Description
      imageOrder
      Number
      이미지 표시 순서
      authorityId
      Number
      권한부여된 사용자 아이디
      imageUrl
      String
      경로 (최대 길이 200자)
  • 응답코드 : HTTP CREATED (201)
    • Content-Location: api/v1/posts/{postId}
  • 에러코드
    • Error
      status
      code
      message
      Description
      LOCATION_ERROR
      400
      "M001"
      "Location Input Error"
      위경도 입력 에러(범위 벗어남)
      TITLE_ERROR
      400
      "P003"
      "Title Error"
      제목 저장 오류
      PREVIEW_TEXT_ERROR
      400
      "P004"
      "Preview Text Error"
      엿보기 문구 저장 오류
      OPENABLE_AT_ERROR
      400
      "P005"
      "Date Range Error"
      날짜 범위 오류
      AUTHORITY_ERROR
      400
      "P006"
      "Authority Error"
      권한 닉네임 오류
      AUTHOR_NICKNAME_ERROR
      400
      "P007"
      "Author Nickname Error"
      작성자 닉네임 오류
      IMAGE_ERROR
      400
      "P008"
      "Image Error"
      이미지 저장 오류
      CONTENT_ERROR
      400
      "P009"
      "Content Error"
      내용 저장 오류

게시물 엿보기 ✔

Path

get api/v1/posts/{postId}

Path Segment Parameter

Name
Required
Type
Description
postId
O
Number
게시물 아이디

Response Message

Name
Type
Description
postId
Number
게시물 아이디
title
String
게시물 제목
previewText
String
엿보기 문구
availableAt
String
열 수 있는날 "yyyy-MM-dd" 형식
authorNickname
String
작성자 닉네임
state
String
게시물 열람여부 (Closed, Openable, Opened)
location
Object
좌표
authorityCount
Number
열람가능 인원 수 (본인 포함, 아래 리스트 포함)
authorityImageList
List
4개 정보만 저장
  • location
    • Name
      Type
      Description
      latitude
      String
      위도
      longitude
      String
      경도
  • authorityImageList = []
    • Name
      Type
      Description
      imageOrder
      Number
      이미지 표시 순서
      authorityId
      Number
      권한 목록 아이디
      imageUrl
      String
      경로 최대 길이 200자
  • 에러코드
    • 응답코드 : HTTP OK (200)
    • postId_error : postId가 존재하지 않음
      • Error
        status
        code
        message
        Description
        POST_ID_ERROR
        400
        "P001"
        "Post Id Not Exist"
        존재하지 않는 Id

게시물 삭제 ✔

Path

delete api/v1/posts/{postId}

Path Segment Parameter

Name
Required
Type
Description
postId
O
Number
게시물 아이디

Response Message

Name
Type
Description
postId
Number
게시물 아이디
  • 응답코드 : HTTP OK (200)
  • 에러코드
    • Error
      status
      code
      message
      Description
      POST_ID_ERROR
      400
      "P001"
      "Post Id Not Exist"
      존재하지 않는 Id

에러 처리

  • 에러 코드
    • HTTP 에러 번호
    • ex) 400, 403
  • 에러 명령어
    • 동일 에러코드일 경우 에러 명령어를 통해 분류
  • 에러 내용 : 기타 에러일 경우 에러 명령어는 etc_error로 처리하고 내용 상세 문구가 추가된다.

에러 예시

MockHttpServletResponse: Status = 400 Error message = null Headers = [Content-Type:"application/json;charset=UTF-8"] Content type = application/json;charset=UTF-8 Body = {"message":"Nickname Not Exist","status":400,"code":"L001"} Forwarded URL = null Redirected URL = null Cookies = []

백엔드 에러 적용 코드

// COMMON INVALID_INPUT_VALUE(400, "C001", "Invalid Input value"), INVALID_TYPE_VALUE(400, "C002", "Invalid Type Value"), ENTITY_NOT_FOUND(400, "C003", "Entity Not Found"), METHOD_NOT_ALLOWED(405, "C004", "Invalid Input value"), INTERNAL_SERVER_ERROR(500, "C005", "Server Error"), HANDLE_ACCESS_DENIED(403, "C006", "Access is denied"), // Login NICKNAME_NULL(400, "L001", "Nickname Not Exist"), USER_NOT_EXIST(400, "L002", "User Not Exist"), KAKAO_ERROR(400, "L003", "Kakao Server Error"), SERVER_ERROR(400, "L004", "DB Server Error"), // Map LOCATION_ERROR(400, "M001", "Location Input Error"), // User NICKNAME_DUPLICATED(400, "U001", "Nickname Is Duplicated"), ALREADY_CREATED(400, "U002", "User Already Created"), NICKNAME_ERROR(400,"U003", "Nickname Is Out Of The Regex"), // Post POST_ID_ERROR(400, "P001", "Post Id Not Exist"), POST_FORBIDDEN(403, "P002", "Post Access Denied"), TITLE_ERROR(400, "P003", "Title Error"), PREVIEW_TEXT_ERROR(400, "P004", "Preview Text Error"), OPENABLE_AT_ERROR(400, "P005", "Date Range Error"), AUTHORITY_ERROR(400, "P006", "Authority Error"), AUTHOR_NICKNAME_ERROR(400, "P007", "Author Nickname Error"), IMAGE_ERROR(400, "P008", "Image Error"), CONTENT_ERROR(400, "P009", "Content Error");

Should Have

마이페이지

Path

get api/v1/mypage/posts

Response Message

Name
Type
Description
posts
List
엿보기 게시물 리스트 형식
  • posts
    • Name
      Type
      Description
      postId
      Number
      게시물 아이디
      title
      String
      게시물 제목
      previewText
      String
      엿보기 문구
      availableAt
      String
      열 수 있는날 "yyyy-MM-dd" 형식
      authorNickname
      String
      작성자 닉네임
      state
      String
      게시물 열람여부 (Closed, Openable, Opened)
      location
      Object
      좌표
      authorityCount
      Number
      열람가능 인원 수 (본인 포함, 아래 리스트 포함)
      authorityImageList
      List
      4개 정보만 저장
    • location
      • Name
        Type
        Description
        latitude
        String
        위도
        longitude
        String
        경도
    • authorityImageList = []
      • Name
        Type
        Description
        imageOrder
        Number
        이미지 표시 순서
        authorityId
        Number
        권한 목록 아이디
        imageUrl
        String
        경로 최대 길이 200자
  • 에러코드
    • 응답코드 : HTTP OK (200)