1. 개요

게시판 프로젝트 REST API 문서입니다.

1.1. 응답 형식

프로젝트는 다음과 같은 응답 형식을 제공합니다.

1.1.1. 성공

결과 데이터가 없는 경우 결과 데이터가 있는 경우
{
  "message": "success",
  "status": 200,
  "result": null
}
{
  "message": "success",
  "status": 200,
  "result": {
    "postNumber": 1,
    "title": "제목",
    "writer": "작성자",
    "content": "내용",
    "createdAt": "2024.06.17"
  }
}
Property Type Description

message

String

요청 성공/실패 여부

status

Number

Http 상태 코드

result

Null

요청 결과 데이터

1.1.2. 실패

필드 예외가 없는 경우 필드 예외가 있는 경우
{
  "message": "fail",
  "status": 404,
  "result": {
    "timeStamp": "2024-04-14T18:38:25.021828",
    "path": "/api/posts/1",
    "error": {
      "code": "E404002",
      "message": "게시글을 찾을 수 없습니다.",
      "fieldErrors": []
    }
  }
}
{
  "message": "fail",
  "status": 400,
  "result": {
    "timeStamp": "2024-04-14T18:38:24.919021",
    "path": "/api/posts/write",
    "error": {
      "code": "E400001",
      "message": "입력값이 잘못되었습니다.",
      "fieldErrors": [{
        "field": "title",
        "input": "",
        "message": "제목을 입력해 주세요."
      }]
    }
  }
}
Property Type Description

message

String

요청 성공/실패 여부

status

Number

Http 상태 코드

result

Object

에러 결과 데이터

result.timeStamp

String

에러 발생 시간

result.path

String

요청 API 경로

result.error.code

String

에러 코드

result.error.message

String

에러 메시지

result.eerror.fieldErrors

Array

유효성 검증 에러 필드 목록

1.2. 예외 유형

프로젝트에서 발생하는 예외의 상태 코드, 에러 코드, 에러 메시지는 다음과 같습니다.

상태 코드

에러 코드

에러 메시지

400 Bad Request

E400001

입력값이 잘못되었습니다.

400 Bad Request

E400002

비밀번호가 일치하지 않습니다.

401 Unauthorized

E401001

아이디 또는 비밀번호가 일치하지 않습니다.

401 Unauthorized

E401002

토큰이 유효하지 않습니다.

401 Unauthorized

E401003

토큰이 만료되었습니다.

403 Forbidden

E403001

게시글 수정은 작성자만 할 수 있습니다.

403 Forbidden

E403002

게시글 삭제는 작성자만 할 수 있습니다.

403 Forbidden

E403003

댓글 수정은 작성자만 할 수 있습니다.

403 Forbidden

E403004

댓글 삭제는 작성자만 할 수 있습니다.

404 Not Found

E400000

지원하지 않는 예외 유형입니다.

404 Not Found

E404001

회원을 찾을 수 없습니다.

404 Not Found

E404002

게시글을 찾을 수 없습니다.

404 Not Found

E404003

댓글을 찾을 수 없습니다.

409 Conflict

E404004

사용 중인 닉네임입니다.

409 Conflict

E404005

사용 중인 아이디입니다.

2. 회원

2.1. 닉네임 중복 확인

요청

GET /api/members/nickname/yoonkun HTTP/1.1
Table 1. /api/members/nickname/{nickname}
Parameter Description

nickname

닉네임

응답

200 OK
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
  "message" : "success",
  "status" : 200,
  "result" : null
}
409 Conflict
HTTP/1.1 409 Conflict
Content-Type: application/json;charset=UTF-8

{
  "message" : "fail",
  "status" : 409,
  "result" : {
    "timeStamp" : "2024-05-05T14:21:57.828745751",
    "path" : "/api/members/nickname/yoonkun",
    "error" : {
      "code" : "E409001",
      "message" : "사용 중인 닉네임입니다.",
      "fieldErrors" : [ ]
    }
  }
}

2.2. 아이디 중복 확인

요청

