1. API 목록

2. POST: 대회 분과 생성

Table 1. HTTP Request Headers
Name Description

Authorization

Bearer {accessToken} (관리자)

HTTP Request
POST /contests/1/tracks HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer admin.access.token
Content-Length: 28
Host: localhost:8080

{
  "trackName" : "창업"
}
HTTP Response
HTTP/1.1 201 Created
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Table 2. Request Fields
Path Type Description

trackName

String

분과 이름

Table 3. /contests/{contestId}/tracks
Parameter Description

contestId

대회 ID

2.1. ⚠️ 실패 케이스

❌ Case 1: 동일한 분과 이름 존재
POST /contests/1/tracks HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 28
Host: localhost:8080

{
  "trackName" : "창업"
}
HTTP/1.1 409 Conflict
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 73

{
  "message" : "해당 대회에 동일한 트랙명이 있습니다."
}
Path Type Description

trackName

String

이미 존재하는 분과 이름

3. PATCH: 대회 분과 수정

대회 분과 생성과 동일하게 이미 저장되어 있는 분과 이름은 저장 불가
Table 4. HTTP Request Headers
Name Description

Authorization

Bearer {accessToken} (관리자)

Table 5. /contests/{contestId}/tracks/{trackId}
Parameter Description

contestId

대회 ID

trackId

분과 ID

HTTP Request
PATCH /contests/1/tracks/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer admin.access.token
Content-Length: 28
Host: localhost:8080

{
  "trackName" : "창업"
}
HTTP Response
HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Table 6. Request Fields
Path Type Description

trackName

String

분과 이름

4. DELETE: 대회 분과 삭제

Table 7. HTTP Request Headers
Name Description

Authorization

Bearer {accessToken} (관리자)

Table 8. /contests/{contestId}/tracks/{trackId}
Parameter Description

contestId

대회 ID

trackId

분과 ID

HTTP Request
DELETE /contests/1/tracks/1 HTTP/1.1
Authorization: Bearer admin.access.token
Host: localhost:8080
HTTP Response
HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers

5. GET: 대회 분과 목록 조회

HTTP Request
GET /contests/1/tracks HTTP/1.1
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
Content-Length: 194

[ {
  "trackId" : 1,
  "trackName" : "창업",
  "updatedAt" : "2026-03-28T15:18:11.947198641"
}, {
  "trackId" : 2,
  "trackName" : "융합",
  "updatedAt" : "2026-03-28T15:18:11.947215208"
} ]
Table 9. Response Body’s Fields
Path Type Description

[]

Array

대회 분과 목록

[].trackId

Number

분과 ID

[].trackName

String

분과 이름

[].updatedAt

String

수정 일시 (ISO-8601)

6. POST: 분과 기본 썸네일 등록

Table 10. HTTP Request Headers
Name Description

Authorization

Bearer {accessToken} (관리자)

Table 11. /contests/{contestId}/tracks/{trackId}/thumbnail
Parameter Description

contestId

대회 ID

trackId

분과 ID

HTTP Request
POST /contests/1/tracks/1/thumbnail HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Authorization: Bearer admin.access.token
Host: localhost:8080

--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=image; filename=track_thumbnail.png
Content-Type: image/png

test-image-content
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
Table 12. Request Parts
Part Description

image

등록할 분과 기본 썸네일 이미지

HTTP Response
HTTP/1.1 201 Created
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers

7. DELETE: 분과 기본 썸네일 삭제

Table 13. HTTP Request Headers
Name Description

Authorization

Bearer {accessToken} (관리자)

Table 14. /contests/{contestId}/tracks/{trackId}/thumbnail
Parameter Description

contestId

대회 ID

trackId

분과 ID

HTTP Request
DELETE /contests/1/tracks/1/thumbnail HTTP/1.1
Authorization: Bearer admin.access.token
Host: localhost:8080
HTTP Response
HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers