회원가입 및 인증토큰
인증코드 발송
Request
POST /api/auth/send?email=david122123@gmail.com HTTP/1.1
Content-Type: application/json;charset=UTF-8
Host: localhost:8080
Query Parameters
| 이름 | 설명 | 필수값 |
|---|---|---|
|
인증코드를 받을 Email |
true |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 201,
"success" : true,
"data" : ""
}
인증코드 검증
Request
GET /api/auth/verify?email=david122123@gmail.com&code=test-verification-code HTTP/1.1
Content-Type: application/json;charset=UTF-8
Host: localhost:8080
Query Parameters
| 이름 | 설명 | 필수값 |
|---|---|---|
|
인증코드를 받은 Email |
true |
|
인증코드 |
true |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 77
{
"status" : 200,
"success" : true,
"data" : {
"valid" : true
}
}
이메일 중복 검사
Request
GET /api/members/check-email?value=david122123%40gmail.com HTTP/1.1
Content-Type: application/json;charset=UTF-8
Host: localhost:8080
Query Parameters
| 이름 | 설명 | 필수값 |
|---|---|---|
|
검사할 Email |
true |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 81
{
"status" : 200,
"success" : true,
"data" : {
"duplicate" : true
}
}
닉네임 중복 검사
Request
GET /api/members/check-nickname?value=revi1337 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Host: localhost:8080
Query Parameters
| 이름 | 설명 | 필수값 |
|---|---|---|
|
검사할 Nickname |
true |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 81
{
"status" : 200,
"success" : true,
"data" : {
"duplicate" : true
}
}
회원가입
Request
POST /api/members HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 202
Host: localhost:8080
{
"email" : "david122123@gmail.com",
"password" : "12345!@asa",
"passwordConfirm" : "12345!@asa",
"nickname" : "revi1337",
"address" : "REVI 주소",
"addressDetail" : "REVI 상세 주소"
}
Request Body
| 필드명 | 타입 | 설명 | 필수값 |
|---|---|---|---|
|
|
이메일 |
true |
|
|
비밀번호 |
true |
|
|
비밀번호 확인 |
true |
|
|
닉네임 |
true |
|
|
주소 |
true |
|
|
상세 주소 |
true |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 201,
"success" : true,
"data" : ""
}
로그인
Request
POST /api/auth/login HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 68
Host: localhost:8080
{
"email" : "david122123@gmail.com",
"password" : "12345!@asa"
}
Request Body
| 필드명 | 타입 | 설명 | 필수값 |
|---|---|---|---|
|
|
이메일 |
true |
|
|
비밀번호 |
true |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 181
{
"status" : 200,
"success" : true,
"data" : {
"accessToken" : "header.access-token-payload.signature",
"refreshToken" : "header.refresh-token-payload.signature"
}
}
카카오 로그인
로그인 주소 반환
Request
GET /api/login/oauth2/kakao HTTP/1.1
Content-Type: application/json;charset=UTF-8
Host: localhost:8080
Response
HTTP/1.1 200 OK
Location: https://kauth.kakao.com/oauth/authorize?client_id=CLIENT_ID&redirect_uri=REDIRECT_URI&response_type=code
로그인
Request
GET /api/login/oauth2/code/google?code=authorization-code HTTP/1.1
Content-Type: application/json;charset=UTF-8
Host: localhost:8080
Response
HTTP/1.1 302 Found
Location: http://localhost:3000?accessToken=header.access-token-payload.signature&refreshToken=header.refresh-token-payload.signature
토큰 재발급
Request
POST /api/auth/reissue HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 63
Host: localhost:8080
{
"refreshToken" : "header.refresh-token-payload.signature"
}
Request Body
| 필드명 | 타입 | 설명 | 필수값 |
|---|---|---|---|
|
|
만료되는 RefreshToken |
true |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 181
{
"status" : 201,
"success" : true,
"data" : {
"accessToken" : "header.access-token-payload.signature",
"refreshToken" : "header.refresh-token-payload.signature"
}
}
크루
해시태그
전체 조회
Request
GET /api/hashtags HTTP/1.1
Content-Type: application/json;charset=UTF-8
Host: localhost:8080
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 626
{
"status" : 200,
"success" : true,
"data" : [ "활발한", "트랜디한", "내향적인", "외향적인", "조용한", "겜돌이", "겜순이", "집돌이", "집순이", "술꾼러버", "짜릿한", "모험적인", "창의적인", "열정적인", "도전적인", "긍정적인", "낙천적인", "사교적인", "친화적인", "유쾌한", "재치있는", "활기찬", "열린마음의", "자유로운", "독립적인", "여행", "즉흥적인", "영화", "리프레시", "일탈", "독서", "산책", "애견모임", "먹방", "맛집탐방", "모각공", "모각코", "카페러버", "분위기있는", "와인" ]
}
참가신청
신청
Request
POST /api/crews/1/requests HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
Request Headers
| 이름 | 설명 | 필수값 |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
Path Parameter
| Parameter | Description |
|---|---|
|
크루 Id |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 201,
"success" : true,
"data" : ""
}
관리
Request
GET /api/crews/1/manage/requests?page=0&size=3 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
Request Headers
| 이름 | 설명 | 필수값 |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
Path Parameter
| Parameter | Description |
|---|---|
|
크루 Id |
Query Parameter
| 이름 | 설명 | 필수값 |
|---|---|---|
|
페이지 |
false |
|
페이지 당 사이즈 |
false |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 245
{
"status" : 200,
"success" : true,
"data" : [ {
"request" : {
"id" : 2,
"requestAt" : "2025-09-19T03:00:55.395187124"
},
"member" : {
"id" : 1,
"nickname" : "andong",
"mbti" : "ISFP"
}
} ]
}
수락
Request
PATCH /api/crews/1/requests/3 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
Request Headers
| 이름 | 설명 | 필수값 |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
Path Parameter
| Parameter | Description |
|---|---|
|
크루 Id |
|
크루 참가 신청 Id |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
거절
Request
DELETE /api/crews/1/requests/2 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
Request Headers
| 이름 | 설명 | 필수값 |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
Path Parameter
| Parameter | Description |
|---|---|
|
크루 Id |
|
크루 참가 신청 Id |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
공지사항
생성
Request
POST /api/crews/1/announces HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Content-Length: 74
Host: localhost:8080
{
"title" : "공지사항 제목",
"content" : "공지사항 내용"
}
Request Headers
| 이름 | 설명 | 필수값 |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
Path Parameter
| Parameter | Description |
|---|---|
|
Crew 아이디 |
Request Body
| 필드명 | 타입 | 설명 | 필수값 |
|---|---|---|---|
|
|
Announce 제목 |
true |
|
|
Announce 내용 |
true |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 201,
"success" : true,
"data" : ""
}
조회
Request
GET /api/crews/2/announces/3 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
Request Headers
| 이름 | 설명 | 필수값 |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
Path Parameter
| Parameter | Description |
|---|---|
|
Crew 아이디 |
|
Announce 아이디 |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 457
{
"status" : 200,
"success" : true,
"data" : {
"canFix" : true,
"canModify" : true,
"announce" : {
"id" : 3,
"title" : "공지사항 제목",
"content" : "공지사항 내용",
"createdAt" : "2025-09-19T02:00:29.022844855",
"fixed" : true,
"fixedAt" : "2025-09-19T03:00:29.022844855",
"writer" : {
"id" : 1,
"nickname" : "revi1337",
"role" : "크루장"
}
}
}
}
전체 조회
Request
GET /api/crews/2/announces?page=0&size=10 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
Request Headers
| 이름 | 설명 | 필수값 |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
Path Parameter
| Parameter | Description |
|---|---|
|
Crew 아이디 |
Query Parameter
| 이름 | 설명 | 필수값 |
|---|---|---|
|
페이지 |
false |
|
페이지 당 사이즈 |
false |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 440
{
"status" : 200,
"success" : true,
"data" : {
"canWrite" : true,
"announces" : [ {
"id" : 3,
"title" : "공지사항 제목",
"content" : "공지사항 내용",
"createdAt" : "2025-09-19T02:00:28.983593879",
"fixed" : true,
"fixedAt" : "2025-09-19T03:00:28.983593879",
"writer" : {
"id" : 1,
"nickname" : "revi1337",
"role" : "크루장"
}
} ]
}
}
정보 수정
Request
PUT /api/crews/1/announces/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Content-Length: 76
Host: localhost:8080
{
"title" : "공지사항 제목1",
"content" : "공지사항 내용1"
}
Request Headers
| 이름 | 설명 | 필수값 |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
Path Parameter
| Parameter | Description |
|---|---|
|
Crew 아이디 |
|
Announce 아이디 |
Request Body
| 필드명 | 타입 | 설명 | 필수값 |
|---|---|---|---|
|
|
변경할 Announce 제목 |
true |
|
|
변경할 Announce 내용 |
true |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
상단 고정
Request
PATCH /api/crews/1/announces/1/fix?state=true HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
Request Headers
| 이름 | 설명 | 필수값 |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
Path Parameter
| Parameter | Description |
|---|---|
|
Crew 아이디 |
|
Announce 아이디 |
Query Parameter
| 이름 | 설명 | 필수값 |
|---|---|---|
|
상단 고정 상태 (true는 고정. false는 해제) |
true |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
삭제
Request
DELETE /api/crews/1/announces/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
Request Headers
| 이름 | 설명 | 필수값 |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
Path Parameter
| Parameter | Description |
|---|---|
|
Crew 아이디 |
|
Announce 아이디 |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
멤버
관리
Request
GET /api/crews/1/manage/members?page=0&size=5 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
Request Headers
| 이름 | 설명 | 필수값 |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
Path Parameter
| Parameter | Description |
|---|---|
|
Crew 아이디 |
Query Parameter
| 이름 | 설명 | 필수값 |
|---|---|---|
|
페이지 |
false |
|
페이지 당 사이즈 |
false |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 510
{
"status" : 200,
"success" : true,
"data" : {
"size" : 5,
"page" : 0,
"totalPages" : 1,
"totalCount" : 2,
"resultsSize" : 2,
"results" : [ {
"participantAt" : "2025-09-20T03:00:50.415017576",
"member" : {
"id" : 1,
"nickname" : "revi1337",
"mbti" : "ISTP"
}
}, {
"participantAt" : "2025-09-19T03:00:50.415017576",
"member" : {
"id" : 2,
"nickname" : "andong",
"mbti" : "ISFP"
}
} ]
}
}
이름 중복 검사
Request
GET /api/crews/check?name=%ED%81%AC%EB%A3%A8+%EC%9D%B4%EB%A6%84+1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
Request Headers
| 이름 | 설명 | 필수값 |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
Query Parameter
| 이름 | 설명 | 필수값 |
|---|---|---|
|
중복 체크할 Crew 이름 |
true |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 81
{
"status" : 200,
"success" : true,
"data" : {
"duplicate" : true
}
}
생성
Request
POST /api/crews HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Authorization: Bearer header.payload.signature
Host: localhost:8080
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=request; filename=request
Content-Type: application/json
{"name":"크루 이름","introduce":"크루 한줄 소개","detail":"크루 상세 정보","hashtags":["활발한","맛집탐방"],"kakaoLink":"https://크루_카카오_링크.com"}
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=file; filename=dummy.png
Content-Type: multipart/form-data
�PNG
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
Request Headers
| 이름 | 설명 | 필수값 |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
Request Parts
| Part | Description |
|---|---|
|
Crew 이미지 파일 (Content-Type: multipart/form-data) |
|
Crew 생성 요청 JSON 데이터 (Content-Type: application/json) |
크루 생성 요청 JSON
| Path | Type | Description |
|---|---|---|
|
|
Crew 이름 |
|
|
Crew 한줄 소개 |
|
|
Crew 상세 정보 |
|
|
Crew 해시태그 |
|
|
Crew 오픈 카카오톡 링크 |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 201,
"success" : true,
"data" : ""
}
조회
Request
GET /api/crews/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
Request Headers
| 이름 | 설명 | 필수값 |
|---|---|---|
|
사용자 JWT 인증 정보 |
false |
Path Parameter
| Parameter | Description |
|---|---|
|
Crew 아이디 |
Response (토큰 있을 시)
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 524
{
"status" : 200,
"success" : true,
"data" : {
"alreadyParticipant" : true,
"crew" : {
"id" : 1,
"name" : "크루 이름",
"introduce" : "크루 한줄 소개",
"detail" : "크루 상세 정보",
"imageUrl" : "https://크루_이미지_링크.com",
"kakaoLink" : "https://크루_카카오_링크.com",
"memberCount" : 1,
"hashtags" : [ "활발한" ],
"owner" : {
"id" : 1,
"nickname" : "revi1337",
"mbti" : "ISTP"
}
}
}
}
Response (토큰 없을 시)
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 444
{
"status" : 200,
"success" : true,
"data" : {
"id" : 1,
"name" : "크루 이름",
"introduce" : "크루 한줄 소개",
"detail" : "크루 상세 정보",
"imageUrl" : "https://크루_이미지_링크.com",
"kakaoLink" : "https://크루_카카오_링크.com",
"memberCount" : 1,
"hashtags" : [ "활발한" ],
"owner" : {
"id" : 1,
"nickname" : "revi1337",
"mbti" : "ISTP"
}
}
}
검색 및 전체 조회
Request
GET /api/crews?name=%ED%81%AC%EB%A3%A8+%EC%9D%B4%EB%A6%84&page=1&size=3 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Host: localhost:8080
name=%ED%81%AC%EB%A3%A8+%EC%9D%B4%EB%A6%84 → 디코딩하면 name=크루 이름
|
Query Parameter
| 이름 | 설명 | 필수값 |
|---|---|---|
|
Crew 이름 |
true |
|
페이지 |
false |
|
페이지 당 사이즈 |
false |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 448
{
"status" : 200,
"success" : true,
"data" : [ {
"id" : 1,
"name" : "크루 이름",
"introduce" : "크루 한줄 소개",
"detail" : "크루 상세 정보",
"imageUrl" : "https://크루_이미지_링크.com",
"kakaoLink" : "https://크루_카카오_링크.com",
"memberCount" : 1,
"hashtags" : [ "활발한" ],
"owner" : {
"id" : 1,
"nickname" : "revi1337",
"mbti" : "ISTP"
}
} ]
}
랭커
Request
GET /api/crews/1/members/top HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
Request Headers
| 이름 | 설명 | 필수값 |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
Path Parameter
| Parameter | Description |
|---|---|
|
Crew 아이디 |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 422
{
"status" : 200,
"success" : true,
"data" : [ {
"crewId" : 1,
"rank" : 1,
"counter" : 10,
"memberId" : 1,
"nickname" : "revi1337",
"mbti" : "ISTP",
"participateAt" : "2025-09-19T03:00:40.964673541"
}, {
"crewId" : 1,
"rank" : 2,
"counter" : 9,
"memberId" : 1,
"nickname" : "andong",
"mbti" : "ISFP",
"participateAt" : "2025-09-19T04:00:40.964673541"
} ]
}
관리
| 해당 API 는 테스트가 완료되지 않았습니다. |
이미지 변경
Request
PATCH /api/crews/1/image HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Authorization: Bearer header.payload.signature
Host: localhost:8080
Request Headers
| 이름 | 설명 | 필수값 |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
Path Parameter
| Parameter | Description |
|---|---|
|
Crew 아이디 |
Request Parts
| Part | Description |
|---|---|
|
변경할 Crew 이미지 파일 (Content-Type: multipart/form-data) |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
이미지 삭제
Request
DELETE /api/crews/1/image HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
Request Headers
| 이름 | 설명 | 필수값 |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
Path Parameter
| Parameter | Description |
|---|---|
|
Crew 아이디 |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
정보 수정
Request
PUT /api/crews/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Content-Length: 231
Host: localhost:8080
{
"name" : "변경된 크루 이름",
"introduce" : "변경된 크루 한줄 소개",
"detail" : "변경된 크루 상세 정보",
"hashtags" : [ "일탈" ],
"kakaoLink" : "https://변경된_크루_카카오_링크.com"
}
Request Headers
| 이름 | 설명 | 필수값 |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
Path Parameter
| Parameter | Description |
|---|---|
|
Crew 아이디 |
Request Body
| 필드명 | 타입 | 설명 | 필수값 |
|---|---|---|---|
|
|
변경할 Crew 이름 |
true |
|
|
변경할 Crew 한줄 소개 |
true |
|
|
변경할 Crew 상세 정보 |
true |
|
|
변경할 Crew 해시태그 |
true |
|
|
변경할 Crew 오픈 카카오 링크 |
true |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
삭제
| 해당 API 는 아직 구현되지 않았습니다. |