GET /api/members/username/yoon1234 HTTP/1.1
Table 2. /api/members/username/{username}
Parameter Description

username

아이디

응답

200 OK
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
  "message" : "success",
  "status" : 200,
  "result" : null
}
409 Conflict
HTTP/1.1 409 Conflict
Content-Type: application/json;charset=UTF-8

{
  "message" : "fail",
  "status" : 409,
  "result" : {
    "timeStamp" : "2024-05-05T14:21:54.41552392",
    "path" : "/api/members/username/yoon1234",
    "error" : {
      "code" : "E409002",
      "message" : "사용 중인 아이디입니다.",
      "fieldErrors" : [ ]
    }
  }
}

2.3. 회원가입

요청

POST /api/members/signup HTTP/1.1
Content-Type: application/json;charset=UTF-8

{
  "nickname" : "yoonkun",
  "username" : "yoon1234",
  "password" : "12345678",
  "passwordConfirm" : "12345678"
}
Path Type Description

nickname

String

닉네임

username

String

아이디

password

String

비밀번호

passwordConfirm

String

비밀번호 확인

응답

200 OK
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
  "message" : "success",
  "status" : 200,
  "result" : null
}
400 Bad Request
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8

{
  "message" : "fail",
  "status" : 400,
  "result" : {
    "timeStamp" : "2024-05-05T14:21:54.060864202",
    "path" : "/api/members/signup",
    "error" : {
      "code" : "E400001",
      "message" : "입력값이 잘못되었습니다.",
      "fieldErrors" : [ {
        "field" : "username",
        "input" : "",
        "message" : "아이디를 입력해 주세요."
      } ]
    }
  }
}
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8

{
  "message" : "fail",
  "status" : 400,
  "result" : {
    "timeStamp" : "2024-05-05T14:21:56.920416803",
    "path" : "/api/members/signup",
    "error" : {
      "code" : "E400002",
      "message" : "비밀번호가 일치하지 않습니다.",
      "fieldErrors" : [ ]
    }
  }
}

2.4. 로그인

요청

POST /api/members/login HTTP/1.1
Content-Type: application/x-www-form-urlencoded

username=yoon1234&password=12345678
Parameter Description

username

아이디

password

비밀번호

응답

200 OK
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
  "message" : "success",
  "status" : 200,
  "result" : {
    "accessToken" : "access-token",
    "refreshToken" : "refresh-token"
  }
}
Path Type Description

message

String

요청 성공/실패 여부

status

Number

Http 상태 코드

result

Object

요청 결과 데이터

result.accessToken

String

액세스 토큰

result.refreshToken

String

리프레시 토큰

401 Unauthorized
HTTP/1.1 401 Unauthorized
Content-Type: application/json;charset=UTF-8

{
  "message" : "fail",
  "status" : 401,
  "result" : {
    "timeStamp" : "2024-05-05T14:21:56.057283974",
    "path" : "/api/members/login",
    "error" : {
      "code" : "E401001",
      "message" : "아이디 또는 비밀번호가 일치하지 않습니다.",
      "fieldErrors" : [ ]
    }
  }
}

2.5. 로그아웃

요청

POST /api/members/logout HTTP/1.1
Authorization: Bearer access-token
Content-Type: application/x-www-form-urlencoded
Name Description

Authorization

액세스 토큰

응답

200 OK
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
  "message" : "success",
  "status" : 200,
  "result" : null
}
401 Unauthorized
HTTP/1.1 401 Unauthorized
Content-Type: application/json;charset=UTF-8

{
  "message" : "fail",
  "status" : 401,
  "result" : {
    "timeStamp" : "2024-05-05T14:21:56.860114078",
    "path" : "/api/members/logout",
    "error" : {
      "code" : "E401002",
      "message" : "토큰이 유효하지 않습니다.",
      "fieldErrors" : [ ]
    }
  }
}

2.6. 프로필 조회

요청

GET /api/members/profile HTTP/1.1
Authorization: Bearer access-token
Name Description

Authorization

액세스 토큰

