1. 인증

1.1. 로그인

1.1.1. 성공

HTTP request
POST /v1/auth/login HTTP/1.1
Content-Type: application/json
Host: localhost:36721
Content-Length: 60

{
  "email" : "admin@email.com",
  "password" : "qwer1234"
}
Request fields
Path Type Description

email

String

사용자 이메일

password

String

사용자 패스워드

HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Set-Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU0NSwiZXhwIjoxNzQ5NzA5MTQ1fQ.RrhJ6Zr37zHV_kZnj5v-s0cvFJ1fUghVbOgYcJ2QowA; Path=/; Domain=localhost; Max-Age=7200; Expires=Thu, 29 May 2025 08:19:05 GMT; SameSite=none
Set-Cookie: refreshToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU0NSwiZXhwIjoxNzQ5NzA5MTQ1fQ.RrhJ6Zr37zHV_kZnj5v-s0cvFJ1fUghVbOgYcJ2QowA; Path=/; Domain=localhost; Max-Age=7200; Expires=Thu, 29 May 2025 08:19:05 GMT; SameSite=none
Content-Type: application/json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:04 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 18

{
  "clubId" : 2
}
Response headers
Name Description

Set-Cookie

인증 쿠키 설정

Response cookies
Name Description

accessToken

Access Token

refreshToken

Refresh Token

1.1.2. 실패: 잘못된 패스워드

HTTP request
POST /v1/auth/login HTTP/1.1
Content-Type: application/json
Host: localhost:36721
Content-Length: 65

{
  "email" : "admin@email.com",
  "password" : "wrongPassword"
}
Request fields
Path Type Description

email

String

사용자 이메일

password

String

잘못된 패스워드

HTTP response
HTTP/1.1 401 Unauthorized
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:04 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 166

{
  "type" : "about:blank",
  "title" : "Unauthorized",
  "status" : 401,
  "detail" : "비밀번호가 일치하지 않습니다.",
  "instance" : "/v1/auth/login"
}

1.1.3. 실패: 존재하지 않는 이메일

HTTP request
POST /v1/auth/login HTTP/1.1
Content-Type: application/json
Host: localhost:36721
Content-Length: 114

{
  "email" : "invalid@email.com",
  "password" : "$2a$10$rG0JsflKdGcORjGFTURYb.npEgtvClK4.3P.EMr/o3SdekrVFxOvG"
}
Request fields
Path Type Description

email

String

존재하지 않는 이메일

password

String

사용자 패스워드

HTTP response
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:04 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 157

{
  "type" : "about:blank",
  "title" : "Not Found",
  "status" : 404,
  "detail" : "존재하지 않는 회원입니다.",
  "instance" : "/v1/auth/login"
}

1.2. 로그아웃

1.2.1. 성공

HTTP request
POST /v1/auth/logout HTTP/1.1
Content-Type: application/json
Host: localhost:36721
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU0NCwiZXhwIjoxNzQ5NzA5MTQ0fQ.D0V_dfuDTnEZ3FgRbbABKqCYxTUJ1IdisbnF_wahPnc
Request cookies
Name Description

accessToken

사용자 토큰

HTTP response
HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Set-Cookie: accessToken=; Path=/; Domain=localhost; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 GMT; SameSite=none
Set-Cookie: refreshToken=; Path=/; Domain=localhost; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 GMT; SameSite=none
Date: Thu, 29 May 2025 06:19:04 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Response headers
Name Description

Set-Cookie

인증 해제 쿠키 설정

1.2.2. 실패: 존재하지 않는 토큰

HTTP request
POST /v1/auth/logout HTTP/1.1
Content-Type: application/json
Host: localhost:36721
HTTP response
HTTP/1.1 401 Unauthorized
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:04 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 171

{
  "type" : "about:blank",
  "title" : "Unauthorized",
  "status" : 401,
  "detail" : "로그인 정보가 유효하지 않습니다.",
  "instance" : "/v1/auth/logout"
}

2. 사용자

2.1. 사용자 회원가입

2.1.1. 성공

HTTP request
POST /v1/members/signup HTTP/1.1
Content-Type: application/json
Host: localhost:46583
Content-Length: 120

{
  "clubName" : "크루루",
  "email" : "mail@mail.com",
  "password" : "newPassword214!",
  "phone" : "01012341234"
}
Request fields
Path Type Description

clubName

String

동아리명

email

String

사용자 이메일

password

String

사용자 패스워드

phone

String

사용자 전화번호

HTTP response
HTTP/1.1 201 Created
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Location: /v1/members/2
Date: Thu, 29 May 2025 06:19:14 GMT
Keep-Alive: timeout=60
Connection: keep-alive

2.1.2. 실패: 유효하지 않은 요청

HTTP request
POST /v1/members/signup HTTP/1.1
Content-Type: application/json
Host: localhost:46583
Content-Length: 109

{
  "clubName" : "크루루",
  "email" : "mail@mail.com",
  "password" : "newPassword214!",
  "phone" : ""
}
Request fields
Path Type Description

clubName

String

동아리명

email

String

사용자 이메일

password

String

사용자 패스워드

phone

String

사용자 전화번호

HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:14 GMT
Connection: close
Content-Length: 170

{
  "type" : "about:blank",
  "title" : "Bad Request",
  "status" : 400,
  "detail" : "{phone=전화번호를 입력해주세요.}",
  "instance" : "/v1/members/signup"
}

2.1.3. 실패: 인증되지 않은 이메일

HTTP request
POST /v1/members/signup HTTP/1.1
Content-Type: application/json
Host: localhost:46583
Content-Length: 120

{
  "clubName" : "크루루",
  "email" : "mail@mail.com",
  "password" : "newPassword214!",
  "phone" : "01012341234"
}
Request fields
Path Type Description

clubName

String

동아리명

email

String

인증되지 않은 사용자 이메일

password

String

사용자 패스워드

phone

String

사용자 전화번호

HTTP response
HTTP/1.1 401 Unauthorized
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:14 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 162

{
  "type" : "about:blank",
  "title" : "Unauthorized",
  "status" : 401,
  "detail" : "로그인 정보가 유효하지 않습니다.",
  "instance" : "/error"
}

2.2. 사용자 이메일 변경

2.2.1. 성공

HTTP request
PATCH /v1/members/1/email HTTP/1.1
Content-Type: application/json
Host: localhost:46583
Content-Length: 34
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU1NCwiZXhwIjoxNzQ5NzA5MTU0fQ.3BtaeottC4TvWAyOK75beVXy2MWsrHED_KY0CPDcdAM

{
  "email" : "change@email.com"
}
Request cookies
Name Description

accessToken

사용자 토큰

Path parameters
Table 1. /v1/members/{memberId}/email
Parameter Description

memberId

이메일을 변경할 사용자의 id

Request fields
Path Type Description

email

String

변경할 이메일, 이메일 인증 필요

HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Date: Thu, 29 May 2025 06:19:14 GMT
Keep-Alive: timeout=60
Connection: keep-alive

2.2.2. 실패: 인증되지 않은 사용자 이메일

HTTP request
PATCH /v1/members/1/email HTTP/1.1
Content-Type: application/json
Host: localhost:46583
Content-Length: 34
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU1NSwiZXhwIjoxNzQ5NzA5MTU1fQ.LNgqR_Jy0NHgwgODr-mD9nhHwBfpL9f2msc0cBctzPw

{
  "email" : "change@email.com"
}
Request cookies
Name Description

accessToken

사용자 토큰

Path parameters
Table 1. /v1/members/{memberId}/email
Parameter Description

memberId

이메일을 변경할 사용자의 id

Request fields
Path Type Description

email

String

인증되지 않은 사용자 이메일

HTTP response
HTTP/1.1 401 Unauthorized
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:14 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 165

{
  "type" : "about:blank",
  "title" : "Unauthorized",
  "status" : 401,
  "detail" : "이메일 인증이 필요합니다.",
  "instance" : "/v1/members/1/email"
}

2.2.3. 실패: 적절하지 않은 이메일 형식

HTTP request
PATCH /v1/members/1/email HTTP/1.1
Content-Type: application/json
Host: localhost:46583
Content-Length: 28
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU1NSwiZXhwIjoxNzQ5NzA5MTU1fQ.LNgqR_Jy0NHgwgODr-mD9nhHwBfpL9f2msc0cBctzPw

{
  "email" : "@email.com"
}
Request cookies
Name Description

accessToken

사용자 토큰

Path parameters
Table 1. /v1/members/{memberId}/email
Parameter Description

memberId

이메일을 변경할 사용자의 id

Request fields
Path Type Description

email

String

적절하지 않은 이메일 형식

HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:14 GMT
Connection: close
Content-Length: 171

{
  "type" : "about:blank",
  "title" : "Bad Request",
  "status" : 400,
  "detail" : "{email=must be a well-formed email address}",
  "instance" : "/v1/members/1/email"
}

2.3. 사용자 비밀번호 변경

2.3.1. 성공

HTTP request
PATCH /v1/members/1/password HTTP/1.1
Content-Type: application/json
Host: localhost:46583
Content-Length: 37
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU1NSwiZXhwIjoxNzQ5NzA5MTU1fQ.LNgqR_Jy0NHgwgODr-mD9nhHwBfpL9f2msc0cBctzPw

{
  "password" : "NewPassword123!!"
}
Request cookies
Name Description

accessToken

사용자 토큰

Path parameters
Table 1. /v1/members/{memberId}/password
Parameter Description

memberId

비밀번호를 변경할 사용자의 id

Request fields
Path Type Description

password

String

변경할 비밀번호

HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Date: Thu, 29 May 2025 06:19:14 GMT
Keep-Alive: timeout=60
Connection: keep-alive

2.3.2. 실패: 적절하지 않은 비밀번호 형식

HTTP request
PATCH /v1/members/1/password HTTP/1.1
Content-Type: application/json
Host: localhost:46583
Content-Length: 32
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU1NSwiZXhwIjoxNzQ5NzA5MTU1fQ.LNgqR_Jy0NHgwgODr-mD9nhHwBfpL9f2msc0cBctzPw

{
  "password" : "Password123"
}
Request cookies
Name Description

accessToken

사용자 토큰

Path parameters
Table 1. /v1/members/{memberId}/password
Parameter Description

memberId

비밀번호를 변경할 사용자의 id

Request fields
Path Type Description

password

String

잘못된 비밀번호 형식

HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:14 GMT
Connection: close
Content-Length: 190

{
  "type" : "about:blank",
  "title" : "Bad Request",
  "status" : 400,
  "detail" : "입력하신 비밀번호의 형식이 맞지 않습니다.",
  "instance" : "/v1/members/1/password"
}

3. 지원자

3.1. 지원자들의 프로세스 일괄 수정

3.1.1. 성공

HTTP request
PUT /v1/applicants/move-process/2 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 28
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTUzMiwiZXhwIjoxNzQ5NzA5MTMyfQ.imCeyGg1GiGdfwKFp89OkKUZg904RcELUH51XXyXLNU

{
  "applicantIds" : [ 1 ]
}
Path parameters
Table 1. /v1/applicants/move-process/{processId}
Parameter Description

processId

지원자들이 옮겨질 프로세스의 id

Request cookies
Name Description

accessToken

사용자 토큰

Request fields
Path Type Description

applicantIds

Array

프로세스를 옮길 지원자들의 id

HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Date: Thu, 29 May 2025 06:18:51 GMT
Keep-Alive: timeout=60
Connection: keep-alive

3.1.2. 실패: 존재하지 않는 프로세스

