소개
핀업 API 문서 입니다.
Member API
닉네임 생성
Curl request
$ curl 'http://localhost:8080/api/members/nickname' -i -X GET \
-H 'Content-Type: text/plain'
HTTP request
GET /api/members/nickname HTTP/1.1
Content-Type: text/plain
Host: localhost:8080
HTTP response
HTTP/1.1 200 OK
Content-Type: text/plain;charset=UTF-8
Content-Length: 17
generatedNickname
닉네임 수정
Curl request
$ curl 'http://localhost:8080/api/members' -i -X PATCH \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer testToken' \
-d '{"name":"test","email":"test@naver.com","nickname":"updatedTestNickname","providerType":"NAVER"}'
Request fields
Path | Type | Description |
---|---|---|
|
|
이름 |
|
|
이메일 |
|
|
변경할 닉네임 |
|
|
OAuth 제공자 |
HTTP request
PATCH /api/members HTTP/1.1
Content-Type: application/json
Authorization: Bearer testToken
Content-Length: 96
Host: localhost:8080
{"name":"test","email":"test@naver.com","nickname":"updatedTestNickname","providerType":"NAVER"}
HTTP response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 60
{"code":200,"message":"닉네임이 변경되었습니다."}
Response fields
Path | Type | Description |
---|---|---|
|
|
응답 코드 |
|
|
닉네임 변경 결과 메시지 |
회원 탈퇴
Curl request
$ curl 'http://localhost:8080/api/members' -i -X DELETE \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer testToken' \
-d '{"name":"test","email":"test@naver.com","nickname":"updatedTestNickname","providerType":"NAVER"}'
Request fields
Path | Type | Description |
---|---|---|
|
|
이름 |
|
|
이메일 |
|
|
닉네임 |
|
|
OAuth 제공자 |
HTTP request
DELETE /api/members HTTP/1.1
Content-Type: application/json
Authorization: Bearer testToken
Content-Length: 96
Host: localhost:8080
{"name":"test","email":"test@naver.com","nickname":"updatedTestNickname","providerType":"NAVER"}
HTTP response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 83
{"code":200,"message":"탈퇴되었습니다. 이용해주셔서 감사합니다."}
Response fields
Path | Type | Description |
---|---|---|
|
|
응답 코드 |
|
|
탈퇴 결과 메시지 |
로그아웃
Curl request
$ curl 'http://localhost:8080/api/members/logout' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer testToken'
HTTP request
POST /api/members/logout HTTP/1.1
Content-Type: application/json
Authorization: Bearer testToken
Host: localhost:8080
HTTP response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 63
{"code":200,"message":"로그아웃에 성공하였습니다."}
Response fields
Path | Type | Description |
---|---|---|
|
|
응답 코드 |
|
|
로그아웃 결과 메시지 |
팝업스토어 API
전체 조회
Curl request
$ curl 'http://localhost:8080/api/stores' -i -X GET
HTTP request
GET /api/stores HTTP/1.1
Host: localhost:8080
HTTP response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 2047
[ {
"id" : 1,
"name" : "store",
"description" : "description",
"status" : "RESOLVED",
"startDate" : "2025-07-27",
"endDate" : "2025-08-06",
"websiteUrl" : "",
"snsUrl" : "https://instgram.com/test",
"viewCount" : 0,
"category" : {
"id" : 1,
"name" : "뷰티",
"createdAt" : "2025-07-27T07:11:13.863366642",
"updatedAt" : null
},
"location" : {
"id" : 1,
"name" : "서울 송파구 올림픽로 300",
"zonecode" : "05551",
"sido" : "서울",
"sigungu" : "송파구",
"latitude" : 37.513713,
"longitude" : 127.104302,
"address" : "서울 송파구 올림픽로 300",
"addressDetail" : ""
},
"operatingHours" : [ {
"days" : "월~금",
"startTime" : "07:11:13.863379236",
"endTime" : "17:11:13.863382051"
} ],
"storeImages" : [ {
"id" : 1,
"storeId" : 1,
"imageUrl" : "http://127.0.0.1:4566/pinup/store/image1.png",
"isThumbnail" : true
} ],
"createdAt" : "2025-07-27T07:11:13.863390687",
"updatedAt" : null
}, {
"id" : 1,
"name" : "store",
"description" : "description",
"status" : "RESOLVED",
"startDate" : "2025-07-27",
"endDate" : "2025-08-06",
"websiteUrl" : "",
"snsUrl" : "https://instgram.com/test",
"viewCount" : 0,
"category" : {
"id" : 1,
"name" : "뷰티",
"createdAt" : "2025-07-27T07:11:13.863395887",
"updatedAt" : null
},
"location" : {
"id" : 1,
"name" : "서울 송파구 올림픽로 300",
"zonecode" : "05551",
"sido" : "서울",
"sigungu" : "송파구",
"latitude" : 37.513713,
"longitude" : 127.104302,
"address" : "서울 송파구 올림픽로 300",
"addressDetail" : ""
},
"operatingHours" : [ {
"days" : "월~금",
"startTime" : "07:11:13.863398942",
"endTime" : "17:11:13.863400295"
} ],
"storeImages" : [ {
"id" : 1,
"storeId" : 1,
"imageUrl" : "http://127.0.0.1:4566/pinup/store/image1.png",
"isThumbnail" : true
} ],
"createdAt" : "2025-07-27T07:11:13.86340299",
"updatedAt" : null
} ]
Response fields
Path | Type | Description |
---|---|---|
|
|
팝업스토어 아이디 |
|
|
팝업스토어명 |
|
|
팝업스토어 설명 |
|
|
팝업스토어 상태 |
|
|
팝업스토어 시작날짜 |
|
|
팝업스토어 종료날짜 |
|
|
팝업스토어 참고 홈페이지 주소 |
|
|
팝업스토어 참고 SNS 주소 |
|
|
팝업스토어 조회수 |
|
|
팝업스토어 카테고리 아이디 |
|
|
팝업스토어 카테고리명 |
|
|
팝업스토어 카테고리 등록날짜 |
|
|
팝업스토어 카테고리 수정날짜 |
|
|
위치 아이디 |
|
|
위치명 |
|
|
위치 우편번호 |
|
|
위치 시/도 |
|
|
위치 시/군/구 |
|
|
위치 위도 |
|
|
위치 경도 |
|
|
위치 주소 |
|
|
위치 상세주소 |
|
|
팝업스토어 운영 날짜 |
|
|
팝업스토어 운영 오픈시간 |
|
|
팝업스토어 운영 마감시간 |
|
|
팝업스토어 이미지 아이디 |
|
|
팝업스토어 아이디 |
|
|
팝업스토어 이미지 URL |
|
|
팝업스토어 썸네일 이미지 여부 |
|
|
팝업스토어 등록날짜 |
|
|
팝업스토어 수정날짜 |
요약 썸네일 조회
Curl request
$ curl 'http://localhost:8080/api/stores/summary?limit=2' -i -X GET
HTTP request
GET /api/stores/summary?limit=2 HTTP/1.1
Host: localhost:8080
HTTP response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 490
[ {
"id" : 1,
"name" : "store",
"status" : "RESOLVED",
"startDate" : "2025-07-27",
"endDate" : "2025-08-06",
"categoryName" : "뷰티",
"sigungu" : "송파구",
"thumbnailImage" : "http://127.0.0.1:4566/pinup/store/image1.png"
}, {
"id" : 1,
"name" : "store",
"status" : "RESOLVED",
"startDate" : "2025-07-27",
"endDate" : "2025-08-06",
"categoryName" : "뷰티",
"sigungu" : "송파구",
"thumbnailImage" : "http://127.0.0.1:4566/pinup/store/image1.png"
} ]
Response fields
Path | Type | Description |
---|---|---|
|
|
팝업스토어 아이디 |
|
|
팝업스토어명 |
|
|
팝업스토어 상태 |
|
|
팝업스토어 시작날짜 |
|
|
팝업스토어 종료날짜 |
|
|
팝업스토어 카테고리명 |
|
|
팝업스토어 위치 시/군/구 |
|
|
팝업스토어 썸네일 이미지 URL |
단건 조회
Curl request
$ curl 'http://localhost:8080/api/stores/1' -i -X GET
HTTP request
GET /api/stores/1 HTTP/1.1
Host: localhost:8080
HTTP response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1020
{
"id" : 1,
"name" : "store",
"description" : "description",
"status" : "RESOLVED",
"startDate" : "2025-07-27",
"endDate" : "2025-08-06",
"websiteUrl" : "",
"snsUrl" : "https://instgram.com/test",
"viewCount" : 0,
"category" : {
"id" : 1,
"name" : "뷰티",
"createdAt" : "2025-07-27T07:11:13.992823386",
"updatedAt" : null
},
"location" : {
"id" : 1,
"name" : "서울 송파구 올림픽로 300",
"zonecode" : "05551",
"sido" : "서울",
"sigungu" : "송파구",
"latitude" : 37.513713,
"longitude" : 127.104302,
"address" : "서울 송파구 올림픽로 300",
"addressDetail" : ""
},
"operatingHours" : [ {
"days" : "월~금",
"startTime" : "07:11:13.992834807",
"endTime" : "17:11:13.992837573"
} ],
"storeImages" : [ {
"id" : 1,
"storeId" : 1,
"imageUrl" : "http://127.0.0.1:4566/pinup/store/image1.png",
"isThumbnail" : true
} ],
"createdAt" : "2025-07-27T07:11:13.99284674",
"updatedAt" : null
}
Response fields
Path | Type | Description |
---|---|---|
|
|
팝업스토어 아이디 |
|
|
팝업스토어명 |
|
|
팝업스토어 설명 |
|
|
팝업스토어 상태 |
|
|
팝업스토어 시작날짜 |
|
|
팝업스토어 종료날짜 |
|
|
팝업스토어 참고 홈페이지 주소 |
|
|
팝업스토어 참고 SNS 주소 |
|
|
팝업스토어 조회수 |
|
|
팝업스토어 카테고리 아이디 |
|
|
팝업스토어 카테고리명 |
|
|
팝업스토어 카테고리 등록날짜 |
|
|
팝업스토어 카테고리 수정날짜 |
|
|
위치 아이디 |
|
|
위치명 |
|
|
위치 우편번호 |
|
|
위치 시/도 |
|
|
위치 시/군/구 |
|
|
위치 위도 |
|
|
위치 경도 |
|
|
위치 주소 |
|
|
위치 상세주소 |
|
|
팝업스토어 운영 날짜 |
|
|
팝업스토어 운영 오픈시간 |
|
|
팝업스토어 운영 마감시간 |
|
|
팝업스토어 이미지 아이디 |
|
|
팝업스토어 아이디 |
|
|
팝업스토어 이미지 URL |
|
|
팝업스토어 썸네일 이미지 여부 |
|
|
팝업스토어 등록날짜 |
|
|
팝업스토어 수정날짜 |
저장
Curl request
$ curl 'http://localhost:8080/api/stores' -i -X POST \
-H 'Content-Type: multipart/form-data' \
-F 'images=@image.jpeg;type=image/jpeg' \
-F 'storeRequest=@storeRequest.json;type=application/json'
HTTP request
POST /api/stores HTTP/1.1
Content-Type: multipart/form-data; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Host: localhost:8080
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=images; filename=image.jpeg
Content-Type: image/jpeg
data
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=storeRequest; filename=storeRequest.json
Content-Type: application/json
{"name":"store","description":"description","startDate":"2025-07-27","endDate":"2025-08-06","websiteUrl":"","snsUrl":"","thumbnailIndex":0,"categoryId":1,"locationId":1,"operatingHours":[{"days":"월~금","startTime":"07:11:13.760843526","endTime":"17:11:13.760847984"}]}
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
Request parts
Part | Description |
---|---|
|
이미지들 |
|
팝업스토어 등록 정보 |
Request part-storerequest-fields
Path | Type | Description |
---|---|---|
|
|
팝업스토어명 |
|
|
팝업스토어 상세설명 |
|
|
팝업스토어 시작날짜 |
|
|
팝업스토어 종료날짜 |
|
|
팝업스토어 참고 홈페이지 주소 |
|
|
팝업스토어 참고 SNS 주소 |
|
|
썸네일 선택 인덱스 |
|
|
팝업스토어 카테고리 아이디 |
|
|
위치 아이디 |
|
|
팝업스토어 운영 요일 |
|
|
팝업스토어 운영 오픈 시간 |
|
|
팝업스토어 운영 마감 시간 |
HTTP response
HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 1020
{
"id" : 1,
"name" : "store",
"description" : "description",
"status" : "RESOLVED",
"startDate" : "2025-07-27",
"endDate" : "2025-08-06",
"websiteUrl" : "",
"snsUrl" : "https://instgram.com/test",
"viewCount" : 0,
"category" : {
"id" : 1,
"name" : "뷰티",
"createdAt" : "2025-07-27T07:11:13.76112432",
"updatedAt" : null
},
"location" : {
"id" : 1,
"name" : "서울 송파구 올림픽로 300",
"zonecode" : "05551",
"sido" : "서울",
"sigungu" : "송파구",
"latitude" : 37.513713,
"longitude" : 127.104302,
"address" : "서울 송파구 올림픽로 300",
"addressDetail" : ""
},
"operatingHours" : [ {
"days" : "월~금",
"startTime" : "07:11:13.761133588",
"endTime" : "17:11:13.761135041"
} ],
"storeImages" : [ {
"id" : 1,
"storeId" : 1,
"imageUrl" : "http://127.0.0.1:4566/pinup/store/image1.png",
"isThumbnail" : true
} ],
"createdAt" : "2025-07-27T07:11:13.761142074",
"updatedAt" : null
}
Response fields
Path | Type | Description |
---|---|---|
|
|
팝업스토어 아이디 |
|
|
팝업스토어명 |
|
|
팝업스토어 설명 |
|
|
팝업스토어 상태 |
|
|
팝업스토어 시작날짜 |
|
|
팝업스토어 종료날짜 |
|
|
팝업스토어 참고 홈페이지 주소 |
|
|
팝업스토어 참고 SNS 주소 |
|
|
팝업스토어 조회수 |
|
|
팝업스토어 카테고리 아이디 |
|
|
팝업스토어 카테고리명 |
|
|
팝업스토어 카테고리 등록날짜 |
|
|
팝업스토어 카테고리 수정날짜 |
|
|
위치 아이디 |
|
|
위치명 |
|
|
위치 우편번호 |
|
|
위치 시/도 |
|
|
위치 시/군/구 |
|
|
위치 위도 |
|
|
위치 경도 |
|
|
위치 주소 |
|
|
위치 상세주소 |
|
|
팝업스토어 운영 날짜 |
|
|
팝업스토어 운영 오픈시간 |
|
|
팝업스토어 운영 마감시간 |
|
|
팝업스토어 이미지 아이디 |
|
|
팝업스토어 아이디 |
|
|
팝업스토어 이미지 URL |
|
|
팝업스토어 썸네일 이미지 여부 |
|
|
팝업스토어 등록날짜 |
|
|
팝업스토어 수정날짜 |
수정
Curl request
$ curl 'http://localhost:8080/api/stores/1' -i -X PATCH \
-H 'Content-Type: multipart/form-data' \
-F 'images=@image.jpeg;type=image/jpeg' \
-F 'request=@request.json;type=application/json'
HTTP request
PATCH /api/stores/1 HTTP/1.1
Content-Type: multipart/form-data; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Host: localhost:8080
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=images; filename=image.jpeg
Content-Type: image/jpeg
data
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=request; filename=request.json
Content-Type: application/json
{"name":"store","description":"description","startDate":"2025-07-27","endDate":"2025-08-06","websiteUrl":"","snsUrl":"","thumbnailId":1,"thumbnailIndex":null,"categoryId":1,"locationId":1,"operatingHours":[{"days":"월~금","startTime":"07:11:13.704496589","endTime":"17:11:13.704500165"}],"deletedImageIds":[1]}
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
Path parameters
Parameter | Description |
---|---|
|
팝업스토어 ID |
Request parts
Part | Description |
---|---|
|
이미지들 |
|
팝업스토어 수정 정보 |
Request part-request-fields
Path | Type | Description |
---|---|---|
|
|
팝업스토어명 |
|
|
팝업스토어 상세설명 |
|
|
팝업스토어 시작날짜 |
|
|
팝업스토어 종료날짜 |
|
|
팝업스토어 참고 홈페이지 주소 |
|
|
팝업스토어 참고 SNS 주소 |
|
|
팝업스토어 기존 아이디 |
|
|
썸네일 선택 인덱스 |
|
|
팝업스토어 카테고리 아이디 |
|
|
위치 아이디 |
|
|
팝업스토어 운영 요일 |
|
|
팝업스토어 운영 오픈 시간 |
|
|
팝업스토어 운영 마감 시간 |
|
|
팝업스토어 기존 이미지 삭제 |
HTTP response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1021
{
"id" : 1,
"name" : "store",
"description" : "description",
"status" : "RESOLVED",
"startDate" : "2025-07-27",
"endDate" : "2025-08-06",
"websiteUrl" : "",
"snsUrl" : "https://instgram.com/test",
"viewCount" : 0,
"category" : {
"id" : 1,
"name" : "뷰티",
"createdAt" : "2025-07-27T07:11:13.706533367",
"updatedAt" : null
},
"location" : {
"id" : 1,
"name" : "서울 송파구 올림픽로 300",
"zonecode" : "05551",
"sido" : "서울",
"sigungu" : "송파구",
"latitude" : 37.513713,
"longitude" : 127.104302,
"address" : "서울 송파구 올림픽로 300",
"addressDetail" : ""
},
"operatingHours" : [ {
"days" : "월~금",
"startTime" : "07:11:13.706572931",
"endTime" : "17:11:13.706574754"
} ],
"storeImages" : [ {
"id" : 1,
"storeId" : 1,
"imageUrl" : "http://127.0.0.1:4566/pinup/store/image1.png",
"isThumbnail" : true
} ],
"createdAt" : "2025-07-27T07:11:13.706642591",
"updatedAt" : null
}
Response fields
Path | Type | Description |
---|---|---|
|
|
팝업스토어 아이디 |
|
|
팝업스토어명 |
|
|
팝업스토어 설명 |
|
|
팝업스토어 상태 |
|
|
팝업스토어 시작날짜 |
|
|
팝업스토어 종료날짜 |
|
|
팝업스토어 참고 홈페이지 주소 |
|
|
팝업스토어 참고 SNS 주소 |
|
|
팝업스토어 조회수 |
|
|
팝업스토어 카테고리 아이디 |
|
|
팝업스토어 카테고리명 |
|
|
팝업스토어 카테고리 등록날짜 |
|
|
팝업스토어 카테고리 수정날짜 |
|
|
위치 아이디 |
|
|
위치명 |
|
|
위치 우편번호 |
|
|
위치 시/도 |
|
|
위치 시/군/구 |
|
|
위치 위도 |
|
|
위치 경도 |
|
|
위치 주소 |
|
|
위치 상세주소 |
|
|
팝업스토어 운영 날짜 |
|
|
팝업스토어 운영 오픈시간 |
|
|
팝업스토어 운영 마감시간 |
|
|
팝업스토어 이미지 아이디 |
|
|
팝업스토어 아이디 |
|
|
팝업스토어 이미지 URL |
|
|
팝업스토어 썸네일 이미지 여부 |
|
|
팝업스토어 등록날짜 |
|
|
팝업스토어 수정날짜 |
삭제
Curl request
$ curl 'http://localhost:8080/api/stores/1' -i -X DELETE
HTTP request
DELETE /api/stores/1 HTTP/1.1
Host: localhost:8080
Path parameters
Parameter | Description |
---|---|
|
팝업스토어 ID |
HTTP response
HTTP/1.1 204 No Content
Location API
저장
Curl request
$ curl 'http://localhost:8080/api/locations' -i -X POST \
-H 'Content-Type: application/json' \
-d '{
"zonecode" : "05554",
"sido" : "서울",
"sigungu" : "송파구",
"address" : "서울 송파구 올림픽로 240",
"addressDetail" : "롯데백화점 잠실점 10F 웨이브 행사장 (LG전자 콜라보 행사)"
}'
HTTP request
POST /api/locations HTTP/1.1
Content-Type: application/json
Content-Length: 226
Host: localhost:8080
{
"zonecode" : "05554",
"sido" : "서울",
"sigungu" : "송파구",
"address" : "서울 송파구 올림픽로 240",
"addressDetail" : "롯데백화점 잠실점 10F 웨이브 행사장 (LG전자 콜라보 행사)"
}
Request fields
Path | Type | Description |
---|---|---|
|
|
우편번호 |
|
|
도/특별시/광역시 |
|
|
시/군/구 |
|
|
주소 |
|
|
상세 주소 |
HTTP response
HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 339
{
"id" : 1,
"name" : "서울 송파구 올림픽로 240",
"zonecode" : "05554",
"sido" : "서울",
"sigungu" : "송파구",
"latitude" : 37.51131,
"longitude" : 127.098142,
"address" : "서울 송파구 올림픽로 240",
"addressDetail" : "롯데백화점 잠실점 10F 웨이브 행사장 (LG전자 콜라보 행사)"
}
Response fields
Path | Type | Description |
---|---|---|
|
|
아이디 |
|
|
이름 |
|
|
우편번호 |
|
|
도/특별시/광역시 |
|
|
시/군/구 |
|
|
주소 |
|
|
상세 주소 |
|
|
x 좌표 |
|
|
y 좌표 |
수정
Curl request
$ curl 'http://localhost:8080/api/locations/1' -i -X PUT \
-H 'Content-Type: application/json' \
-d '{
"zonecode" : "05551",
"sido" : "서울",
"sigungu" : "송파구",
"address" : "서울 송파구 올림픽로 300",
"addressDetail" : "잠실 롯데월드몰 1층 아트리움"
}'
HTTP request
PUT /api/locations/1 HTTP/1.1
Content-Type: application/json
Content-Length: 189
Host: localhost:8080
{
"zonecode" : "05551",
"sido" : "서울",
"sigungu" : "송파구",
"address" : "서울 송파구 올림픽로 300",
"addressDetail" : "잠실 롯데월드몰 1층 아트리움"
}
Path parameters
Parameter | Description |
---|---|
|
위치 ID |
Request fields
Path | Type | Description |
---|---|---|
|
|
우편번호 |
|
|
도/특별시/광역시 |
|
|
시/군/구 |
|
|
주소 |
|
|
상세 주소 |
HTTP response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 339
{
"id" : 1,
"name" : "서울 송파구 올림픽로 300",
"zonecode" : "05554",
"sido" : "서울",
"sigungu" : "송파구",
"latitude" : 37.51131,
"longitude" : 127.098142,
"address" : "서울 송파구 올림픽로 240",
"addressDetail" : "롯데백화점 잠실점 10F 웨이브 행사장 (LG전자 콜라보 행사)"
}
Response fields
Path | Type | Description |
---|---|---|
|
|
아이디 |
|
|
이름 |
|
|
우편번호 |
|
|
도/특별시/광역시 |
|
|
시/군/구 |
|
|
주소 |
|
|
상세 주소 |
|
|
x 좌표 |
|
|
y 좌표 |
게시글 API
게시글 목록 조회
HTTP request
GET /api/post/list/10 HTTP/1.1
Host: localhost:8080
Path parameters
Parameter | Description |
---|---|
|
스토어 ID |
Request fields
Snippet request-fields not found for operation::post-get-list
HTTP response
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 723
[{"id":1,"storeId":10,"member":{"id":1,"name":null,"email":"test@example.com","nickname":"행복한돼지","providerType":"NAVER","role":"ROLE_USER","deleted":false},"title":"제목1","content":"내용1","thumbnail":"thumb1.jpg","createdAt":"2025-07-27T07:10:59.816943642","updatedAt":"2025-07-27T07:10:59.816943642","commentCount":3,"likedByCurrentUser":false},{"id":2,"storeId":10,"member":{"id":1,"name":null,"email":"test@example.com","nickname":"행복한돼지","providerType":"NAVER","role":"ROLE_USER","deleted":false},"title":"제목2","content":"내용2","thumbnail":"thumb2.jpg","createdAt":"2025-07-27T07:10:59.816943642","updatedAt":"2025-07-27T07:10:59.816943642","commentCount":1,"likedByCurrentUser":false}]
Response fields
Path | Type | Description |
---|---|---|
|
|
게시글 ID |
|
|
스토어 ID |
|
|
작성자 ID |
|
|
작성자 이름 (nullable) |
|
|
작성자 닉네임 |
|
|
작성자 이메일 |
|
|
OAuth 제공자 |
|
|
사용자 권한 |
|
|
탈퇴 여부 |
|
|
게시글 제목 |
|
|
게시글 내용 |
|
|
썸네일 이미지 URL |
|
|
작성일시 |
|
|
수정일시 |
|
|
댓글 수 |
|
|
현재 로그인한 사용자가 좋아요 눌렀는지 여부 |
게시글 상세 조회
HTTP request
GET /api/post/1 HTTP/1.1
Host: localhost:8080
Path parameters
Parameter | Description |
---|---|
|
게시글 ID |
Request fields
Snippet request-fields not found for operation::post-get-by-id
HTTP response
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 845
{"post":{"id":1,"storeId":10,"member":{"id":1,"name":null,"email":"test@example.com","nickname":"행복한돼지","providerType":"NAVER","role":"ROLE_USER","deleted":false},"title":"문서화 제목","content":"문서화 내용","thumbnail":"https://s3.bucket/thumb.jpg","createdAt":"2025-07-27T07:10:59.847331932","updatedAt":"2025-07-27T07:10:59.847331932","commentCount":1,"likedByCurrentUser":false},"comments":[{"id":100,"postId":1,"member":{"id":null,"createdAt":null,"updatedAt":null,"name":null,"email":"comment@example.com","nickname":"댓글유저","providerType":"NAVER","providerId":null,"role":"ROLE_USER","deleted":false},"content":"댓글 내용","createdAt":"2025-07-27T07:10:59.847331932"}],"postImages":[{"id":201,"postId":1,"s3Url":"https://s3.bucket/image1.jpg"},{"id":202,"postId":1,"s3Url":"https://s3.bucket/image2.jpg"}]}
Response fields
Path | Type | Description |
---|---|---|
|
|
게시글 정보 |
|
|
게시글 ID |
|
|
스토어 ID |
|
|
작성자 ID |
|
|
작성자 닉네임 |
|
|
작성자 이메일 |
|
|
OAuth 제공자 |
|
|
사용자 권한 |
|
|
탈퇴 여부 |
|
|
게시글 제목 |
|
|
게시글 내용 |
|
|
썸네일 이미지 URL |
|
|
게시글 생성일 |
|
|
게시글 수정일 |
|
|
댓글 수 |
|
|
댓글 목록 |
|
|
댓글 ID |
|
|
댓글이 속한 게시글 ID |
|
|
댓글 작성자 닉네임 |
|
|
댓글 내용 |
|
|
댓글 작성일 |
|
|
게시글 이미지 목록 |
|
|
이미지 ID |
|
|
이미지가 속한 게시글 ID |
|
|
이미지 S3 URL |
게시글 생성
요청은 multipart/form-data
형식으로 전송되며, 다음과 같은 파트로 구성됩니다:
-
post
: 게시글 생성 정보 (JSON) -
images
: 이미지 파일 배열
HTTP request
POST /api/post/create HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Accept: application/json
Host: localhost:8080
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=post; filename=post.json
Content-Type: application/json;charset=UTF-8
{"storeId":1,"title":"제목","content":"내용"}
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=images; filename=img1.jpg
Content-Type: image/jpeg
data1
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=images; filename=img2.jpg
Content-Type: image/jpeg
data2
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
Request parts
Part | Description |
---|---|
|
게시글 정보(JSON) |
|
이미지 파일들 (2장 이상) |
Request part-post-fields
Path | Type | Description |
---|---|---|
|
|
스토어 ID |
|
|
게시글 제목 |
|
|
게시글 내용 |
HTTP response
HTTP/1.1 201 Created
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 391
{"id":1,"storeId":null,"member":{"id":null,"name":"테스터","email":"test@naver.com","nickname":"행복한돼지","providerType":"NAVER","role":"ROLE_USER","deleted":false},"title":"제목","content":"내용","thumbnail":"https://example.com/thumbnail.jpg","createdAt":"2025-07-27T07:10:59.962804287","updatedAt":"2025-07-27T07:10:59.962806281","commentCount":0,"likedByCurrentUser":false}
Response fields
Path | Type | Description |
---|---|---|
|
|
게시글 ID |
|
|
스토어 ID |
|
|
작성자 ID (nullable) |
|
|
작성자 이름 |
|
|
작성자 이메일 |
|
|
작성자 닉네임 |
|
|
OAuth 제공자 |
|
|
사용자 역할 |
|
|
삭제 여부 |
|
|
제목 |
|
|
내용 |
|
|
썸네일 이미지 URL |
|
|
생성 일시 |
|
|
수정 일시 |
|
|
댓글 수 |
|
|
현재 로그인한 사용자가 좋아요 눌렀는지 여부 |
게시글 삭제
Path parameters
Parameter | Description |
---|---|
|
삭제할 게시글 ID |
게시글 수정
요청은 multipart/form-data
형식으로 전송되며, 다음과 같은 파트로 구성됩니다:
-
updatePostRequest
: 수정할 게시글 정보 (JSON) -
images
: 추가로 업로드할 이미지 파일들 (선택) -
imagesToDelete
: 쿼리 파라미터로 삭제할 이미지 파일 이름 목록 (선택)
HTTP request
PUT /api/post/1 HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Host: localhost:8080
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=updatePostRequest; filename=updatePostRequest.json
Content-Type: application/json;charset=UTF-8
{"title":"수정 제목","content":"수정 내용"}
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=images; filename=image1.jpg
Content-Type: image/jpeg
이미지데이터1
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=images; filename=image2.jpg
Content-Type: image/jpeg
이미지데이터2
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
Path parameters
Parameter | Description |
---|---|
|
수정할 게시글 ID |
Request parts
Part | Description |
---|---|
|
수정할 게시글 정보 (title, content 포함) |
|
추가로 업로드할 이미지 파일들 (0개 이상 가능) |
Request part-updatepostrequest-fields
Path | Type | Description |
---|---|---|
|
|
수정할 제목 |
|
|
수정할 내용 |
Query parameters
Parameter | Description |
---|---|
|
삭제할 이미지 파일 이름 목록 (선택) |
HTTP response
HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 412
{"id":1,"storeId":null,"member":{"id":null,"name":"테스터","email":"test@naver.com","nickname":"행복한돼지","providerType":"NAVER","role":"ROLE_USER","deleted":false},"title":"수정 제목","content":"수정 내용","thumbnail":"https://example.com/updated-thumbnail.jpg","createdAt":"2025-07-26T07:10:59.924697526","updatedAt":"2025-07-27T07:10:59.92471031","commentCount":0,"likedByCurrentUser":false}
Response fields
Path | Type | Description |
---|---|---|
|
|
게시글 ID |
|
|
스토어 ID |
|
|
작성자 ID |
|
|
작성자 이름 |
|
|
작성자 이메일 |
|
|
작성자 닉네임 |
|
|
소셜 로그인 제공자 |
|
|
회원 권한 |
|
|
회원 삭제 여부 |
|
|
제목 |
|
|
내용 |
|
|
썸네일 이미지 URL |
|
|
생성 일시 |
|
|
수정 일시 |
|
|
댓글 수 |
|
|
현재 로그인한 사용자가 좋아요 눌렀는지 여부 |
게시글 비활성화
HTTP request
PATCH /api/post/1/disable HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: localhost:8080
Content-Length: 102
_csrf=ij7rINqQ9QkM-E0yMxdOYVpHl5pc5WY17ulzQxcMRe5Ps_43vQaKE-v2zD0hz3xTVzp6VG5_uqM9g14Y19tGei87fI171s5W
Path parameters
Parameter | Description |
---|---|
|
비활성화할 게시글 ID |
Request fields
Snippet request-fields not found for operation::post-disable
HTTP response
HTTP/1.1 204 No Content
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Response fields
Snippet response-fields not found for operation::post-disable
PostLike API
게시글 목록 조회
HTTP request
POST /api/post-like/1 HTTP/1.1
Accept: application/json
Content-Type: application/x-www-form-urlencoded
Host: localhost:8080
Content-Length: 102
_csrf=DxeuKt9Zo80o-BG7yLhDg4NRUDRC3dThr6b0EcWksTTNX-tVOCCaEuo7kqgFySPeq5V3s7czfQ135LXMmsKQdKOX1VD6Z95g
Path parameters
Parameter | Description |
---|---|
|
좋아요를 누를 게시글 ID |
Request fields
Snippet request-fields not found for operation::post-like-toggle
HTTP response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 42
{"likeCount":15,"likedByCurrentUser":true}
Response fields
Path | Type | Description |
---|---|---|
|
|
총 좋아요 수 |
|
|
현재 사용자가 좋아요 눌렀는지 여부 |
댓글 API
댓글 생성
HTTP request
POST /api/comment/1?_csrf=WoEKAiVFuYKkNFkWu8gNFnjfzqv-2JbncpoK--_12jhjSrrXauUzMRxz3eeJAG0viOU5Lhq645LOvqLKQvg-ztfCuAkHL9vm HTTP/1.1
Content-Type: application/json
Accept: application/json
Content-Length: 27
Host: localhost:8080
{"content":"댓글 내용"}
Path parameters
Parameter | Description |
---|---|
|
댓글을 작성할 게시글 ID |
Request fields
Path | Type | Description |
---|---|---|
|
|
댓글 내용 |
HTTP response
HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 299
{"id":1,"postId":1,"member":{"id":null,"createdAt":null,"updatedAt":null,"name":"테스터","email":"test@naver.com","nickname":"행복한돼지","providerType":"NAVER","providerId":"naver123","role":"ROLE_USER","deleted":false},"content":"댓글 내용","createdAt":"2025-07-27T07:10:13.062432898"}
Response fields
Path | Type | Description |
---|---|---|
|
|
댓글 ID |
|
|
게시글 ID |
|
|
댓글 내용 |
|
|
작성 시각 |
|
|
작성자 ID |
|
|
작성자 닉네임 |
|
|
작성자 이름 |
|
|
작성자 이메일 |
|
|
소셜 로그인 제공자 |
|
|
소셜 제공자 식별자 |
|
|
작성자 권한 |
|
|
삭제 여부 |
|
|
작성자 생성 시각 |
|
|
작성자 수정 시각 |
댓글 삭제
HTTP request
DELETE /api/comment/1 HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: localhost:8080
Content-Length: 102
_csrf=COBAEcVO1F2EK_nD4V0tw9oGm_TXYQLvUR7Brp210ozp7CRYa9lwJf145TupSsn72HAZ87w2tpW2BDPCM3j5l6mCtL_c1BZt
Path parameters
Parameter | Description |
---|---|
|
삭제할 댓글 ID |
Request fields
Snippet request-fields not found for operation::comment-delete
HTTP response
HTTP/1.1 204 No Content
Response fields
Snippet response-fields not found for operation::comment-delete
공지사항 API
전체 조회
Curl request
$ curl 'http://localhost:8080/api/notices' -i -X GET
HTTP request
GET /api/notices HTTP/1.1
Host: localhost:8080
HTTP response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 656
[ {
"id" : 2,
"title" : "title 2",
"content" : "content 2",
"member" : {
"id" : 1,
"name" : "핀업",
"email" : "pinup0106@gmail.com",
"nickname" : "핀업",
"providerType" : "NAVER",
"role" : "ROLE_ADMIN",
"deleted" : false
},
"createdAt" : "2025-01-01T01:00:00",
"updatedAt" : null
}, {
"id" : 1,
"title" : "title 1",
"content" : "content 1",
"member" : {
"id" : 1,
"name" : "핀업",
"email" : "pinup0106@gmail.com",
"nickname" : "핀업",
"providerType" : "NAVER",
"role" : "ROLE_ADMIN",
"deleted" : false
},
"createdAt" : "2025-01-01T00:00:00",
"updatedAt" : null
} ]
Response fields
Path | Type | Description |
---|---|---|
|
|
공지사항 아이디 |
|
|
공지사항 제목 |
|
|
공지사항 내용 |
|
|
작성자 아이디 |
|
|
작성자 이름 |
|
|
작성자 이메일 |
|
|
작성자 닉네임 |
|
|
OAuth 제공자 |
|
|
작성자 권한 |
|
|
작성자 탈퇴 여부 |
|
|
공지사항 작성일 |
|
|
공지사항 수정일 |
단건 조회
Curl request
$ curl 'http://localhost:8080/api/notices/1' -i -X GET
HTTP request
GET /api/notices/1 HTTP/1.1
Host: localhost:8080
HTTP response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 321
{
"id" : 1,
"title" : "title",
"content" : "content",
"member" : {
"id" : 1,
"name" : "핀업",
"email" : "pinup0106@gmail.com",
"nickname" : "핀업",
"providerType" : "NAVER",
"role" : "ROLE_ADMIN",
"deleted" : false
},
"createdAt" : "2025-01-01T00:00:00",
"updatedAt" : null
}
Response fields
Path | Type | Description |
---|---|---|
|
|
공지사항 아이디 |
|
|
공지사항 제목 |
|
|
공지사항 내용 |
|
|
작성자 아이디 |
|
|
작성자 이름 |
|
|
작성자 이메일 |
|
|
작성자 닉네임 |
|
|
OAuth 제공자 |
|
|
작성자 권한 |
|
|
작성자 탈퇴 여부 |
|
|
공지사항 작성일 |
|
|
공지사항 수정일 |
존재하지 않는 ID로 조회
-
요청:
GET /api/notices/{noticeId}
-
설명: 존재하지 않는 공지사항 요청 시,
error
View 반환 -
Path Parameters:
noticeId
(Long): 조회할 공지사항의 ID -
View name:
error
-
Model attributes:
error
저장
Curl request
$ curl 'http://localhost:8080/api/notices' -i -X POST \
-H 'Content-Type: application/json' \
-d '{
"title" : "title 1",
"content" : "content 1"
}'
HTTP request
POST /api/notices HTTP/1.1
Content-Type: application/json
Content-Length: 52
Host: localhost:8080
{
"title" : "title 1",
"content" : "content 1"
}
Request fields
Path | Type | Description |
---|---|---|
|
|
공지사항 제목 |
|
|
공지사항 내용 |
HTTP response
HTTP/1.1 201 Created
저장 시 제목 누락 예외
Curl request
$ curl 'http://localhost:8080/api/notices' -i -X POST \
-H 'Content-Type: application/json' \
-d '{
"title" : null,
"content" : "content 1"
}'
HTTP request
POST /api/notices HTTP/1.1
Content-Type: application/json
Content-Length: 47
Host: localhost:8080
{
"title" : null,
"content" : "content 1"
}
HTTP response
HTTP/1.1 400 Bad Request
Content-Type: application/json
Content-Length: 144
{
"status" : 400,
"message" : "입력값이 유효하지 않습니다.",
"validation" : {
"title" : "제목을 입력하세요."
}
}
Response fields
Path | Type | Description |
---|---|---|
|
|
상태 코드 |
|
|
에러 메시지 |
|
|
제목은 필수 입력 필드입니다. |
저장 시 제목 길이 제한 예외
Curl request
$ curl 'http://localhost:8080/api/notices' -i -X POST \
-H 'Content-Type: application/json' \
-d '{
"title" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"content" : "content 1"
}'
HTTP request
POST /api/notices HTTP/1.1
Content-Type: application/json
Content-Length: 146
Host: localhost:8080
{
"title" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"content" : "content 1"
}
HTTP response
HTTP/1.1 400 Bad Request
Content-Type: application/json
Content-Length: 163
{
"status" : 400,
"message" : "입력값이 유효하지 않습니다.",
"validation" : {
"title" : "제목을 1~100자 이내로 입력하세요."
}
}
Response fields
Path | Type | Description |
---|---|---|
|
|
상태 코드 |
|
|
에러 메시지 |
|
|
제목은 1~100자 이내여야 합니다. |
저장 시 내용 누락 예외
Curl request
$ curl 'http://localhost:8080/api/notices' -i -X POST \
-H 'Content-Type: application/json' \
-d '{
"title" : "title 1",
"content" : null
}'
HTTP request
POST /api/notices HTTP/1.1
Content-Type: application/json
Content-Length: 45
Host: localhost:8080
{
"title" : "title 1",
"content" : null
}
HTTP response
HTTP/1.1 400 Bad Request
Content-Type: application/json
Content-Length: 146
{
"status" : 400,
"message" : "입력값이 유효하지 않습니다.",
"validation" : {
"content" : "내용을 입력하세요."
}
}
Response fields
Path | Type | Description |
---|---|---|
|
|
상태 코드 |
|
|
에러 메시지 |
|
|
내용은 필수 입력 필드입니다. |
수정
Curl request
$ curl 'http://localhost:8080/api/notices/1' -i -X PUT \
-H 'Content-Type: application/json' \
-d '{
"title" : "title 1",
"content" : "update content"
}'
HTTP request
PUT /api/notices/1 HTTP/1.1
Content-Type: application/json
Content-Length: 57
Host: localhost:8080
{
"title" : "title 1",
"content" : "update content"
}
Path parameters
Parameter | Description |
---|---|
|
공지사항 아이디 |
Request fields
Path | Type | Description |
---|---|---|
|
|
공지사항 제목 |
|
|
공지사항 내용 |
HTTP response
HTTP/1.1 204 No Content
존재하지 않는 ID로 수정
-
요청:
PUT /api/notices/{noticeId}
-
설명: 존재하지 않는 공지사항 수정 요청 시,
error
View 반환 -
Path Parameters:
noticeId
(Long): 수정할 공지사항의 ID -
View name:
error
-
Model attributes:
error
수정 시 제목 누락 예외
Curl request
$ curl 'http://localhost:8080/api/notices/1' -i -X PUT \
-H 'Content-Type: application/json' \
-d '{
"title" : null,
"content" : "update content"
}'
HTTP request
PUT /api/notices/1 HTTP/1.1
Content-Type: application/json
Content-Length: 52
Host: localhost:8080
{
"title" : null,
"content" : "update content"
}
HTTP response
HTTP/1.1 400 Bad Request
Content-Type: application/json
Content-Length: 144
{
"status" : 400,
"message" : "입력값이 유효하지 않습니다.",
"validation" : {
"title" : "제목을 입력하세요."
}
}
Response fields
Path | Type | Description |
---|---|---|
|
|
상태 코드 |
|
|
에러 메시지 |
|
|
제목은 필수 입력 필드입니다. |
수정 시 제목 길이 제한 예외
Curl request
$ curl 'http://localhost:8080/api/notices/1' -i -X PUT \
-H 'Content-Type: application/json' \
-d '{
"title" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"content" : "update content"
}'
HTTP request
PUT /api/notices/1 HTTP/1.1
Content-Type: application/json
Content-Length: 151
Host: localhost:8080
{
"title" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"content" : "update content"
}
HTTP response
HTTP/1.1 400 Bad Request
Content-Type: application/json
Content-Length: 163
{
"status" : 400,
"message" : "입력값이 유효하지 않습니다.",
"validation" : {
"title" : "제목을 1~100자 이내로 입력하세요."
}
}
Response fields
Path | Type | Description |
---|---|---|
|
|
상태 코드 |
|
|
에러 메시지 |
|
|
제목은 1~100자 이내여야 합니다. |
수정 시 내용 누락 예외
Curl request
$ curl 'http://localhost:8080/api/notices/1' -i -X PUT \
-H 'Content-Type: application/json' \
-d '{
"title" : "title update",
"content" : null
}'
HTTP request
PUT /api/notices/1 HTTP/1.1
Content-Type: application/json
Content-Length: 50
Host: localhost:8080
{
"title" : "title update",
"content" : null
}
HTTP response
HTTP/1.1 400 Bad Request
Content-Type: application/json
Content-Length: 146
{
"status" : 400,
"message" : "입력값이 유효하지 않습니다.",
"validation" : {
"content" : "내용을 입력하세요."
}
}
Response fields
Path | Type | Description |
---|---|---|
|
|
상태 코드 |
|
|
에러 메시지 |
|
|
내용은 필수 입력 필드입니다. |
삭제
Curl request
$ curl 'http://localhost:8080/api/notices/1' -i -X DELETE
HTTP request
DELETE /api/notices/1 HTTP/1.1
Host: localhost:8080
Path parameters
Parameter | Description |
---|---|
|
공지사항 아이디 |
HTTP response
HTTP/1.1 204 No Content
존재하지 않는 ID로 삭제
-
요청:
DELETE /api/notices/{noticeId}
-
설명: 존재하지 않는 공지사항 삭제 요청 시,
error
View 반환 -
Path Parameters:
noticeId
(Long): 삭제할 공지사항의 ID -
View name:
error
-
Model attributes:
error
FAQ API
전체 조회
Curl request
$ curl 'http://localhost:8080/api/faqs' -i -X GET
HTTP request
GET /api/faqs HTTP/1.1
Host: localhost:8080
HTTP response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 708
[ {
"id" : 2,
"question" : "question 2",
"answer" : "answer 2",
"category" : "USE",
"member" : {
"id" : 1,
"name" : "핀업",
"email" : "pinup0106@gmail.com",
"nickname" : "핀업",
"providerType" : "NAVER",
"role" : "ROLE_ADMIN",
"deleted" : false
},
"createdAt" : "2025-01-02T00:00:00",
"updatedAt" : null
}, {
"id" : 1,
"question" : "question 1",
"answer" : "answer 1",
"category" : "USE",
"member" : {
"id" : 1,
"name" : "핀업",
"email" : "pinup0106@gmail.com",
"nickname" : "핀업",
"providerType" : "NAVER",
"role" : "ROLE_ADMIN",
"deleted" : false
},
"createdAt" : "2025-01-01T00:00:00",
"updatedAt" : null
} ]
Response fields
Path | Type | Description |
---|---|---|
|
|
FAQ ID |
|
|
FAQ 질문 |
|
|
FAQ 답변 |
|
|
FAQ 카테고리 |
|
|
작성자 ID |
|
|
작성자 이름 |
|
|
작성자 이메일 |
|
|
작성자 닉네임 |
|
|
OAuth 제공자 |
|
|
작성자 권한 |
|
|
작성자 탈퇴 여부 |
|
|
FAQ 작성일 |
|
|
FAQ 수정일 |
단건 조회
Curl request
$ curl 'http://localhost:8080/api/faqs/1' -i -X GET
HTTP request
GET /api/faqs/1 HTTP/1.1
Host: localhost:8080
HTTP response
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 347
{
"id" : 1,
"question" : "question",
"answer" : "answer",
"category" : "USE",
"member" : {
"id" : 1,
"name" : "핀업",
"email" : "pinup0106@gmail.com",
"nickname" : "핀업",
"providerType" : "NAVER",
"role" : "ROLE_ADMIN",
"deleted" : false
},
"createdAt" : "2025-01-01T00:00:00",
"updatedAt" : null
}
Response fields
Path | Type | Description |
---|---|---|
|
|
FAQ ID |
|
|
FAQ 질문 |
|
|
FAQ 답변 |
|
|
FAQ 카테고리 |
|
|
작성자 ID |
|
|
작성자 이름 |
|
|
작성자 이메일 |
|
|
작성자 닉네임 |
|
|
OAuth 제공자 |
|
|
작성자 권한 |
|
|
작성자 탈퇴 여부 |
|
|
FAQ 작성일 |
|
|
FAQ 수정일 |
존재하지 않는 ID로 조회
-
요청:
GET /api/faqs/{faqId}
-
설명: 존재하지 않는 FAQ 요청 시,
error
View 반환 -
Path Parameters:
faqId
(Long): 조회할 FAQ의 ID -
View name:
error
-
Model attributes:
error
저장
Curl request
$ curl 'http://localhost:8080/api/faqs' -i -X POST \
-H 'Content-Type: application/json' \
-d '{
"question" : "question",
"answer" : "answer",
"category" : "USE"
}'
HTTP request
POST /api/faqs HTTP/1.1
Content-Type: application/json
Content-Length: 74
Host: localhost:8080
{
"question" : "question",
"answer" : "answer",
"category" : "USE"
}
Request fields
Path | Type | Description |
---|---|---|
|
|
FAQ 질문 |
|
|
FAQ 답변 |
|
|
FAQ 카테고리 |
HTTP response
HTTP/1.1 201 Created
저장 시 질문 누락 예외
Curl request
$ curl 'http://localhost:8080/api/faqs' -i -X POST \
-H 'Content-Type: application/json' \
-d '{
"question" : "",
"answer" : "answer",
"category" : "USE"
}'
HTTP request
POST /api/faqs HTTP/1.1
Content-Type: application/json
Content-Length: 66
Host: localhost:8080
{
"question" : "",
"answer" : "answer",
"category" : "USE"
}
HTTP response
HTTP/1.1 400 Bad Request
Content-Type: application/json
Content-Length: 154
{
"status" : 400,
"message" : "입력값이 유효하지 않습니다.",
"validation" : {
"question" : "질문 내용을 입력하세요."
}
}
Response fields
Path | Type | Description |
---|---|---|
|
|
상태 코드 |
|
|
에러 메시지 |
|
|
질문은 필수 입력 필드입니다. |
저장 시 질문 길이 제한 예외
Curl request
$ curl 'http://localhost:8080/api/faqs' -i -X POST \
-H 'Content-Type: application/json' \
-d '{
"question" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"answer" : "answer",
"category" : "USE"
}'
HTTP request
POST /api/faqs HTTP/1.1
Content-Type: application/json
Content-Length: 167
Host: localhost:8080
{
"question" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"answer" : "answer",
"category" : "USE"
}
HTTP response
HTTP/1.1 400 Bad Request
Content-Type: application/json
Content-Length: 173
{
"status" : 400,
"message" : "입력값이 유효하지 않습니다.",
"validation" : {
"question" : "질문 내용을 1~100자 이내로 입력하세요."
}
}
Response fields
Path | Type | Description |
---|---|---|
|
|
상태 코드 |
|
|
에러 메시지 |
|
|
질문은 1~100자 이내여야 합니다. |
저장 시 답변 누락 예외
Curl request
$ curl 'http://localhost:8080/api/faqs' -i -X POST \
-H 'Content-Type: application/json' \
-d '{
"question" : "question",
"answer" : "",
"category" : "USE"
}'
HTTP request
POST /api/faqs HTTP/1.1
Content-Type: application/json
Content-Length: 68
Host: localhost:8080
{
"question" : "question",
"answer" : "",
"category" : "USE"
}
HTTP response
HTTP/1.1 400 Bad Request
Content-Type: application/json
Content-Length: 171
{
"status" : 400,
"message" : "입력값이 유효하지 않습니다.",
"validation" : {
"answer" : "답변 내용을 1~500자 이내로 입력하세요."
}
}
Response fields
Path | Type | Description |
---|---|---|
|
|
상태 코드 |
|
|
에러 메시지 |
|
|
답변은 필수 입력 필드입니다. |
저장 시 답변 길이 제한 예외
Curl request
$ curl 'http://localhost:8080/api/faqs' -i -X POST \
-H 'Content-Type: application/json' \
-d '{
"question" : "question",
"answer" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"category" : "USE"
}'
HTTP request
POST /api/faqs HTTP/1.1
Content-Type: application/json
Content-Length: 569
Host: localhost:8080
{
"question" : "question",
"answer" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"category" : "USE"
}
HTTP response
HTTP/1.1 400 Bad Request
Content-Type: application/json
Content-Length: 171
{
"status" : 400,
"message" : "입력값이 유효하지 않습니다.",
"validation" : {
"answer" : "답변 내용을 1~500자 이내로 입력하세요."
}
}
Response fields
Path | Type | Description |
---|---|---|
|
|
상태 코드 |
|
|
에러 메시지 |
|
|
답변은 1~500자 이내여야 합니다. |
저장 시 카테고리 누락 예외
Curl request
$ curl 'http://localhost:8080/api/faqs' -i -X POST \
-H 'Content-Type: application/json' \
-d '{
"question" : "question",
"answer" : "answer",
"category" : null
}'
HTTP request
POST /api/faqs HTTP/1.1
Content-Type: application/json
Content-Length: 73
Host: localhost:8080
{
"question" : "question",
"answer" : "answer",
"category" : null
}
HTTP response
HTTP/1.1 400 Bad Request
Content-Type: application/json
Content-Length: 153
{
"status" : 400,
"message" : "입력값이 유효하지 않습니다.",
"validation" : {
"category" : "카테고리는 필수입니다."
}
}
Response fields
Path | Type | Description |
---|---|---|
|
|
상태 코드 |
|
|
에러 메시지 |
|
|
카테고리는 필수 입력 필드입니다. |
수정
Curl request
$ curl 'http://localhost:8080/api/faqs/1' -i -X PUT \
-H 'Content-Type: application/json' \
-d '{
"question" : "update question",
"answer" : "update answer",
"category" : "USE"
}'
HTTP request
PUT /api/faqs/1 HTTP/1.1
Content-Type: application/json
Content-Length: 88
Host: localhost:8080
{
"question" : "update question",
"answer" : "update answer",
"category" : "USE"
}
Path parameters
Parameter | Description |
---|---|
|
FAQ ID |
Request fields
Path | Type | Description |
---|---|---|
|
|
FAQ 질문 |
|
|
FAQ 답변 |
|
|
FAQ 카테고리 |
HTTP response
HTTP/1.1 204 No Content
존재하지 않는 ID로 수정
-
요청:
PUT /api/faqs/{faqId}
-
설명: 존재하지 않는 FAQ 수정 요청 시,
error
View 반환 -
Path Parameters:
faqId
(Long): 수정할 FAQ의 ID -
View name:
error
-
Model attributes:
error
수정 시 질문 누락 예외
Curl request
$ curl 'http://localhost:8080/api/faqs/1' -i -X PUT \
-H 'Content-Type: application/json' \
-d '{
"question" : "",
"answer" : "answer",
"category" : "USE"
}'
HTTP request
PUT /api/faqs/1 HTTP/1.1
Content-Type: application/json
Content-Length: 66
Host: localhost:8080
{
"question" : "",
"answer" : "answer",
"category" : "USE"
}
HTTP response
HTTP/1.1 400 Bad Request
Content-Type: application/json
Content-Length: 154
{
"status" : 400,
"message" : "입력값이 유효하지 않습니다.",
"validation" : {
"question" : "질문 내용을 입력하세요."
}
}
Response fields
Path | Type | Description |
---|---|---|
|
|
상태 코드 |
|
|
에러 메시지 |
|
|
질문은 필수 입력 필드입니다. |
수정 시 질문 길이 제한 예외
Curl request
$ curl 'http://localhost:8080/api/faqs/1' -i -X PUT \
-H 'Content-Type: application/json' \
-d '{
"question" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"answer" : "answer",
"category" : "USE"
}'
HTTP request
PUT /api/faqs/1 HTTP/1.1
Content-Type: application/json
Content-Length: 167
Host: localhost:8080
{
"question" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"answer" : "answer",
"category" : "USE"
}
HTTP response
HTTP/1.1 400 Bad Request
Content-Type: application/json
Content-Length: 173
{
"status" : 400,
"message" : "입력값이 유효하지 않습니다.",
"validation" : {
"question" : "질문 내용을 1~100자 이내로 입력하세요."
}
}
Response fields
Path | Type | Description |
---|---|---|
|
|
상태 코드 |
|
|
에러 메시지 |
|
|
질문은 1~100자 이내여야 합니다. |
수정 시 답변 누락 예외
Curl request
$ curl 'http://localhost:8080/api/faqs/1' -i -X PUT \
-H 'Content-Type: application/json' \
-d '{
"question" : "question",
"answer" : "",
"category" : "USE"
}'
HTTP request
PUT /api/faqs/1 HTTP/1.1
Content-Type: application/json
Content-Length: 68
Host: localhost:8080
{
"question" : "question",
"answer" : "",
"category" : "USE"
}
HTTP response
HTTP/1.1 400 Bad Request
Content-Type: application/json
Content-Length: 152
{
"status" : 400,
"message" : "입력값이 유효하지 않습니다.",
"validation" : {
"answer" : "답변 내용을 입력하세요."
}
}
Response fields
Path | Type | Description |
---|---|---|
|
|
상태 코드 |
|
|
에러 메시지 |
|
|
답변은 필수 입력 필드입니다. |
수정 시 답변 길이 제한 예외
Curl request
$ curl 'http://localhost:8080/api/faqs/1' -i -X PUT \
-H 'Content-Type: application/json' \
-d '{
"question" : "question",
"answer" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"category" : "USE"
}'
HTTP request
PUT /api/faqs/1 HTTP/1.1
Content-Type: application/json
Content-Length: 569
Host: localhost:8080
{
"question" : "question",
"answer" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"category" : "USE"
}
HTTP response
HTTP/1.1 400 Bad Request
Content-Type: application/json
Content-Length: 171
{
"status" : 400,
"message" : "입력값이 유효하지 않습니다.",
"validation" : {
"answer" : "답변 내용을 1~500자 이내로 입력하세요."
}
}
Response fields
Path | Type | Description |
---|---|---|
|
|
상태 코드 |
|
|
에러 메시지 |
|
|
답변은 1~500자 이내여야 합니다. |
수정 시 카테고리 누락 예외
Curl request
$ curl 'http://localhost:8080/api/faqs/1' -i -X PUT \
-H 'Content-Type: application/json' \
-d '{
"question" : "question",
"answer" : "answer",
"category" : null
}'
HTTP request
PUT /api/faqs/1 HTTP/1.1
Content-Type: application/json
Content-Length: 73
Host: localhost:8080
{
"question" : "question",
"answer" : "answer",
"category" : null
}
HTTP response
HTTP/1.1 400 Bad Request
Content-Type: application/json
Content-Length: 153
{
"status" : 400,
"message" : "입력값이 유효하지 않습니다.",
"validation" : {
"category" : "카테고리는 필수입니다."
}
}
Response fields
Path | Type | Description |
---|---|---|
|
|
상태 코드 |
|
|
에러 메시지 |
|
|
카테고리는 필수 입력 필드입니다. |
삭제
Curl request
$ curl 'http://localhost:8080/api/faqs/1' -i -X DELETE
HTTP request
DELETE /api/faqs/1 HTTP/1.1
Host: localhost:8080
Path parameters
Parameter | Description |
---|---|
|
FAQ ID |
HTTP response
HTTP/1.1 204 No Content
존재하지 않는 ID로 삭제
-
요청:
DELETE /api/faqs/{faqId}
-
설명: 존재하지 않는 FAQ 삭제 요청 시,
error
View 반환 -
Path Parameters:
faqId
(Long): 삭제할 FAQ의 ID -
View name:
error
-
Model attributes:
error