공통 사항
HTTP 공통 응답
HTTP Response Fields
-
정상 응답 필드
Path | Type | Optional | Description |
---|---|---|---|
|
|
응답 결과 |
|
|
|
O |
응답 데이터 |
HTTP Exception Response Fields
-
예외 응답 필드
Path | Type | Optional | Description |
---|---|---|---|
|
|
응답 결과 |
|
|
|
에러 메시지 |
|
|
|
에러 코드 |
HTTP Pagination Response Fields
-
페이지네이션에 사용되는 공통 응답 필드
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
픽픽픽 메인 페이지네이션 정보 |
||
|
|
페이지 번호 |
||
|
|
페이지 사이즈 |
||
|
|
정렬 정보 |
||
|
|
정렬 정보가 비어있는지 여부 |
||
|
|
정렬 여부 |
||
|
|
비정렬 여부 |
||
|
|
페이지 오프셋 (페이지 크기 * 페이지 번호) |
||
|
|
페이지 정보 포함 여부 |
||
|
|
페이지 정보 비포함 여부 |
||
|
|
현재 페이지가 첫 페이지 여부 |
||
|
|
현재 페이지가 마지막 페이지 여부 |
||
|
|
페이지 크기 |
||
|
|
현재 페이지 |
||
|
|
정렬 정보 |
||
|
|
정렬 정보가 비어있는지 여부 |
||
|
|
정렬 상태 여부 |
||
|
|
비정렬 상태 여부 |
||
|
|
현재 페이지 데이터 수 |
||
|
|
현재 빈 페이지 여부 |
Cookie 예외
-
쿠키의 name에 해당하는 value가 빈값인 경우
-
name: DEVDEVDEV_REFRESH_TOKEN, DEVDEVDEV_ACCESS_TOKEN
-
HTTP Response
{
"resultType" : "FAIL",
"message" : "이름과 일치하는 쿠키의 값이 없습니다.",
"errorCode" : 400
}
JWT 예외
-
엑세스 토큰 인증에 문제가 있는 경우
HTTP Response
{
"resultType" : "FAIL",
"message" : "잘못된 서명을 가진 JWT 입니다.",
"errorCode" : 401
}
{
"resultType" : "FAIL",
"message" : "만료된 JWT 입니다.",
"errorCode" : 401
}
{
"resultType" : "FAIL",
"message" : "유효하지 않은 회원 입니다.",
"errorCode" : 401
}
익명 회원 예외
HTTP Response
{
"resultType" : "FAIL",
"message" : "익명 회원 아이디를 확인해주세요.",
"errorCode" : 400
}
처리율 제한 예외
HTTP Response
{
"resultType" : "FAIL",
"message" : "너무 많은 요청을 했습니다. 잠시 후 다시 시도해 주세요.",
"errorCode" : 429
}
토큰
토큰 재발급 API(POST: /devdevdev/api/v1/token/refresh)
-
엑세스 토큰 만료시 토큰을 재발급하는 API
정상 요청/응답
HTTP Request
POST /devdevdev/api/v1/token/refresh HTTP/1.1
Content-Type: application/json;charset=UTF-8
Host: localhost:8080
Cookie: DEVDEVDEV_REFRESH_TOKEN=eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTMzLCJleHAiOjE3NDczMjEzMzN9.awdtfUDrau3kHjcWVnNFQGTuoY014PeYkXzNFadhgZA
HTTP Request Cookie Fields
Name | Optional | Description |
---|---|---|
|
리프레시 토큰 |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Set-Cookie: DEVDEVDEV_ACCESS_TOKEN=eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTMzLCJleHAiOjE3NDY3MTgzMzN9.i9waKTX75xyr_JR8Y6aYQG4KLrxwbkTum4Nvrs7fqmo; Path=/; Domain=devdevdev.co.kr; Max-Age=180; Expires=Thu, 08 May 2025 15:05:13 GMT; Secure
Set-Cookie: DEVDEVDEV_REFRESH_TOKEN=eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTMzLCJleHAiOjE3NDczMjEzMzN9.awdtfUDrau3kHjcWVnNFQGTuoY014PeYkXzNFadhgZA; Path=/; Domain=devdevdev.co.kr; Max-Age=604800; Expires=Thu, 15 May 2025 15:02:13 GMT; Secure; HttpOnly
Set-Cookie: DEVDEVDEV_LOGIN_STATUS=active; Path=/; Domain=devdevdev.co.kr; Max-Age=180; Expires=Thu, 08 May 2025 15:05:13 GMT; Secure
Content-Type: application/json;charset=UTF-8
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: 30
{
"resultType" : "SUCCESS"
}
HTTP Response Cookie Fields
Name | Optional | Description |
---|---|---|
|
리프레시 토큰 |
|
|
엑세스 토큰 |
|
|
로그인 활성 유무(active | inactive) |
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
예외
HTTP Response
{
"resultType" : "FAIL",
"message" : "회원을 찾을 수 없습니다.",
"errorCode" : 404
}
ADMIN 테스트 토큰 생성 API(GET: /devdevdev/api/v1/token/test/admin)
-
ADMIN 권한 테스트 계정의 토큰을 생성하는 API
정상 요청/응답
HTTP Request
GET /devdevdev/api/v1/token/test/admin HTTP/1.1
Content-Type: application/json;charset=UTF-8
Host: localhost:8080
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 522
{
"resultType" : "SUCCESS",
"data" : {
"accessToken" : "eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6InRlc3RfYWRtaW5AZGV2ZGV2ZGV2LmNvbSIsInNvY2lhbFR5cGUiOiJLQUtBTyIsInJvbGUiOiJST0xFX0FETUlOIiwiaWF0IjoxNzQ2NzE2NTMzLCJleHAiOjE3NDY3MTgzMzN9.GrGUoEdOnbF5Bq8FsofOcP0TOmOBa11mbABuIUqDEjI",
"refreshToken" : "eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6InRlc3RfYWRtaW5AZGV2ZGV2ZGV2LmNvbSIsInNvY2lhbFR5cGUiOiJLQUtBTyIsInJvbGUiOiJST0xFX0FETUlOIiwiaWF0IjoxNzQ2NzE2NTMzLCJleHAiOjE3NDczMjEzMzN9.zNcEnP81zdEQBQcEQ6yA1C5NnDClUdbRL9ay5VFkmwI"
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
엑세스 토큰 |
||
|
|
리프레시 토큰 |
예외
HTTP Response
{
"resultType" : "FAIL",
"message" : "회원을 찾을 수 없습니다.",
"errorCode" : 404
}
USER 테스트 토큰 생성 API(GET: /devdevdev/api/v1/token/test/user)
-
USER 권한 테스트 계정의 토큰을 생성하는 API
정상 요청/응답
HTTP Request
GET /devdevdev/api/v1/token/test/user HTTP/1.1
Content-Type: application/json;charset=UTF-8
Host: localhost:8080
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 518
{
"resultType" : "SUCCESS",
"data" : {
"accessToken" : "eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6InRlc3RfdXNlckBkZXZkZXZkZXYuY29tIiwic29jaWFsVHlwZSI6IktBS0FPIiwicm9sZSI6IlJPTEVfVVNFUiIsImlhdCI6MTc0NjcxNjUzMywiZXhwIjoxNzQ2NzE4MzMzfQ.oonwXFxtOKxdvx6k_zDbJ_qA-gUK2Ln_PvmSrMVX6rI",
"refreshToken" : "eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6InRlc3RfdXNlckBkZXZkZXZkZXYuY29tIiwic29jaWFsVHlwZSI6IktBS0FPIiwicm9sZSI6IlJPTEVfVVNFUiIsImlhdCI6MTc0NjcxNjUzMywiZXhwIjoxNzQ3MzIxMzMzfQ.EKZaRfixUJZQvZ8htUBYdfChHZEgoTq-QYPXtL6gyx8"
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
엑세스 토큰 |
||
|
|
리프레시 토큰 |
예외
HTTP Response
{
"resultType" : "FAIL",
"message" : "회원을 찾을 수 없습니다.",
"errorCode" : 404
}
회원
로그아웃 API(POST: /devdevdev/api/v1/logout)
-
리프레시 토큰을 쿠키로 요청받아 회원의 리프레시 토큰을 비활성화 한다.
-
리프레시 토큰 쿠키를 초기화 한다.
정상 요청/응답
HTTP Request
POST /devdevdev/api/v1/logout HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTA5LCJleHAiOjE3NDY3MTgzMDl9.I5XkKmWsvTIaBe2-E9SrzpR_PBbn7ImrqVZsRTFLStg
Host: localhost:8080
Cookie: DEVDEVDEV_REFRESH_TOKEN=
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Request Cookie Fields
Name | Optional | Description |
---|---|---|
|
리프레시 토큰 |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Set-Cookie: DEVDEVDEV_REFRESH_TOKEN=; Path=/; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 GMT
Set-Cookie: DEVDEVDEV_LOGIN_STATUS=inactive; Path=/; Domain=devdevdev.co.kr; Max-Age=180; Expires=Thu, 08 May 2025 15:04:49 GMT; Secure
Content-Type: application/json;charset=UTF-8
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: 30
{
"resultType" : "SUCCESS"
}
HTTP Response Cookie Fields
Name | Optional | Description |
---|---|---|
|
리프레시 토큰 |
|
|
로그인 활성화 유뮤(active | inactive) |
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
예외
HTTP Response
{
"resultType" : "FAIL",
"message" : "회원을 찾을 수 없습니다.",
"errorCode" : 404
}
마이 페이지
기술블로그 북마크 목록 API(GET: /devdevdev/api/v1/mypage/bookmarks)
-
회원은 기술블로그 북마크 목록을 조회할 수 있다.
-
비회원은 기술블로그 북마크 목록을 조회할 수 없다.
-
다음 페이지 요청 시 정렬 조건과 커서(마지막 데이터의 id)를 요청에 담아야 한다.
정상 요청/응답
HTTP Request
GET /devdevdev/api/v1/mypage/bookmarks?size=2&bookmarkSort=BOOKMARKED&techArticleId= HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTEwLCJleHAiOjE3NDY3MTgzMTB9.L_YUpluJ27UcFn7xn1qo3hFLKRMi3yxRyHSHmVXd7hM
Host: localhost:8080
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Request Query Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
O |
조회되는 데이터 수 |
|
|
O |
정렬 조건 |
BOOKMARKED(등록순), LATEST(최신순), MOST_COMMENTED(댓글순) |
|
O |
마지막 데이터의 아이디 |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 1869
{
"resultType" : "SUCCESS",
"data" : {
"content" : [ {
"id" : 21,
"elasticId" : "elasticId_20",
"thumbnailUrl" : "http://example.com/",
"isLogoImage" : false,
"techArticleUrl" : "http://example.com/20",
"title" : "타이틀_20",
"contents" : "내용",
"company" : {
"id" : 2,
"name" : "꿈빛 파티시엘",
"careerUrl" : "https://example.com",
"officialImageUrl" : "https://example.com/company.png"
},
"regDate" : "2024-08-10",
"author" : "작성자",
"viewTotalCount" : 0,
"recommendTotalCount" : 0,
"commentTotalCount" : 0,
"popularScore" : 0,
"isBookmarked" : true,
"score" : null
}, {
"id" : 20,
"elasticId" : "elasticId_19",
"thumbnailUrl" : "http://example.com/",
"isLogoImage" : false,
"techArticleUrl" : "http://example.com/19",
"title" : "타이틀_19",
"contents" : "내용",
"company" : {
"id" : 2,
"name" : "꿈빛 파티시엘",
"careerUrl" : "https://example.com",
"officialImageUrl" : "https://example.com/company.png"
},
"regDate" : "2024-08-11",
"author" : "작성자",
"viewTotalCount" : 1,
"recommendTotalCount" : 1,
"commentTotalCount" : 1,
"popularScore" : 10,
"isBookmarked" : true,
"score" : null
} ],
"pageable" : {
"pageNumber" : 0,
"pageSize" : 2,
"sort" : {
"empty" : true,
"sorted" : false,
"unsorted" : true
},
"offset" : 0,
"paged" : true,
"unpaged" : false
},
"size" : 2,
"number" : 0,
"sort" : {
"empty" : true,
"sorted" : false,
"unsorted" : true
},
"first" : true,
"last" : false,
"numberOfElements" : 2,
"empty" : false
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
기술블로그 메인 배열 |
||
|
|
기술블로그 아이디 |
||
|
|
기술블로그 엘라스틱서치 아이디 |
||
|
|
기술블로그 Url |
||
|
|
기술블로그 썸네일 이미지 |
||
|
|
썸네일 이미지의 회사 로고 여부 |
||
|
|
기술블로그 제목 |
||
|
|
기술블로그 내용 |
||
|
|
기술블로그 회사 |
||
|
|
기술블로그 회사 id |
||
|
|
기술블로그 회사 이름 |
||
|
|
기술블로그 회사 채용페이지 |
||
|
|
기술블로그 회사 로고 이미지 |
||
|
|
기술블로그 작성일 |
||
|
|
기술블로그 작성자 |
||
|
|
기술블로그 조회수 |
||
|
|
기술블로그 추천수 |
||
|
|
기술블로그 댓글수 |
||
|
|
기술블로그 인기점수 |
||
|
|
O |
회원의 북마크 여부 |
|
|
|
정확도 점수(북마크 목록에서는 사용X) |
||
|
|
페이지네이션 정보 |
||
|
|
페이지 번호 |
||
|
|
페이지 사이즈 |
||
|
|
정렬 정보 |
||
|
|
정렬 정보가 비어있는지 여부 |
||
|
|
정렬 여부 |
||
|
|
비정렬 여부 |
||
|
|
페이지 오프셋 (페이지 크기 * 페이지 번호) |
||
|
|
페이지 정보 포함 여부 |
||
|
|
페이지 정보 비포함 여부 |
||
|
|
현재 페이지가 첫 페이지 여부 |
||
|
|
현재 페이지가 마지막 페이지 여부 |
||
|
|
페이지 크기 |
||
|
|
현재 페이지 |
||
|
|
정렬 정보 |
||
|
|
정렬 정보가 비어있는지 여부 |
||
|
|
정렬 상태 여부 |
||
|
|
비정렬 상태 여부 |
||
|
|
현재 페이지 데이터 수 |
||
|
|
현재 빈 페이지 여부 |
예외
HTTP Response
{
"resultType" : "FAIL",
"message" : "회원을 찾을 수 없습니다.",
"errorCode" : 404
}
내가 작성한 픽픽픽 메인 API(GET: /devdevdev/api/v1/mypage/picks)
-
회원 자신이 작성한 픽픽픽 메인 데이터를 조회한다.
-
익명 회원은 사용할 수 없습니다.
정상 요청/응답
HTTP Request
GET /devdevdev/api/v1/mypage/picks?size=10&pickId=9223372036854775807 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTEwLCJleHAiOjE3NDY3MTgzMTB9.L_YUpluJ27UcFn7xn1qo3hFLKRMi3yxRyHSHmVXd7hM
Host: localhost:8080
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Request Query Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
O |
픽픽픽 아이디 |
|
|
O |
조회되는 데이터 수 |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 1015
{
"resultType" : "SUCCESS",
"data" : {
"content" : [ {
"id" : 3,
"title" : "쏘영이의 주류 픽픽픽!",
"voteTotalCount" : 1,
"commentTotalCount" : 3,
"viewTotalCount" : 2,
"isVoted" : true,
"contentStatus" : "APPROVAL",
"pickOptions" : [ {
"id" : 1,
"title" : "쏘주가 최고다!",
"percent" : 100,
"isPicked" : true
}, {
"id" : 2,
"title" : "와인이 최고다!",
"percent" : 0,
"isPicked" : false
} ]
} ],
"pageable" : {
"pageNumber" : 0,
"pageSize" : 10,
"sort" : {
"empty" : false,
"sorted" : true,
"unsorted" : false
},
"offset" : 0,
"paged" : true,
"unpaged" : false
},
"size" : 10,
"number" : 0,
"sort" : {
"empty" : false,
"sorted" : true,
"unsorted" : false
},
"first" : true,
"last" : true,
"numberOfElements" : 1,
"empty" : false
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
픽픽픽 메인 배열 |
||
|
|
픽픽픽 아이디 |
||
|
|
픽픽픽 제목 |
||
|
|
픽픽픽 전체 투표 수 |
||
|
|
픽픽픽 전체 댓글 수 |
||
|
|
픽픽픽 조회 수 |
||
|
|
픽픽픽 게시글 상태 |
REJECT(거절), READY(대기), APPROVAL(승인) |
|
|
|
픽픽픽 투표 여부 |
||
|
|
픽픽픽 옵션 배열 |
||
|
|
픽픽픽 옵션 아이디 |
||
|
|
픽픽픽 옵션 제목 |
||
|
|
픽픽픽 옵션 투표율(%) |
||
|
|
픽픽픽 옵션 투표 여부 |
||
|
|
픽픽픽 옵션 아이디 |
||
|
|
픽픽픽 옵션 제목 |
||
|
|
픽픽픽 옵션 투표율(%) |
||
|
|
픽픽픽 옵션 투표 여부 |
||
|
|
픽픽픽 메인 페이지네이션 정보 |
||
|
|
페이지 번호 |
||
|
|
페이지 사이즈 |
||
|
|
정렬 정보 |
||
|
|
정렬 정보가 비어있는지 여부 |
||
|
|
정렬 여부 |
||
|
|
비정렬 여부 |
||
|
|
페이지 오프셋 (페이지 크기 * 페이지 번호) |
||
|
|
페이지 정보 포함 여부 |
||
|
|
페이지 정보 비포함 여부 |
||
|
|
현재 페이지가 첫 페이지 여부 |
||
|
|
현재 페이지가 마지막 페이지 여부 |
||
|
|
페이지 크기 |
||
|
|
현재 페이지 |
||
|
|
정렬 정보 |
||
|
|
정렬 정보가 비어있는지 여부 |
||
|
|
정렬 상태 여부 |
||
|
|
비정렬 상태 여부 |
||
|
|
현재 페이지 데이터 수 |
||
|
|
현재 빈 페이지 여부 |
회원탈퇴 API(DELETE: /devdevdev/api/v1/mypage/profile)
-
회원은 회원탈퇴를 진행할 수 있다.
-
회원탈퇴 완료시 더이상 회원을 조회할 수 없다.
-
현재 soft-delete 정책을 사용한다.
-
-
회원탈퇴 완료시 리프레시 쿠키가 초기화되고, 로그인 활성화 여부 쿠키가 비활성화(
inactive
)로 변경된다.
정상 요청/응답
HTTP Request
DELETE /devdevdev/api/v1/mypage/profile HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTEwLCJleHAiOjE3NDY3MTgzMTB9.L_YUpluJ27UcFn7xn1qo3hFLKRMi3yxRyHSHmVXd7hM
Host: localhost:8080
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Set-Cookie: DEVDEVDEV_REFRESH_TOKEN=; Path=/; Domain=devdevdev.co.kr; Max-Age=180; Expires=Thu, 08 May 2025 15:04:50 GMT; Secure
Set-Cookie: DEVDEVDEV_LOGIN_STATUS=inactive; Path=/; Domain=devdevdev.co.kr; Max-Age=180; Expires=Thu, 08 May 2025 15:04:50 GMT; Secure
Content-Type: application/json;charset=UTF-8
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: 30
{
"resultType" : "SUCCESS"
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
HTTP Response Cookie Fields
Name | Optional | Description |
---|---|---|
|
리프레시 토큰 |
|
|
로그인 활성화 유뮤(active | inactive) |
예외
HTTP Response
{
"resultType" : "FAIL",
"message" : "탈퇴 설문조사를 완료하지 않은 회원입니다.",
"errorCode" : 400
}
{
"resultType" : "FAIL",
"message" : "회원을 찾을 수 없습니다.",
"errorCode" : 404
}
회원탈퇴 서베이 목록 API(GET: /devdevdev/api/v1/mypage/exit-survey)
-
회원은 회원탈퇴 서베이 목록을 조회할 수 있다.
-
비회원은 회원탈퇴 서베이 목록을 조회할 수 없다.
정상 요청/응답
HTTP Request
GET /devdevdev/api/v1/mypage/exit-survey HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTEwLCJleHAiOjE3NDY3MTgzMTB9.L_YUpluJ27UcFn7xn1qo3hFLKRMi3yxRyHSHmVXd7hM
Host: localhost:8080
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 499
{
"resultType" : "SUCCESS",
"data" : {
"surveyVersionId" : 5,
"surveyQuestions" : [ {
"id" : 4,
"title" : "꿈빛파티시엘님 회원 탈퇴하는 이유를 알려주세요.",
"content" : "회원 탈퇴하는 이유를 상세하게 알려주세요.",
"sortOrder" : 0,
"surveyQuestionOptions" : [ {
"id" : 8,
"title" : "기타",
"content" : "직접 입력해주세요.(10자 이상)",
"sortOrder" : 0
} ]
} ]
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
회원탈퇴 서베이 버전 아이디 |
||
|
|
회원탈퇴 서베이 질문 배열 |
||
|
|
회원탈퇴 서베이 질문 아이디 |
||
|
|
회원탈퇴 서베이 제목 |
||
|
|
회원탈퇴 서베이 내용 |
||
|
|
회원탈퇴 서베이 질문 정렬순서 |
||
|
|
회원탈퇴 서베이 질문 답변 배열 |
||
|
|
회원탈퇴 서베이 질문 답변 아이디 |
||
|
|
회원탈퇴 서베이 질문 답변 제목 |
||
|
|
회원탈퇴 서베이 질문 답변 내용 |
||
|
|
회원탈퇴 서베이 질문 답변 정렬순서 |
예외
HTTP Response
{
"resultType" : "FAIL",
"message" : "회원을 찾을 수 없습니다.",
"errorCode" : 404
}
회원탈퇴 서베이 이력 저장 API(POST: /devdevdev/api/v1/mypage/exit-survey)
-
회원탈퇴 서베이 이력을 저장한다.
-
비회원은 이용할 수 없다.
정상 요청/응답
HTTP Request
POST /devdevdev/api/v1/mypage/exit-survey HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTEwLCJleHAiOjE3NDY3MTgzMTB9.L_YUpluJ27UcFn7xn1qo3hFLKRMi3yxRyHSHmVXd7hM
Content-Length: 135
Host: localhost:8080
{
"questionId" : 3,
"memberExitSurveyQuestionOptions" : [ {
"id" : 7,
"message" : "i think so.. this service is..."
} ]
}
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Request Fields
Path | Type | Optional | Description | Format |
---|---|---|---|---|
|
|
서베이 질문 아이디 |
||
|
|
서베이 질문 아이디 |
||
|
|
서베이 질문 답변 아이디 |
||
|
|
O |
서베이 질문 답변 커스텀 메시지 |
String | null |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 30
{
"resultType" : "SUCCESS"
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
예외
HTTP Response
{
"resultType" : "FAIL",
"message" : "회원을 찾을 수 없습니다.",
"errorCode" : 404
}
{
"resultType" : "FAIL",
"message" : "아이디는 필수 입니다.",
"errorCode" : 400
}
{
"resultType" : "FAIL",
"message" : "아이디는 필수 입니다.",
"errorCode" : 400
}
내가 썼어요 댓글/답글 조회 API(GET: /devdevdev/api/v1/mypage/comments)
-
회원이 작성한 댓글/답글을 조회한다.
-
최초 요청시 pickCommentId, techCommentId 는 가장 큰 숫자 값을 요청해야 합니다.
정상 요청/응답
HTTP Request
GET /devdevdev/api/v1/mypage/comments?size=6&pickCommentId=1000&techCommentId=1000 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTE1LCJleHAiOjE3NDY3MTgzMTV9.olsUz7zekNI-5vF13zN-ASwOOzicuD5TALtCsA7aJBE
Host: localhost:8080
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Request Query Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
O |
조회되는 데이터 수 |
|
|
O |
가장 작은 픽픽픽 아이디 |
|
|
O |
가장 작은 기술블로그 아이디 |
|
|
O |
댓글 정렬 기준 |
ALL, PICK, TECH_ARTICLE |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 1322
{
"resultType" : "SUCCESS",
"data" : {
"content" : [ {
"uniqueCommentId" : "PICK_1_1",
"postId" : 1,
"postTitle" : "픽픽픽 제목",
"commentId" : 1,
"commentType" : "PICK",
"commentContents" : "픽픽픽 댓글입니다.",
"commentRecommendTotalCount" : 111,
"commentCreatedAt" : "2025-01-01 00:00:00",
"pickOptionTitle" : "픽픽픽 A",
"pickOptionType" : "firstPickOption"
}, {
"uniqueCommentId" : "TECH_1_1",
"postId" : 1,
"postTitle" : "기술블로그 제목",
"commentId" : 1,
"commentType" : "TECH",
"commentContents" : "기술블로그 댓글입니다.",
"commentRecommendTotalCount" : 54321,
"commentCreatedAt" : "2025-01-01 00:00:00",
"pickOptionTitle" : null,
"pickOptionType" : null
} ],
"pageable" : {
"pageNumber" : 0,
"pageSize" : 6,
"sort" : {
"empty" : true,
"sorted" : false,
"unsorted" : true
},
"offset" : 0,
"paged" : true,
"unpaged" : false
},
"totalElements" : 2,
"size" : 6,
"number" : 0,
"sort" : {
"empty" : true,
"sorted" : false,
"unsorted" : true
},
"first" : true,
"last" : true,
"numberOfElements" : 2,
"empty" : false
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
기술블로그 메인 배열 |
||
|
|
O |
댓글 유니크 아이디 |
${commentType}_${postId}_${commentId} |
|
|
O |
픽픽픽 | 기술블로그 아이디 |
|
|
|
O |
픽픽픽 | 기술블로그 제목 |
|
|
|
O |
픽픽픽 | 기술블로그 댓글 아이디 |
|
|
|
O |
픽픽픽 | 기술블로그 댓글 타입 |
PICK | TECH |
|
|
O |
픽픽픽 | 기술블로그 댓글 내용 |
|
|
|
O |
픽픽픽 | 기술블로그 댓글 추천 갯수 |
|
|
|
O |
픽픽픽 | 기술블로그 댓글 생성일 |
|
|
|
O |
픽픽픽 옵션 제목 |
String | null |
|
|
O |
픽픽픽 옵션 타입 |
String | null |
|
|
O |
페이지네이션 정보 |
|
|
|
O |
페이지 번호 |
|
|
|
O |
페이지 사이즈 |
|
|
|
O |
정렬 정보 |
|
|
|
O |
정렬 정보가 비어있는지 여부 |
|
|
|
O |
정렬 여부 |
|
|
|
O |
비정렬 여부 |
|
|
|
O |
페이지 오프셋 (페이지 크기 * 페이지 번호) |
|
|
|
O |
페이지 정보 포함 여부 |
|
|
|
O |
페이지 정보 비포함 여부 |
|
|
|
O |
데이터 전체 갯수 |
|
|
|
O |
현재 페이지가 첫 페이지 여부 |
|
|
|
O |
현재 페이지가 마지막 페이지 여부 |
|
|
|
O |
페이지 크기 |
|
|
|
O |
현재 페이지 |
|
|
|
O |
정렬 정보 |
|
|
|
O |
정렬 정보가 비어있는지 여부 |
|
|
|
O |
정렬 상태 여부 |
|
|
|
O |
비정렬 상태 여부 |
|
|
|
O |
현재 페이지 데이터 수 |
|
|
|
O |
현재 빈 페이지 여부 |
예외
HTTP Response
-
익명 회원은 사용할 수 없는 기능 입니다.
: 익명 회원인 경우 -
회원을 찾을 수 없습니다.
: 회원이 존재하지 않는 경우 -
유효하지 않은 회원 입니다.
: 회원이 유효하지 않은 경우
{
"resultType" : "FAIL",
"message" : "유효하지 않은 회원 입니다.",
"errorCode" : 401
}
회원이 구독한 기업 목록 조회 API(GET: /devdevdev/api/v1/mypage/subscriptions/companies)
-
모든 회원은 자신이 구독한 기업 목록을 조회할 수 있다.
정상 요청/응답
HTTP Request
GET /devdevdev/api/v1/mypage/subscriptions/companies?size=1&companyId=999 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTExLCJleHAiOjE3NDY3MTgzMTF9.H9aAzDN-Q4pm2ovFGh8fEP8XOqOEGkVKHI8Opn0hmEQ
Host: localhost:8080
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Request Query Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
O |
조회되는 데이터 수 |
|
|
O |
커서(마지막 기업 아이디) |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 694
{
"resultType" : "SUCCESS",
"data" : {
"content" : [ {
"companyId" : 1,
"companyName" : "Toss",
"companyImageUrl" : "https://image.net/image.png",
"isSubscribed" : true
} ],
"pageable" : {
"pageNumber" : 0,
"pageSize" : 1,
"sort" : {
"empty" : true,
"sorted" : false,
"unsorted" : true
},
"offset" : 0,
"paged" : true,
"unpaged" : false
},
"totalElements" : 1,
"size" : 1,
"number" : 0,
"sort" : {
"empty" : true,
"sorted" : false,
"unsorted" : true
},
"first" : true,
"last" : false,
"numberOfElements" : 1,
"empty" : false
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
구독한 기업 목록 메인 배열 |
||
|
|
기업 아이디 |
||
|
|
기업 이름 |
||
|
|
기업 로고 이미지 url |
||
|
|
회원의 구독 여부 |
||
|
|
픽픽픽 메인 페이지네이션 정보 |
||
|
|
페이지 번호 |
||
|
|
페이지 사이즈 |
||
|
|
정렬 정보 |
||
|
|
정렬 정보가 비어있는지 여부 |
||
|
|
정렬 여부 |
||
|
|
비정렬 여부 |
||
|
|
페이지 오프셋 (페이지 크기 * 페이지 번호) |
||
|
|
페이지 정보 포함 여부 |
||
|
|
페이지 정보 비포함 여부 |
||
|
|
현재 페이지가 첫 페이지 여부 |
||
|
|
현재 페이지가 마지막 페이지 여부 |
||
|
|
페이지 크기 |
||
|
|
현재 페이지 |
||
|
|
정렬 정보 |
||
|
|
정렬 정보가 비어있는지 여부 |
||
|
|
정렬 상태 여부 |
||
|
|
비정렬 상태 여부 |
||
|
|
현재 페이지 데이터 수 |
||
|
|
전체 데이터 수 |
||
|
|
현재 빈 페이지 여부 |
예외
HTTP Response
-
회원을 찾을 수 없습니다.
: 회원이 존재하지 않는 경우
{
"resultType" : "FAIL",
"message" : "회원을 찾을 수 없습니다.",
"errorCode" : 404
}
댑댑댑 공통
신고 사유 목록 조회 API(GET: /devdevdev/api/v1/blames)
-
회원이 신고 사유를 조회한다.
-
익명 사용자는 이용할 수 없다.
정상 요청/응답
HTTP Request
GET /devdevdev/api/v1/blames HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTA3LCJleHAiOjE3NDY3MTgzMDd9.SLnF-WGqy3yWNOu2fnW0c0gB5SecL0pkBJCrURP7ZHI
Host: localhost:8080
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 113
{
"resultType" : "SUCCESS",
"datas" : [ {
"id" : 2,
"reason" : "욕설1",
"sortOrder" : 0
} ]
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
신고 종류 아이디 |
||
|
|
신고 사유 |
||
|
|
정렬 순서 |
예외
HTTP Response
{
"resultType" : "FAIL",
"message" : "유효하지 않은 회원 입니다.",
"errorCode" : 401
}
신고 API(POST: /devdevdev/api/v1/blames/{blamePahtType})
-
회원이 신고 사유를 이용해서 신고하고 싶은 댑댑댑 서비스에 신고 한다.
-
신고 가능한 댑댑댑 서비스
-
픽픽픽, 픽픽픽 댓글, 기술블로그 댓글
-
-
-
익명 사용자는 이용할 수 없다.
정상 요청/응답
HTTP Request
POST /devdevdev/api/v1/blames/PICK HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTA3LCJleHAiOjE3NDY3MTgzMDd9.SLnF-WGqy3yWNOu2fnW0c0gB5SecL0pkBJCrURP7ZHI
Content-Length: 149
Host: localhost:8080
{
"pickId" : 2,
"pickCommentId" : null,
"techArticleId" : null,
"techArticleCommentId" : null,
"blameTypeId" : 3,
"customReason" : null
}
{
"pickId" : 1,
"pickCommentId" : 1,
"techArticleId" : null,
"techArticleCommentId" : null,
"blameTypeId" : 1,
"customReason" : null
}
{
"pickId" : null,
"pickCommentId" : null,
"techArticleId" : 1,
"techArticleCommentId" : 1,
"blameTypeId" : 5,
"customReason" : null
}
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Request Path Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
댑댑댑 신고 경로 타입 |
PICK(픽픽픽), TECH_ARTICLE(기술 블로그) |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 66
{
"resultType" : "SUCCESS",
"data" : {
"blameId" : 2
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
신고 아이디 |
예외
HTTP Response
-
익명 회원은 사용할 수 없는 기능 입니다.
: 익명 회원인 경우 -
회원을 찾을 수 없습니다.
: 회원이 존재하지 않는 경우 -
존재하지 않는 신고 종류 입니다.
: 신고 종류가 존재하지 않는 경우 -
신고 사유 종류 아이디는 필수 입니다.
: 신고 사유 종류 아이디를 요청 값으로 보내지 않은 경우 -
이미 신고 했습니다.
: 이미 신고한 이력이 있는 경우 -
유효하지 않은 신고 경로입니다.
: 잘못된 URL 접근인 경우 -
픽픽픽 게시글이 없습니다.
: 픽픽픽이 존재하지 않는 경우 -
픽픽픽 댓글이 없습니다.
: 픽픽픽 댓글이 존재하지 않는 경우 -
승인 상태가 아닌 픽픽픽에는 댓글을 삭제할 수 없습니다.
: 픽픽픽이 승인 상태가 아닌 경우 -
잘못된 형식의 픽픽픽 서비스 접근 입니다.
: 픽픽픽 신고인데, 픽픽픽 댓글 신고를 호출한 경우 -
삭제된 픽픽픽 댓글에는 신고할 수 없습니다.
: 픽픽픽 댓글이 삭제 상태인 경우 -
존재하지 않는 기술블로그 댓글입니다.
: 기술 블로그가 존재하지 않은 경우 -
삭제된 기술 블로그 댓글에는 신고할 수 없습니다.
: 기술 블로그 댓글이 삭제 된 경우
{
"resultType" : "FAIL",
"message" : "신고 사유 종류 아이디는 필수 입니다.",
"errorCode" : 400
}
픽픽픽
픽픽픽 메인 API(GET: /devdevdev/api/v1/picks)
-
픽픽픽 메인 화면을 조회할 수 있다.
-
회원/익명 사용자에 따라 API 응답값이 상이하다.
정상 요청/응답
HTTP Request
GET /devdevdev/api/v1/picks?size=10&pickId=9223372036854775807&pickSort=LATEST HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTI1LCJleHAiOjE3NDY3MTgzMjV9.PYUwhgp90sM89HwBTyvuLU3Adi0jU_VQkPuafAQTVZE
Host: localhost:8080
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
O |
Bearer 엑세스 토큰 |
|
O |
익명 회원 아이디 |
HTTP Request Query Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
O |
픽픽픽 아이디 |
|
|
O |
픽픽픽 정렬 조건 |
LATEST(최신순), POPULAR(인기순), MOST_VIEWED(조회수), MOST_COMMENTED(댓글순) |
|
O |
조회되는 데이터 수 |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 974
{
"resultType" : "SUCCESS",
"data" : {
"content" : [ {
"id" : 48,
"title" : "픽1타이틀",
"voteTotalCount" : 2,
"commentTotalCount" : 2,
"viewTotalCount" : 2,
"popularScore" : 20,
"isVoted" : false,
"pickOptions" : [ {
"id" : 37,
"title" : "픽옵션1",
"percent" : 50,
"isPicked" : false
}, {
"id" : 38,
"title" : "픽옵션2",
"percent" : 50,
"isPicked" : false
} ]
} ],
"pageable" : {
"pageNumber" : 0,
"pageSize" : 10,
"sort" : {
"empty" : false,
"sorted" : true,
"unsorted" : false
},
"offset" : 0,
"paged" : true,
"unpaged" : false
},
"size" : 10,
"number" : 0,
"sort" : {
"empty" : false,
"sorted" : true,
"unsorted" : false
},
"first" : true,
"last" : true,
"numberOfElements" : 1,
"empty" : false
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
픽픽픽 메인 배열 |
||
|
|
픽픽픽 아이디 |
||
|
|
픽픽픽 제목 |
||
|
|
픽픽픽 전체 투표 수 |
||
|
|
픽픽픽 전체 댓글 수 |
||
|
|
픽픽픽 조회 수 |
||
|
|
픽픽픽 인기점수 |
||
|
|
O |
픽픽픽 투표 여부(익명 사용자는 필드가 없다.) |
|
|
|
픽픽픽 옵션 배열 |
||
|
|
픽픽픽 옵션 아이디 |
||
|
|
픽픽픽 옵션 제목 |
||
|
|
픽픽픽 옵션 투표율(%) |
||
|
|
O |
픽픽픽 옵션 투표 여부(익명 사용자는 필드가 없다.) |
|
|
|
픽픽픽 옵션 아이디 |
||
|
|
픽픽픽 옵션 제목 |
||
|
|
픽픽픽 옵션 투표율(%) |
||
|
|
O |
픽픽픽 옵션 투표 여부(익명 사용자는 필드가 없다.) |
|
|
|
픽픽픽 메인 페이지네이션 정보 |
||
|
|
페이지 번호 |
||
|
|
페이지 사이즈 |
||
|
|
정렬 정보 |
||
|
|
정렬 정보가 비어있는지 여부 |
||
|
|
정렬 여부 |
||
|
|
비정렬 여부 |
||
|
|
페이지 오프셋 (페이지 크기 * 페이지 번호) |
||
|
|
페이지 정보 포함 여부 |
||
|
|
페이지 정보 비포함 여부 |
||
|
|
현재 페이지가 첫 페이지 여부 |
||
|
|
현재 페이지가 마지막 페이지 여부 |
||
|
|
페이지 크기 |
||
|
|
현재 페이지 |
||
|
|
정렬 정보 |
||
|
|
정렬 정보가 비어있는지 여부 |
||
|
|
정렬 상태 여부 |
||
|
|
비정렬 상태 여부 |
||
|
|
현재 페이지 데이터 수 |
||
|
|
현재 빈 페이지 여부 |
픽픽픽 상세 API(GET: /devdevdev/api/v1/picks/{pickId})
-
픽픽픽 아이디로 상세 화면을 조회할 수 있다.
-
픽픽픽 게시글의 상태가 승인 상태(
APPROVAL
)가 아니면 조회할 수 없다.
정상 요청/응답
HTTP Request
GET /devdevdev/api/v1/picks/38 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTI1LCJleHAiOjE3NDY3MTgzMjV9.PYUwhgp90sM89HwBTyvuLU3Adi0jU_VQkPuafAQTVZE
Host: localhost:8080
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
O |
Bearer 엑세스 토큰 |
|
O |
익명 회원 아이디 |
HTTP Request Path Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
픽픽픽 아이디 |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 956
{
"resultType" : "SUCCESS",
"data" : {
"userId" : "dre************",
"nickname" : "꿈빛파티시엘",
"pickCreatedAt" : "2025-05-08 15:02:05",
"pickTitle" : "픽픽픽 제목",
"isAuthor" : true,
"isVoted" : false,
"pickOptions" : {
"secondPickOption" : {
"id" : 30,
"title" : "픽픽픽 옵션2",
"isPicked" : false,
"percent" : 0,
"content" : "픽픽픽 옵션2 내용",
"voteTotalCount" : 0,
"pickDetailOptionImages" : [ {
"id" : 35,
"imageUrl" : "http://iamge2.png"
} ]
},
"firstPickOption" : {
"id" : 29,
"title" : "픽픽픽 옵션1",
"isPicked" : false,
"percent" : 0,
"content" : "픽픽픽 옵션1 내용",
"voteTotalCount" : 1,
"pickDetailOptionImages" : [ {
"id" : 34,
"imageUrl" : "http://iamge1.png"
} ]
}
}
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
픽픽픽 작성자 닉네임 |
||
|
|
픽픽픽 작성자 아이디 |
||
|
|
픽픽픽 생성 일시 |
yyyy-MM-dd HH:mm:ss |
|
|
|
픽픽픽 제목 |
||
|
|
현재 로그인한 회원이 픽픽픽 작성자 여부 |
||
|
|
픽픽픽 투표 여부 |
||
|
|
픽픽픽 옵션 객체 |
||
|
|
픽픽픽 첫번째 옵션 객체 |
||
|
|
첫 번째 픽픽픽 옵션 아이디 |
||
|
|
첫 번째 픽픽픽 옵션 제목 |
||
|
|
첫 번째 픽픽픽 옵션 투표 여부 |
||
|
|
첫 번째 픽픽픽 옵션 득표율(%) |
||
|
|
첫 번째 픽픽픽 옵션 내용 |
||
|
|
첫 번째 픽픽픽 옵션 득표수 |
||
|
|
첫 번째 픽픽픽 옵션 이미지 배열 |
||
|
|
첫 번째 픽픽픽 옵션 이미지 아이디 |
||
|
|
첫 번째 픽픽픽 옵션 이미지 url |
||
|
|
픽픽픽 첫번째 옵션 객체 |
||
|
|
두 번째 픽픽픽 옵션 아이디 |
||
|
|
두 번째 픽픽픽 옵션 제목 |
||
|
|
두 번째 픽픽픽 옵션 투표 여부 |
||
|
|
두 번째 픽픽픽 옵션 득표율(%) |
||
|
|
두 번째 픽픽픽 옵션 내용 |
||
|
|
두 번째 픽픽픽 옵션 득표수 |
||
|
|
두 번째 픽픽픽 옵션 이미지 배열 |
||
|
|
두 번째 픽픽픽 옵션 이미지 아이디 |
||
|
|
두 번째 픽픽픽 옵션 이미지 url |
예외
HTTP Response
{
"resultType" : "FAIL",
"message" : "픽픽픽 게시글이 없습니다.",
"errorCode" : 404
}
{
"resultType" : "FAIL",
"message" : "픽픽픽 게시글 상태가 승인 상태가 아닙니다. 관리자에게 문의하세요.",
"errorCode" : 400
}
픽픽픽 작성 API(POST: /devdevdev/api/v1/picks)
-
픽픽픽을 작성한다.
-
회원만 픽픽픽 작성을 할 수 있다.
-
작성시 픽픽픽 게시글 상태는(
READY
) 이다.
-
-
픽픽픽 작성시 이미지는 있을 수도 없을 수도 있다.
-
픽픽픽 이미지가 없을 경우
pickOptionImageIds
를 빈 배열로 요청해야 한다.
-
정상 요청/응답
HTTP Request
POST /devdevdev/api/v1/picks HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTI1LCJleHAiOjE3NDY3MTgzMjV9.PYUwhgp90sM89HwBTyvuLU3Adi0jU_VQkPuafAQTVZE
Content-Length: 467
Host: localhost:8080
{
"pickTitle" : "Svelte VS React",
"pickOptions" : {
"secondPickOption" : {
"pickOptionTitle" : "React가 짱이다!",
"pickOptionContent" : "대형 커뮤니티, 대기업에서 라이브러리 관리!",
"pickOptionImageIds" : [ 19 ]
},
"firstPickOption" : {
"pickOptionTitle" : "Svelte가 짱이다!",
"pickOptionContent" : "낮은 러닝커브 그리고 빠른 속도!",
"pickOptionImageIds" : [ 18 ]
}
}
}
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Request Fields
Path | Type | Optional | Description | Format |
---|---|---|---|---|
|
|
픽픽픽 타이틀 |
||
|
|
픽픽픽 옵션 |
||
|
|
픽픽픽 첫 번째 옵션 선택지 |
||
|
|
픽픽픽 첫 번째 옵션 선택지 제목 |
||
|
|
픽픽픽 첫 번째 옵션 선택지 내용 |
||
|
|
픽픽픽 첫 번째 옵션 이미지 아이디 배열 |
||
|
|
픽픽픽 두 번째 옵션 선택지 |
||
|
|
픽픽픽 두 번째 옵션 선택지 제목 |
||
|
|
픽픽픽 두 번째 옵션 선택지 내용 |
||
|
|
픽픽픽 두 번째 옵션 이미지 아이디 배열 |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 66
{
"resultType" : "SUCCESS",
"data" : {
"pickId" : 20
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
O |
응답 결과 |
|
|
|
O |
응답 데이터 |
|
|
|
O |
픽픽픽 아이디 |
예외
HTTP Response
{
"resultType" : "FAIL",
"message" : "비회원은 현재 해당 기능을 이용할 수 없습니다.",
"errorCode" : 403
}
픽픽픽 수정 API(PATCH: /devdevdev/api/v1/picks/{pickId})
-
픽픽픽을 수정한다.
-
회원만 픽픽픽 수정 할 수 있다.
-
회원 본인이 작성한 픽픽픽만 수정할 수 있다.
-
픽픽픽 수정시 이미지는 있을 수도 없을 수도 있다.
정상 요청/응답
HTTP Request
PATCH /devdevdev/api/v1/picks/41 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTI1LCJleHAiOjE3NDY3MTgzMjV9.PYUwhgp90sM89HwBTyvuLU3Adi0jU_VQkPuafAQTVZE
Content-Length: 475
Host: localhost:8080
{
"pickTitle" : "픽타이틀수정",
"pickOptions" : {
"secondPickOption" : {
"pickOptionId" : 36,
"pickOptionTitle" : "픽옵션2제목수정",
"pickOptionContent" : "픽옵션2콘텐츠수정",
"pickOptionImageIds" : [ 50 ]
},
"firstPickOption" : {
"pickOptionId" : 35,
"pickOptionTitle" : "픽옵션1제목수정",
"pickOptionContent" : "픽옵션1콘텐츠수정",
"pickOptionImageIds" : [ 49 ]
}
}
}
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Request Path Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
픽픽픽 아이디 |
HTTP Request Fields
Path | Type | Optional | Description | Format |
---|---|---|---|---|
|
|
픽픽픽 타이틀 |
||
|
|
픽픽픽 옵션 |
||
|
|
픽픽픽 첫 번째 옵션 선택지 |
||
|
|
픽픽픽 첫 번째 옵션 선택지 아이디 |
||
|
|
픽픽픽 첫 번째 옵션 선택지 제목 |
||
|
|
픽픽픽 첫 번째 옵션 선택지 내용 |
||
|
|
픽픽픽 첫 번째 옵션 이미지 아이디 배열 |
||
|
|
픽픽픽 두 번째 옵션 선택지 |
||
|
|
픽픽픽 두 번째 옵션 선택지 아이디 |
||
|
|
픽픽픽 두 번째 옵션 선택지 제목 |
||
|
|
픽픽픽 두 번째 옵션 선택지 내용 |
||
|
|
픽픽픽 두 번째 옵션 이미지 아이디 배열 |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 66
{
"resultType" : "SUCCESS",
"data" : {
"pickId" : 41
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
O |
응답 결과 |
|
|
|
O |
응답 데이터 |
|
|
|
O |
픽픽픽 아이디 |
예외
HTTP Response
{
"resultType" : "FAIL",
"message" : "회원 본인이 작성한 게시글만 수정할 수 있습니다.",
"errorCode" : 403
}
{
"resultType" : "FAIL",
"message" : "픽픽픽 제목을 작성해주세요.",
"errorCode" : 400
}
{
"resultType" : "FAIL",
"message" : "픽픽픽 선택지 제목을 작성해주세요.",
"errorCode" : 400
}
{
"resultType" : "FAIL",
"message" : "픽픽픽 선택지가 없습니다.",
"errorCode" : 400
}
픽픽픽 삭제 API(DELETE: /devdevdev/api/v1/picks/{pickId})
-
회원이 자신이 작성한 픽픽픽 아이디로 픽픽픽을 삭제한다.
-
회원 자신이 작성한 글이 아니면 삭제할 수 없다.
정상 요청/응답
HTTP Request
DELETE /devdevdev/api/v1/picks/49 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTI1LCJleHAiOjE3NDY3MTgzMjV9.PYUwhgp90sM89HwBTyvuLU3Adi0jU_VQkPuafAQTVZE
Host: localhost:8080
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Request Path Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
픽픽픽 아이디 |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 30
{
"resultType" : "SUCCESS"
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
예외
HTTP Response
{
"resultType" : "FAIL",
"message" : "픽픽픽 게시글이 없습니다.",
"errorCode" : 404
}
픽픽픽 옵션(선택지) 투표 API(POST: /devdevdev/api/v1/picks/vote)
-
픽픽픽 옵션(선택지)에 투표한다.
-
투표를 하지 않은
pickVoteId
는null
로 응답한다. -
한번 투표를 하면 투표 취소는 불가하고, 다른 선택지에만 투표가 가능하다.
-
이미 투표한 선택지에 투표할 경우 예외가 발생한다.
-
정상 요청/응답
HTTP Request
POST /devdevdev/api/v1/picks/vote HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTI1LCJleHAiOjE3NDY3MTgzMjV9.PYUwhgp90sM89HwBTyvuLU3Adi0jU_VQkPuafAQTVZE
Content-Length: 42
Host: localhost:8080
{
"pickId" : 21,
"pickOptionId" : 21
}
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
O |
Bearer 엑세스 토큰 |
|
O |
익명 회원 아이디 |
HTTP Request Fields
Path | Type | Optional | Description | Format |
---|---|---|---|---|
|
|
픽픽픽 아이디 |
||
|
|
픽픽픽 옵션 아이디 |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 367
{
"resultType" : "SUCCESS",
"data" : {
"pickId" : 21,
"votePickOptions" : [ {
"pickOptionId" : 21,
"pickVoteId" : 20,
"voteTotalCount" : 1,
"percent" : 100,
"isPicked" : true
}, {
"pickOptionId" : 22,
"pickVoteId" : null,
"voteTotalCount" : 0,
"percent" : 0,
"isPicked" : false
} ]
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
픽픽픽 아이디 |
||
|
|
픽픽픽 옵션 배열 |
||
|
|
픽픽픽 옵션 아이디 |
||
|
|
픽픽픽 투표 아이디 |
Number | null |
|
|
|
픽픽픽 옵션 총 득표수 |
||
|
|
픽픽픽 옵션 득표율(%) |
||
|
|
회원의 픽픽픽 옵션 선택 여부 |
||
|
|
픽픽픽 옵션 아이디 |
||
|
|
픽픽픽 투표 아이디 |
Number | null |
|
|
|
픽픽픽 옵션 총 득표수 |
||
|
|
픽픽픽 옵션 득표율(%) |
||
|
|
회원의 픽픽픽 옵션 선택 여부 |
예외
HTTP Response
{
"resultType" : "FAIL",
"message" : "픽픽픽 게시글이 없습니다.",
"errorCode" : 404
}
{
"resultType" : "FAIL",
"message" : "픽픽픽 선택지 아이디는 필수 입니다.",
"errorCode" : 400
}
{
"resultType" : "FAIL",
"message" : "동일한 픽픽픽 선택지에 투표할 수 없습니다.",
"errorCode" : 400
}
{
"resultType" : "FAIL",
"message" : "익명 회원 아이디를 확인해주세요.",
"errorCode" : 400
}
픽픽픽 이미지 업로드API(POST: /devdevdev/api/v1/picks/image)
-
픽픽픽 이미지를 업로드 한다.
-
비회원은 이미지를 업로드할 수 없다.
-
이미지 여러개를 업로드할 수 있다.
-
갯수 제한(3개), 용량 제한(10MB)이 있다.
-
정상 요청/응답
HTTP Request
POST /devdevdev/api/v1/picks/image?name=firstPickOptionImage HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTI0LCJleHAiOjE3NDY3MTgzMjR9.GU28z1uA2B7OunH7HDOtJdZVOgbzD3i9ivgdzf_s0aE
Host: localhost:8080
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=pickOptionImages; filename=tesImage.png
Content-Type: image/png
pickOptionImages
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Request Query Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
픽픽픽 옵션 이미지 이름 |
firstPickOptionImage | secondPickOptionImage |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 296
{
"resultType" : "SUCCESS",
"data" : {
"pickOptionImages" : [ {
"name" : "firstPickOptionImage",
"pickOptionImageId" : 5,
"imageUrl" : "http://localhost:8080/xxx.png",
"imageKey" : "test/pickpickpick/7c75d410-3e95-4b84-acd8-edb15dcaa42c-tesImage.png"
} ]
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
O |
응답 결과 |
|
|
|
O |
응답 데이터 |
|
|
|
O |
픽픽픽 옵션 이미지 배열 |
|
|
|
O |
픽픽픽 옵션 이미지 이름 |
firstPickOptionImage | secondPickOptionImage |
|
|
O |
픽픽픽 옵션 이미지 아이디 |
|
|
|
O |
픽픽픽 옵션 이미지 URL |
|
|
|
O |
픽픽픽 옵션 이미지 KEY(경로) |
예외
HTTP Response
{
"resultType" : "FAIL",
"message" : "비회원은 현재 해당 기능을 이용할 수 없습니다.",
"errorCode" : 403
}
{
"resultType" : "FAIL",
"message" : "image/gif는 지원하지 않은 파일 형식 입니다. 현재 [image/jpeg, image/png] 파일 형식만 지원합니다.",
"errorCode" : 400
}
{
"resultType" : "FAIL",
"message" : "이미지 파일은 최대 3개 까지 업로드 할 수 있습니다.",
"errorCode" : 400
}
픽픽픽 이미지 삭제 API(DELETE: /devdevdev/api/v1/picks/image/{pickOptionImageId})
-
픽픽픽 옵션 이미지 1개를 삭제 한다.
-
비회원은 이미지를 삭제 할 수 없다.
정상 요청/응답
HTTP Request
DELETE /devdevdev/api/v1/picks/image/27 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTI1LCJleHAiOjE3NDY3MTgzMjV9.PYUwhgp90sM89HwBTyvuLU3Adi0jU_VQkPuafAQTVZE
Host: localhost:8080
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Request Path Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
픽픽픽 옵션 이미지 아이디 |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 30
{
"resultType" : "SUCCESS"
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
O |
응답 결과 |
예외
HTTP Response
{
"resultType" : "FAIL",
"message" : "비회원은 현재 해당 기능을 이용할 수 없습니다.",
"errorCode" : 403
}
{
"resultType" : "FAIL",
"message" : "픽픽픽 선택지 이미지가 존재하지 않습니다.",
"errorCode" : 400
}
나도 고민 했는데 픽픽픽 API(GET: /devdevdev/api/v1/picks/{pickId}/similarties)
-
픽픽픽 상세와 유사도가 가장 높은 픽픽픽 3개를 조회한다.
-
유사도가 가장 높은 픽픽픽이 존재하지 않으면 빈 배열로 응답된다.
-
유사도 계산에 사용되는 embeddings 값이 없을 경우 503 예외를 발생한다.
-
외부 API(Open AI API) 를 사용하기 때문에 embeddings 값을 저장하지 못할 수 있다.
-
-
회원/익명 사용자 모두 조회할 수 있다.
정상 요청/응답
HTTP Request
GET /devdevdev/api/v1/picks/42/similarties HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTI1LCJleHAiOjE3NDY3MTgzMjV9.PYUwhgp90sM89HwBTyvuLU3Adi0jU_VQkPuafAQTVZE
Host: localhost:8080
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
O |
Bearer 엑세스 토큰 |
HTTP Request Path Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
타겟 픽픽픽 아이디 |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 554
{
"resultType" : "SUCCESS",
"datas" : [ {
"id" : 45,
"title" : "소영님 일본 부럽다.",
"voteTotalCount" : 4,
"commentTotalCount" : 3,
"similarity" : 0.9797958971132711
}, {
"id" : 44,
"title" : "쏘영님 일본 진짜 부럽다..",
"voteTotalCount" : 3,
"commentTotalCount" : 4,
"similarity" : 0.9649012813540153
}, {
"id" : 43,
"title" : "쏘영쏘 일본 진짜 대박 짱 부럽다!!!",
"voteTotalCount" : 2,
"commentTotalCount" : 5,
"similarity" : 0.9258200997725515
} ]
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
픽픽픽 아이디 |
||
|
|
픽픽픽 제목 |
||
|
|
픽픽픽 총 투표 수 |
||
|
|
픽픽픽 총 댓글 수 |
||
|
|
타겟 픽픽픽과 유사도 점수 |
예외
HTTP Response
{
"resultType" : "FAIL",
"message" : "픽픽픽 게시글이 없습니다.",
"errorCode" : 404
}
{
"resultType" : "FAIL",
"message" : "픽픽픽 게시글 상태가 승인 상태가 아닙니다. 관리자에게 문의하세요.",
"errorCode" : 400
}
{
"resultType" : "FAIL",
"message" : "일시적으로 오류가 발생했습니다.",
"errorCode" : 503
}
픽픽픽 댓글/답글
픽픽픽 댓글 작성 API(POST: /devdevdev/api/v1/picks/{pickId}/comments)
-
픽픽픽 댓글을 작성한다.
-
회원만 픽픽픽 댓글을 작성 할 수 있다.
정상 요청/응답
HTTP Request
POST /devdevdev/api/v1/picks/15/comments HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTI0LCJleHAiOjE3NDY3MTgzMjR9.GU28z1uA2B7OunH7HDOtJdZVOgbzD3i9ivgdzf_s0aE
Content-Length: 65
Host: localhost:8080
{
"contents" : "안녕하세웅",
"isPickVotePublic" : true
}
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Request Path Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
픽픽픽 아이디 |
HTTP Request Fields
Path | Type | Optional | Description | Format |
---|---|---|---|---|
|
|
픽픽픽 댓글 내용(최소 1자 이상 최대 1,000자 이하) |
||
|
|
픽픽픽 공개 여부 |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 73
{
"resultType" : "SUCCESS",
"data" : {
"pickCommentId" : 52
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
픽픽픽 댓글 아이디 |
예외
HTTP Response
-
내용을 작성해주세요.
: 댓글(contents)을 작성하지 않는 경우(공백 이거나 빈문자열) -
픽픽픽 공개 여부는 필수 값 입니다.
: 픽픽픽 공개 여부(isPickVotePublic)가 null 인 경우 -
픽픽픽 게시글이 없습니다.
: 픽픽픽 게시글이 존재하지 않는 경우 -
승인 상태가 아닌 픽픽픽에는 댓글을 작성할 수 없습니다.
: 픽픽픽이 승인 상태가 아닌 경우 -
투표한 픽픽픽 선택지가 존재하지 않습니다.
: 투표한 픽픽픽 선택지가 존재하지 않는 경우 -
익명 회원은 사용할 수 없는 기능 입니다.
: 익명 회원인 경우 -
회원을 찾을 수 없습니다.
: 회원이 존재하지 않는 경우
{
"resultType" : "FAIL",
"message" : "픽픽픽 공개 여부는 필수 값 입니다.",
"errorCode" : 400
}
픽픽픽 답글 작성 API(POST: /devdevdev/api/v1/picks/{pickId}/comments/{pickOriginParentCommentId}/{pickParentCommentId})
-
픽픽픽 답글을 작성한다.
-
회원만 픽픽픽 답글을 작성 할 수 있다.
-
픽픽픽 댓글이 삭제 상태 이면 답글을 작성 할 수 없다.
-
최초 댓글에 대한 답글을 작성할 경우
pickCommentOriginParentId
값과pickParentCommentId
값이 동일하다.
정상 요청/응답
HTTP Request
POST /devdevdev/api/v1/picks/5/comments/13/14 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTI0LCJleHAiOjE3NDY3MTgzMjR9.GU28z1uA2B7OunH7HDOtJdZVOgbzD3i9ivgdzf_s0aE
Content-Length: 49
Host: localhost:8080
{
"contents" : "댓글1의 답글1의 답글"
}
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Request Path Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
픽픽픽 아이디 |
||
|
픽픽픽 최상단 댓글 아이디 |
||
|
픽픽픽 답글 대상의 댓글 아이디 |
HTTP Request Fields
Path | Type | Optional | Description | Format |
---|---|---|---|---|
|
|
픽픽픽 댓글 내용(최소 1자 이상 최대 1,000자 이하) |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 73
{
"resultType" : "SUCCESS",
"data" : {
"pickCommentId" : 15
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
픽픽픽 답글 아이디 |
예외
HTTP Response
-
내용을 작성해주세요.
: 댓글(contents)을 작성하지 않는 경우(공백 이거나 빈문자열) -
픽픽픽 댓글이 없습니다.
: 픽픽픽 댓글이 존재하지 않는 경우 -
삭제된 픽픽픽 댓글에는 답글을 작성할 수 없습니다.
: 픽픽픽 댓글이 삭제된 경우 -
승인 상태가 아닌 픽픽픽에는 답글을 작성할 수 없습니다.
: 픽픽픽이 승인 상태가 아닌 경우 -
익명 회원은 사용할 수 없는 기능 입니다.
: 익명 회원인 경우 -
회원을 찾을 수 없습니다.
: 회원이 존재하지 않는 경우
{
"resultType" : "FAIL",
"message" : "내용을 작성해주세요.",
"errorCode" : 400
}
픽픽픽 댓글/답글 수정 API(PATCH: /devdevdev/api/v1/picks/{pickId}/comments/{pickCommentId})
-
픽픽픽 댓글/답글을 수정한다.
-
회원 본인이 작성한 픽픽픽 댓글/답글을 수정 할 수 있다.
-
픽픽픽 공개 여부는 수정 할 수 없다.
-
삭제된 댓글/답글을 수정 할 수 없다.
정상 요청/응답
HTTP Request
PATCH /devdevdev/api/v1/picks/4/comments/12 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTI0LCJleHAiOjE3NDY3MTgzMjR9.GU28z1uA2B7OunH7HDOtJdZVOgbzD3i9ivgdzf_s0aE
Content-Length: 33
Host: localhost:8080
{
"contents" : "주무세웅"
}
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Request Path Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
픽픽픽 아이디 |
||
|
픽픽픽 댓글 아이디 |
HTTP Request Fields
Path | Type | Optional | Description | Format |
---|---|---|---|---|
|
|
픽픽픽 댓글 내용(최소 1자 이상 최대 1,000자 이하) |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 73
{
"resultType" : "SUCCESS",
"data" : {
"pickCommentId" : 12
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
픽픽픽 댓글 아이디 |
예외
HTTP Response
-
내용을 작성해주세요.
: 댓글(contents)을 작성하지 않는 경우(공백 이거나 빈문자열) -
픽픽픽 댓글이 없습니다.
: 픽픽픽 댓글이 존재하지 않거나 본인이 작성하지 않았거나 픽픽픽 댓글 삭제된 경우 -
승인 상태가 아닌 픽픽픽에는 댓글을 수정할 수 없습니다.
: 픽픽픽이 승인 상태가 아닌 경우 -
익명 회원은 사용할 수 없는 기능 입니다.
: 익명 회원인 경우 -
회원을 찾을 수 없습니다.
: 회원이 존재하지 않는 경우
{
"resultType" : "FAIL",
"message" : "내용을 작성해주세요.",
"errorCode" : 400
}
픽픽픽 댓글/답글 삭제 API(DELETE: /devdevdev/api/v1/picks/{pickId}/comments/{pickCommentId})
-
픽픽픽 댓글/답글을 삭제한다.
-
회원 본인이 작성한 픽픽픽 댓글/답글만 삭제 할 수 있다.
-
삭제된 댓글/답글을 삭제 할 수 없다.
-
어드민 권한을 가진 회원은 모든 댓글/답글을 삭제할 수 있다.
정상 요청/응답
HTTP Request
DELETE /devdevdev/api/v1/picks/6/comments/16 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTI0LCJleHAiOjE3NDY3MTgzMjR9.GU28z1uA2B7OunH7HDOtJdZVOgbzD3i9ivgdzf_s0aE
Host: localhost:8080
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Request Path Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
픽픽픽 아이디 |
||
|
픽픽픽 댓글 아이디 |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 73
{
"resultType" : "SUCCESS",
"data" : {
"pickCommentId" : 16
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
픽픽픽 댓글 아이디 |
예외
HTTP Response
-
픽픽픽 댓글이 없습니다.
: 픽픽픽 댓글이 존재하지 않거나 본인이 작성하지 않았거나 픽픽픽 댓글 삭제된 경우 -
승인 상태가 아닌 픽픽픽에는 댓글을 삭제할 수 없습니다.
: 픽픽픽이 승인 상태가 아닌 경우 -
익명 회원은 사용할 수 없는 기능 입니다.
: 익명 회원인 경우 -
회원을 찾을 수 없습니다.
: 회원이 존재하지 않는 경우
{
"resultType" : "FAIL",
"message" : "픽픽픽 댓글이 없습니다.",
"errorCode" : 404
}
픽픽픽 댓글/답글 조회 API(GET: /devdevdev/api/v1/picks/{pickId}/comments)
-
픽픽픽 댓글/답글을 조회한다.
정상 요청/응답
HTTP Request
GET /devdevdev/api/v1/picks/11/comments?pickCommentId=9223372036854775807&size=5&pickCommentSort=MOST_COMMENTED HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTI0LCJleHAiOjE3NDY3MTgzMjR9.GU28z1uA2B7OunH7HDOtJdZVOgbzD3i9ivgdzf_s0aE
Host: localhost:8080
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
O |
Bearer 엑세스 토큰 |
HTTP Request Path Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
픽픽픽 아이디 |
HTTP Request Query Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
O |
픽픽픽 댓글 아이디 |
|
|
O |
조회되는 데이터 수 |
|
|
O |
픽픽픽 댓글 정렬 조건 |
LATEST(최신순), MOST_LIKED(좋아요순), MOST_COMMENTED(답글 많은순) |
|
O |
픽픽픽 댓글 필터링 옵션 타입(체크박스) |
firstPickOption(첫 번째 픽 옵션), secondPickOption(두 번째 픽 옵션) |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 5813
{
"resultType" : "SUCCESS",
"data" : {
"content" : [ {
"pickCommentId" : 43,
"createdAt" : "2025-05-08 15:02:04",
"memberId" : 30,
"author" : "미뇽냥녕냥녕",
"isCommentOfPickAuthor" : true,
"isCommentAuthor" : false,
"isRecommended" : false,
"maskedEmail" : "als******",
"votedPickOption" : "firstPickOption",
"votedPickOptionTitle" : "휴양지의 근본 제주도!",
"contents" : "나는 미뇽냥녕뇽이다!",
"replyTotalCount" : 2,
"recommendTotalCount" : 2,
"isModified" : false,
"isDeleted" : false,
"replies" : [ {
"pickCommentId" : 46,
"memberId" : 32,
"pickParentCommentMemberId" : 31,
"pickParentCommentId" : 47,
"pickOriginParentCommentId" : 43,
"createdAt" : "2025-05-08 15:02:04",
"isCommentOfPickAuthor" : false,
"isCommentAuthor" : false,
"isRecommended" : false,
"pickParentCommentAuthor" : "야임마",
"author" : "아이러브 손흥민",
"maskedEmail" : "mmj****",
"contents" : "손흥민 사랑해~!",
"recommendTotalCount" : 0,
"isModified" : false,
"isDeleted" : false
}, {
"pickCommentId" : 47,
"memberId" : 31,
"pickParentCommentMemberId" : 30,
"pickParentCommentId" : 43,
"pickOriginParentCommentId" : 43,
"createdAt" : "2025-05-08 15:02:04",
"isCommentOfPickAuthor" : false,
"isCommentAuthor" : false,
"isRecommended" : false,
"pickParentCommentAuthor" : "미뇽냥녕냥녕",
"author" : "야임마",
"maskedEmail" : "wlg*****",
"contents" : "누가 빨래좀 대신 개주세여...",
"recommendTotalCount" : 0,
"isModified" : false,
"isDeleted" : false
} ]
}, {
"pickCommentId" : 42,
"createdAt" : "2025-05-08 15:02:04",
"memberId" : 31,
"author" : "야임마",
"isCommentOfPickAuthor" : false,
"isCommentAuthor" : false,
"isRecommended" : false,
"maskedEmail" : "wlg*****",
"votedPickOption" : "firstPickOption",
"votedPickOptionTitle" : "휴양지의 근본 제주도!",
"contents" : "임하하하하하",
"replyTotalCount" : 2,
"recommendTotalCount" : 1,
"isModified" : false,
"isDeleted" : false,
"replies" : [ {
"pickCommentId" : 44,
"memberId" : 34,
"pickParentCommentMemberId" : 31,
"pickParentCommentId" : 42,
"pickOriginParentCommentId" : 42,
"createdAt" : "2025-05-08 15:02:04",
"isCommentOfPickAuthor" : false,
"isCommentAuthor" : false,
"isRecommended" : false,
"pickParentCommentAuthor" : "야임마",
"author" : "장세웅",
"maskedEmail" : "how*********",
"contents" : "댓글 작성자에 의해 삭제된 댓글입니다.",
"recommendTotalCount" : 0,
"isModified" : false,
"isDeleted" : true
}, {
"pickCommentId" : 45,
"memberId" : 33,
"pickParentCommentMemberId" : 31,
"pickParentCommentId" : 42,
"pickOriginParentCommentId" : 42,
"createdAt" : "2025-05-08 15:02:04",
"isCommentOfPickAuthor" : false,
"isCommentAuthor" : false,
"isRecommended" : false,
"pickParentCommentAuthor" : "야임마",
"author" : "소영소",
"maskedEmail" : "mer******",
"contents" : "소주 없이는 못살아!!!!",
"recommendTotalCount" : 0,
"isModified" : false,
"isDeleted" : false
} ]
}, {
"pickCommentId" : 41,
"createdAt" : "2025-05-08 15:02:04",
"memberId" : 32,
"author" : "아이러브 손흥민",
"isCommentOfPickAuthor" : false,
"isCommentAuthor" : false,
"isRecommended" : false,
"maskedEmail" : "mmj****",
"votedPickOption" : "secondPickOption",
"votedPickOptionTitle" : "한국의 알프스 강원도!",
"contents" : "손흥민 최고다!",
"replyTotalCount" : 0,
"recommendTotalCount" : 0,
"isModified" : false,
"isDeleted" : false,
"replies" : [ ]
}, {
"pickCommentId" : 40,
"createdAt" : "2025-05-08 15:02:04",
"memberId" : 33,
"author" : "소영소",
"isCommentOfPickAuthor" : false,
"isCommentAuthor" : false,
"isRecommended" : false,
"maskedEmail" : "mer******",
"votedPickOption" : null,
"votedPickOptionTitle" : null,
"contents" : "나는 소영소",
"replyTotalCount" : 0,
"recommendTotalCount" : 0,
"isModified" : false,
"isDeleted" : false,
"replies" : [ ]
}, {
"pickCommentId" : 39,
"createdAt" : "2025-05-08 15:02:04",
"memberId" : 34,
"author" : "장세웅",
"isCommentOfPickAuthor" : false,
"isCommentAuthor" : false,
"isRecommended" : false,
"maskedEmail" : "how*********",
"votedPickOption" : null,
"votedPickOptionTitle" : null,
"contents" : "힘들면 힘을내자!",
"replyTotalCount" : 0,
"recommendTotalCount" : 0,
"isModified" : false,
"isDeleted" : false,
"replies" : [ ]
} ],
"pageable" : {
"pageNumber" : 0,
"pageSize" : 5,
"sort" : {
"empty" : false,
"sorted" : true,
"unsorted" : false
},
"offset" : 0,
"paged" : true,
"unpaged" : false
},
"totalElements" : 6,
"totalOriginParentComments" : 5,
"size" : 5,
"number" : 0,
"sort" : {
"empty" : false,
"sorted" : true,
"unsorted" : false
},
"first" : true,
"last" : false,
"numberOfElements" : 5,
"empty" : false
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
픽픽픽 댓글/답글 메인 배열 |
||
|
|
픽픽픽 댓글 아이디 |
||
|
|
픽픽픽 댓글 작성일시 |
||
|
|
픽픽픽 댓글 작성자 아이디 |
||
|
|
픽픽픽 댓글 작성자 닉네임 |
||
|
|
댓글 작성자가 픽픽픽 작성자인지 여부 |
||
|
|
로그인한 회원이 댓글 작성자인지 여부 |
||
|
|
로그인한 회원이 댓글 추천 여부 |
||
|
|
픽픽픽 댓글 작성자 이메일 |
||
|
|
픽픽픽 투표 선택 타입 |
firstPickOption(첫 번째 픽 옵션), secondPickOption(두 번째 픽 옵션) |
|
|
|
픽픽픽 투표 선택 타입 제목 |
String | null |
|
|
|
픽픽픽 댓글 내용 |
||
|
|
픽픽픽 댓글의 답글 총 갯수 |
||
|
|
픽픽픽 댓글 좋아요 총 갯수 |
||
|
|
픽픽픽 댓글 삭제 여부 |
||
|
|
픽픽픽 댓글 수정 여부 |
||
|
|
픽픽픽 답글 배열 |
||
|
|
픽픽픽 답글 아이디 |
||
|
|
픽픽픽 답글 작성자 아이디 |
||
|
|
픽픽픽 답글의 부모 댓글 아이디 |
||
|
|
픽픽픽 답글의 최상위 부모 댓글 아이디 |
||
|
|
픽픽픽 답글 작성일시 |
||
|
|
답글 작성자가 픽픽픽 작성자인지 여부 |
||
|
|
로그인한 회원이 답글 작성자인지 여부 |
||
|
|
로그인한 회원이 답글 추천 여부 |
||
|
|
픽픽픽 답글 작성자 닉네임 |
||
|
|
픽픽픽 답글 작성자 이메일 |
||
|
|
픽픽픽 답글 내용 |
||
|
|
픽픽픽 답글 좋아요 총 갯수 |
||
|
|
픽픽픽 답글 삭제 여부 |
||
|
|
픽픽픽 답글 수정 여부 |
||
|
|
픽픽픽 부모 댓글 작성자 아이디 |
||
|
|
픽픽픽 부모 댓글 작성자 닉네임 |
||
|
|
픽픽픽 메인 페이지네이션 정보 |
||
|
|
페이지 번호 |
||
|
|
페이지 사이즈 |
||
|
|
정렬 정보 |
||
|
|
정렬 정보가 비어있는지 여부 |
||
|
|
정렬 여부 |
||
|
|
비정렬 여부 |
||
|
|
페이지 오프셋 (페이지 크기 * 페이지 번호) |
||
|
|
페이지 정보 포함 여부 |
||
|
|
페이지 정보 비포함 여부 |
||
|
|
전체 댓글(답글 포함) 수 |
||
|
|
삭제 되지 않은 최상위 댓글 수 |
||
|
|
현재 페이지가 첫 페이지 여부 |
||
|
|
현재 페이지가 마지막 페이지 여부 |
||
|
|
페이지 크기 |
||
|
|
현재 페이지 |
||
|
|
정렬 정보 |
||
|
|
정렬 정보가 비어있는지 여부 |
||
|
|
정렬 상태 여부 |
||
|
|
비정렬 상태 여부 |
||
|
|
현재 페이지 데이터 수 |
||
|
|
현재 빈 페이지 여부 |
픽픽픽 댓글/답글 추천 API(POST: /picks/{pickId}/comments/{pickCommentId}/recommends)
-
픽픽픽 댓글/답글을 추천한다.
-
회원만 픽픽픽 댓글을 추천 할 수 있다.
-
이미 추천한 경우 추천이 취소 된다.
정상 요청/응답
HTTP Request
POST /devdevdev/api/v1/picks/13/comments/49/recommends HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTI0LCJleHAiOjE3NDY3MTgzMjR9.GU28z1uA2B7OunH7HDOtJdZVOgbzD3i9ivgdzf_s0aE
Host: localhost:8080
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Request Path Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
픽픽픽 아이디 |
||
|
픽픽픽 댓글/답글 아이디 |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 106
{
"resultType" : "SUCCESS",
"data" : {
"isRecommended" : true,
"recommendTotalCount" : 1
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
O |
응답 데이터 |
|
|
|
O |
로그인한 회원의 픽픽픽 댓글/답글 추천 여부 |
|
|
|
O |
픽픽픽 댓글/답글 추천 총 갯수 |
예외
HTTP Response
-
픽픽픽 댓글이 없습니다.
: 픽픽픽 댓글/답글이 존재하지 않는 경우 -
승인 상태가 아닌 픽픽픽에는 댓글을 추천할 수 없습니다.
: 픽픽픽이 승인 상태가 아닌 경우 -
삭제된 픽픽픽 댓글에는 추천할 수 없습니다.
: 픽픽픽 댓글/답글이 삭제된 경우 -
익명 회원은 사용할 수 없는 기능 입니다.
: 익명 회원인 경우 -
회원을 찾을 수 없습니다.
: 회원이 존재하지 않는 경우
{
"resultType" : "FAIL",
"message" : "승인 상태가 아닌 픽픽픽에는 댓글을 추천할 수 없습니다.",
"errorCode" : 400
}
픽픽픽 베스트 댓글/답글 조회 API(GET: /devdevdev/api/v1/picks/{pickId}/comments/best?size=)
-
픽픽픽 베스트 댓글/답글을 조회한다.
-
추천 수가 1개 미만이면 베스트 댓글에 포함되지 않는다.
-
댓글이 존재하지 않으면, 빈 배열을 응답할 수 있다.
-
-
최소 3개 최대 10개 까지만 조회가 가능하다.
-
삭제 상태의 최초 댓글은 베스트 댓글에 포함되지 않는다.
-
답글은 삭제 상태여도 포함된다.
-
정상 요청/응답
HTTP Request
GET /devdevdev/api/v1/picks/1/comments/best?size=3 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTE5LCJleHAiOjE3NDY3MTgzMTl9.jprdvxIl1BaqAnEyd3GI5LiH_RMGBm12CYsAH_aOyxk
Host: localhost:8080
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
O |
Bearer 엑세스 토큰 |
HTTP Request Path Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
픽픽픽 아이디 |
HTTP Request Query Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
O |
조회되는 데이터 수(min=3, max=10) |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 3313
{
"resultType" : "SUCCESS",
"datas" : [ {
"pickCommentId" : 6,
"createdAt" : "2025-05-08 15:02:04",
"memberId" : 1,
"author" : "김미뇽뇽뇽뇽",
"isCommentOfPickAuthor" : true,
"isCommentAuthor" : false,
"isRecommended" : false,
"maskedEmail" : "als******",
"votedPickOption" : "firstPickOption",
"votedPickOptionTitle" : "꿈파 최고!",
"contents" : "행복한~",
"replyTotalCount" : 2,
"recommendTotalCount" : 3,
"isModified" : true,
"isDeleted" : false,
"replies" : [ {
"pickCommentId" : 7,
"memberId" : 1,
"pickParentCommentMemberId" : 1,
"pickParentCommentId" : 6,
"pickOriginParentCommentId" : 6,
"createdAt" : "2025-05-08 15:02:04",
"isCommentOfPickAuthor" : true,
"isCommentAuthor" : false,
"isRecommended" : false,
"pickParentCommentAuthor" : "김미뇽뇽뇽뇽",
"author" : "김미뇽뇽뇽뇽",
"maskedEmail" : "als******",
"contents" : "진짜 너무 좋아",
"recommendTotalCount" : 0,
"isModified" : false,
"isDeleted" : false
}, {
"pickCommentId" : 8,
"memberId" : 6,
"pickParentCommentMemberId" : 1,
"pickParentCommentId" : 7,
"pickOriginParentCommentId" : 6,
"createdAt" : "2025-05-08 15:02:04",
"isCommentOfPickAuthor" : false,
"isCommentAuthor" : false,
"isRecommended" : false,
"pickParentCommentAuthor" : "김미뇽뇽뇽뇽",
"author" : "nickname",
"maskedEmail" : "use**",
"contents" : "커뮤니티 정책을 위반하여 삭제된 댓글입니다.",
"recommendTotalCount" : 0,
"isModified" : false,
"isDeleted" : true
} ]
}, {
"pickCommentId" : 5,
"createdAt" : "2025-05-08 15:02:04",
"memberId" : 2,
"author" : "이임하하하하하",
"isCommentOfPickAuthor" : false,
"isCommentAuthor" : false,
"isRecommended" : false,
"maskedEmail" : "wlg*****",
"votedPickOption" : "firstPickOption",
"votedPickOptionTitle" : "꿈파 최고!",
"contents" : "꿈빛!",
"replyTotalCount" : 1,
"recommendTotalCount" : 2,
"isModified" : false,
"isDeleted" : false,
"replies" : [ {
"pickCommentId" : 9,
"memberId" : 6,
"pickParentCommentMemberId" : 2,
"pickParentCommentId" : 5,
"pickOriginParentCommentId" : 5,
"createdAt" : "2025-05-08 15:02:04",
"isCommentOfPickAuthor" : false,
"isCommentAuthor" : false,
"isRecommended" : false,
"pickParentCommentAuthor" : "이임하하하하하",
"author" : "nickname",
"maskedEmail" : "use**",
"contents" : "사랑해요~",
"recommendTotalCount" : 0,
"isModified" : false,
"isDeleted" : false
} ]
}, {
"pickCommentId" : 4,
"createdAt" : "2025-05-08 15:02:04",
"memberId" : 3,
"author" : "문밍주주주주주",
"isCommentOfPickAuthor" : false,
"isCommentAuthor" : false,
"isRecommended" : false,
"maskedEmail" : "mmj****",
"votedPickOption" : "secondPickOption",
"votedPickOptionTitle" : "사랑해 꿈파!",
"contents" : "파티시엘~!",
"replyTotalCount" : 0,
"recommendTotalCount" : 1,
"isModified" : false,
"isDeleted" : false,
"replies" : [ ]
} ]
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
픽픽픽 댓글 아이디 |
||
|
|
픽픽픽 댓글 작성일시 |
||
|
|
픽픽픽 댓글 작성자 아이디 |
||
|
|
픽픽픽 댓글 작성자 닉네임 |
||
|
|
댓글 작성자가 픽픽픽 작성자인지 여부 |
||
|
|
로그인한 회원이 댓글 작성자인지 여부 |
||
|
|
로그인한 회원이 댓글 추천 여부 |
||
|
|
픽픽픽 댓글 작성자 이메일 |
||
|
|
픽픽픽 투표 선택 타입 |
firstPickOption(첫 번째 픽 옵션), secondPickOption(두 번째 픽 옵션) |
|
|
|
픽픽픽 투표 선택 타입 제목 |
String | null |
|
|
|
픽픽픽 댓글 내용 |
||
|
|
픽픽픽 댓글의 답글 총 갯수 |
||
|
|
픽픽픽 댓글 좋아요 총 갯수 |
||
|
|
픽픽픽 댓글 삭제 여부 |
||
|
|
픽픽픽 댓글 수정 여부 |
||
|
|
픽픽픽 답글 배열 |
||
|
|
픽픽픽 답글 아이디 |
||
|
|
픽픽픽 답글 작성자 아이디 |
||
|
|
픽픽픽 답글의 부모 댓글 아이디 |
||
|
|
픽픽픽 답글의 최상위 부모 댓글 아이디 |
||
|
|
픽픽픽 답글 작성일시 |
||
|
|
답글 작성자가 픽픽픽 작성자인지 여부 |
||
|
|
로그인한 회원이 답글 작성자인지 여부 |
||
|
|
로그인한 회원이 답글 추천 여부 |
||
|
|
픽픽픽 답글 작성자 닉네임 |
||
|
|
픽픽픽 답글 작성자 이메일 |
||
|
|
픽픽픽 답글 내용 |
||
|
|
픽픽픽 답글 좋아요 총 갯수 |
||
|
|
픽픽픽 답글 삭제 여부 |
||
|
|
픽픽픽 답글 수정 여부 |
||
|
|
픽픽픽 부모 댓글 작성자 아이디 |
||
|
|
픽픽픽 부모 댓글 작성자 닉네임 |
기술블로그
기술블로그 메인 API(GET: /devdevdev/api/v1/articles)
-
기술블로그 메인 화면을 조회하거나 검색할 수 있다.
-
회원/익명 사용자에 따라 API 응답값이 상이하다.
정상 요청/응답
HTTP Request
GET /devdevdev/api/v1/articles?size=1&techArticleSort=HIGHEST_SCORE&keyword=%ED%83%80%EC%9D%B4%ED%8B%80&elasticId=elasticId_1&companyId=17&score=10 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTMyLCJleHAiOjE3NDY3MTgzMzJ9.3jqAEmRFG3eJzxUuDA7UfMJdmiAxyayPXw76K6i8vtI
Host: localhost:8080
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
O |
Bearer 엑세스 토큰 |
HTTP Request Query Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
O |
조회되는 데이터 수 |
|
|
O |
정렬 조건 |
LATEST(최신순), POPULAR(인기순), MOST_VIEWED(조회순), MOST_COMMENTED(댓글순), HIGHEST_SCORE(정확도순) |
|
O |
검색어 |
|
|
O |
회사 아이디 |
|
|
O |
마지막 데이터의 엘라스틱서치 아이디 |
|
|
O |
마지막 데이터의 정확도 점수(정확도순 검색일 때에만 필수) |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 1231
{
"resultType" : "SUCCESS",
"data" : {
"content" : [ {
"id" : 21,
"elasticId" : "elasticId_5",
"thumbnailUrl" : "http://example.com/",
"isLogoImage" : false,
"techArticleUrl" : "http://example.com/5",
"title" : "타이틀_5",
"contents" : "내용",
"company" : {
"id" : 17,
"name" : "꿈빛 파티시엘",
"careerUrl" : "https://example.com",
"officialImageUrl" : "https://example.com/company.png"
},
"regDate" : "2024-08-25",
"author" : "작성자",
"viewTotalCount" : 15,
"recommendTotalCount" : 15,
"commentTotalCount" : 15,
"popularScore" : 150,
"isBookmarked" : false,
"score" : 0.13787751
} ],
"pageable" : {
"pageNumber" : 0,
"pageSize" : 1,
"sort" : {
"empty" : true,
"sorted" : false,
"unsorted" : true
},
"offset" : 0,
"paged" : true,
"unpaged" : false
},
"totalElements" : 20,
"size" : 1,
"number" : 0,
"sort" : {
"empty" : true,
"sorted" : false,
"unsorted" : true
},
"first" : true,
"last" : false,
"numberOfElements" : 1,
"empty" : false
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
기술블로그 메인 배열 |
||
|
|
기술블로그 아이디 |
||
|
|
기술블로그 엘라스틱서치 아이디 |
||
|
|
기술블로그 Url |
||
|
|
기술블로그 썸네일 이미지 |
||
|
|
썸네일 이미지의 회사 로고 여부 |
||
|
|
기술블로그 제목 |
||
|
|
기술블로그 내용 |
||
|
|
기술블로그 회사 |
||
|
|
기술블로그 회사 id |
||
|
|
기술블로그 회사 이름 |
||
|
|
기술블로그 회사 채용페이지 |
||
|
|
기술블로그 회사 로고 이미지 |
||
|
|
기술블로그 작성일 |
||
|
|
기술블로그 작성자 |
||
|
|
기술블로그 조회수 |
||
|
|
기술블로그 추천수 |
||
|
|
기술블로그 댓글수 |
||
|
|
기술블로그 인기점수 |
||
|
|
O |
회원의 북마크 여부(익명 사용자는 필드가 없다) |
|
|
|
정확도 점수 |
||
|
|
페이지네이션 정보 |
||
|
|
페이지 번호 |
||
|
|
페이지 사이즈 |
||
|
|
정렬 정보 |
||
|
|
정렬 정보가 비어있는지 여부 |
||
|
|
정렬 여부 |
||
|
|
비정렬 여부 |
||
|
|
페이지 오프셋 (페이지 크기 * 페이지 번호) |
||
|
|
페이지 정보 포함 여부 |
||
|
|
페이지 정보 비포함 여부 |
||
|
|
현재 페이지가 첫 페이지 여부 |
||
|
|
현재 페이지가 마지막 페이지 여부 |
||
|
|
페이지 크기 |
||
|
|
현재 페이지 |
||
|
|
정렬 정보 |
||
|
|
정렬 정보가 비어있는지 여부 |
||
|
|
정렬 상태 여부 |
||
|
|
비정렬 상태 여부 |
||
|
|
현재 페이지 데이터 수 |
||
|
|
전체 페이지 데이터 수 |
||
|
|
현재 빈 페이지 여부 |
예외
HTTP Response
{
"resultType" : "FAIL",
"message" : "존재하지 않는 기술블로그입니다.",
"errorCode" : 404
}
{
"resultType" : "FAIL",
"message" : "정확도순 페이지네이션을 위한 커서의 score를 입력해주세요.",
"errorCode" : 400
}
{
"resultType" : "FAIL",
"message" : "검색어에 특수문자는 포함할 수 없어요",
"errorCode" : 400
}
기술블로그 상세 API(GET: /devdevdev/api/v1/articles/{techArticleId})
-
기술블로그 상세 페이지를 조회한다.
-
회원/익명 사용자에 따라 API 응답값이 상이하다.
정상 요청/응답
HTTP Request
GET /devdevdev/api/v1/articles/17 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTMyLCJleHAiOjE3NDY3MTgzMzJ9.3jqAEmRFG3eJzxUuDA7UfMJdmiAxyayPXw76K6i8vtI
Host: localhost:8080
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
O |
Bearer 엑세스 토큰 |
|
O |
익명 회원 아이디 |
HTTP Request Path Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
기술블로그 아이디 |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 641
{
"resultType" : "SUCCESS",
"data" : {
"elasticId" : "elasticId_1",
"thumbnailUrl" : "http://example.com/",
"techArticleUrl" : "http://example.com/1",
"title" : "타이틀_1",
"contents" : "내용",
"company" : {
"id" : 17,
"name" : "꿈빛 파티시엘",
"careerUrl" : "https://example.com",
"officialImageUrl" : "https://example.com/company.png"
},
"regDate" : "2024-08-29",
"author" : "작성자",
"viewTotalCount" : 20,
"recommendTotalCount" : 19,
"commentTotalCount" : 19,
"popularScore" : 192,
"isBookmarked" : false,
"isRecommended" : false
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
기술블로그 엘라스틱서치 아이디 |
||
|
|
기술블로그 Url |
||
|
|
기술블로그 썸네일 이미지 |
||
|
|
기술블로그 제목 |
||
|
|
기술블로그 내용 |
||
|
|
기술블로그 회사 |
||
|
|
기술블로그 회사 id |
||
|
|
기술블로그 회사 이름 |
||
|
|
기술블로그 회사 채용페이지 |
||
|
|
기술블로그 회사 로고 이미지 |
||
|
|
기술블로그 작성일 |
||
|
|
기술블로그 작성자 |
||
|
|
기술블로그 내용 |
||
|
|
기술블로그 조회수 |
||
|
|
기술블로그 추천수 |
||
|
|
기술블로그 댓글수 |
||
|
|
기술블로그 인기점수 |
||
|
|
O |
회원의 북마크 여부(익명 사용자는 필드가 없다) |
|
|
|
O |
회원의 추천 여부 |
예외
HTTP Response
{
"resultType" : "FAIL",
"message" : "회원을 찾을 수 없습니다.",
"errorCode" : 404
}
{
"resultType" : "FAIL",
"message" : "존재하지 않는 기술블로그입니다.",
"errorCode" : 404
}
기술블로그 북마크 API(POST: /devdevdev/api/v1/articles/{techArticleId}/bookmark)
-
회원은 기술블로그 북마크 여부를 생성/갱신할 수 있다.
정상 요청/응답
HTTP Request
POST /devdevdev/api/v1/articles/17/bookmark HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTMxLCJleHAiOjE3NDY3MTgzMzF9.GrdIwnjgXNs3srfFF6PTI5nwcAiInkyZ-IkdlBthATc
Host: localhost:8080
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
O |
Bearer 엑세스 토큰 |
HTTP Request Path Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
기술블로그 아이디 |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 94
{
"resultType" : "SUCCESS",
"data" : {
"techArticleId" : 17,
"status" : true
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
기술블로그 아이디 |
||
|
|
북마크 상태 |
예외
HTTP Response
{
"resultType" : "FAIL",
"message" : "존재하지 않는 기술블로그입니다.",
"errorCode" : 404
}
{
"resultType" : "FAIL",
"message" : "회원을 찾을 수 없습니다.",
"errorCode" : 404
}
기술블로그 검색어 자동완성 API(GET: /devdevdev/api/v1/keywords/auto-complete)
-
회원 또는 익명회원은 기술블로그 키워드를 검색하면 해당 키워드로 시작하는 키워드 후보 리스트를 최대 20개 조회할 수 있다.
정상 요청/응답
HTTP Request
GET /devdevdev/api/v1/keywords/auto-complete?prefix=%EC%9E%90 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Host: localhost:8080
HTTP Request Query Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
검색 키워드 |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 101
{
"resultType" : "SUCCESS",
"datas" : [ "자바", "자바스크립트", "자바가 최고야" ]
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
기술블로그 추천 API(POST: /devdevdev/api/v1/articles/{techArticleId}/recommend)
-
회원과 익명회원은 기술블로그를 추천하거나 추천 취소할 수 있다.
정상 요청/응답
HTTP Request
POST /devdevdev/api/v1/articles/17/recommend HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTMxLCJleHAiOjE3NDY3MTgzMzF9.GrdIwnjgXNs3srfFF6PTI5nwcAiInkyZ-IkdlBthATc
Host: localhost:8080
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
O |
Bearer 엑세스 토큰 |
|
O |
익명 회원 아이디 |
HTTP Request Path Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
기술블로그 아이디 |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 126
{
"resultType" : "SUCCESS",
"data" : {
"techArticleId" : 17,
"status" : true,
"recommendTotalCount" : 20
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
기술블로그 아이디 |
||
|
|
추천 상태 |
||
|
|
기술블로그 총 추천수 |
예외
HTTP Response
{
"resultType" : "FAIL",
"message" : "존재하지 않는 기술블로그입니다.",
"errorCode" : 404
}
{
"resultType" : "FAIL",
"message" : "회원을 찾을 수 없습니다.",
"errorCode" : 404
}
기술블로그 댓글/답글
기술블로그 댓글 작성 API(POST: /devdevdev/api/v1/articles/{techArticleId}/comments)
-
회원은 기술블로그에 댓글을 작성할 수 있다.
-
익명회원은 댓글을 작성할 수 없다.
정상 요청/응답
HTTP Request
POST /devdevdev/api/v1/articles/3/comments HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTMwLCJleHAiOjE3NDY3MTgzMzB9.Hh0UTH99woLMJ25u6Uf8BiOlVBo9HTSYkO8b9xmknf0
Content-Length: 44
Host: localhost:8080
{
"contents" : "댓글 내용입니다."
}
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Request Path Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
기술블로그 아이디 |
HTTP Request Fields
Path | Type | Optional | Description | Format |
---|---|---|---|---|
|
|
기술블로그 댓글 내용(최소 1자 이상 최대 1,000자 이하) |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 72
{
"resultType" : "SUCCESS",
"data" : {
"techCommentId" : 5
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
기술블로그 댓글 아이디 |
예외
HTTP Response
-
댓글 내용을 작성해주세요.
: 댓글(contents)을 작성하지 않는 경우(공백 이거나 빈문자열) -
회원을 찾을 수 없습니다.
: 회원 정보가 없을 경우 -
익명 회원은 사용할 수 없는 기능 입니다.
: 익명 회원이 사용할 수 없는 기능일 경우 -
존재하지 않는 기술블로그입니다.
: 기술블로그가 존재하지 않는 경우
{
"resultType" : "FAIL",
"message" : "비회원은 현재 해당 기능을 이용할 수 없습니다.",
"errorCode" : 403
}
{
"resultType" : "FAIL",
"message" : "회원을 찾을 수 없습니다.",
"errorCode" : 404
}
{
"resultType" : "FAIL",
"message" : "존재하지 않는 기술블로그입니다.",
"errorCode" : 404
}
{
"resultType" : "FAIL",
"message" : "댓글 내용을 작성해주세요.",
"errorCode" : 400
}
기술블로그 답글 작성 API(POST: /devdevdev/api/v1/articles/{techArticleId}/comments/{originParentTechCommentId}/{parentTechCommentId}
-
회원은 기술블로그에 댓글에 답글을 작성할 수 있다.
-
익명회원은 답글을 작성할 수 없다.
-
삭제된 댓글에는 답글을 작성할 수 없다.
-
최초 댓글에 대한 답글을 작성할 경우
techCommentOriginParentId
값과techParentCommentId
값이 동일하다.
정상 요청/응답
HTTP Request
POST /devdevdev/api/v1/articles/2/comments/2/3 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTMwLCJleHAiOjE3NDY3MTgzMzB9.Hh0UTH99woLMJ25u6Uf8BiOlVBo9HTSYkO8b9xmknf0
Content-Length: 54
Host: localhost:8080
{
"contents" : "답글에 대한 답글입니다."
}
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Request Path Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
기술블로그 아이디 |
||
|
기술블로그 최상단 댓글 아이디 |
||
|
기술블로그 답글 대상의 댓글 아이디 |
HTTP Request Fields
Path | Type | Optional | Description | Format |
---|---|---|---|---|
|
|
기술블로그 댓글 내용(최소 1자 이상 최대 1,000자 이하) |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 72
{
"resultType" : "SUCCESS",
"data" : {
"techCommentId" : 4
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
기술블로그 댓글 아이디 |
예외
HTTP Response
-
댓글 내용을 작성해주세요.
: 댓글(contents)을 작성하지 않는 경우(공백 이거나 빈문자열) -
회원을 찾을 수 없습니다.
: 회원 정보가 없을 경우 -
익명 회원은 사용할 수 없는 기능 입니다.
: 익명 회원이 사용할 수 없는 기능일 경우 -
존재하지 않는 기술블로그입니다.
: 기술블로그가 존재하지 않는 경우
{
"resultType" : "FAIL",
"message" : "댓글 내용을 작성해주세요.",
"errorCode" : 400
}
기술블로그 댓글 수정 API(PATCH: /devdevdev/api/v1/articles/{techArticleId}/comments/{techCommentId})
-
기술블로그 댓글을 수정한다.
-
회원 본인이 작성한 기술블로그 댓글을 수정할 수 있다.
-
삭제된 댓글을 수정할 수 없다.
정상 요청/응답
HTTP Request
PATCH /devdevdev/api/v1/articles/7/comments/6 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTMwLCJleHAiOjE3NDY3MTgzMzB9.Hh0UTH99woLMJ25u6Uf8BiOlVBo9HTSYkO8b9xmknf0
Content-Length: 44
Host: localhost:8080
{
"contents" : "댓글 수정입니다."
}
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Request Path Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
기술블로그 아이디 |
||
|
기술블로그 댓글 아이디 |
HTTP Request Fields
Path | Type | Optional | Description | Format |
---|---|---|---|---|
|
|
기술블로그 댓글 내용(최소 1자 이상 최대 1,000자 이하) |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 72
{
"resultType" : "SUCCESS",
"data" : {
"techCommentId" : 6
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
기술블로그 댓글 아이디 |
예외
HTTP Response
-
내용을 작성해주세요.
: 댓글(contents)을 작성하지 않는 경우(공백 이거나 빈문자열) -
존재하지 않는 기술블로그입니다.
: 기술블로그가 존재하지 않는 경우 -
존재하지 않는 기술블로그 댓글입니다
: 기술블로그 댓글이 존재하지 않거나, 삭제된 댓글이거나, 본인이 작성한 댓글이 아닐 경우 -
익명 회원은 사용할 수 없는 기능 입니다.
: 익명 회원인 경우 -
회원을 찾을 수 없습니다.
: 회원이 존재하지 않는 경우
{
"resultType" : "FAIL",
"message" : "존재하지 않는 기술블로그 댓글입니다.",
"errorCode" : 404
}
{
"resultType" : "FAIL",
"message" : "댓글 내용을 작성해주세요.",
"errorCode" : 400
}
기술블로그 댓글 삭제 API(DELETE: /devdevdev/api/v1/articles/{techArticleId}/comments/{techCommentId})
-
기술블로그 댓글을 삭제한다.
-
회원 본인이 작성한 기술블로그 댓글을 삭제할 수 있다.
-
어드민 권한을 가진 회원은 모든 댓글을 삭제할 수 있다.
정상 요청/응답
HTTP Request
DELETE /devdevdev/api/v1/articles/8/comments/7 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTMwLCJleHAiOjE3NDY3MTgzMzB9.Hh0UTH99woLMJ25u6Uf8BiOlVBo9HTSYkO8b9xmknf0
Host: localhost:8080
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Request Path Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
기술블로그 아이디 |
||
|
기술블로그 댓글 아이디 |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 72
{
"resultType" : "SUCCESS",
"data" : {
"techCommentId" : 7
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
기술블로그 댓글 아이디 |
예외
HTTP Response
-
존재하지 않는 기술블로그입니다.
: 기술블로그가 존재하지 않는 경우 -
존재하지 않는 기술블로그 댓글입니다
: 기술블로그 댓글이 존재하지 않거나, 삭제된 댓글이거나, 본인이 작성한 댓글이 아닐 경우 -
익명 회원은 사용할 수 없는 기능 입니다.
: 익명 회원인 경우 -
회원을 찾을 수 없습니다.
: 회원이 존재하지 않는 경우
{
"resultType" : "FAIL",
"message" : "존재하지 않는 기술블로그 댓글입니다.",
"errorCode" : 404
}
기술블로그 댓글/답글 조회 API(GET: /devdevdev/api/v1/articles/{techArticleId}/comments)
-
기술블로그 댓글/답글을 조회한다.
정상 요청/응답
HTTP Request
GET /devdevdev/api/v1/articles/12/comments?techCommentId=12&size=5&techCommentSort=OLDEST HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTMwLCJleHAiOjE3NDY3MTgzMzB9.Hh0UTH99woLMJ25u6Uf8BiOlVBo9HTSYkO8b9xmknf0
Host: localhost:8080
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
O |
Bearer 엑세스 토큰 |
HTTP Request Path Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
기술블로그 아이디 |
HTTP Request Query Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
O |
기술블로그 댓글 아이디 |
|
|
O |
조회 데이터 수 |
|
|
O |
기술블로그 댓글 정렬 조건 |
OLDEST(등록순), LATEST(최신순), MOST_LIKED(좋아요순), MOST_COMMENTED(답글 많은순) |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 3879
{
"resultType" : "SUCCESS",
"data" : {
"content" : [ {
"techCommentId" : 13,
"memberId" : 12,
"author" : "꿈빛파티시엘",
"maskedEmail" : "dre************",
"contents" : "최상위 댓글2",
"replyTotalCount" : 0,
"recommendTotalCount" : 0,
"isCommentAuthor" : true,
"isRecommended" : true,
"isModified" : false,
"isDeleted" : false,
"replies" : [ {
"techCommentId" : 20,
"memberId" : 12,
"techParentCommentMemberId" : 12,
"techParentCommentId" : 13,
"techOriginParentCommentId" : 13,
"isCommentAuthor" : true,
"isRecommended" : true,
"techParentCommentAuthor" : "꿈빛파티시엘",
"author" : "꿈빛파티시엘",
"maskedEmail" : "dre************",
"contents" : "최상위 댓글2의 답글1",
"recommendTotalCount" : 0,
"isDeleted" : false,
"isModified" : false,
"createdAt" : "2025-05-08 15:02:10"
}, {
"techCommentId" : 21,
"memberId" : 12,
"techParentCommentMemberId" : 12,
"techParentCommentId" : 13,
"techOriginParentCommentId" : 13,
"isCommentAuthor" : true,
"isRecommended" : false,
"techParentCommentAuthor" : "꿈빛파티시엘",
"author" : "꿈빛파티시엘",
"maskedEmail" : "dre************",
"contents" : "최상위 댓글2의 답글2",
"recommendTotalCount" : 0,
"isDeleted" : false,
"isModified" : false,
"createdAt" : "2025-05-08 15:02:10"
} ],
"createdAt" : "2025-05-08 15:02:10"
}, {
"techCommentId" : 14,
"memberId" : 12,
"author" : "꿈빛파티시엘",
"maskedEmail" : "dre************",
"contents" : "최상위 댓글3",
"replyTotalCount" : 0,
"recommendTotalCount" : 0,
"isCommentAuthor" : true,
"isRecommended" : false,
"isModified" : false,
"isDeleted" : false,
"replies" : [ ],
"createdAt" : "2025-05-08 15:02:10"
}, {
"techCommentId" : 15,
"memberId" : 12,
"author" : "꿈빛파티시엘",
"maskedEmail" : "dre************",
"contents" : "최상위 댓글4",
"replyTotalCount" : 0,
"recommendTotalCount" : 0,
"isCommentAuthor" : true,
"isRecommended" : false,
"isModified" : false,
"isDeleted" : false,
"replies" : [ ],
"createdAt" : "2025-05-08 15:02:10"
}, {
"techCommentId" : 16,
"memberId" : 12,
"author" : "꿈빛파티시엘",
"maskedEmail" : "dre************",
"contents" : "최상위 댓글5",
"replyTotalCount" : 0,
"recommendTotalCount" : 0,
"isCommentAuthor" : true,
"isRecommended" : false,
"isModified" : false,
"isDeleted" : false,
"replies" : [ ],
"createdAt" : "2025-05-08 15:02:10"
}, {
"techCommentId" : 17,
"memberId" : 12,
"author" : "꿈빛파티시엘",
"maskedEmail" : "dre************",
"contents" : "최상위 댓글6",
"replyTotalCount" : 0,
"recommendTotalCount" : 0,
"isCommentAuthor" : true,
"isRecommended" : false,
"isModified" : false,
"isDeleted" : false,
"replies" : [ ],
"createdAt" : "2025-05-08 15:02:10"
} ],
"pageable" : {
"pageNumber" : 0,
"pageSize" : 5,
"sort" : {
"empty" : true,
"sorted" : false,
"unsorted" : true
},
"offset" : 0,
"paged" : true,
"unpaged" : false
},
"totalElements" : 12,
"totalOriginParentComments" : 6,
"size" : 5,
"number" : 0,
"sort" : {
"empty" : true,
"sorted" : false,
"unsorted" : true
},
"first" : true,
"last" : false,
"numberOfElements" : 5,
"empty" : false
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
기술블로그 댓글/답글 메인 배열 |
||
|
|
기술블로그 댓글 아이디 |
||
|
|
기술블로그 댓글 작성일시 |
||
|
|
기술블로그 댓글 작성자 아이디 |
||
|
|
기술블로그 댓글 작성자 닉네임 |
||
|
|
기술블로그 댓글 작성자 이메일 |
||
|
|
기술블로그 댓글 내용 |
||
|
|
회원의 기술블로그 댓글 작성자 여부 |
||
|
|
기술블로그 댓글의 답글 총 갯수 |
||
|
|
기술블로그 댓글 좋아요 총 갯수 |
||
|
|
기술블로그 댓글 삭제 여부 |
||
|
|
기술블로그 댓글 편집 여부 |
||
|
|
기술블로그 댓글 좋아요 여부 |
||
|
|
기술블로그 답글 배열 |
||
|
|
기술블로그 답글 아이디 |
||
|
|
기술블로그 답글 작성자 아이디 |
||
|
|
기술블로그 답글의 부모 댓글 아이디 |
||
|
|
기술블로그 답글의 최상위 부모 댓글 아이디 |
||
|
|
기술블로그 답글 작성일시 |
||
|
|
기술블로그 답글의 부모 댓글 작성자 아이디 |
||
|
|
기술블로그 답글의 부모 댓글 작성자 닉네임 |
||
|
|
기술블로그 답글 작성자 닉네임 |
||
|
|
회원의 기술블로그 답글 작성자 여부 |
||
|
|
기술블로그 답글 작성자 이메일 |
||
|
|
기술블로그 답글 내용 |
||
|
|
기술블로그 답글 좋아요 총 갯수 |
||
|
|
기술블로그 댓글 삭제 여부 |
||
|
|
기술블로그 댓글 편집 여부 |
||
|
|
기술블로그 댓글 좋아요 여부 |
||
|
|
기술블로그 메인 페이지네이션 정보 |
||
|
|
페이지 번호 |
||
|
|
페이지 사이즈 |
||
|
|
정렬 정보 |
||
|
|
정렬 정보가 비어있는지 여부 |
||
|
|
정렬 여부 |
||
|
|
비정렬 여부 |
||
|
|
페이지 오프셋 (페이지 크기 * 페이지 번호) |
||
|
|
페이지 정보 포함 여부 |
||
|
|
페이지 정보 비포함 여부 |
||
|
|
전체 댓글 수 |
||
|
|
삭제 되지 않은 최상위 댓글 수 |
||
|
|
현재 페이지가 첫 페이지 여부 |
||
|
|
현재 페이지가 마지막 페이지 여부 |
||
|
|
페이지 크기 |
||
|
|
현재 페이지 |
||
|
|
정렬 정보 |
||
|
|
정렬 정보가 비어있는지 여부 |
||
|
|
정렬 상태 여부 |
||
|
|
비정렬 상태 여부 |
||
|
|
현재 페이지 데이터 수 |
||
|
|
현재 빈 페이지 여부 |
기술블로그 댓글/답글 추천 API(POST: /articles/{techArticleId}/comments/{techCommentId}/recommends)
-
회원은 기술블로그 댓글/답글을 추천할 수 있다.
-
이미 추천한 경우 추천이 취소된다.
정상 요청/응답
HTTP Request
POST /devdevdev/api/v1/articles/1/comments/1/recommends HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTMwLCJleHAiOjE3NDY3MTgzMzB9.Hh0UTH99woLMJ25u6Uf8BiOlVBo9HTSYkO8b9xmknf0
Host: localhost:8080
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Request Path Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
기술블로그 아이디 |
||
|
기술블로그 댓글/답글 아이디 |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 106
{
"resultType" : "SUCCESS",
"data" : {
"isRecommended" : true,
"recommendTotalCount" : 1
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
O |
응답 데이터 |
|
|
|
O |
로그인한 회원의 기술블로그 댓글/답글 추천 여부 |
|
|
|
O |
기술블로그 댓글/답글 추천 총 갯수 |
예외
HTTP Response
-
존재하지 않는 기술블로그입니다.
: 기술블로그가 존재하지 않는 경우 -
존재하지 않는 기술블로그 댓글입니다
: 기술블로그 댓글이 존재하지 않거나, 삭제된 댓글이거나, 본인이 작성한 댓글이 아닐 경우 -
익명 회원은 사용할 수 없는 기능 입니다.
: 익명 회원인 경우 -
회원을 찾을 수 없습니다.
: 회원이 존재하지 않는 경우
{
"resultType" : "FAIL",
"message" : "존재하지 않는 기술블로그 댓글입니다.",
"errorCode" : 404
}
기술블로그 베스트 댓글/답글 조회 API(GET: /devdevdev/api/v1/articles/{techArticleId}/comments/best?size=)
-
기술블로그 베스트 댓글/답글을 조회한다.
-
댓글이 존재하지 않으면, 빈 배열을 응답할 수 있다.
-
-
최소 3개 최대 10개 까지만 조회가 가능하다.
-
삭제 상태의 최초 댓글은 베스트 댓글에 포함되지 않는다.
-
답글은 삭제 상태여도 포함된다.
-
정상 요청/응답
HTTP Request
GET /devdevdev/api/v1/articles/10/comments/best?size=3 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTMwLCJleHAiOjE3NDY3MTgzMzB9.Hh0UTH99woLMJ25u6Uf8BiOlVBo9HTSYkO8b9xmknf0
Host: localhost:8080
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
O |
Bearer 엑세스 토큰 |
HTTP Request Path Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
기술블로그 아이디 |
HTTP Request Query Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
O |
조회되는 데이터 수(min=3, max=10) |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 1719
{
"resultType" : "SUCCESS",
"datas" : [ {
"techCommentId" : 8,
"memberId" : 8,
"author" : "김민영",
"maskedEmail" : "als******",
"contents" : "최상위 댓글1 수정",
"replyTotalCount" : 0,
"recommendTotalCount" : 3,
"isCommentAuthor" : false,
"isRecommended" : false,
"isModified" : true,
"isDeleted" : false,
"replies" : [ {
"techCommentId" : 11,
"memberId" : 10,
"techParentCommentMemberId" : 8,
"techParentCommentId" : 8,
"techOriginParentCommentId" : 8,
"isCommentAuthor" : false,
"isRecommended" : false,
"techParentCommentAuthor" : "김민영",
"author" : "문민주",
"maskedEmail" : "mmj****",
"contents" : "최상위 댓글1의 답글1",
"recommendTotalCount" : 0,
"isDeleted" : false,
"isModified" : false,
"createdAt" : "2025-05-08 15:02:10"
} ],
"createdAt" : "2025-05-08 15:02:10"
}, {
"techCommentId" : 9,
"memberId" : 9,
"author" : "이임하",
"maskedEmail" : "wlg*****",
"contents" : "최상위 댓글1",
"replyTotalCount" : 0,
"recommendTotalCount" : 2,
"isCommentAuthor" : false,
"isRecommended" : false,
"isModified" : false,
"isDeleted" : false,
"replies" : [ ],
"createdAt" : "2025-05-08 15:02:10"
}, {
"techCommentId" : 10,
"memberId" : 10,
"author" : "문민주",
"maskedEmail" : "mmj****",
"contents" : "최상위 댓글1",
"replyTotalCount" : 0,
"recommendTotalCount" : 1,
"isCommentAuthor" : false,
"isRecommended" : false,
"isModified" : false,
"isDeleted" : false,
"replies" : [ ],
"createdAt" : "2025-05-08 15:02:10"
} ]
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
기술블로그 댓글 아이디 |
||
|
|
기술블로그 댓글 작성일시 |
||
|
|
기술블로그 댓글 작성자 아이디 |
||
|
|
기술블로그 댓글 작성자 닉네임 |
||
|
|
로그인한 회원이 댓글 작성자인지 여부 |
||
|
|
로그인한 회원이 댓글 추천 여부 |
||
|
|
기술블로그 댓글 작성자 이메일 |
||
|
|
기술블로그 댓글 내용 |
||
|
|
기술블로그 댓글의 답글 총 갯수 |
||
|
|
기술블로그 댓글 좋아요 총 갯수 |
||
|
|
기술블로그 댓글 삭제 여부 |
||
|
|
기술블로그 댓글 수정 여부 |
||
|
|
기술블로그 답글 배열 |
||
|
|
기술블로그 답글 아이디 |
||
|
|
기술블로그 답글 작성자 아이디 |
||
|
|
기술블로그 답글의 부모 댓글 아이디 |
||
|
|
기술블로그 답글의 최상위 부모 댓글 아이디 |
||
|
|
기술블로그 답글 작성일시 |
||
|
|
로그인한 회원이 답글 작성자인지 여부 |
||
|
|
로그인한 회원이 답글 추천 여부 |
||
|
|
기술블로그 답글 작성자 닉네임 |
||
|
|
기술블로그 답글 작성자 이메일 |
||
|
|
기술블로그 답글 내용 |
||
|
|
기술블로그 답글 좋아요 총 갯수 |
||
|
|
기술블로그 답글 삭제 여부 |
||
|
|
기술블로그 답글 수정 여부 |
||
|
|
기술블로그 부모 댓글 작성자 아이디 |
||
|
|
기술블로그 부모 댓글 작성자 닉네임 |
기술 블로그 구독
기업 구독 API(POST: /devdevdev/api/v1/subscriptions)
-
회원은 구독한 가능한 기업을 구독 할 수 있다.
정상 요청/응답
HTTP Request
POST /devdevdev/api/v1/subscriptions HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTMwLCJleHAiOjE3NDY3MTgzMzB9.Hh0UTH99woLMJ25u6Uf8BiOlVBo9HTSYkO8b9xmknf0
Content-Length: 21
Host: localhost:8080
{
"companyId" : 1
}
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Request Fields
Path | Type | Optional | Description | Format |
---|---|---|---|---|
|
|
기업 아이디 |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 61
{
"resultType" : "SUCCESS",
"data" : {
"id" : 1
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
구독 아이디 |
예외
HTTP Response
-
익명 회원은 사용할 수 없는 기능 입니다.
: 익명 회원인 경우 -
회원을 찾을 수 없습니다.
: 회원이 존재하지 않는 경우 -
이미 구독하고 있는 기업입니다.
: 이미 구독하고 있는 기업인 경우 -
존재하지 않는 기업 입니다.
: 존재하지 않는 기업인 경우 -
기업 아이디는 필수 입니다.
: 기업 아이디가 null 인 경우
{
"resultType" : "FAIL",
"message" : "존재하지 않는 기업 입니다.",
"errorCode" : 404
}
기업 구독 취소 API(DELETE: /devdevdev/api/v1/subscriptions)
-
회원은 구독한 가능한 기업을 구독 할 수 있다.
정상 요청/응답
HTTP Request
DELETE /devdevdev/api/v1/subscriptions HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTMwLCJleHAiOjE3NDY3MTgzMzB9.Hh0UTH99woLMJ25u6Uf8BiOlVBo9HTSYkO8b9xmknf0
Content-Length: 21
Host: localhost:8080
{
"companyId" : 1
}
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Request Fields
Path | Type | Optional | Description | Format |
---|---|---|---|---|
|
|
기업 아이디 |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 30
{
"resultType" : "SUCCESS"
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
예외
HTTP Response
-
익명 회원은 사용할 수 없는 기능 입니다.
: 익명 회원인 경우 -
회원을 찾을 수 없습니다.
: 회원이 존재하지 않는 경우 -
구독 이력이 없습니다.
: 구독 이력이 없는 경우 -
기업 아이디는 필수 입니다.
: 기업 아이디가 null 인 경우
{
"resultType" : "FAIL",
"message" : "구독 이력이 없습니다.",
"errorCode" : 404
}
구독 가능한 기업 목록 조회 API(GET: /devdevdev/api/v1/subscriptions/companies)
-
회원 또는 익명회원이 구독 가능한 기업 목록을 조회한다.
정상 요청/응답
HTTP Request
GET /devdevdev/api/v1/subscriptions/companies?size=10&companyId=105 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTMwLCJleHAiOjE3NDY3MTgzMzB9.Hh0UTH99woLMJ25u6Uf8BiOlVBo9HTSYkO8b9xmknf0
Host: localhost:8080
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Request Query Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
O |
조회되는 데이터 수 |
|
|
O |
기업 아이디 |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 666
{
"resultType" : "SUCCESS",
"data" : {
"content" : [ {
"companyId" : 1,
"companyImageUrl" : "https://www.teuida.net/public/src/img/teuida_logo.png",
"isSubscribed" : true
} ],
"pageable" : {
"pageNumber" : 0,
"pageSize" : 20,
"sort" : {
"empty" : true,
"sorted" : false,
"unsorted" : true
},
"offset" : 0,
"paged" : true,
"unpaged" : false
},
"size" : 20,
"number" : 0,
"sort" : {
"empty" : true,
"sorted" : false,
"unsorted" : true
},
"first" : true,
"last" : true,
"numberOfElements" : 1,
"empty" : false
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
구독 가능한 기업 목록 메인 배열 |
||
|
|
기업 아이디 |
||
|
|
기업 로고 이미지 url |
||
|
|
회원의 구독 여부 |
||
|
|
픽픽픽 메인 페이지네이션 정보 |
||
|
|
페이지 번호 |
||
|
|
페이지 사이즈 |
||
|
|
정렬 정보 |
||
|
|
정렬 정보가 비어있는지 여부 |
||
|
|
정렬 여부 |
||
|
|
비정렬 여부 |
||
|
|
페이지 오프셋 (페이지 크기 * 페이지 번호) |
||
|
|
페이지 정보 포함 여부 |
||
|
|
페이지 정보 비포함 여부 |
||
|
|
현재 페이지가 첫 페이지 여부 |
||
|
|
현재 페이지가 마지막 페이지 여부 |
||
|
|
페이지 크기 |
||
|
|
현재 페이지 |
||
|
|
정렬 정보 |
||
|
|
정렬 정보가 비어있는지 여부 |
||
|
|
정렬 상태 여부 |
||
|
|
비정렬 상태 여부 |
||
|
|
현재 페이지 데이터 수 |
||
|
|
현재 빈 페이지 여부 |
구독 가능한 기업 상세 조회 API(GET: /devdevdev/api/v1/subscriptions/companies/{companyId})
-
모든 회원은 구독 가능한 기업의 상세 정보를 조회할 수 있다.
정상 요청/응답
HTTP Request
GET /devdevdev/api/v1/subscriptions/companies/1?size=10&companyId=105 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTMwLCJleHAiOjE3NDY3MTgzMzB9.Hh0UTH99woLMJ25u6Uf8BiOlVBo9HTSYkO8b9xmknf0
Host: localhost:8080
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Request Path Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
기업 아이디 |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 1285
{
"resultType" : "SUCCESS",
"data" : {
"companyId" : 1,
"companyName" : "Teuida",
"industry" : "교육",
"companyDescription" : "“외국인의 한국어가 트이다”\n영어 공부 오래 했지만 영어로 말할 때 주저하게 되죠? 외국인도 마찬가지예요. 한국어 말할 때 주저하게 돼요.\n트이다는 화면 속 한국인과 가상대화를 하는 경험을 통해 외국인이 한국어 회화에 자신감을 가질 수 있도록 도움을 주는 스타트업이에요.\n전 세계 130만 명 이상의 사용자가 웹드라마 속 배우랑 가상대화를 하면서 한국어를 배우고 한국어 말하기에 자신감을 향상하고 있어요.\n우리는 외국어를 학습하기보다 여행을 갔을 때, 외국인 친구를 사귀었을 때 자신이 하고 싶은 말을 할 수 있도록 재미있는 콘텐츠와 서비스를 제공하기 위해 노력하고 있어요. 모든 사람들이 자신의 생각, 의견을 어떤 언어로든 말할 수 있는 용기를 심어주고 싶어요.",
"companyOfficialImageUrl" : "https://www.teuida.net/public/src/img/teuida_logo.png",
"companyCareerUrl" : "https://www.wanted.co.kr/company/5908",
"techArticleTotalCount" : 3980,
"isSubscribed" : true
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
기업 아이디 |
||
|
|
기업명 |
||
|
|
산업군 |
||
|
|
기업 채용 url |
||
|
|
기업 로고 url |
||
|
|
기업 설명 |
||
|
|
기술 블로그 총 갯수 |
||
|
|
구독 여부 |
예외
HTTP Response
-
회원을 찾을 수 없습니다.
: 회원이 존재하지 않는 경우 -
존재하지 않는 기업 입니다.
: 존재하지 않는 기업인 경우
{
"resultType" : "FAIL",
"message" : "존재하지 않는 기업 입니다.",
"errorCode" : 404
}
알림
실시간 알림 수신 API(GET: /devdevdev/api/v1/notifications)
-
회원이 알림을 실시간으로 수신한다.
-
알림 처리 방식은 Server-Sent Events를 사용한다.
-
5분의 타임아웃, 30초 마다 heartbeat 를 전송한다.
-
-
기술블로그 알림 시나리오
-
SSE 구독 상태인 경우
-
SSE 구독
-
읽지 않은 알림이 있는 경우
-
"읽지 않은 알림이 %d개 있어요!"
전송 -
새로운 글 발행
-
"%s에서 새로운 기슬블로그 %d개가 올라왔어요!"
전송
-
-
읽지 않은 알림이 없는 경우
-
새로운 글 발행
-
"%s에서 새로운 기슬블로그 %d개가 올라왔어요!"
전송
-
-
-
SSE 구독 상태가 아닌 경우
-
새로운 글 발행
-
SSE 구독
-
"읽지 않은 알림이 %d개 있어요!"
전송
-
-
-
정상 요청/응답
HTTP Request
GET /devdevdev/api/v1/notifications HTTP/1.1
Content-Type: text/event-stream;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTE5LCJleHAiOjE3NDY3MTgzMTl9.jprdvxIl1BaqAnEyd3GI5LiH_RMGBm12CYsAH_aOyxk
Host: localhost:8080
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer Token |
|
|
text/event-stream |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: text/event-stream;charset=UTF-8
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: 123
data: {"message" : "트이다에서 새로운 기슬블로그 105개가 올라왔어요!", "createdAt" : "2025-04-06T00:00:00"}
HTTP Response Header Fields
Name | Description |
---|---|
|
text/event-stream |
HTTP Response Body
data: {"message" : "트이다에서 새로운 기슬블로그 105개가 올라왔어요!", "createdAt" : "2025-04-06T00:00:00"}
Path | Type | Optional | Description | Format |
---|---|---|---|---|
data |
Object |
알림 |
||
message |
String |
알림 메시지 |
||
createdAt |
String |
알림 발생 일시 |
'yyyy-MM-dd’T’HH:mm:ss.SSSZ' |
예외
HTTP Response
-
익명 회원은 사용할 수 없는 기능 입니다.
: 익명 회원인 경우 -
회원을 찾을 수 없습니다.
: 회원이 존재하지 않는 경우 -
유효하지 않은 회원 입니다.
: 회원이 유효하지 않은 경우
{
"resultType" : "FAIL",
"message" : "회원을 찾을 수 없습니다.",
"errorCode" : 404
}
알림 생성 API(POST: /devdevdev/api/v1/notifications/{channel})
-
알림을 생성한다.
-
service-name, api-key 가 일치 하지 않으면 호출 할 수 없다.
-
정상 요청/응답
HTTP Request
POST /devdevdev/api/v1/notifications/SUBSCRIPTION HTTP/1.1
Content-Type: application/json;charset=UTF-8
service-name: test-service
api-key: test-key
Content-Length: 84
Host: localhost:8080
{
"companyId" : 1,
"techArticles" : [ {
"id" : 1
}, {
"id" : 2
} ]
}
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
서비스 이름 |
|
|
api key |
HTTP Request Fields
Path | Type | Optional | Description | Format |
---|---|---|---|---|
|
|
회사 아이디 |
||
|
|
기술블로그 배열 |
||
|
|
기술블로그 아이디 |
HTTP Request Path Parameters Fields
Parameter | Optional | Description | Format |
---|---|---|---|
|
알림 채널 |
SUBSCRIPTION, COMMENT_AND_REPLY |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 30
{
"resultType" : "SUCCESS"
}
HTTP Response Body Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
SUCCESS, FAIL |
예외
HTTP Response
-
올바른 입력 값이 아닙니다.
: 잘못된 알림 채널을 입력한 경우 -
접근할 수 없는 권한 입니다.
: 서비스 이름과 api-key가 일치하지 않는 경우 -
지원하는 서비스가 아닙니다.
: 지원하는 서비스가 아닌 경우
{
"resultType" : "FAIL",
"message" : "올바른 입력 값이 아닙니다.",
"errorCode" : 400
}
단건 알림 읽기 API (PATCH: /devdevdev/api/v1/notifications/{notificationId}/read)
-
회원이 자신에게 온 단건 알림을 읽기 처리한다.
정상 요청/응답
HTTP Request
PATCH /devdevdev/api/v1/notifications/1/read HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTE5LCJleHAiOjE3NDY3MTgzMTl9.jprdvxIl1BaqAnEyd3GI5LiH_RMGBm12CYsAH_aOyxk
Host: localhost:8080
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Request Path Parameters
Parameter | Optional | Description | Format |
---|---|---|---|
|
알림 아이디 |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 82
{
"resultType" : "SUCCESS",
"data" : {
"id" : 1,
"isRead" : true
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
알림 아이디 |
||
|
|
알림 읽음 여부 |
예외
HTTP Response
-
익명 회원은 사용할 수 없는 기능 입니다.
: 익명 회원인 경우 -
회원을 찾을 수 없습니다.
: 회원이 존재하지 않는 경우 -
존재하지 않는 알림입니다.
: 알림이 존재하지 않거나 회원의 알림이 아닐 경우
{
"resultType" : "FAIL",
"message" : "존재하지 않는 알림입니다.",
"errorCode" : 404
}
모든 알림 읽기 API (PATCH: /devdevdev/api/v1/notifications/read-all)
-
회원이 자신에게 온 모든 알림을 읽기 처리한다.
-
회원이 읽을 알림이 하나도 없어도 예외가 발생하지 않고 성공한다.
정상 요청/응답
HTTP Request
PATCH /devdevdev/api/v1/notifications/read-all HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTE5LCJleHAiOjE3NDY3MTgzMTl9.jprdvxIl1BaqAnEyd3GI5LiH_RMGBm12CYsAH_aOyxk
Host: localhost:8080
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 30
{
"resultType" : "SUCCESS"
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
예외
HTTP Response
-
익명 회원은 사용할 수 없는 기능 입니다.
: 익명 회원인 경우 -
회원을 찾을 수 없습니다.
: 회원이 존재하지 않는 경우
{
"resultType" : "FAIL",
"message" : "회원을 찾을 수 없습니다.",
"errorCode" : 404
}
알림 페이지 조회 API (GET: /devdevdev/api/v1/notifications/page)
-
회원은 알림 페이지에서 자신에게 온 알림을 무한스크롤링으로 조회할 수 있다.
-
(추후 추가) 알림 유형에 따라 필터링하여 조회할 수 있다.
정상 요청/응답
HTTP Request
GET /devdevdev/api/v1/notifications/page?size=1¬ificationId=2 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTE5LCJleHAiOjE3NDY3MTgzMTl9.jprdvxIl1BaqAnEyd3GI5LiH_RMGBm12CYsAH_aOyxk
Host: localhost:8080
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Request Query Parameters
Parameter | Optional | Description | Format |
---|---|---|---|
|
마지막 알림 ID (커서) |
||
|
페이지 크기 |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 1448
{
"resultType" : "SUCCESS",
"data" : {
"content" : [ {
"notificationId" : 1,
"type" : "SUBSCRIPTION",
"createdAt" : "2025-05-08T15:01:59.729168211",
"isRead" : false,
"techArticle" : {
"id" : 1,
"elasticId" : "elasticId",
"thumbnailUrl" : "http://thumbnailUrl.com",
"isLogoImage" : false,
"techArticleUrl" : "http://techArticleUrl.com",
"title" : "기술블로그 타이틀",
"contents" : "기술블로그 내용",
"company" : {
"id" : 1,
"name" : "기업명",
"careerUrl" : "http://careerUrl.com",
"officialImageUrl" : "http://officialImage.com"
},
"regDate" : "2025-05-08",
"author" : "작성자",
"viewTotalCount" : 0,
"recommendTotalCount" : 0,
"commentTotalCount" : 0,
"popularScore" : 0,
"isBookmarked" : false,
"score" : null
}
} ],
"pageable" : {
"pageNumber" : 0,
"pageSize" : 1,
"sort" : {
"empty" : true,
"sorted" : false,
"unsorted" : true
},
"offset" : 0,
"paged" : true,
"unpaged" : false
},
"totalElements" : 1,
"size" : 1,
"number" : 0,
"sort" : {
"empty" : true,
"sorted" : false,
"unsorted" : true
},
"first" : true,
"last" : false,
"numberOfElements" : 1,
"empty" : false
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
알림 목록 |
||
|
|
알림 ID |
||
|
|
알림 타입 |
SUBSCRIPTION, COMMENT_AND_REPLY |
|
|
|
알림 생성 일시 |
||
|
|
회원의 알림 읽음 여부 |
||
|
|
기술블로그 정보 |
||
|
|
기술블로그 ID |
||
|
|
엘라스틱서치 ID |
||
|
|
썸네일 URL |
||
|
|
로고 이미지 여부 |
||
|
|
기술블로그 URL |
||
|
|
기술블로그 제목 |
||
|
|
기술블로그 내용 |
||
|
|
작성일 |
||
|
|
작성자 |
||
|
|
기업 정보 |
||
|
|
기업 ID |
||
|
|
기업명 |
||
|
|
기업 채용공고 URL |
||
|
|
기업 채용공고 URL |
||
|
|
조회 수 |
||
|
|
추천 수 |
||
|
|
댓글 수 |
||
|
|
인기 점수 |
||
|
|
북마크 여부 |
||
|
|
정확도 점수(null) |
||
|
|
페이지 정보 |
||
|
|
페이지 번호 |
||
|
|
페이지 크기 |
||
|
|
정렬 정보 |
||
|
|
정렬 정보 - 비어있는지 |
||
|
|
정렬 정보 - 정렬됨 |
||
|
|
정렬 정보 - 정렬되지 않음 |
||
|
|
데이터 시작 위치 |
||
|
|
페이징 적용 여부 |
||
|
|
페이징 미적용 여부 |
||
|
|
전체 요소 수 |
||
|
|
첫 페이지 여부 |
||
|
|
마지막 페이지 여부 |
||
|
|
요청한 페이지 크기 |
||
|
|
현재 페이지 번호 |
||
|
|
정렬 정보 |
||
|
|
정렬 정보 - 비어있는지 |
||
|
|
정렬 정보 - 정렬됨 |
||
|
|
정렬 정보 - 정렬되지 않음 |
||
|
|
현재 페이지 요소 수 |
||
|
|
비어있는 페이지인지 여부 |
예외
HTTP Response
-
익명 회원은 사용할 수 없는 기능 입니다.
: 익명 회원인 경우 -
회원을 찾을 수 없습니다.
: 회원이 존재하지 않는 경우
{
"resultType" : "FAIL",
"message" : "회원을 찾을 수 없습니다.",
"errorCode" : 404
}
알림 팝업 조회 API (GET: /devdevdev/api/v1/notifications/popup)
-
회원이 알림 팝업 리스트를 조회한다.
정상 요청/응답
HTTP Request
GET /devdevdev/api/v1/notifications/popup?size=1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTE5LCJleHAiOjE3NDY3MTgzMTl9.jprdvxIl1BaqAnEyd3GI5LiH_RMGBm12CYsAH_aOyxk
Host: localhost:8080
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Request Query Parameters
Parameter | Optional | Description | Format |
---|---|---|---|
|
페이지 크기 |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 785
{
"resultType" : "SUCCESS",
"data" : {
"content" : [ {
"id" : 1,
"type" : "SUBSCRIPTION",
"title" : "기술블로그 타이틀",
"createdAt" : "2025-05-08T15:01:59.699976702",
"isRead" : false,
"companyName" : "기업명",
"techArticleId" : 1
} ],
"pageable" : {
"pageNumber" : 0,
"pageSize" : 1,
"sort" : {
"empty" : true,
"sorted" : false,
"unsorted" : true
},
"offset" : 0,
"paged" : true,
"unpaged" : false
},
"totalElements" : 1,
"size" : 1,
"number" : 0,
"sort" : {
"empty" : true,
"sorted" : false,
"unsorted" : true
},
"first" : true,
"last" : true,
"numberOfElements" : 1,
"empty" : false
}
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터 |
||
|
|
알림 팝업 리스트 |
||
|
|
알림 ID |
||
|
|
알림 타입 |
SUBSCRIPTION, COMMENT_AND_REPLY |
|
|
|
알림 제목 |
||
|
|
회원의 읽음 여부 |
||
|
|
알림 생성 일시 |
||
|
|
기업 이름 |
||
|
|
기술블로그 id |
||
|
|
페이지 정보 |
||
|
|
페이지 번호 |
||
|
|
페이지 크기 |
||
|
|
정렬 정보 |
||
|
|
정렬 여부 - 비어있는지 |
||
|
|
정렬 여부 - 정렬됨 |
||
|
|
정렬 여부 - 정렬되지 않음 |
||
|
|
데이터 시작 위치 |
||
|
|
페이징 적용 여부 |
||
|
|
페이징 미적용 여부 |
||
|
|
회원이 읽지 않은 알림 총 개수 |
||
|
|
첫 페이지 여부 |
||
|
|
마지막 페이지 여부 |
||
|
|
페이지 크기 |
||
|
|
현재 페이지 번호 |
||
|
|
정렬 정보 |
||
|
|
정렬 정보 - 비어있는지 |
||
|
|
정렬 정보 - 정렬됨 |
||
|
|
정렬 정보 - 정렬되지 않음 |
||
|
|
현재 페이지 요소 수 |
||
|
|
비어있는 페이지인지 여부 |
예외
HTTP Response
-
익명 회원은 사용할 수 없는 기능 입니다.
: 익명 회원인 경우 -
회원을 찾을 수 없습니다.
: 회원이 존재하지 않는 경우
{
"resultType" : "FAIL",
"message" : "회원을 찾을 수 없습니다.",
"errorCode" : 404
}
알림 개수 조회 API (GET: /devdevdev/api/v1/notifications/unread-count)
-
회원이 읽지 않은 알림의 총 개수를 조회한다.
정상 요청/응답
HTTP Request
GET /devdevdev/api/v1/notifications/unread-count HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImRyZWFteTVwYXRpc2llbEBrYWthby5jb20iLCJzb2NpYWxUeXBlIjoiS0FLQU8iLCJyb2xlIjoiUk9MRV9VU0VSIiwiaWF0IjoxNzQ2NzE2NTE5LCJleHAiOjE3NDY3MTgzMTl9.jprdvxIl1BaqAnEyd3GI5LiH_RMGBm12CYsAH_aOyxk
Host: localhost:8080
HTTP Request Header Fields
Name | Optional | Description |
---|---|---|
|
Bearer 엑세스 토큰 |
HTTP Response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
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: 45
{
"resultType" : "SUCCESS",
"data" : 12
}
HTTP Response Fields
Path | Type | Authentication | Description | Format |
---|---|---|---|---|
|
|
응답 결과 |
||
|
|
응답 데이터(읽지 않은 알림 개수) |
예외
HTTP Response
-
익명 회원은 사용할 수 없는 기능 입니다.
: 익명 회원인 경우 -
회원을 찾을 수 없습니다.
: 회원이 존재하지 않는 경우
{
"resultType" : "FAIL",
"message" : "회원을 찾을 수 없습니다.",
"errorCode" : 404
}