HTTP request
PUT /v1/applicants/move-process/-1 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 28
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTUzMywiZXhwIjoxNzQ5NzA5MTMzfQ.ztbpYvSozWhOYu-2bFGEp3wmWxRgkfNwO5xydvg9c28

{
  "applicantIds" : [ 1 ]
}
Path parameters
Table 1. /v1/applicants/move-process/{processId}
Parameter Description

processId

존재하지 않는 프로세스의 id

Request cookies
Name Description

accessToken

사용자 토큰

Request fields
Path Type Description

applicantIds

Array

프로세스를 옮길 지원자들의 id

HTTP response
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:18:52 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 174

{
  "type" : "about:blank",
  "title" : "Not Found",
  "status" : 404,
  "detail" : "존재하지 않는 Process입니다.",
  "instance" : "/v1/applicants/move-process/-1"
}

3.2. 지원자 기본 정보 조회

3.2.1. 성공

HTTP request
GET /v1/applicants/1 HTTP/1.1
Host: localhost:45581
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTUzMywiZXhwIjoxNzQ5NzA5MTMzfQ.ztbpYvSozWhOYu-2bFGEp3wmWxRgkfNwO5xydvg9c28
Path parameters
Table 1. /v1/applicants/{applicantId}
Parameter Description

applicantId

지원자의 id

Request cookies
Name Description

accessToken

사용자 토큰

HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:18:52 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 261

{
  "applicant" : {
    "id" : 1,
    "name" : "도비",
    "email" : "DOBBY@email.com",
    "phone" : "01000000000",
    "isRejected" : false,
    "createdAt" : "2025-05-29T06:18:53.425509"
  },
  "process" : {
    "id" : 1,
    "name" : "지원 접수"
  }
}
Response fields
Path Type Description

applicant.id

Number

지원자의 id

applicant.name

String

지원자의 이름

applicant.email

String

지원자의 이메일

applicant.phone

String

지원자의 전화번호

applicant.isRejected

Boolean

지원자의 불합격 여부

applicant.createdAt

String

지원자의 생성날짜

process.id

Number

프로세스의 id

process.name

String

프로세스 이름

3.2.2. 실패: 존재하지 않는 지원자

HTTP request
GET /v1/applicants/-1 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTUyOSwiZXhwIjoxNzQ5NzA5MTI5fQ.grHcjgwCO6inUxDh8GW9LyPaftCpMEdNT8bkKYAOtnk
Path parameters
Table 1. /v1/applicants/{applicantId}
Parameter Description

applicantId

존재하지 않는 지원자의 id

Request cookies
Name Description

accessToken

사용자 토큰

HTTP response
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:18:51 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 163

{
  "type" : "about:blank",
  "title" : "Not Found",
  "status" : 404,
  "detail" : "존재하지 않는 Applicant입니다.",
  "instance" : "/v1/applicants/-1"
}

3.3. 지원자 상세 정보 조회

3.3.1. 성공

HTTP request
GET /v1/applicants/1/detail HTTP/1.1
Host: localhost:45581
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTUzMiwiZXhwIjoxNzQ5NzA5MTMyfQ.imCeyGg1GiGdfwKFp89OkKUZg904RcELUH51XXyXLNU
Path parameters
Table 1. /v1/applicants/{applicantId}/detail
Parameter Description

applicantId

지원자의 id

Request cookies
Name Description

accessToken

사용자 토큰

HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:18:52 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 114

{
  "details" : [ {
    "orderIndex" : 1,
    "question" : "주관식 단답형",
    "answer" : "응답1"
  } ]
}
Response fields
Path Type Description

details

Array

답변들

details[].orderIndex

Number

순서

details[].question

String

질문

details[].answer

String

질문에 대한 응답

3.3.2. 실패: 존재하지 않는 지원자

HTTP request
GET /v1/applicants/-1/detail HTTP/1.1
Host: localhost:45581
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTUzNCwiZXhwIjoxNzQ5NzA5MTM0fQ.CzJwun8Wc6A88NS9oZT3E0-dDwU9OQCvwE4L33uxoOM
Path parameters
Table 1. /v1/applicants/{applicantId}/detail
Parameter Description

applicantId

지원자의 id

Request cookies
Name Description

accessToken

사용자 토큰

HTTP response
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:18:53 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 170

{
  "type" : "about:blank",
  "title" : "Not Found",
  "status" : 404,
  "detail" : "존재하지 않는 Applicant입니다.",
  "instance" : "/v1/applicants/-1/detail"
}

3.4. 지원자 불합격

3.4.1. 성공

HTTP request
PATCH /v1/applicants/1/reject HTTP/1.1
Host: localhost:45581
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTUzMywiZXhwIjoxNzQ5NzA5MTMzfQ.ztbpYvSozWhOYu-2bFGEp3wmWxRgkfNwO5xydvg9c28
Path parameters
Table 1. /v1/applicants/{applicantId}/reject
Parameter Description

applicantId

지원자의 id

Request cookies
Name Description

accessToken

사용자 토큰

HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Date: Thu, 29 May 2025 06:18:52 GMT
Keep-Alive: timeout=60
Connection: keep-alive

3.4.2. 실패: 존재하지 않는 지원자

HTTP request
PATCH /v1/applicants/-1/reject HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTUzNCwiZXhwIjoxNzQ5NzA5MTM0fQ.CzJwun8Wc6A88NS9oZT3E0-dDwU9OQCvwE4L33uxoOM
Path parameters
Table 1. /v1/applicants/{applicantId}/reject
Parameter Description

applicantId

지원자의 id

Request cookies
Name Description

accessToken

사용자 토큰

HTTP response
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:18:53 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 170

{
  "type" : "about:blank",
  "title" : "Not Found",
  "status" : 404,
  "detail" : "존재하지 않는 Applicant입니다.",
  "instance" : "/v1/applicants/-1/reject"
}

3.4.3. 실패: 이미 불합격한 지원자

HTTP request
PATCH /v1/applicants/1/reject HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTUzMywiZXhwIjoxNzQ5NzA5MTMzfQ.ztbpYvSozWhOYu-2bFGEp3wmWxRgkfNwO5xydvg9c28
Path parameters
Table 1. /v1/applicants/{applicantId}/reject
Parameter Description

applicantId

존재하지 않는 지원자의 id

Request cookies
Name Description

accessToken

사용자 토큰

HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:18:52 GMT
Connection: close
Content-Length: 171

{
  "type" : "about:blank",
  "title" : "Bad Request",
  "status" : 400,
  "detail" : "이미 불합격한 지원자입니다.",
  "instance" : "/v1/applicants/1/reject"
}

3.5. 지원자 불합격 해제

3.5.1. 성공

HTTP request
PATCH /v1/applicants/1/unreject HTTP/1.1
Host: localhost:45581
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTUzMywiZXhwIjoxNzQ5NzA5MTMzfQ.ztbpYvSozWhOYu-2bFGEp3wmWxRgkfNwO5xydvg9c28
Path parameters
Table 1. /v1/applicants/{applicantId}/unreject
Parameter Description

applicantId

지원자의 id

Request cookies
Name Description

accessToken

사용자 토큰

HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Date: Thu, 29 May 2025 06:18:52 GMT
Keep-Alive: timeout=60
Connection: keep-alive

3.5.2. 실패: 존재하지 않는 지원자

HTTP request
PATCH /v1/applicants/-1/unreject HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTUzMywiZXhwIjoxNzQ5NzA5MTMzfQ.ztbpYvSozWhOYu-2bFGEp3wmWxRgkfNwO5xydvg9c28
Path parameters
Table 1. /v1/applicants/{applicantId}/unreject
Parameter Description

applicantId

존재하지 않는 지원자의 id

Request cookies
Name Description

accessToken

사용자 토큰

HTTP response
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:18:52 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 172

{
  "type" : "about:blank",
  "title" : "Not Found",
  "status" : 404,
  "detail" : "존재하지 않는 Applicant입니다.",
  "instance" : "/v1/applicants/-1/unreject"
}

3.5.3. 실패: 불합격하지 않은 지원자

HTTP request
PATCH /v1/applicants/1/unreject HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTUzMiwiZXhwIjoxNzQ5NzA5MTMyfQ.imCeyGg1GiGdfwKFp89OkKUZg904RcELUH51XXyXLNU
Path parameters
Table 1. /v1/applicants/{applicantId}/unreject
Parameter Description

applicantId

불합격하지 않는 지원자의 id

Request cookies
Name Description

accessToken

사용자 토큰

HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:18:52 GMT
Connection: close
Content-Length: 176

{
  "type" : "about:blank",
  "title" : "Bad Request",
  "status" : 400,
  "detail" : "불합격하지 않은 지원자입니다.",
  "instance" : "/v1/applicants/1/unreject"
}

3.6. 지원자 정보 변경

3.6.1. 성공

HTTP request
PATCH /v1/applicants/1 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 85
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTUzMywiZXhwIjoxNzQ5NzA5MTMzfQ.ztbpYvSozWhOYu-2bFGEp3wmWxRgkfNwO5xydvg9c28

{
  "name" : "도비",
  "email" : "dev.DOBBY@gmail.com",
  "phone" : "01011111111"
}
Path parameters
Table 1. /v1/applicants/{applicantId}
Parameter Description

applicantId

지원자의 id

Request cookies
Name Description

accessToken

사용자 토큰

HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Date: Thu, 29 May 2025 06:18:52 GMT
Keep-Alive: timeout=60
Connection: keep-alive

3.6.2. 실패: 존재하지 않는 지원자

HTTP request
PATCH /v1/applicants/-1 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 85
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTUzMywiZXhwIjoxNzQ5NzA5MTMzfQ.ztbpYvSozWhOYu-2bFGEp3wmWxRgkfNwO5xydvg9c28

{
  "name" : "도비",
  "email" : "dev.DOBBY@gmail.com",
  "phone" : "01011111111"
}
Path parameters
Table 1. /v1/applicants/{applicantId}
Parameter Description

applicantId

존재하지 않는 지원자의 id

Request cookies
Name Description

accessToken

사용자 토큰

HTTP response
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:18:52 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 163

{
  "type" : "about:blank",
  "title" : "Not Found",
  "status" : 404,
  "detail" : "존재하지 않는 Applicant입니다.",
  "instance" : "/v1/applicants/-1"
}

3.7. 지원자 일괄 불합격

3.7.1. 성공

HTTP request
PATCH /v1/applicants/reject HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 31
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTUzMiwiZXhwIjoxNzQ5NzA5MTMyfQ.imCeyGg1GiGdfwKFp89OkKUZg904RcELUH51XXyXLNU

{
  "applicantIds" : [ 1, 2 ]
}
Request cookies
Name Description

accessToken

사용자 토큰

Request fields
Path Type Description

applicantIds

Array

불합격 시킬 지원자들의 id

HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Date: Thu, 29 May 2025 06:18:51 GMT
Keep-Alive: timeout=60
Connection: keep-alive

3.7.2. 실패: 존재하지 않는 지원자

HTTP request
PATCH /v1/applicants/reject HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 29
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTUzMywiZXhwIjoxNzQ5NzA5MTMzfQ.ztbpYvSozWhOYu-2bFGEp3wmWxRgkfNwO5xydvg9c28

{
  "applicantIds" : [ -1 ]
}
Request cookies
Name Description

accessToken

사용자 토큰

Request fields
Path Type Description

applicantIds

Array

존재하지 않는 지원자의 id

HTTP response
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:18:52 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 167

{
  "type" : "about:blank",
  "title" : "Not Found",
  "status" : 404,
  "detail" : "존재하지 않는 Applicant입니다.",
  "instance" : "/v1/applicants/reject"
}