응답

200 OK
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
  "message" : "success",
  "status" : 200,
  "result" : {
    "nickname" : "yoonkun",
    "username" : "yoon1234"
  }
}
Path Type Description

message

String

요청 성공/실패 여부

status

Number

Http 상태 코드

result

Object

요청 결과 데이터

result.nickname

String

회원 닉네임

result.username

String

회원 아이디

404 Not Found
HTTP/1.1 404 Not Found
Content-Type: application/json;charset=UTF-8

{
  "message" : "fail",
  "status" : 404,
  "result" : {
    "timeStamp" : "2024-05-05T14:21:57.049780972",
    "path" : "/api/members/profile",
    "error" : {
      "code" : "E404001",
      "message" : "회원을 찾을 수 없습니다.",
      "fieldErrors" : [ ]
    }
  }
}

2.7. 내가 작성한 게시글 조회

요청

GET /api/members/profile/posts?page=1 HTTP/1.1
Authorization: Bearer access-token
Parameter Description

page

페이지 번호

Name Description

Authorization

액세스 토큰

응답

200 OK
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
  "message" : "success",
  "status" : 200,
  "result" : {
    "posts" : [ {
      "postNumber" : 1,
      "title" : "제목",
      "writer" : "작성자",
      "commentCount" : 5,
      "createdAt" : "2024.06.17"
    } ],
    "pageNumber" : 1,
    "totalPages" : 1,
    "totalElements" : 1,
    "prev" : false,
    "next" : false,
    "first" : true,
    "last" : true
  }
}
Path Type Description

message

String

요청 성공/실패 여부

status

Number

Http 상태 코드

result

Object

요청 결과 데이터

result.posts

Array

게시글 목록

result.posts[].postNumber

Number

게시글 번호

result.posts[].title

String

게시글 제목

result.posts[].writer

String

게시글 제목

result.posts[].commentCount

Number

댓글 개수

result.posts[].createdAt

String

게시글 제목

result.pageNumber

Number

페이지 번호

result.totalPages

Number

전체 페이지 개수

result.totalElements

Number

전체 게시글 개수

result.prev

Boolean

이전 페이지 이동 가능 여부

result.next

Boolean

다음 페이지 이동 가능 여부

result.first

Boolean

첫 번째 페이지 여부

result.last

Boolean

마지막 페이지 여부

2.8. 내가 작성한 댓글 조회

요청

GET /api/members/profile/comments?page=1 HTTP/1.1
Authorization: Bearer access-token
Parameter Description

page

페이지 번호

Name Description

Authorization

액세스 토큰

응답

200 OK
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
  "message" : "success",
  "status" : 200,
  "result" : {
    "comments" : [ {
      "commentNum" : 1,
      "writer" : "작성자",
      "content" : "댓글",
      "createdAt" : "2024.06.17"
    } ],
    "pageNumber" : 1,
    "totalPages" : 1,
    "totalElements" : 1,
    "prev" : false,
    "next" : false,
    "first" : true,
    "last" : true
  }
}
Path Type Description

message

String

요청 성공/실패 여부

status

Number

Http 상태 코드

result

Object

요청 결과 데이터

result.comments

Array

댓글 목록

result.comments[].commentNum

Number

댓글 번호

result.comments[].writer

String

댓글 작성자

result.comments[].content

String

댓글 내용

result.comments[].createdAt

String

댓글 작성일

result.pageNumber

Number

페이지 번호

result.totalPages

Number

전체 페이지 개수

result.totalElements

Number

전체 게시글 개수

result.prev

Boolean

이전 페이지 이동 가능 여부

result.next

Boolean

다음 페이지 이동 가능 여부

result.first

Boolean

첫 번째 페이지 여부

result.last

Boolean

마지막 페이지 여부

2.9. 닉네임 변경

요청

GET /api/members/profile/nickname HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer access-token

{
  "nickname" : "newNickname"
}
Name Description

Authorization

액세스 토큰

Path Type Description

nickname

String

변경할 닉네임

응답

200 OK
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
  "message" : "success",
  "status" : 200,
  "result" : null
}
400 Bad Request
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8

{
  "message" : "fail",
  "status" : 400,
  "result" : {
    "timeStamp" : "2024-05-05T14:21:57.765966274",
    "path" : "/api/members/profile/nickname",
    "error" : {
      "code" : "E400001",
      "message" : "입력값이 잘못되었습니다.",
      "fieldErrors" : [ {
        "field" : "nickname",
        "input" : "",
        "message" : "닉네임을 입력해 주세요."
      } ]
    }
  }
}
409 Conflict
HTTP/1.1 409 Conflict
Content-Type: application/json;charset=UTF-8

{
  "message" : "fail",
  "status" : 409,
  "result" : {
    "timeStamp" : "2024-05-05T14:21:56.985299328",
    "path" : "/api/members/profile/nickname",
    "error" : {
      "code" : "E409001",
      "message" : "사용 중인 닉네임입니다.",
      "fieldErrors" : [ ]
    }
  }
}

2.10. 비밀번호 변경

요청

PUT /api/members/profile/password HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer access-token

{
  "curPassword" : "12345678",
  "newPassword" : "87654321",
  "newPasswordConfirm" : "87654321"
}
Name Description

Authorization

액세스 토큰

Path Type Description

curPassword

String

현재 사용 중인 비밀번호

newPassword

String

새로운 비밀번호

newPasswordConfirm

String

새로운 비밀번호 확인

응답

200 OK
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
  "message" : "success",
  "status" : 200,
  "result" : null
}
400 Bad Request
값을 입력하지 않는 경우
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8

{
  "message" : "fail",
  "status" : 400,
  "result" : {
    "timeStamp" : "2024-05-05T14:21:57.117199276",
    "path" : "/api/members/profile/password",
    "error" : {
      "code" : "E400001",
      "message" : "입력값이 잘못되었습니다.",
      "fieldErrors" : [ {
        "field" : "newPassword",
        "input" : "",
        "message" : "새로운 비밀번호를 입력해 주세요."
      } ]
    }
  }
}
현재 사용 중인 비밀번호 or 변경할 비밀번호가 일치하지 않는 경우
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8

{
  "message" : "fail",
  "status" : 400,
  "result" : {
    "timeStamp" : "2024-05-05T14:21:56.726772837",
    "path" : "/api/members/profile/password",
    "error" : {
      "code" : "E400002",
      "message" : "비밀번호가 일치하지 않습니다.",
      "fieldErrors" : [ ]
    }
  }
}

3. 게시글

3.1. 게시글 작성

요청

POST /api/posts/write HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer access-token

{
  "title" : "제목",
  "content" : "내용"
}
Name Description

Authorization

액세스 토큰

Path Type Description

title

String

제목

content

String

내용

응답

200 OK
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
  "message" : "success",
  "status" : 200,
  "result" : null
}
400 Bad Request
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8

{
  "message" : "fail",
  "status" : 400,
  "result" : {
    "timeStamp" : "2024-05-05T14:22:00.408158791",
    "path" : "/api/posts/write",
    "error" : {
      "code" : "E400001",
      "message" : "입력값이 잘못되었습니다.",
      "fieldErrors" : [ {
        "field" : "title",
        "input" : "",
        "message" : "제목을 입력해 주세요."
      } ]
    }
  }
}

3.2. 게시글 상세조회

요청

GET /api/posts/1 HTTP/1.1
Table 3. /api/posts/{postNumber}
Parameter Description

postNumber

게시글 번호

응답

200 OK
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
  "message" : "success",
  "status" : 200,
  "result" : {
    "postNumber" : 1,
    "title" : "제목",
    "writer" : "yoonkun",
    "content" : "내용",
    "createdAt" : "2024.06.17"
  }
}
Path Type Description

message

String

요청 성공/실패 여부

status

Number

Http 상태 코드

result

Object

요청 결과 데이터

result.postNumber

Number

게시글 번호

result.title

String

게시글 제목

