회원가입 및 인증토큰

인증코드 발송

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

인증코드를 받을 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

인증코드를 받은 Email

true

code

인증코드

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

이름 설명 필수값

value

검사할 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

이름 설명 필수값

value

검사할 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

필드명 타입 설명 필수값

email

String

이메일

true

password

String

비밀번호

true

passwordConfirm

String

비밀번호 확인

true

nickname

String

닉네임

true

address

String

주소

true

addressDetail

String

상세 주소

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

필드명 타입 설명 필수값

email

String

이메일

true

password

String

비밀번호

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

String

만료되는 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

이름 설명 필수값

Authorization

사용자 JWT 인증 정보

true

Path Parameter

Table 1. /api/crews/{crewId}/requests
Parameter Description

crewId

크루 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

이름 설명 필수값

Authorization

사용자 JWT 인증 정보

true

Path Parameter

Table 2. /api/crews/{crewId}/manage/requests
Parameter Description

crewId

크루 Id

Query Parameter

이름 설명 필수값

page

페이지

false

size

페이지 당 사이즈

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

이름 설명 필수값

Authorization

사용자 JWT 인증 정보

true

Path Parameter

Table 3. /api/crews/{crewId}/requests/{requestId}
Parameter Description

crewId

크루 Id

requestId

크루 참가 신청 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

이름 설명 필수값

Authorization

사용자 JWT 인증 정보

true

Path Parameter

Table 4. /api/crews/{crewId}/requests/{requestId}
Parameter Description

crewId

크루 Id

requestId

크루 참가 신청 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

이름 설명 필수값

Authorization

사용자 JWT 인증 정보

true

Path Parameter

Table 5. /api/crews/{crewId}/announces
Parameter Description

crewId

Crew 아이디

Request Body

필드명 타입 설명 필수값

title

String

Announce 제목

true

content

String

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

이름 설명 필수값

Authorization

사용자 JWT 인증 정보

true

Path Parameter

Table 6. /api/crews/{crewId}/announces/{announceId}
Parameter Description

crewId

Crew 아이디

announceId

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

이름 설명 필수값

Authorization

사용자 JWT 인증 정보

true

Path Parameter

Table 7. /api/crews/{crewId}/announces
Parameter Description

crewId

Crew 아이디

Query Parameter

이름 설명 필수값

page

페이지

false

size

페이지 당 사이즈

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

이름 설명 필수값

Authorization

사용자 JWT 인증 정보

true

Path Parameter

Table 8. /api/crews/{crewId}/announces/{announceId}
Parameter Description

crewId

Crew 아이디

announceId

Announce 아이디

Request Body

필드명 타입 설명 필수값

title

String

변경할 Announce 제목

true

content

String

변경할 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

이름 설명 필수값

Authorization

사용자 JWT 인증 정보

true

Path Parameter

Table 9. /api/crews/{crewId}/announces/{announceId}/fix
Parameter Description

crewId

Crew 아이디

announceId

Announce 아이디

Query Parameter

이름 설명 필수값

state

상단 고정 상태 (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

이름 설명 필수값

Authorization

사용자 JWT 인증 정보

true

Path Parameter

Table 10. /api/crews/{crewId}/announces/{announceId}
Parameter Description

crewId

Crew 아이디

announceId

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

이름 설명 필수값

Authorization

사용자 JWT 인증 정보

true

Path Parameter

Table 11. /api/crews/{crewId}/manage/members
Parameter Description

crewId

Crew 아이디

Query Parameter

이름 설명 필수값

page

페이지

false

size

페이지 당 사이즈

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

이름 설명 필수값

Authorization

사용자 JWT 인증 정보

true

Query Parameter

이름 설명 필수값

name

중복 체크할 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

이름 설명 필수값

Authorization

사용자 JWT 인증 정보

true

Request Parts

Part Description

file

Crew 이미지 파일 (Content-Type: multipart/form-data)

request

Crew 생성 요청 JSON 데이터 (Content-Type: application/json)

크루 생성 요청 JSON

Path Type Description

name

String

Crew 이름

introduce

String

Crew 한줄 소개

detail

String

Crew 상세 정보

hashtags

Array

Crew 해시태그

kakaoLink

String

Crew 오픈 카카오톡 링크

Response

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55

{
  "status" : 201,
  "success" : true,
  "data" : ""
}

메인 페이지

해당 API 는 테스트가 완료되지 않았습니다.

조회

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

이름 설명 필수값

Authorization

사용자 JWT 인증 정보

false

Path Parameter

Table 12. /api/crews/{crewId}
Parameter Description

crewId

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

이름 설명 필수값

name

Crew 이름

true

page

페이지

false

size

페이지 당 사이즈

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

이름 설명 필수값

Authorization

사용자 JWT 인증 정보

true

Path Parameter

Table 13. /api/crews/{crewId}/members/top
Parameter Description

crewId

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

이름 설명 필수값

Authorization

사용자 JWT 인증 정보

true

Path Parameter

Table 14. /api/crews/{crewId}/image
Parameter Description

crewId

Crew 아이디

Request Parts

Part Description

file

변경할 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

이름 설명 필수값

Authorization

사용자 JWT 인증 정보

true

Path Parameter

Table 15. /api/crews/{crewId}/image
Parameter Description

crewId

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

이름 설명 필수값

Authorization

사용자 JWT 인증 정보

true

Path Parameter

Table 16. /api/crews/{crewId}
Parameter Description

crewId

Crew 아이디

Request Body

필드명 타입 설명 필수값

name

String

변경할 Crew 이름

true

introduce

String

변경할 Crew 한줄 소개

true

detail

String

변경할 Crew 상세 정보

true

hashtags

Array

변경할 Crew 해시태그

true

kakaoLink

String

변경할 Crew 오픈 카카오 링크

true

Response

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55

{
  "status" : 204,
  "success" : true,
  "data" : ""
}

삭제

해당 API 는 아직 구현되지 않았습니다.