3.7.3. 실패: 이미 불합격한 지원자

HTTP request
PATCH /v1/applicants/reject HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 28
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTUzMywiZXhwIjoxNzQ5NzA5MTMzfQ.ztbpYvSozWhOYu-2bFGEp3wmWxRgkfNwO5xydvg9c28

{
  "applicantIds" : [ 1 ]
}
Request cookies
Name Description

accessToken

사용자 토큰

Request fields
Path Type Description

applicantIds

Array

이미 불합격한 지원자의 id

HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:18:53 GMT
Connection: close
Content-Length: 169

{
  "type" : "about:blank",
  "title" : "Bad Request",
  "status" : 400,
  "detail" : "이미 불합격한 지원자입니다.",
  "instance" : "/v1/applicants/reject"
}

3.8. 지원자 일괄 불합격 해제

3.8.1. 성공

HTTP request
PATCH /v1/applicants/unreject HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 31
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTUzMiwiZXhwIjoxNzQ5NzA5MTMyfQ.imCeyGg1GiGdfwKFp89OkKUZg904RcELUH51XXyXLNU

{
  "applicantIds" : [ 1, 2 ]
}
Request cookies
Name Description

accessToken

사용자 토큰

Request fields
Path Type Description

applicantIds

Array

불합격 해제시킬 지원자들의 id

HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Date: Thu, 29 May 2025 06:18:51 GMT
Keep-Alive: timeout=60
Connection: keep-alive

3.8.2. 실패: 존재하지 않는 지원자

HTTP request
PATCH /v1/applicants/unreject HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 29
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTUzMiwiZXhwIjoxNzQ5NzA5MTMyfQ.imCeyGg1GiGdfwKFp89OkKUZg904RcELUH51XXyXLNU

{
  "applicantIds" : [ -1 ]
}
Request cookies
Name Description

accessToken

사용자 토큰

Request fields
Path Type Description

applicantIds

Array

존재하지 않는 지원자의 id

HTTP response
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:18:51 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 169

{
  "type" : "about:blank",
  "title" : "Not Found",
  "status" : 404,
  "detail" : "존재하지 않는 Applicant입니다.",
  "instance" : "/v1/applicants/unreject"
}

3.8.3. 실패: 불합격 하지 않은 지원자

HTTP request
PATCH /v1/applicants/unreject HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 28
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTUzMywiZXhwIjoxNzQ5NzA5MTMzfQ.ztbpYvSozWhOYu-2bFGEp3wmWxRgkfNwO5xydvg9c28

{
  "applicantIds" : [ 1 ]
}
Request cookies
Name Description

accessToken

사용자 토큰

Request fields
Path Type Description

applicantIds

Array

불합격하지 않은 지원자의 id

HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:18:53 GMT
Connection: close
Content-Length: 174

{
  "type" : "about:blank",
  "title" : "Bad Request",
  "status" : 400,
  "detail" : "불합격하지 않은 지원자입니다.",
  "instance" : "/v1/applicants/unreject"
}

4. 동아리

4.1. 동아리 생성

4.1.1. 성공

HTTP request
POST /v1/clubs?memberId=2 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 33
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU0OCwiZXhwIjoxNzQ5NzA5MTQ4fQ.c5hNQPZ_jXnb04txNNCBf5WgHZpo_gVfilXm3rZMiDU

{
  "name" : "연합 동아리"
}
Request cookies
Name Description

accessToken

사용자 토큰

Query parameters
Parameter Description

memberId

동아리를 생성할 사용자의 id

Request fields
Path Type Description

name

String

생성할 동아리의 이름

HTTP response
HTTP/1.1 201 Created
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Location: /v1/clubs/2
Date: Thu, 29 May 2025 06:19:08 GMT
Keep-Alive: timeout=60
Connection: keep-alive

4.1.2. 실패: 존재하지 않는 사용자

HTTP request
POST /v1/clubs?memberId=-1 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 33
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU0OCwiZXhwIjoxNzQ5NzA5MTQ4fQ.c5hNQPZ_jXnb04txNNCBf5WgHZpo_gVfilXm3rZMiDU

{
  "name" : "연합 동아리"
}
Request cookies
Name Description

accessToken

사용자 토큰

Query parameters
Parameter Description

memberId

존재하지 않는 사용자의 id

Request fields
Path Type Description

name

String

생성할 동아리의 이름

HTTP response
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:08 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 152

{
  "type" : "about:blank",
  "title" : "Not Found",
  "status" : 404,
  "detail" : "존재하지 않는 회원입니다.",
  "instance" : "/v1/clubs"
}

4.1.3. 실패: 조건에 맞지 않는 동아리 이름

HTTP request
POST /v1/clubs?memberId=2 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 17
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU0OCwiZXhwIjoxNzQ5NzA5MTQ4fQ.c5hNQPZ_jXnb04txNNCBf5WgHZpo_gVfilXm3rZMiDU

{
  "name" : ""
}
Request cookies
Name Description

accessToken

사용자 토큰

Query parameters
Parameter Description

memberId

동아리를 생성할 사용자의 id

Request fields
Path Type Description

name

String

조건에 맞지 않는 동아리의 이름

HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:08 GMT
Connection: close
Content-Length: 165

{
  "type" : "about:blank",
  "title" : "Bad Request",
  "status" : 400,
  "detail" : "{name=동아리 이름은 필수 값입니다.}",
  "instance" : "/v1/clubs"
}

5. 대시보드

5.1. 대시보드 생성

5.1.1. 성공

HTTP request
POST /v1/dashboards?clubId=1 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 398
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU0OSwiZXhwIjoxNzQ5NzA5MTQ5fQ.o6IYu0xAZPZZh3Jh1kg3Wu0Vb7p7eJ6XjvALaD3Jk9k

{
  "title" : "크루루대시보드",
  "postingContent" : "# 공고 내용",
  "questions" : [ {
    "type" : "DROPDOWN",
    "question" : "객관식질문1",
    "description" : null,
    "choices" : [ {
      "choice" : "선택지1",
      "orderIndex" : 1
    } ],
    "orderIndex" : 1,
    "required" : false
  } ],
  "startDate" : "2024-08-02T02:00:00",
  "endDate" : "2024-08-08T02:00:00"
}
Request cookies
Name Description

accessToken

사용자 토큰

Query parameters
Parameter Description

clubId

동아리의 id

Request fields
Path Type Description

title

String

공고 제목

postingContent

String

공고 내용

questions

Array

질문들

startDate

String

공고 시작 날짜

endDate

String

공고 마감 날짜

questions[].type

String

질문 유형

questions[].question

String

질문 내용

questions[].description

Null

질문 보조 설명

questions[].choices

Array

질문의 선택지들

questions[].orderIndex

Number

질문의 순서

questions[].required

Boolean

질문의 필수여부

questions[].choices[].choice

String

객관식 질문의 선택지

questions[].choices[].orderIndex

Number

선택지의 순서

HTTP response
HTTP/1.1 201 Created
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Location: /v1/dashboards/1
Content-Type: application/json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:08 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 63

{
  "applyFormId" : "715811451059987197",
  "dashboardId" : 1
}

5.1.2. 실패: 적절하지 않은 질문 생성

HTTP request
POST /v1/dashboards?clubId=1 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 396
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU0OSwiZXhwIjoxNzQ5NzA5MTQ5fQ.o6IYu0xAZPZZh3Jh1kg3Wu0Vb7p7eJ6XjvALaD3Jk9k

{
  "title" : "크루루대시보드",
  "postingContent" : "# 공고 내용",
  "questions" : [ {
    "type" : "DROPDOWN",
    "question" : "객관식질문",
    "description" : null,
    "choices" : [ {
      "choice" : "선택지1",
      "orderIndex" : 0
    } ],
    "orderIndex" : 0,
    "required" : null
  } ],
  "startDate" : "2024-08-02T02:00:00",
  "endDate" : "2024-08-08T02:00:00"
}
Request cookies
Name Description

accessToken

사용자 토큰

Query parameters
Parameter Description

clubId

동아리의 id

Request fields
Path Type Description

title

String

공고 제목

postingContent

String

공고 내용

questions

Array

질문들

startDate

String

공고 시작 날짜

endDate

String

공고 마감 날짜

questions[].type

String

질문 유형

questions[].question

String

질문 내용

questions[].description

Null

질문 보조 설명

questions[].choices

Array

질문의 선택지들

questions[].orderIndex

Number

질문의 순서

questions[].required

Null

질문의 필수여부

questions[].choices[].choice

String

객관식 질문의 선택지

questions[].choices[].orderIndex

Number

선택지의 순서

HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:09 GMT
Connection: close
Content-Length: 163

{
  "type" : "about:blank",
  "title" : "Bad Request",
  "status" : 400,
  "detail" : "{questions[0].required=must not be null}",
  "instance" : "/v1/dashboards"
}

5.1.3. 실패: 존재하지 않는 동아리

HTTP request
POST /v1/dashboards?clubId=-1 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 398
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU0OSwiZXhwIjoxNzQ5NzA5MTQ5fQ.o6IYu0xAZPZZh3Jh1kg3Wu0Vb7p7eJ6XjvALaD3Jk9k

{
  "title" : "크루루대시보드",
  "postingContent" : "# 공고 내용",
  "questions" : [ {
    "type" : "DROPDOWN",
    "question" : "객관식질문1",
    "description" : null,
    "choices" : [ {
      "choice" : "선택지1",
      "orderIndex" : 1
    } ],
    "orderIndex" : 1,
    "required" : false
  } ],
  "startDate" : "2024-08-02T02:00:00",
  "endDate" : "2024-08-08T02:00:00"
}
Request cookies
Name Description

accessToken

사용자 토큰

Query parameters
Parameter Description

clubId

존재하지 않는 동아리 id

Request fields
Path Type Description

title

String

공고 제목

postingContent

String

공고 내용

questions

Array

질문들

startDate

String

공고 시작 날짜

endDate

String

공고 마감 날짜

questions[].type

String

질문 유형

questions[].question

String

질문 내용

questions[].description

Null

질문 보조 설명

questions[].choices

Array

질문의 선택지들

questions[].orderIndex

Number

질문의 순서

questions[].required

Boolean

질문의 필수여부

questions[].choices[].choice

String

객관식 질문의 선택지

questions[].choices[].orderIndex

Number

선택지의 순서

HTTP response
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:08 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 155

{
  "type" : "about:blank",
  "title" : "Not Found",
  "status" : 404,
  "detail" : "존재하지 않는 Club입니다.",
  "instance" : "/v1/dashboards"
}

5.2. 대시보드 조회

5.2.1. 성공

HTTP request
GET /v1/dashboards?clubId=1 HTTP/1.1
Host: localhost:45581
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU0OSwiZXhwIjoxNzQ5NzA5MTQ5fQ.o6IYu0xAZPZZh3Jh1kg3Wu0Vb7p7eJ6XjvALaD3Jk9k
Request cookies
Name Description

accessToken

사용자 토큰

Query parameters
Parameter Description

clubId

동아리의 id

HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:08 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 356

{
  "dashboards" : [ {
    "dashboardId" : 1,
    "applyFormId" : "715811451559108798",
    "title" : "크루루 백엔드 모집 공고",
    "stats" : {
      "accept" : 0,
      "fail" : 0,
      "inProgress" : 0,
      "total" : 0
    },
    "startDate" : "2024-07-31T02:00:00",
    "endDate" : "2024-08-08T02:00:00"
  } ],
  "clubName" : "크루루"
}
Response fields
Path Type Description