result.writer

String

게시글 작성자

result.content

String

게시글 내용

result.createdAt

String

게시글 작성일

404 Not Found
HTTP/1.1 404 Not Found
Content-Type: application/json;charset=UTF-8

{
  "message" : "fail",
  "status" : 404,
  "result" : {
    "timeStamp" : "2024-05-05T14:22:00.780615015",
    "path" : "/api/posts/1",
    "error" : {
      "code" : "E404002",
      "message" : "게시글을 찾을 수 없습니다.",
      "fieldErrors" : [ ]
    }
  }
}

3.3. 게시글 목록조회

요청

GET /api/posts?page=1 HTTP/1.1
Parameter Description

page

페이지 번호

응답

200 OK
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
  "message" : "success",
  "status" : 200,
  "result" : {
    "posts" : [ {
      "postNumber" : 1,
      "title" : "제목",
      "writer" : "작성자",
      "commentCount" : 5,
      "createdAt" : "2024.06.17"
    } ],
    "pageNumber" : 1,
    "totalPages" : 1,
    "totalElements" : 1,
    "prev" : false,
    "next" : false,
    "first" : true,
    "last" : true
  }
}
Path Type Description

message

String

요청 성공/실패 여부

status

Number

Http 상태 코드

result

Object

요청 결과 데이터

result.posts

Array

게시글 목록

result.posts[].postNumber

Number

게시글 번호

result.posts[].title

String

게시글 제목

result.posts[].writer

String

게시글 제목

result.posts[].commentCount

Number

댓글 개수

result.posts[].createdAt

String

게시글 제목

result.pageNumber

Number

페이지 번호

result.totalPages

Number

전체 페이지 개수

result.totalElements

Number

전체 게시글 개수

result.prev

Boolean

이전 페이지 이동 가능 여부

result.next

Boolean

다음 페이지 이동 가능 여부

result.first

Boolean

첫 번째 페이지 여부

result.last

Boolean

마지막 페이지 여부

3.4. 게시글 수정

요청

PUT /api/posts/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer access-token

{
  "title" : "제목",
  "content" : "내용"
}
Table 4. /api/posts/{postNumber}
Parameter Description

postNumber

게시글 번호

Name Description

Authorization

액세스 토큰

응답

200 OK
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
  "message" : "success",
  "status" : 200,
  "result" : null
}
403 Forbidden
HTTP/1.1 403 Forbidden
Content-Type: application/json;charset=UTF-8

{
  "message" : "fail",
  "status" : 403,
  "result" : {
    "timeStamp" : "2024-05-05T14:22:00.607714809",
    "path" : "/api/posts/1",
    "error" : {
      "code" : "E403001",
      "message" : "게시글 수정은 작성자만 할 수 있습니다.",
      "fieldErrors" : [ ]
    }
  }
}
404 Not Found
HTTP/1.1 404 Not Found
Content-Type: application/json;charset=UTF-8

{
  "message" : "fail",
  "status" : 404,
  "result" : {
    "timeStamp" : "2024-05-05T14:22:01.052009045",
    "path" : "/api/posts/1",
    "error" : {
      "code" : "E404002",
      "message" : "게시글을 찾을 수 없습니다.",
      "fieldErrors" : [ ]
    }
  }
}

3.5. 게시글 삭제

요청

DELETE /api/posts/1 HTTP/1.1
Authorization: Bearer access-token
Table 5. /api/posts/{postNumber}
Parameter Description

postNumber

게시글 번호

Name Description

Authorization

액세스 토큰

응답

200 OK
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
  "message" : "success",
  "status" : 200,
  "result" : null
}
403 Forbidden
HTTP/1.1 403 Forbidden
Content-Type: application/json;charset=UTF-8

{
  "message" : "fail",
  "status" : 403,
  "result" : {
    "timeStamp" : "2024-05-05T14:22:00.724312671",
    "path" : "/api/posts/1",
    "error" : {
      "code" : "E403002",
      "message" : "게시글 삭제는 작성자만 할 수 있습니다.",
      "fieldErrors" : [ ]
    }
  }
}
404 Not Found
HTTP/1.1 404 Not Found
Content-Type: application/json;charset=UTF-8