clubName

String

동아리명

dashboards

Array

대시보드들의 요약 정보

dashboards[].dashboardId

Number

대시보드의 id

dashboards[].applyFormId

String

지원폼의 id

dashboards[].title

String

지원폼의 공고명

dashboards[].stats.accept

Number

합격 인원

dashboards[].stats.fail

Number

불합격 인원

dashboards[].stats.inProgress

Number

진행중 인원

dashboards[].stats.total

Number

인원 총계

dashboards[].startDate

String

시작날짜

dashboards[].endDate

String

마감날짜

5.3. 대시보드 삭제

5.3.1. 성공

HTTP request
DELETE /v1/dashboards/1 HTTP/1.1
Host: localhost:45581
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU0OSwiZXhwIjoxNzQ5NzA5MTQ5fQ.o6IYu0xAZPZZh3Jh1kg3Wu0Vb7p7eJ6XjvALaD3Jk9k
Request cookies
Name Description

accessToken

사용자 토큰

Path parameters
Table 1. /v1/dashboards/{dashboardId}
Parameter Description

dashboardId

삭제할 대시보드의 id

HTTP response
HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Date: Thu, 29 May 2025 06:19:08 GMT
Keep-Alive: timeout=60
Connection: keep-alive

5.3.2. 실패: 존재하지 않는 대시보드

HTTP request
DELETE /v1/dashboards/-1 HTTP/1.1
Host: localhost:45581
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU0OSwiZXhwIjoxNzQ5NzA5MTQ5fQ.o6IYu0xAZPZZh3Jh1kg3Wu0Vb7p7eJ6XjvALaD3Jk9k
Request cookies
Name Description

accessToken

사용자 토큰

Path parameters
Table 1. /v1/dashboards/{dashboardId}
Parameter Description

dashboardId

존재하지 않는 대시보드의 id

HTTP response
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:08 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 163

{
  "type" : "about:blank",
  "title" : "Not Found",
  "status" : 404,
  "detail" : "존재하지 않는 Dashboard입니다.",
  "instance" : "/v1/dashboards/-1"
}

6. 프로세스

6.1. 프로세스 목록 조회

6.1.1. 성공

HTTP request
GET /v1/processes?dashboardId=1&minScore=0.00&maxScore=5.00&evaluationStatus=ALL&sortByCreatedAt=DESC&sortByScore=null HTTP/1.1
Host: localhost:45581
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU1NywiZXhwIjoxNzQ5NzA5MTU3fQ.Eo0N_lqpbliiQcF-wFJTq_iPPxgceCsX4vykmZlPGDk
Request cookies
Name Description

accessToken

사용자 토큰

Query parameters
Parameter Description

dashboardId

대시보드의 id, required=true

minScore

지원자 최소 평균 점수: 0.00(default) ~ 5.00, required=false

maxScore

지원자 최대 평균 점수: 0.00 ~ 5.00(default), required=false

evaluationStatus

지원자 평가 유무: ALL(default), NOT_EVALUATED, EVALUATED, required=false

sortByCreatedAt

지원자 지원 날짜 정렬 조건: DESC, ASC, required=false

sortByScore

지원자 평균 점수 정렬 조건: DESC, ASC, required=false

HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:17 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 870

{
  "processes" : [ {
    "processId" : 1,
    "orderIndex" : 0,
    "applicants" : [ {
      "applicantId" : 1,
      "applicantName" : "도비",
      "createdAt" : "2025-05-29T06:19:17.338567",
      "isRejected" : false,
      "evaluationCount" : 0,
      "averageScore" : 0.0
    } ],
    "name" : "지원 접수",
    "description" : "지원자가 지원서를 제출하는 단계"
  }, {
    "processId" : 2,
    "orderIndex" : 1,
    "applicants" : [ ],
    "name" : "1차 면접",
    "description" : "화상 면접"
  }, {
    "processId" : 3,
    "orderIndex" : 0,
    "applicants" : [ ],
    "name" : "지원 접수",
    "description" : "지원자가 지원서를 제출하는 단계"
  } ],
  "applyFormId" : "715811485746880605",
  "title" : "크루루 백엔드 모집 공고",
  "startDate" : "2024-07-31T02:00:00",
  "endDate" : "2024-08-08T02:00:00"
}
Response fields
Path Type Description

applyFormId

String

지원폼의 id

processes

Array

프로세스 목록

title

String

지원폼의 제목

startDate

String

지원폼 모집 시작일

endDate

String

지원폼 모집 종료일

processes[].processId

Number

프로세스의 id

processes[].orderIndex

Number

프로세스의 순서

processes[].name

String

프로세스명

processes[].description

String

프로세스의 설명

processes[].applicants

Array

프로세스에 속한 지원자들

processes[].applicants[]applicantId

Number

지원자의 id

processes[].applicants[]applicantName

String

지원자의 이름

processes[].applicants[]createdAt

String

지원자의 지원날짜

processes[].applicants[]isRejected

Boolean

지원자의 불합격 여부

processes[].applicants[]evaluationCount

Number

지원자의 평가 개수

processes[].applicants[]averageScore

Number

지원자의 평가 평균 점수

6.1.2. 실패: 존재하지 않는 대시보드

HTTP request
GET /v1/processes?dashboardId=0 HTTP/1.1
Host: localhost:45581
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU1NywiZXhwIjoxNzQ5NzA5MTU3fQ.Eo0N_lqpbliiQcF-wFJTq_iPPxgceCsX4vykmZlPGDk
Request cookies
Name Description

accessToken

사용자 토큰

Query parameters
Parameter Description

dashboardId

존재하지 않는 대시보드의 id

HTTP response
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:17 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 159

{
  "type" : "about:blank",
  "title" : "Not Found",
  "status" : 404,
  "detail" : "존재하지 않는 Dashboard입니다.",
  "instance" : "/v1/processes"
}

6.2. 프로세스 생성

6.2.1. 성공

HTTP request
POST /v1/processes?dashboardId=1 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 90
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU1NywiZXhwIjoxNzQ5NzA5MTU3fQ.Eo0N_lqpbliiQcF-wFJTq_iPPxgceCsX4vykmZlPGDk

{
  "processName" : "1차 면접",
  "orderIndex" : 1,
  "description" : "화상 면접"
}
Request cookies
Name Description

accessToken

사용자 토큰

Query parameters
Parameter Description

dashboardId

대시보드의 id

Request fields
Path Type Description

processName

String

프로세스명

description

String

프로세스의 설명

orderIndex

Number

프로세스의 순서

HTTP response
HTTP/1.1 201 Created
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Date: Thu, 29 May 2025 06:19:17 GMT
Keep-Alive: timeout=60
Connection: keep-alive

6.2.2. 실패: 존재하지 않는 대시보드

HTTP request
POST /v1/processes?dashboardId=-1 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 90
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU1NywiZXhwIjoxNzQ5NzA5MTU3fQ.Eo0N_lqpbliiQcF-wFJTq_iPPxgceCsX4vykmZlPGDk

{
  "processName" : "1차 면접",
  "orderIndex" : 1,
  "description" : "화상 면접"
}
Request cookies
Name Description

accessToken

사용자 토큰

Query parameters
Parameter Description

dashboardId

대시보드의 id

Request fields
Path Type Description

processName

String

프로세스명

description

String

프로세스의 설명

orderIndex

Number

프로세스의 순서

HTTP response
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:17 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 159

{
  "type" : "about:blank",
  "title" : "Not Found",
  "status" : 404,
  "detail" : "존재하지 않는 Dashboard입니다.",
  "instance" : "/v1/processes"
}

6.2.3. 실패: 조건에 맞지 않는 프로세스 이름

HTTP request
POST /v1/processes?dashboardId=1 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 79
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU1NywiZXhwIjoxNzQ5NzA5MTU3fQ.Eo0N_lqpbliiQcF-wFJTq_iPPxgceCsX4vykmZlPGDk

{
  "processName" : "",
  "orderIndex" : 1,
  "description" : "화상 면접"
}
Request cookies
Name Description

accessToken

사용자 토큰

Query parameters
Parameter Description

dashboardId

대시보드의 id

Request fields
Path Type Description

processName

String

부적절한 프로세스명

description

String

프로세스의 설명

orderIndex

Number

프로세스의 순서

HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:17 GMT
Connection: close
Content-Length: 172

{
  "type" : "about:blank",
  "title" : "Bad Request",
  "status" : 400,
  "detail" : "{name=프로세스 이름은 필수 값입니다.}",
  "instance" : "/v1/processes"
}

6.2.4. 실패: 최대 프로세스 개수 초과

HTTP request
POST /v1/processes?dashboardId=1 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 81
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU1NywiZXhwIjoxNzQ5NzA5MTU3fQ.Eo0N_lqpbliiQcF-wFJTq_iPPxgceCsX4vykmZlPGDk

{
  "processName" : "name",
  "orderIndex" : 3,
  "description" : "description"
}
Request cookies
Name Description

accessToken

사용자 토큰

Query parameters
Parameter Description

dashboardId

생성할 프로세스의 대시보드 id

Request fields
Path Type Description

processName

String

프로세스명

description

String

프로세스의 설명

orderIndex

Number

프로세스의 순서

HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:17 GMT
Connection: close
Content-Length: 179

{
  "type" : "about:blank",
  "title" : "Bad Request",
  "status" : 400,
  "detail" : "프로세스는 최대 5개까지 생성 가능합니다.",
  "instance" : "/v1/processes"
}

6.3. 프로세스 수정

6.3.1. 성공

HTTP request
PATCH /v1/processes/1 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 81
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU1NywiZXhwIjoxNzQ5NzA5MTU3fQ.Eo0N_lqpbliiQcF-wFJTq_iPPxgceCsX4vykmZlPGDk

{
  "processName" : "임시 과정",
  "description" : "수정된 프로세스"
}
Request cookies
Name Description

accessToken

사용자 토큰

Path parameters
Table 1. /v1/processes/{processId}
Parameter Description

processId

수정될 프로세스의 id

Request fields
Path Type Description

processName

String

프로세스명

description

String

프로세스의 설명

HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:17 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 322

{
  "processId" : 1,
  "orderIndex" : 0,
  "applicants" : [ {
    "applicantId" : 1,
    "applicantName" : "도비",
    "createdAt" : "2025-05-29T06:19:17.285308",
    "isRejected" : false,
    "evaluationCount" : 0,
    "averageScore" : 0.0
  } ],
  "name" : "임시 과정",
  "description" : "수정된 프로세스"
}
Response fields
Path Type Description

processId

Number

프로세스의 id

orderIndex

Number

프로세스의 순서

name

String

프로세스명

description

String

프로세스의 설명

applicants

Array

프로세스에 속한 지원자들

applicants[].applicantId

Number

지원자의 id

applicants[].applicantName

String

지원자의 이름

applicants[].createdAt

String

지원자의 지원날짜

applicants[].isRejected

Boolean

지원자의 불합격 여부

applicants[].evaluationCount

Number

지원자의 평가 개수

applicants[].averageScore

Number

지원자의 평가 평균 점수

6.3.2. 실패: 조건에 맞지 않는 프로세스 이름

HTTP request
PATCH /v1/processes/1 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 57
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU1NywiZXhwIjoxNzQ5NzA5MTU3fQ.Eo0N_lqpbliiQcF-wFJTq_iPPxgceCsX4vykmZlPGDk

{
  "processName" : "",
  "description" : "description"
}
Request cookies
Name Description

accessToken

사용자 토큰

Path parameters
Table 1. /v1/processes/{processId}
Parameter Description

processId

수정될 프로세스의 id

Request fields
Path Type Description

processName

String

조건에 맞지 않는 프로세스 이름

description

String

수정될 프로세스 설명

HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:17 GMT
Connection: close
Content-Length: 184

{
  "type" : "about:blank",
  "title" : "Bad Request",
  "status" : 400,
  "detail" : "{name=수정할 프로세스 이름은 필수 값입니다.}",
  "instance" : "/v1/processes/1"
}

6.3.3. 실패: 존재하지 않는 프로세스

HTTP request
PATCH /v1/processes/-1 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 81
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU1NywiZXhwIjoxNzQ5NzA5MTU3fQ.Eo0N_lqpbliiQcF-wFJTq_iPPxgceCsX4vykmZlPGDk

{
  "processName" : "임시 과정",
  "description" : "수정된 프로세스"
}
Request cookies
Name Description

accessToken

사용자 토큰

Path parameters
Table 1. /v1/processes/{processId}
Parameter Description

processId

수정될 프로세스의 id

Request fields
Path Type Description

processName

String

조건에 맞지 않는 프로세스 이름

description

String

수정될 프로세스 설명

HTTP response
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:17 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 160

{
  "type" : "about:blank",
  "title" : "Not Found",
  "status" : 404,
  "detail" : "존재하지 않는 Process입니다.",
  "instance" : "/v1/processes/-1"
}

6.4. 프로세스 삭제

6.4.1. 성공

HTTP request
DELETE /v1/processes/1 HTTP/1.1
Host: localhost:45581
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU1NywiZXhwIjoxNzQ5NzA5MTU3fQ.Eo0N_lqpbliiQcF-wFJTq_iPPxgceCsX4vykmZlPGDk
Request cookies
Name Description

accessToken

사용자 토큰

Path parameters
Table 1. /v1/processes/{processId}
Parameter Description

processId

생성할 프로세스의 대시보드 id

HTTP response
HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Date: Thu, 29 May 2025 06:19:17 GMT
Keep-Alive: timeout=60
Connection: keep-alive

6.4.2. 실패: 존재하지 않는 프로세스

HTTP request
DELETE /v1/processes/-1 HTTP/1.1
Host: localhost:45581
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU1NywiZXhwIjoxNzQ5NzA5MTU3fQ.Eo0N_lqpbliiQcF-wFJTq_iPPxgceCsX4vykmZlPGDk
Request cookies
Name Description

accessToken

사용자 토큰

Path parameters
Table 1. /v1/processes/{processId}
Parameter Description

processId

삭제할 프로세스의 id

HTTP response
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:17 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 160

{
  "type" : "about:blank",
  "title" : "Not Found",
  "status" : 404,
  "detail" : "존재하지 않는 Process입니다.",
  "instance" : "/v1/processes/-1"
}

6.4.3. 실패: 처음 혹은 마지막 프로세스

HTTP request
DELETE /v1/processes/1 HTTP/1.1
Host: localhost:45581
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU1NywiZXhwIjoxNzQ5NzA5MTU3fQ.Eo0N_lqpbliiQcF-wFJTq_iPPxgceCsX4vykmZlPGDk
Request cookies
Name Description

accessToken

사용자 토큰

Path parameters
Table 1. /v1/processes/{processId}
Parameter Description

processId

삭제할 프로세스의 id

HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:17 GMT
Connection: close
Content-Length: 169

{
  "type" : "about:blank",
  "title" : "Bad Request",
  "status" : 400,
  "detail" : "삭제가 불가능한 프로세스입니다.",
  "instance" : "/v1/processes/1"
}

6.4.4. 실패: 지원자가 존재하는 프로세스

HTTP request
DELETE /v1/processes/-1 HTTP/1.1
Host: localhost:45581
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU1NywiZXhwIjoxNzQ5NzA5MTU3fQ.Eo0N_lqpbliiQcF-wFJTq_iPPxgceCsX4vykmZlPGDk
Request cookies
Name Description

accessToken

사용자 토큰

Path parameters
Table 1. /v1/processes/{processId}
Parameter Description

processId

삭제할 프로세스의 id

HTTP response
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:17 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 160

{
  "type" : "about:blank",
  "title" : "Not Found",
  "status" : 404,
  "detail" : "존재하지 않는 Process입니다.",
  "instance" : "/v1/processes/-1"
}

7. 질문

7.1. 질문 변경

7.1.1. 성공

HTTP request
PATCH /v1/questions?applyformId=715811488326377528 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 247
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU1NywiZXhwIjoxNzQ5NzA5MTU3fQ.Eo0N_lqpbliiQcF-wFJTq_iPPxgceCsX4vykmZlPGDk

{
  "questions" : [ {
    "type" : "LONG_ANSWER",
    "question" : "new",
    "description" : null,
    "choices" : [ {
      "choice" : "좋아하는 음식은?",
      "orderIndex" : 0
    } ],
    "orderIndex" : 0,
    "required" : true
  } ]
}
Request cookies
Name Description

accessToken

사용자 토큰

Query parameters
Parameter Description

applyformId

질문을 변경할 지원폼의 id

Request fields
Path Type Description

questions

Array

변경할 질문들

questions[].type

String

질문의 유형

questions[].question

String

질문 내용

questions[].description

Null

질문 보조 설명

questions[].choices

Array

질문의 선택지들

questions[].orderIndex

Number

질문의 순서

questions[].required

Boolean

질문의 필수 여부

questions[].choices[].choice

String

선택지의 내용

questions[].choices[].orderIndex

Number

선택지의 순서

HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Date: Thu, 29 May 2025 06:19:17 GMT
Keep-Alive: timeout=60
Connection: keep-alive

7.1.2. 실패: 존재하지 않는 지원폼

HTTP request
PATCH /v1/questions?applyformId=-1 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 247
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU1NywiZXhwIjoxNzQ5NzA5MTU3fQ.Eo0N_lqpbliiQcF-wFJTq_iPPxgceCsX4vykmZlPGDk

{
  "questions" : [ {
    "type" : "LONG_ANSWER",
    "question" : "new",
    "description" : null,
    "choices" : [ {
      "choice" : "좋아하는 음식은?",
      "orderIndex" : 0
    } ],
    "orderIndex" : 0,
    "required" : true
  } ]
}
Request cookies
Name Description

accessToken

사용자 토큰

Query parameters
Parameter Description

applyformId

존재하지 않는 지원폼의 id

Request fields
Path Type Description

questions

Array

변경할 질문들

questions[].type

String

질문의 유형

questions[].question

String

질문 내용

questions[].description

Null

질문 보조 설명

questions[].choices

Array

질문의 선택지들

questions[].orderIndex

Number

질문의 순서

questions[].required

Boolean

질문의 필수 여부

questions[].choices[].choice

String

선택지의 내용

questions[].choices[].orderIndex

Number

선택지의 순서

HTTP response
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:17 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 159

{
  "type" : "about:blank",
  "title" : "Not Found",
  "status" : 404,
  "detail" : "존재하지 않는 ApplyForm입니다.",
  "instance" : "/v1/questions"
}

8. 지원폼

8.1. 지원폼 제출

8.1.1. 성공

HTTP request
POST /v1/applyform/715811414137528371/submit HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 332

{
  "applicant" : {
    "name" : "초코칩",
    "email" : "dev.chocochip@gmail.com",
    "phone" : "01000000000"
  },
  "answers" : [ {
    "questionId" : 1,
    "replies" : [ "안녕하세요, 맛있는 초코칩입니다." ]
  }, {
    "questionId" : 2,
    "replies" : [ "온라인" ]
  } ],
  "personalDataCollection" : true
}
Path parameters
Table 1. /v1/applyform/{applyFormId}/submit
Parameter Description

applyFormId

지원폼의 id

Request fields
Path Type Description

applicant.name

String

지원자의 이름

applicant.email

String

지원자의 이메일

applicant.phone

String

지원자의 전화번호

answers

Array

지원폼에 대한 응답 모음

personalDataCollection

Boolean

개인정보 활용 동의 여부

answers[].questionId

Number

질문의 id

answers[].replies

Array

질문에 대한 응답

HTTP response
HTTP/1.1 201 Created
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Location: /v1/applyform/715811414137528371
Date: Thu, 29 May 2025 06:19:00 GMT
Keep-Alive: timeout=60
Connection: keep-alive

8.1.2. 실패: 개인정보 활용 거부

HTTP request
POST /v1/applyform/715811413571297372/submit HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 333

{
  "applicant" : {
    "name" : "초코칩",
    "email" : "dev.chocochip@gmail.com",
    "phone" : "01000000000"
  },
  "answers" : [ {
    "questionId" : 1,
    "replies" : [ "안녕하세요, 맛있는 초코칩입니다." ]
  }, {
    "questionId" : 2,
    "replies" : [ "온라인" ]
  } ],
  "personalDataCollection" : false
}
Path parameters
Table 1. /v1/applyform/{applyFormId}/submit
Parameter Description

applyFormId

지원폼의 id

Request fields
Path Type Description

applicant.name

String

지원자의 이름

applicant.email

String

지원자의 이메일

applicant.phone

String

지원자의 전화번호

answers

Array

지원폼에 대한 응답 모음

personalDataCollection

Boolean

개인정보 활용 동의 거부

answers[].questionId

Number

질문의 id

answers[].replies

Array

질문에 대한 응답

HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:00 GMT
Connection: close
Content-Length: 201

{
  "type" : "about:blank",
  "title" : "Bad Request",
  "status" : 400,
  "detail" : "개인 정보 수집에 동의하지 않았습니다.",
  "instance" : "/v1/applyform/715811413571297372/submit"
}

8.1.3. 실패: 잘못된 지원자 정보

HTTP request
POST /v1/applyform/715811420177326168/submit HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 260

{
  "applicant" : {
    "name" : "초코칩",
    "email" : "dev.chocochip@gmail.com",
    "phone" : ""
  },
  "answers" : [ {
    "questionId" : 1,
    "replies" : [ "안녕하세요, 맛있는 초코칩입니다." ]
  } ],
  "personalDataCollection" : true
}
Path parameters
Table 1. /v1/applyform/{applyFormId}/submit
Parameter Description

applyFormId

지원폼의 id

Request fields
Path Type Description

applicant.name

String

지원자의 이름

applicant.email

String

지원자의 이메일

applicant.phone

String

지원자의 전화번호

answers

Array

지원폼에 대한 응답 모음

personalDataCollection

Boolean

개인정보 활용 동의 여부

answers[].questionId

Number

질문의 id

answers[].replies

Array

질문에 대한 응답

HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:01 GMT
Connection: close
Content-Length: 215

{
  "type" : "about:blank",
  "title" : "Bad Request",
  "status" : 400,
  "detail" : "{applicantCreateRequest.phone=전화번호는 필수 값입니다.}",
  "instance" : "/v1/applyform/715811420177326168/submit"
}

8.1.4. 실패: 잘못된 답변

HTTP request
POST /v1/applyform/715811418491216048/submit HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 223

{
  "applicant" : {
    "name" : "초코칩",
    "email" : "dev.chocochip@gmail.com",
    "phone" : "01000000000"
  },
  "answers" : [ {
    "questionId" : 1,
    "replies" : null
  } ],
  "personalDataCollection" : true
}
Path parameters
Table 1. /v1/applyform/{applyFormId}/submit
Parameter Description

applyFormId

지원폼의 id

Request fields
Path Type Description

applicant.name

String

지원자의 이름

applicant.email

String

지원자의 이메일

applicant.phone

String

지원자의 전화번호

answers

Array