{
  "message" : "fail",
  "status" : 404,
  "result" : {
    "timeStamp" : "2024-05-05T14:22:00.548903916",
    "path" : "/api/posts/1",
    "error" : {
      "code" : "E404002",
      "message" : "게시글을 찾을 수 없습니다.",
      "fieldErrors" : [ ]
    }
  }
}

3.6. 게시글 검색

요청

GET /api/posts/search?page=1&type=title&keyword=%EC%A0%9C%EB%AA%A9 HTTP/1.1
Parameter Description

page

페이지 번호

type

검색 기준

keyword

검색 단어

응답

200 OK
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
  "message" : "success",
  "status" : 200,
  "result" : {
    "posts" : [ {
      "postNumber" : 1,
      "title" : "제목",
      "writer" : "작성자",
      "commentCount" : 5,
      "createdAt" : "2024.06.17"
    } ],
    "pageNumber" : 1,
    "totalPages" : 1,
    "totalElements" : 1,
    "prev" : false,
    "next" : false,
    "first" : true,
    "last" : true
  }
}
Path Type Description

message

String

요청 성공/실패 여부

status

Number

Http 상태 코드

result

Object

요청 결과 데이터

result.posts

Array

게시글 목록

result.posts[].postNumber

Number

게시글 번호

result.posts[].title

String

게시글 제목

result.posts[].writer

String

게시글 제목

result.posts[].commentCount

Number

댓글 개수

result.posts[].createdAt

String

게시글 제목

result.pageNumber

Number

페이지 번호

result.totalPages

Number

전체 페이지 개수

result.totalElements

Number

전체 게시글 개수

result.prev

Boolean

이전 페이지 이동 가능 여부

result.next

Boolean

다음 페이지 이동 가능 여부

result.first

Boolean

첫 번째 페이지 여부

result.last

Boolean

마지막 페이지 여부

4. 댓글

4.1. 댓글 작성

요청

POST /api/posts/1/comments/write HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer access-token

{
  "content" : "댓글"
}
Table 6. /api/posts/{postNumber}/comments/write
Parameter Description

postNumber

게시글 번호

Name Description

Authorization

액세스 토큰

Path Type Description

content

String

댓글

응답

200 OK
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
  "message" : "success",
  "status" : 200,
  "result" : null
}
404 Not Found
HTTP/1.1 404 Not Found
Content-Type: application/json;charset=UTF-8

{
  "message" : "fail",
  "status" : 404,
  "result" : {
    "timeStamp" : "2024-05-05T14:21:46.667756325",
    "path" : "/api/posts/1/comments/write",
    "error" : {
      "code" : "E404002",
      "message" : "게시글을 찾을 수 없습니다.",
      "fieldErrors" : [ ]
    }
  }
}

4.2. 댓글 목록조회

요청

GET /api/posts/1/comments?page=1 HTTP/1.1
Parameter Description

page

페이지 번호

응답

200 OK
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
  "message" : "success",
  "status" : 200,
  "result" : {
    "comments" : [ {
      "commentNum" : 1,
      "writer" : "작성자",
      "content" : "댓글",
      "createdAt" : "2024.06.17"
    } ],
    "pageNumber" : 1,
    "totalPages" : 1,
    "totalElements" : 1,
    "prev" : false,
    "next" : false,
    "first" : true,
    "last" : true
  }
}
Path Type Description

message

String

요청 성공/실패 여부

status

Number

Http 상태 코드

result

Object

요청 결과 데이터

result.comments

Array

댓글 목록

result.comments[].commentNum

Number

댓글 번호

result.comments[].writer

String

댓글 작성자

result.comments[].content

String

댓글 내용

result.comments[].createdAt

String

댓글 작성일

result.pageNumber

Number

페이지 번호

result.totalPages

Number

전체 페이지 개수

result.totalElements

Number