지원폼에 대한 응답 모음

personalDataCollection

Boolean

개인정보 활용 동의 여부

answers[].questionId

Number

질문의 id

answers[].replies

Null

질문에 대한 응답

HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:01 GMT
Connection: close
Content-Length: 211

{
  "type" : "about:blank",
  "title" : "Bad Request",
  "status" : 400,
  "detail" : "{answerCreateRequest[0].replies=응답은 필수 값입니다.}",
  "instance" : "/v1/applyform/715811418491216048/submit"
}

8.1.5. 실패: 대시보드 내에 제출 프로세스 존재하지 않을 경우

HTTP request
POST /v1/applyform/715811414951223451/submit HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 234

{
  "applicant" : {
    "name" : "초코칩",
    "email" : "dev.chocochip@gmail.com",
    "phone" : "01000000000"
  },
  "answers" : [ {
    "questionId" : 1,
    "replies" : [ "온라인" ]
  } ],
  "personalDataCollection" : true
}
Path parameters
Table 1. /v1/applyform/{applyFormId}/submit
Parameter Description

applyFormId

지원폼의 id

Request fields
Path Type Description

applicant.name

String

지원자의 이름

applicant.email

String

지원자의 이메일

applicant.phone

String

지원자의 전화번호

answers

Array

지원폼에 대한 응답 모음

personalDataCollection

Boolean

개인정보 활용 동의 여부

answers[].questionId

Number

질문의 id

answers[].replies

Array

질문에 대한 응답

HTTP response
HTTP/1.1 500 Internal Server Error
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:00 GMT
Connection: close
Content-Length: 204

{
  "type" : "about:blank",
  "title" : "Internal Server Error",
  "status" : 500,
  "detail" : "서버 내부에 오류가 발생했습니다.",
  "instance" : "/v1/applyform/715811414951223451/submit"
}

8.1.6. 실패: 모집 기간을 벗어난 제출

HTTP request
POST /v1/applyform/715811415454539962/submit HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 234

{
  "applicant" : {
    "name" : "초코칩",
    "email" : "dev.chocochip@gmail.com",
    "phone" : "01000000000"
  },
  "answers" : [ {
    "questionId" : 1,
    "replies" : [ "온라인" ]
  } ],
  "personalDataCollection" : true
}
Path parameters
Table 1. /v1/applyform/{applyFormId}/submit
Parameter Description

applyFormId

지원폼의 id

Request fields
Path Type Description

applicant.name

String

지원자의 이름

applicant.email

String

지원자의 이메일

applicant.phone

String

지원자의 전화번호

answers

Array

지원폼에 대한 응답 모음

personalDataCollection

Boolean

개인정보 활용 동의 여부

answers[].questionId

Number

질문의 id

answers[].replies

Array

질문에 대한 응답

HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:00 GMT
Connection: close
Content-Length: 178

{
  "type" : "about:blank",
  "title" : "Bad Request",
  "status" : 400,
  "detail" : "접수 기간이 아닙니다.",
  "instance" : "/v1/applyform/715811415454539962/submit"
}

8.1.7. 실패: 존재하지 않는 지원폼

HTTP request
POST /v1/applyform/-1/submit HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 234

{
  "applicant" : {
    "name" : "초코칩",
    "email" : "dev.chocochip@gmail.com",
    "phone" : "01000000000"
  },
  "answers" : [ {
    "questionId" : 1,
    "replies" : [ "온라인" ]
  } ],
  "personalDataCollection" : true
}
Path parameters
Table 1. /v1/applyform/{applyFormId}/submit
Parameter Description

applyFormId

존재하지 않는 지원폼의 id

Request fields
Path Type Description

applicant.name

String

지원자의 이름

applicant.email

String

지원자의 이메일

applicant.phone

String

지원자의 전화번호

answers

Array

지원폼에 대한 응답 모음

personalDataCollection

Boolean

개인정보 활용 동의 여부

answers[].questionId

Number

질문의 id

answers[].replies

Array

질문에 대한 응답

HTTP response
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:00 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 173

{
  "type" : "about:blank",
  "title" : "Not Found",
  "status" : 404,
  "detail" : "존재하지 않는 지원서 폼입니다.",
  "instance" : "/v1/applyform/-1/submit"
}

8.1.8. 실패: 존재하지 않는 질문

HTTP request
POST /v1/applyform/715811418013065370/submit HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 235

{
  "applicant" : {
    "name" : "초코칩",
    "email" : "dev.chocochip@gmail.com",
    "phone" : "01000000000"
  },
  "answers" : [ {
    "questionId" : -1,
    "replies" : [ "온라인" ]
  } ],
  "personalDataCollection" : true
}
Path parameters
Table 1. /v1/applyform/{applyFormId}/submit
Parameter Description

applyFormId

지원폼의 id

Request fields
Path Type Description

applicant.name

String

지원자의 이름

applicant.email

String

지원자의 이메일

applicant.phone

String

지원자의 전화번호

answers

Array

지원폼에 대한 응답 모음

personalDataCollection

Boolean

개인정보 활용 동의 여부

answers[].questionId

Number

존재하지 않는 질문의 id

answers[].replies

Array

질문에 대한 응답

HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:00 GMT
Connection: close
Content-Length: 232

{
  "type" : "about:blank",
  "title" : "Bad Request",
  "status" : 400,
  "detail" : "{answerCreateRequest[0].questionId=질문 식별자는 0 이상의 정수입니다.}",
  "instance" : "/v1/applyform/715811418013065370/submit"
}

8.1.9. 실패: 필수 질문에 응답하지 않음

HTTP request
POST /v1/applyform/715811414674399443/submit HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 174

{
  "applicant" : {
    "name" : "초코칩",
    "email" : "dev.chocochip@gmail.com",
    "phone" : "01000000000"
  },
  "answers" : [ ],
  "personalDataCollection" : true
}
Path parameters
Table 1. /v1/applyform/{applyFormId}/submit
Parameter Description

applyFormId

지원폼의 id

Request fields
Path Type Description

applicant.name

String

지원자의 이름

applicant.email

String

지원자의 이메일

applicant.phone

String

지원자의 전화번호

answers

Array

지원폼에 대한 응답 모음

personalDataCollection

Boolean

개인정보 활용 동의 여부

HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:00 GMT
Connection: close
Content-Length: 201

{
  "type" : "about:blank",
  "title" : "Bad Request",
  "status" : 400,
  "detail" : "응답하지 않은 필수 질문이 존재합니다.",
  "instance" : "/v1/applyform/715811414674399443/submit"
}

8.2. 지원폼 조회

8.2.1. 성공

HTTP request
GET /v1/applyform/715811415702003738 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU0MCwiZXhwIjoxNzQ5NzA5MTQwfQ.XprN6Th9D1uxFxiWP6Jxuwh8-czL8T6Assdu5emD0K0
Path parameters
Table 1. /v1/applyform/{applyFormId}
Parameter Description

applyFormId

지원폼의 id

HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:00 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 1126

{
  "postingContent" : "# 모집공고 설명1 ## 이렇게 지원하세요",
  "questions" : [ {
    "label" : "주관식 단답형",
    "choices" : [ ],
    "id" : 1,
    "type" : "SHORT_ANSWER",
    "description" : "한 줄로 답변이 가능한 짧은 문장을 작성해주세요.",
    "orderIndex" : 1,
    "required" : false
  }, {
    "label" : "객관식 다중 선택",
    "choices" : [ {
      "label" : "1번 선택지",
      "id" : 1,
      "orderIndex" : 1
    }, {
      "label" : "2번 선택지",
      "id" : 2,
      "orderIndex" : 2
    }, {
      "label" : "3번 선택지",
      "id" : 3,
      "orderIndex" : 3
    }, {
      "label" : "4번 선택지",
      "id" : 4,
      "orderIndex" : 4
    }, {
      "label" : "5번 선택지",
      "id" : 5,
      "orderIndex" : 5
    } ],
    "id" : 2,
    "type" : "MULTIPLE_CHOICE",
    "description" : "주어진 목록에서 여러 개의 옵션을 선택해주세요.",
    "orderIndex" : 4,
    "required" : false
  } ],
  "title" : "크루루 백엔드 모집 공고",
  "startDate" : "2024-07-31T02:00:00",
  "endDate" : "2024-08-08T02:00:00"
}
Response fields
Path Type Description

title

String

지원폼의 제목

postingContent

String

지원자의 내용(본문)

startDate

String

지원 가능 날짜

endDate

String

지원 마감 날짜

questions

Array

지원폼의 질문들

questions[].id

Number

질문의 id

questions[].type

String

질문 유형

questions[].label

String

질문의 내용

questions[].description

String

질문 보조 설명

questions[].orderIndex

Number

질문 순서

questions[].choices

Array

질문의 선택지

questions[].required

Boolean

질문 필수여부

questions[].choices[].id

Number

선택지의 id

questions[].choices[].label

String

선택지의 내용

questions[].choices[].orderIndex

Number

선택지 순서

8.2.2. 실패: 존재하지 않는 지원폼

HTTP request
GET /v1/applyform/-1 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU0MSwiZXhwIjoxNzQ5NzA5MTQxfQ.7dWd-WCiTfgYDF8hjmtm15Ed2Tj9pDQnb15FK1S-J90
Path parameters
Table 1. /v1/applyform/{applyFormId}
Parameter Description

applyFormId

존재하지 않는 지원폼의 id

HTTP response
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:01 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 166

{
  "type" : "about:blank",
  "title" : "Not Found",
  "status" : 404,
  "detail" : "존재하지 않는 지원서 폼입니다.",
  "instance" : "/v1/applyform/-1"
}

8.3. 지원폼 수정

8.3.1. 성공

HTTP request
PATCH /v1/applyform/715811417736241168 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 178
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU0MSwiZXhwIjoxNzQ5NzA5MTQxfQ.7dWd-WCiTfgYDF8hjmtm15Ed2Tj9pDQnb15FK1S-J90

{
  "title" : "크루루 백엔드 모집 공고~~",
  "postingContent" : "# 모집 공고 설명 #",
  "startDate" : "2024-08-02T02:00:00",
  "endDate" : "2024-08-08T02:00:00"
}
Request cookies
Name Description

accessToken

사용자 토큰

Path parameters
Table 1. /v1/applyform/{applyFormId}
Parameter Description

applyFormId

지원폼의 id

Request fields
Path Type Description

title

String

지원폼 제목

postingContent

String

지원폼 내용(본문)

startDate

String

지원 시작 날짜

endDate

String

지원 마감 날짜

HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Date: Thu, 29 May 2025 06:19:00 GMT
Keep-Alive: timeout=60
Connection: keep-alive

8.3.2. 실패: 존재하지 않는 지원폼

HTTP request
PATCH /v1/applyform/-1 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 178
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU0MSwiZXhwIjoxNzQ5NzA5MTQxfQ.7dWd-WCiTfgYDF8hjmtm15Ed2Tj9pDQnb15FK1S-J90

{
  "title" : "크루루 백엔드 모집 공고~~",
  "postingContent" : "# 모집 공고 설명 #",
  "startDate" : "2024-08-02T02:00:00",
  "endDate" : "2024-08-08T02:00:00"
}
Path parameters
Table 1. /v1/applyform/{applyFormId}
Parameter Description

applyFormId

존재하지 않는 지원폼의 id

Request fields
Path Type Description

title

String

지원폼 제목

postingContent

String

지원폼 내용(본문)

startDate

String

지원 시작 날짜

endDate

String

지원 마감 날짜

HTTP response
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:01 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 162