전체 게시글 개수

result.prev

Boolean

이전 페이지 이동 가능 여부

result.next

Boolean

다음 페이지 이동 가능 여부

result.first

Boolean

첫 번째 페이지 여부

result.last

Boolean

마지막 페이지 여부

4.3. 댓글 수정

요청

PUT /api/posts/1/comments/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer acces-token

{
  "content" : "댓글"
}
Table 7. /api/posts/{postNumber}/comments/{commentNumber}
Parameter Description

postNumber

게시글 번호

commentNumber

댓글 번호

Name Description

Authorization

액세스 토큰

Path Type Description

content

String

수정 댓글

응답

200 OK
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
  "message" : "success",
  "status" : 200,
  "result" : null
}
400 Bad Request
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8

{
  "message" : "fail",
  "status" : 400,
  "result" : {
    "timeStamp" : "2024-05-05T14:21:46.18062239",
    "path" : "/api/posts/1/comments/1",
    "error" : {
      "code" : "E400001",
      "message" : "입력값이 잘못되었습니다.",
      "fieldErrors" : [ {
        "field" : "content",
        "input" : "",
        "message" : "내용을 입력해 주세요."
      } ]
    }
  }
}
403 Forbidden
HTTP/1.1 403 Forbidden
Content-Type: application/json;charset=UTF-8

{
  "message" : "fail",
  "status" : 403,
  "result" : {
    "timeStamp" : "2024-05-05T14:21:46.027514768",
    "path" : "/api/posts/1/comments/1",
    "error" : {
      "code" : "E403003",
      "message" : "댓글 수정은 작성자만 할 수 있습니다.",
      "fieldErrors" : [ ]
    }
  }
}
404 Not Found
HTTP/1.1 404 Not Found
Content-Type: application/json;charset=UTF-8

{
  "message" : "fail",
  "status" : 404,
  "result" : {
    "timeStamp" : "2024-05-05T14:21:45.864045843",
    "path" : "/api/posts/1/comments/1",
    "error" : {
      "code" : "E404003",
      "message" : "댓글을 찾을 수 없습니다.",
      "fieldErrors" : [ ]
    }
  }
}

4.4. 댓글 삭제

요청

DELETE /api/posts/1/comments/1 HTTP/1.1
Authorization: Bearer access-token
Table 8. /api/posts/{postNumber}/comments/{commentNumber}
Parameter Description

postNumber

게시글 번호

commentNumber

댓글 번호

Name Description

Authorization

액세스 토큰

응답

200 OK
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
  "message" : "success",
  "status" : 200,
  "result" : null
}
403 Forbidden
HTTP/1.1 403 Forbidden
Content-Type: application/json;charset=UTF-8

{
  "message" : "fail",
  "status" : 403,
  "result" : {
    "timeStamp" : "2024-05-05T14:21:44.791125997",
    "path" : "/api/posts/1/comments/1",
    "error" : {
      "code" : "E403004",
      "message" : "댓글 삭제는 작성자만 할 수 있습니다.",
      "fieldErrors" : [ ]
    }
  }
}
404 Not Found
HTTP/1.1 404 Not Found
Content-Type: application/json;charset=UTF-8

{
  "message" : "fail",
  "status" : 404,
  "result" : {
    "timeStamp" : "2024-05-05T14:21:47.031844219",
    "path" : "/api/posts/1/comments/1",
    "error" : {
      "code" : "E404003",
      "message" : "댓글을 찾을 수 없습니다.",
      "fieldErrors" : [ ]
    }
  }
}

5. 토큰

5.1. 액세스 토큰 재발급

요청

POST /api/tokens/reissue HTTP/1.1
Authorization: Bearer refresh-token
Content-Type: application/x-www-form-urlencoded
Name Description

Authorization

리프레시 토큰

응답

200 OK
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
  "message" : "success",
  "status" : 200,
  "result" : "new-access-token"
}
Path Type Description

message

String

요청 성공/실패 여부

status

Number

Http 상태 코드

result

String

요청 결과 데이터