{
  "type" : "about:blank",
  "title" : "Not Found",
  "status" : 404,
  "detail" : "존재하지 않는 ApplyForm입니다.",
  "instance" : "/v1/applyform/-1"
}

8.4. 지원자 정보 및 지원폼 제출 기록 CSV 파일 추출

8.4.1. 성공

HTTP request
GET /v1/applyform/715811416058519583/export-csv HTTP/1.1
Host: localhost:45581
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU0MCwiZXhwIjoxNzQ5NzA5MTQwfQ.XprN6Th9D1uxFxiWP6Jxuwh8-czL8T6Assdu5emD0K0
Request cookies
Name Description

accessToken

사용자 토큰

Path parameters
Table 1. /v1/applyform/{applyFormId}/export-csv
Parameter Description

applyFormId

지원폼의 id

HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Disposition: attachment; filename=2025-05-29_applicant.csv
Content-Type: text/csv;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:00 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 155

이름,이메일,전화번호,제출일시,주관식 단답형,주관식 장문형
러쉬,RUSH@email.com,010-0000-0001,2025-05-29 06:19,응답1,응답2

8.4.2. 실패: 존재하지 않는 지원폼

HTTP request
GET /v1/applyform/-1/export-csv HTTP/1.1
Host: localhost:45581
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU0MSwiZXhwIjoxNzQ5NzA5MTQxfQ.7dWd-WCiTfgYDF8hjmtm15Ed2Tj9pDQnb15FK1S-J90
Path parameters
Table 1. /v1/applyform/{applyFormId}/export-csv
Parameter Description

applyFormId

존재하지 않는 지원폼 id

HTTP response
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:00 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 173

{
  "type" : "about:blank",
  "title" : "Not Found",
  "status" : 404,
  "detail" : "존재하지 않는 ApplyForm입니다.",
  "instance" : "/v1/applyform/-1/export-csv"
}

9. 평가

9.1. 평가 생성

9.1.1. 성공

HTTP request
POST /v1/evaluations?processId=1&applicantId=1 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 93
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTUzNCwiZXhwIjoxNzQ5NzA5MTM0fQ.CzJwun8Wc6A88NS9oZT3E0-dDwU9OQCvwE4L33uxoOM

{
  "evaluator" : "김도엽",
  "score" : 4,
  "content" : "서류가 인상적입니다."
}
Request cookies
Name Description

accessToken

사용자 토큰

Query parameters
Parameter Description

processId

프로세스의 id

applicantId

지원자의 id

Request fields
Path Type Description

evaluator

String

평가자 이름

score

Number

평가 점수

content

String

평가 주관식 내용

HTTP response
HTTP/1.1 201 Created
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Location: /v1/evaluations?processId=1&applicantId=1
Date: Thu, 29 May 2025 06:18:53 GMT
Keep-Alive: timeout=60
Connection: keep-alive

9.1.2. 실패: 존재하지 않는 지원자

HTTP request
POST /v1/evaluations?processId=1&applicantId=-1 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 93
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTUzNCwiZXhwIjoxNzQ5NzA5MTM0fQ.CzJwun8Wc6A88NS9oZT3E0-dDwU9OQCvwE4L33uxoOM

{
  "evaluator" : "김도엽",
  "score" : 4,
  "content" : "서류가 인상적입니다."
}
Request cookies
Name Description

accessToken

사용자 토큰

Query parameters
Parameter Description

processId

프로세스의 id

applicantId

존재하지 않는 지원자의 id

Request fields
Path Type Description

evaluator

String

평가자 이름

score

Number

평가 점수

content

String

평가 주관식 내용

HTTP response
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:18:53 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 161

{
  "type" : "about:blank",
  "title" : "Not Found",
  "status" : 404,
  "detail" : "존재하지 않는 Applicant입니다.",
  "instance" : "/v1/evaluations"
}

9.1.3. 실패: 존재하지 않는 프로세스

HTTP request
POST /v1/evaluations?processId=-1&applicantId=1 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 93
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTUzNSwiZXhwIjoxNzQ5NzA5MTM1fQ.13wIrDXI6nD3sui6tL4FELq4igipzdkk2Kqk-zXZuC0

{
  "evaluator" : "김도엽",
  "score" : 4,
  "content" : "서류가 인상적입니다."
}
Request cookies
Name Description

accessToken

사용자 토큰

Query parameters
Parameter Description

processId

존재하지 않는 프로세스의 id

applicantId

지원자의 id

Request fields
Path Type Description

evaluator

String

평가자 이름

score

Number

평가 점수

content

String

평가 주관식 내용

HTTP response
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:18:55 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 159

{
  "type" : "about:blank",
  "title" : "Not Found",
  "status" : 404,
  "detail" : "존재하지 않는 Process입니다.",
  "instance" : "/v1/evaluations"
}

9.1.4. 실패: 조건에 맞지 않는 평가 점수

HTTP request
POST /v1/evaluations?processId=1&applicantId=1 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 94
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTUzNCwiZXhwIjoxNzQ5NzA5MTM0fQ.CzJwun8Wc6A88NS9oZT3E0-dDwU9OQCvwE4L33uxoOM

{
  "evaluator" : "김도엽",
  "score" : -4,
  "content" : "서류가 인상적입니다."
}
Request cookies
Name Description

accessToken

사용자 토큰

Query parameters
Parameter Description

processId

프로세스의 id

applicantId

지원자의 id

Request fields
Path Type Description

evaluator

String

평가자 이름

score

Number

적절하지 않은 평가 점수

content

String

평가 주관식 내용

HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:18:53 GMT
Connection: close
Content-Length: 186

{
  "type" : "about:blank",
  "title" : "Bad Request",
  "status" : 400,
  "detail" : "{score=평가 점수는 1 이상 5 이하의 정수입니다.}",
  "instance" : "/v1/evaluations"
}

9.2. 평가 조회

9.2.1. 성공

HTTP request
GET /v1/evaluations?processId=1&applicantId=1 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTUzNCwiZXhwIjoxNzQ5NzA5MTM0fQ.CzJwun8Wc6A88NS9oZT3E0-dDwU9OQCvwE4L33uxoOM
Request cookies
Name Description

accessToken

사용자 토큰

Query parameters
Parameter Description

processId

프로세스의 id

applicantId

지원자의 id

HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:18:55 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 205

{
  "evaluations" : [ {
    "evaluationId" : 1,
    "evaluator" : "김도엽",
    "score" : 5,
    "content" : "서류가 인상 깊었습니다.",
    "createdDate" : "2025-05-29T06:18:54.969022"
  } ]
}
Response fields
Path Type Description

evaluations

Array

평가 목록

evaluations[].evaluationId

Number

평가의 id

evaluations[].evaluator

String

평가자 이름

evaluations[].score

Number

평가 점수

evaluations[].content

String

평가 내용

evaluations[].createdDate

String

평가 생성 날짜

9.2.2. 실패: 존재하지 않는 지원자

HTTP request
GET /v1/evaluations?processId=1&applicantId=-1 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTUzNCwiZXhwIjoxNzQ5NzA5MTM0fQ.CzJwun8Wc6A88NS9oZT3E0-dDwU9OQCvwE4L33uxoOM
Request cookies
Name Description

accessToken

사용자 토큰

Query parameters
Parameter Description

processId

프로세스의 id

applicantId

지원자의 id

HTTP response
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:18:53 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 161

{
  "type" : "about:blank",
  "title" : "Not Found",
  "status" : 404,
  "detail" : "존재하지 않는 Applicant입니다.",
  "instance" : "/v1/evaluations"
}

9.2.3. 실패: 존재하지 않는 프로세스

HTTP request
GET /v1/evaluations?processId=-1&applicantId=1 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTUzNCwiZXhwIjoxNzQ5NzA5MTM0fQ.CzJwun8Wc6A88NS9oZT3E0-dDwU9OQCvwE4L33uxoOM
Request cookies
Name Description

accessToken

사용자 토큰

Query parameters
Parameter Description

processId

프로세스의 id

applicantId

지원자의 id

HTTP response
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:18:53 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 159

{
  "type" : "about:blank",
  "title" : "Not Found",
  "status" : 404,
  "detail" : "존재하지 않는 Process입니다.",
  "instance" : "/v1/evaluations"
}

9.3. 평가 변경

9.3.1. 성공

HTTP request
PATCH /v1/evaluations/1 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 93
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTUzNCwiZXhwIjoxNzQ5NzA5MTM0fQ.CzJwun8Wc6A88NS9oZT3E0-dDwU9OQCvwE4L33uxoOM

{
  "evaluator" : "김형호",
  "score" : 2,
  "content" : "맞춤법이 틀렸습니다."
}
Request cookies
Name Description

accessToken

사용자 토큰

Path parameters
Table 1. /v1/evaluations/{evaluationId}
Parameter Description

evaluationId

평가의 id

Request fields
Path Type Description

evaluator

String

평가자 이름

score

Number

평가 점수

content

String

평가 주관식 내용

HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Date: Thu, 29 May 2025 06:18:53 GMT
Keep-Alive: timeout=60
Connection: keep-alive

9.3.2. 실패: 존재하지 않는 평가

HTTP request
PATCH /v1/evaluations/-1 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 93
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTUzNSwiZXhwIjoxNzQ5NzA5MTM1fQ.13wIrDXI6nD3sui6tL4FELq4igipzdkk2Kqk-zXZuC0

{
  "evaluator" : "김형호",
  "score" : 2,
  "content" : "맞춤법이 틀렸습니다."
}
Request cookies
Name Description

accessToken

사용자 토큰

Path parameters
Table 1. /v1/evaluations/{evaluationId}
Parameter Description

evaluationId

존재하지 않는 평가의 id

HTTP response
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:18:55 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 165

{
  "type" : "about:blank",
  "title" : "Not Found",
  "status" : 404,
  "detail" : "존재하지 않는 Evaluation입니다.",
  "instance" : "/v1/evaluations/-1"
}

9.3.3. 실패: 조건에 맞지 않는 평가 점수

HTTP request
PATCH /v1/evaluations/1 HTTP/1.1
Content-Type: application/json
Host: localhost:45581
Content-Length: 94
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTUzNSwiZXhwIjoxNzQ5NzA5MTM1fQ.13wIrDXI6nD3sui6tL4FELq4igipzdkk2Kqk-zXZuC0

{
  "evaluator" : "김형호",
  "score" : -1,
  "content" : "맞춤법이 틀렸습니다."
}
Request cookies
Name Description

accessToken

사용자 토큰

Path parameters
Table 1. /v1/evaluations/{evaluationId}
Parameter Description

evaluationId

평가의 id

Request fields
Path Type Description

evaluator

String

평가자 이름

score

Number

적절하지 않은 평가 점수

content

String

평가 주관식 내용

HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:18:55 GMT
Connection: close
Content-Length: 188

{
  "type" : "about:blank",
  "title" : "Bad Request",
  "status" : 400,
  "detail" : "{score=평가 점수는 1 이상 5 이하의 정수입니다.}",
  "instance" : "/v1/evaluations/1"
}

9.4. 평가 삭제

9.4.1. 성공

HTTP request
DELETE /v1/evaluations/1 HTTP/1.1
Host: localhost:45581
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTUzNCwiZXhwIjoxNzQ5NzA5MTM0fQ.CzJwun8Wc6A88NS9oZT3E0-dDwU9OQCvwE4L33uxoOM
Request cookies
Name Description

accessToken

사용자 토큰

Path parameters
Table 1. /v1/evaluations/{evaluationId}
Parameter Description

evaluationId

삭제할 평가 id

HTTP response
HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Date: Thu, 29 May 2025 06:18:53 GMT
Keep-Alive: timeout=60
Connection: keep-alive

10. 이메일

10.1. 이메일 발송 및 발송 내역 생성

10.1.1. 성공

HTTP request
POST /v1/emails/send HTTP/1.1
Content-Type: multipart/form-data; boundary="6RZmCPgQUy5trcDK7O7yrALn-_nBUU5"; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Host: localhost:46583
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU1MSwiZXhwIjoxNzQ5NzA5MTUxfQ._uz8mrzMoD92VdtUhLWw4taSYoI4xY0Pxf-Is3f9Oow

--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=clubId; filename=file
Content-Type: text/plain

1
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=applicantIds; filename=file
Content-Type: text/plain

1
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=subject; filename=file
Content-Type: text/plain

[우아한테크코스] 7기 최종 심사 결과 안내
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=content; filename=file
Content-Type: text/plain

우아한테크코스 합격을 진심으로 축하합니다!
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=files; filename=email_test.txt
Content-Type: application/octet-stream

이메일 발송 테스트용 파일

--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
Request cookies
Name Description

accessToken

사용자 토큰

Request parts
Part Description

clubId

발송 동아리 id

applicantIds

수신자 id 목록

subject

이메일 제목

content

이메일 본문

files

이메일 첨부 파일

HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Date: Thu, 29 May 2025 06:19:11 GMT
Keep-Alive: timeout=60
Connection: keep-alive

10.1.2. 실패: 이메일 형식이 올바르지 않은 이메일 형식

HTTP request
POST /v1/emails/send HTTP/1.1
Content-Type: multipart/form-data; boundary="bMmyhOj303fiv5nnodsOS_BpVxBgLoImuY-"; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Host: localhost:46583
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU1MiwiZXhwIjoxNzQ5NzA5MTUyfQ.ai4GH8X-3LynBJ_GtmHp5jhuFZY32StOXxDYwZHep-U

--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=clubId; filename=file
Content-Type: text/plain

1
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=applicantIds; filename=file
Content-Type: text/plain

-1
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=subject; filename=file
Content-Type: text/plain

[우아한테크코스] 7기 최종 심사 결과 안내
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=content; filename=file
Content-Type: text/plain

우아한테크코스 합격을 진심으로 축하합니다!
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=files; filename=email_test.txt
Content-Type: application/octet-stream

이메일 발송 테스트용 파일

--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
Request cookies
Name Description

accessToken

사용자 토큰

Request parts
Part Description

clubId

발송 동아리 id

applicantIds

적절하지 않은 수신자 id가 포함된 목록

subject

이메일 제목

content

이메일 본문

files

이메일 첨부 파일

HTTP response
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:11 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 161

{
  "type" : "about:blank",
  "title" : "Not Found",
  "status" : 404,
  "detail" : "존재하지 않는 Applicant입니다.",
  "instance" : "/v1/emails/send"
}

10.1.3. 실패: 존재하지 않는 동아리

HTTP request
POST /v1/emails/send HTTP/1.1
Content-Type: multipart/form-data; boundary="CtKFlcgcjvYnS3i_ALk_KBpm7nK7KLj5CKIPx"; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Host: localhost:46583
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU1MiwiZXhwIjoxNzQ5NzA5MTUyfQ.ai4GH8X-3LynBJ_GtmHp5jhuFZY32StOXxDYwZHep-U

--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=clubId; filename=file
Content-Type: text/plain

-1
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=applicantIds; filename=file
Content-Type: text/plain

1
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=subject; filename=file
Content-Type: text/plain

[우아한테크코스] 7기 최종 심사 결과 안내
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=content; filename=file
Content-Type: text/plain

우아한테크코스 합격을 진심으로 축하합니다!
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=files; filename=email_test.txt
Content-Type: application/octet-stream

이메일 발송 테스트용 파일

--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
Request cookies
Name Description

accessToken

사용자 토큰

Request parts
Part Description

clubId

존재하지 않는 발송 동아리 id

applicantIds

수신자 id 목록

subject

이메일 제목

content

이메일 본문

files

이메일 첨부 파일

HTTP response
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:11 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 156

{
  "type" : "about:blank",
  "title" : "Not Found",
  "status" : 404,
  "detail" : "존재하지 않는 Club입니다.",
  "instance" : "/v1/emails/send"
}

10.2. 이메일 인증 번호 발송

10.2.1. 성공

HTTP request
POST /v1/emails/verification-code HTTP/1.1
Content-Type: application/json
Host: localhost:46583
Content-Length: 33

{
  "email" : "email@email.com"
}
Request fields
Path Type Description

email

String

인증 번호를 전송할 이메일

HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Date: Thu, 29 May 2025 06:19:11 GMT
Keep-Alive: timeout=60
Connection: keep-alive

10.2.2. 실패: 이메일 형식이 올바르지 않은 이메일 형식

HTTP request
POST /v1/emails/verification-code HTTP/1.1
Content-Type: application/json
Host: localhost:46583
Content-Length: 30

{
  "email" : "invalidEmail"
}
Request fields
Path Type Description

email

String

부적절한 이메일

HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:11 GMT
Connection: close
Content-Length: 180

{
  "type" : "about:blank",
  "title" : "Bad Request",
  "status" : 400,
  "detail" : "{email=must be a well-formed email address}",
  "instance" : "/v1/emails/verification-code"
}

10.2.3. 실패: 이미 가입된 이메일

HTTP request
POST /v1/emails/verification-code HTTP/1.1
Content-Type: application/json
Host: localhost:46583
Content-Length: 33

{
  "email" : "dobby@email.com"
}
Request fields
Path Type Description

email

String

이미 가입된 이메일

HTTP response
HTTP/1.1 409 Conflict
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:11 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 170

{
  "type" : "about:blank",
  "title" : "Conflict",
  "status" : 409,
  "detail" : "이미 가입된 이메일입니다.",
  "instance" : "/v1/emails/verification-code"
}

10.3. 이메일 인증 확인

10.3.1. 성공

HTTP request
POST /v1/emails/verify-code HTTP/1.1
Content-Type: application/json
Host: localhost:46583
Content-Length: 66

{
  "email" : "email@email.com",
  "verificationCode" : "123456"
}
Request fields
Path Type Description

email

String

인증할 이메일

verificationCode

String

인증 번호

HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Date: Thu, 29 May 2025 06:19:11 GMT
Keep-Alive: timeout=60
Connection: keep-alive

10.3.2. 실패: 이메일 형식이 올바르지 않은 이메일 형식

HTTP request
POST /v1/emails/verify-code HTTP/1.1
Content-Type: application/json
Host: localhost:46583
Content-Length: 63

{
  "email" : "invalidEmail",
  "verificationCode" : "123456"
}
Request fields
Path Type Description

email

String

부적절한 이메일 형식

verificationCode

String

인증 번호

HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:11 GMT
Connection: close
Content-Length: 174

{
  "type" : "about:blank",
  "title" : "Bad Request",
  "status" : 400,
  "detail" : "{email=must be a well-formed email address}",
  "instance" : "/v1/emails/verify-code"
}

10.3.3. 실패: 인증 번호가 없는 이메일

HTTP request
POST /v1/emails/verify-code HTTP/1.1
Content-Type: application/json
Host: localhost:46583
Content-Length: 67

{
  "email" : "no-code@mail.com",
  "verificationCode" : "123456"
}
Request fields
Path Type Description

email

String

인증 번호가 없는 이메일

verificationCode

String

인증 번호

HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:11 GMT
Connection: close
Content-Length: 193

{
  "type" : "about:blank",
  "title" : "Bad Request",
  "status" : 400,
  "detail" : "인증 코드가 존재하지 않거나 만료되었습니다.",
  "instance" : "/v1/emails/verify-code"
}

10.3.4. 실패: 인증 번호가 다른 이메일

HTTP request
POST /v1/emails/verify-code HTTP/1.1
Content-Type: application/json
Host: localhost:46583
Content-Length: 66

{
  "email" : "email@email.com",
  "verificationCode" : "654321"
}
Request fields
Path Type Description

email

String

인증할 이메일

verificationCode

String

적절하지 않은 인증 번호

HTTP response
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:11 GMT
Connection: close
Content-Length: 193

{
  "type" : "about:blank",
  "title" : "Bad Request",
  "status" : 400,
  "detail" : "인증 코드가 존재하지 않거나 만료되었습니다.",
  "instance" : "/v1/emails/verify-code"
}

10.4. 이메일 전송 내역 조회

10.4.1. 성공

HTTP request
GET /v1/emails/1/1 HTTP/1.1
Accept: application/json, application/javascript, text/javascript, text/json
Host: localhost:46583
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU1MSwiZXhwIjoxNzQ5NzA5MTUxfQ._uz8mrzMoD92VdtUhLWw4taSYoI4xY0Pxf-Is3f9Oow
Request cookies
Name Description

accessToken

사용자 토큰

Path parameters
Table 1. /v1/emails/{clubId}/{applicantId}
Parameter Description

clubId

발송 동아리 id

applicantId

수신 지원자 id

HTTP response
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:11 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 265

{
  "emailHistoryResponses" : [ {
    "subject" : "[우아한테크코스] 7기 최종 심사 결과 안내",
    "content" : "지원해주셔서 감사합니다. 불합격입니다.",
    "createdDate" : "2025-05-29T06:19:11.794744",
    "isSucceed" : true
  } ]
}
Response fields
Path Type Description

emailHistoryResponses

Array

이메일 응답들

emailHistoryResponses[].subject

String

이메일 제목

emailHistoryResponses[].content

String

이메일 본문

emailHistoryResponses[].createdDate

String

전송 날짜

emailHistoryResponses[].isSucceed

Boolean

이메일 상태 (true, false)

10.4.2. 실패: 존재하지 않는 동아리

HTTP request
GET /v1/emails/-1/1 HTTP/1.1
Host: localhost:46583
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU1MiwiZXhwIjoxNzQ5NzA5MTUyfQ.ai4GH8X-3LynBJ_GtmHp5jhuFZY32StOXxDYwZHep-U
Request cookies
Name Description

accessToken

사용자 토큰

Path parameters
Table 1. /v1/emails/{clubId}/{applicantId}
Parameter Description

clubId

존재하지 않는 발송 동아리 id

applicantId

수신 지원자 id

HTTP response
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:11 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 156

{
  "type" : "about:blank",
  "title" : "Not Found",
  "status" : 404,
  "detail" : "존재하지 않는 Club입니다.",
  "instance" : "/v1/emails/-1/1"
}

10.4.3. 실패: 존재하지 않는 지원자

HTTP request
GET /v1/emails/1/-1 HTTP/1.1
Host: localhost:46583
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiQURNSU4iLCJlbWFpbCI6ImFkbWluQGVtYWlsLmNvbSIsImlhdCI6MTc0ODQ5OTU1MSwiZXhwIjoxNzQ5NzA5MTUxfQ._uz8mrzMoD92VdtUhLWw4taSYoI4xY0Pxf-Is3f9Oow
Request cookies
Name Description

accessToken

사용자 토큰

Path parameters
Table 1. /v1/emails/{clubId}/{applicantId}
Parameter Description

clubId

발송 동아리 id

applicantId

존재하지 않는 수신 지원자 id

HTTP response
HTTP/1.1 404 Not Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 29 May 2025 06:19:11 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 161

{
  "type" : "about:blank",
  "title" : "Not Found",
  "status" : 404,
  "detail" : "존재하지 않는 Applicant입니다.",
  "instance" : "/v1/emails/1/-1"
}