소개

API 문서입니다.

공통 사항

API 문서에서 공통으로 사용되는 내용을 정의합니다.

공통 응답 구조

성공 응답

{
  "status": 200,
  "data": { ... }
}
  • status: HTTP 상태 코드

  • data: 실제 응답 데이터

실패 응답

{
  "status": 400,
  "error": {
    "errorCode": "COMMON_2",
    "message": "요청 변수가 잘못되었습니다."
  }
}
  • status: HTTP 상태 코드

  • errorCode: 에러 코드

  • message: 에러 메시지

상태 코드

상태 코드

의미

설명

200

OK

요청이 성공적으로 처리됨

401

Unauthorized

인증 실패 (잘못된 토큰 등)

404

Not Found

리소스를 찾을 수 없음

409

Conflict

리소스 충돌 (중복 등)

500

Internal Server Error

서버 내부 오류

Authorization

  • Authorization: Bearer 액세스 토큰 (필수)

  • 형식: Bearer {token}

  • 인증이 필요한 API 호출 시 반드시 포함

Announcement API

1. Announcement 목록 조회

요청(Request)

GET /api/announcement/list HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Host: 118.67.142.14

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 190

{
  "status" : 200,
  "data" : {
    "announcements" : [ {
      "announcementId" : "announcementId",
      "topic" : "title",
      "uploadAt" : "2026-04-24 09:54:38"
    } ]
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.announcements[].announcementId

String

공지사항 ID

data.announcements[].topic

String

공지사항 제목

data.announcements[].uploadAt

String

공지사항 업로드 시간 - 형식 yyyy-MM-dd HH:mm:ss

2-1. Announcement 단일 조회

요청(Request)

GET /api/announcement/announcementId HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Host: 118.67.142.14

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 69

{
  "status" : 200,
  "data" : {
    "content" : "content"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.content

String

공지사항 내용

2-2. Announcement 단일 조회 (존재하지 않음)

응답(Response)

HTTP/1.1 404 Not Found
Content-Type: application/json
Content-Length: 133

{
  "status" : 404,
  "data" : {
    "errorCode" : "ANNOUNCEMENT_1",
    "message" : "공지사항을 찾을 수 없음."
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

404

data.errorCode

String

ANNOUNCEMENT_1

data.message

String

공지사항을 찾을 수 없습니다. 잘못된 아이디를 보냈다면 생기는 문제입니다.

Auth API

1. 회원가입 인증번호 전송 01/14 수정

요청(Request)

POST /api/auth/create/send HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Content-Length: 62
Host: 118.67.142.14

{
  "phoneNumber" : "01012345678",
  "countryCode" : "82"
}

요청 필드 설명(Request Fields)

Path Type Description

countryCode

String

국가 코드)

phoneNumber

String

휴대폰 번호

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68

{
  "status" : 200,
  "data" : {
    "message" : "성공"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.message

String

성공 메시지

1-1 회원가입 인증번호 전송 (이미 가입된 번호) 01/14 수정

응답(Response)

HTTP/1.1 409 Conflict
Content-Type: application/json
Content-Length: 127

{
  "status" : 409,
  "data" : {
    "errorCode" : "USER_3",
    "message" : "이미 가입된 사용자입니다."
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

409

data.errorCode

String

USER_3

data.message

String

계정이 이미 생성되었음으로 로그인으로 유도 해야함

2. 비밀번호 초기화를 위한 인증번호 전송 01/14 수정

요청(Request)

POST /api/auth/reset/send HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Content-Length: 62
Host: 118.67.142.14

{
  "phoneNumber" : "01012345678",
  "countryCode" : "82"
}

요청 필드 설명(Request Fields)

Path Type Description

countryCode

String

국가 코드

phoneNumber

String

휴대폰 번호

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68

{
  "status" : 200,
  "data" : {
    "message" : "성공"
  }
}

2-1 비밀번호 초기화를 위한 인증번호 전송 (가입되지 않은 번호) 01/14 수정

응답(Response)

HTTP/1.1 409 Conflict
Content-Type: application/json
Content-Length: 130

{
  "status" : 409,
  "data" : {
    "errorCode" : "USER_4",
    "message" : "가입되지 않은 사용자입니다."
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

409

data.errorCode

String

USER_4

data.message

String

비밀번호 초기화를 하려고 했으나 계정이 생성되지 않았음으로 가입을 유도 해야함

3. 회원가입을 위한 휴대폰 인증 번호 확인 01/16 수정

요청(Request)

POST /api/auth/create/verify HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Content-Length: 205
Host: 118.67.142.14

{
  "userName" : "testName",
  "phoneNumber" : "01012345678",
  "countryCode" : "82",
  "verificationCode" : "123",
  "deviceId" : "testDeviceId",
  "provider" : "ios",
  "appToken" : "testToken"
}

요청 필드 설명(Request Fields)

Path Type Description

phoneNumber

String

휴대폰 번호

countryCode

String

국가 코드

verificationCode

String

인증번호

deviceId

String

디바이스 아이디(디바이스 식별을 위한 정보)

provider

String

플랫폼(ios, android)

appToken

String

앱 토큰(푸시 토큰)

userName

String

사용자 이름

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 115

{
  "status" : 200,
  "data" : {
    "accessToken" : "accessToken",
    "refreshToken" : "refreshToken"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.accessToken

String

액세스 토큰

data.refreshToken

String

리프레시 토큰

3-1 회원가입을 위한 휴대폰 인증 번호 확인 (이미 가입된 번호) 01/14 수정

응답(Response)

HTTP/1.1 409 Conflict
Content-Type: application/json
Content-Length: 127

{
  "status" : 409,
  "data" : {
    "errorCode" : "USER_3",
    "message" : "이미 가입된 사용자입니다."
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

409

data.errorCode

String

USER_3

data.message

String

계정이 이미 생성되었으므로 로그인으로 유도 해야함. 다만, 전화번호 인증 요청시 이미 검증이 되었는데 발생한 잘못된 접근 임.

3-2 회원가입을 위한 휴대폰 인증 번호 확인 (인증번호 불일치) 01/14 수정

응답(Response)

HTTP/1.1 401 Unauthorized
Content-Type: application/json
Content-Length: 124

{
  "status" : 401,
  "data" : {
    "errorCode" : "AUTH_1",
    "message" : "인증 번호가 틀렸습니다."
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

401

data.errorCode

String

AUTH_1

data.message

String

휴대폰 인증번호가 잘못되었음 - 재인증 요청으로 유도해야함

3-3 회원가입을 위한 휴대폰 인증 번호 확인 (인증번호 만료) 01/14 수정

응답(Response)

HTTP/1.1 401 Unauthorized
Content-Type: application/json
Content-Length: 130

{
  "status" : 401,
  "data" : {
    "errorCode" : "AUTH_2",
    "message" : "인증 번호가 만료되었습니다."
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

401

data.errorCode

String

AUTH_2

data.message

String

휴대폰 인증번호가 만료됨 - 재인증 요청으로 유도해야함

4. 비밀번호 초기화를 위한 휴대폰 인증 번호 확인 01/16 수정

요청(Request)

POST /api/auth/reset/verify HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Content-Length: 93
Host: 118.67.142.14

{
  "phoneNumber" : "01012345678",
  "countryCode" : "82",
  "verificationCode" : "123"
}

요청 필드 설명(Request Fields)

Path Type Description

phoneNumber

String

휴대폰 번호

countryCode

String

국가 코드

verificationCode

String

인증번호

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 115

{
  "status" : 200,
  "data" : {
    "accessToken" : "accessToken",
    "refreshToken" : "refreshToken"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.accessToken

String

액세스 토큰

data.refreshToken

String

리프레시 토큰

4-1 비밀번호 초기화를 위한 휴대폰 인증 번호 확인 (가입되지 않은 번호) 01/14 수정

응답(Response)

HTTP/1.1 404 Not Found
Content-Type: application/json
Content-Length: 119

{
  "status" : 404,
  "data" : {
    "errorCode" : "USER_1",
    "message" : "회원을 찾을 수 없음."
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

404

data.errorCode

String

USER_1

data.message

String

계정이 존재하지 않음으로 회원가입을 유도해야함 - 비밀번호 초기화시 휴대폰 인증 할때 이미 존재 유무를 검증하는데 이때 오류 발생시 잘못된 접근

4-2 비밀번호 초기화를 위한 휴대폰 인증 번호 확인 (인증번호 불일치) 01/14 수정

응답(Response)

HTTP/1.1 401 Unauthorized
Content-Type: application/json
Content-Length: 124

{
  "status" : 401,
  "data" : {
    "errorCode" : "AUTH_1",
    "message" : "인증 번호가 틀렸습니다."
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

401

data.errorCode

String

AUTH_1

data.message

String

휴대폰 인증번호가 잘못되었음 - 재인증 요청으로 유도해야함

4-3 비밀번호 초기화를 위한 휴대폰 인증 번호 확인 (인증번호 만료) 01/14 수정

응답(Response)

HTTP/1.1 401 Unauthorized
Content-Type: application/json
Content-Length: 130

{
  "status" : 401,
  "data" : {
    "errorCode" : "AUTH_2",
    "message" : "인증 번호가 만료되었습니다."
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

401

data.errorCode

String

AUTH_2

data.message

String

휴대폰 인증번호가 만료됨 - 재인증 요청으로 유도해야함

5. 비밀번호 변경 01/14 수정

요청(Request)

POST /api/auth/change/password HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer access-token
Content-Length: 35
Host: 118.67.142.14

{
  "password" : "testPassword"
}

요청헤더(Request Headers)

Name Description

Authorization

Bearer 액세스 토큰

요청 필드 설명(Request Fields)

Path Type Description

password

String

변경할 비밀번호

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68

{
  "status" : 200,
  "data" : {
    "message" : "성공"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.message

String

성공 메시지

6. 비밀번호 생성 01/14 수정

요청(Request)

POST /api/auth/create/password HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer access-token
Content-Length: 35
Host: 118.67.142.14

{
  "password" : "testPassword"
}

요청헤더(Request Headers)

Name Description

Authorization

Bearer 액세스 토큰

요청 필드 설명(Request Fields)

Path Type Description

password

String

생성할 비밀번호

응답(Response)

HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 75

{
  "status" : 201,
  "data" : {
    "message" : "생성 완료"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.message

String

성공 메시지

7. 로그인 01/16 수정

요청(Request)

POST /api/auth/login HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Content-Length: 178
Host: 118.67.142.14

{
  "phoneNumber" : "01012345678",
  "countryCode" : "82",
  "password" : "testPassword",
  "deviceId" : "testDeviceId",
  "provider" : "ios",
  "appToken" : "testToken"
}

요청 필드 설명(Request Fields)

Path Type Description

phoneNumber

String

휴대폰 번호

countryCode

String

국가 코드

password

String

비밀번호

deviceId

String

디바이스 아이디(디바이스 식별을 위한 정보)

provider

String

플랫폼(ios, android)

appToken

String

앱 토큰(푸시 토큰)

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 115

{
  "status" : 200,
  "data" : {
    "accessToken" : "accessToken",
    "refreshToken" : "refreshToken"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.accessToken

String

액세스 토큰

data.refreshToken

String

리프레시 토큰

7-1 로그인 (비밀번호 불일치) 01/14 수정

응답(Response)

HTTP/1.1 401 Unauthorized
Content-Type: application/json
Content-Length: 123

{
  "status" : 401,
  "data" : {
    "errorCode" : "AUTH_9",
    "message" : "비밀번호가 틀렸습니다."
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

401

data.errorCode

String

AUTH_9

data.message

String

비밀번호가 잘못되었음 - 새로운 인증 번호 요청으로 유도해야함

7-2 로그인 (존재하지 않는 사용자) 01/14 수정

응답(Response)

HTTP/1.1 404 Not Found
Content-Type: application/json
Content-Length: 119

{
  "status" : 404,
  "data" : {
    "errorCode" : "USER_1",
    "message" : "회원을 찾을 수 없음."
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

404

data.errorCode

String

USER_1

data.message

String

계정이 존재하지 않음으로 회원가입을 유도해야함 - 로그인시 휴대폰 인증 할때 이미 존재 유무를 검증하는데 이때 오류 발생시 잘못된 접근

8. 로그아웃 01/14 수정

요청(Request)

DELETE /api/auth/logout HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer refreshToken
Content-Length: 58
Host: 118.67.142.14

{
  "deviceId" : "testDeviceId",
  "provider" : "ios"
}

요청헤더(Request Headers)

Name Description

Authorization

리프레시 토큰

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68

{
  "status" : 200,
  "data" : {
    "message" : "성공"
  }
}

9. 토큰 갱신 01/14 수정

요청(Request)

GET /api/auth/refresh HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer RefreshToken
Host: 118.67.142.14

요청헤더(Request Headers)

Name Description

Authorization

리프레시 토큰

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 115

{
  "status" : 200,
  "data" : {
    "accessToken" : "accessToken",
    "refreshToken" : "refreshToken"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.accessToken

String

액세스 토큰

data.refreshToken

String

리프레시 토큰

User API

1. 프로필 이미지 변경 01/15 수정

요청(Request)

POST /api/user/image HTTP/1.1
Content-Type: multipart/form-data;charset=ISO-8859-1; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Type: multipart/form-data; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Authorization: Bearer accessToken
Host: 118.67.142.14

--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=file; filename=0.jpg
Content-Type: image/jpeg

???JFIF??C		

 $.' ",#(7),01444'9=82<.342??C			

2!!22222222222222222222222222222222222222222222222222??dd"??
???}!1AQa"q2��?#B��R��$3br?
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz������������������������������������������������������������������������??
???w!1AQaq"2?B����	#3R?br?
$4?%?&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz������������������������������������������������������������������������???��(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(????
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--

요청헤더(Request Headers)

Name Description

Content-Type

멀티파트 폼 데이터 타입 (image/*)

Authorization

액세스 토큰

요청 파트 설명(Request Parts)

Part Description

file

프로필 이미지 파일 (image/jpeg)

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68

{
  "status" : 200,
  "data" : {
    "message" : "성공"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.message

String

성공 메시지

1-1. 프로필 이미지 변경 (파일 이름 없음) 02/11 수정

응답(Response)

HTTP/1.1 500 Internal Server Error
Content-Type: application/json
Content-Length: 114

{
  "status" : 500,
  "data" : {
    "errorCode" : "COMMON_4",
    "message" : "Internal Server Error"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

409

data.errorCode

String

FILE_4

data.message

String

파일 이름을 넣어주세요.

1-2. 프로필 이미지 변경 (파일 변환 실패) 02/11 수정

응답(Response)

HTTP/1.1 409 Conflict
Content-Type: application/json
Content-Length: 130

{
  "status" : 409,
  "data" : {
    "errorCode" : "FILE_3",
    "message" : "파일 변환에 실패하였습니다."
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

409

data.errorCode

String

FILE_3

data.message

String

파일 변환에 실패했습니다. - 파일이 손상되었거나, 기타오류.

1-3. 프로필 이미지 변경 (파일 저장 실패) 02/11 수정

응답(Response)

HTTP/1.1 409 Conflict
Content-Type: application/json
Content-Length: 133

{
  "status" : 409,
  "data" : {
    "errorCode" : "FILE_1",
    "message" : "파일 업로드를 실패하였습니다."
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

409

data.errorCode

String

FILE_1

data.message

String

파일 업로드에 실패 했음. 서버 오류, 네트워크 오류.

1-4. 프로필 이미지 변경 (적절하지 않은 이름) 02/11 수정

응답(Response)

HTTP/1.1 409 Conflict
Content-Type: application/json
Content-Length: 130

{
  "status" : 409,
  "data" : {
    "errorCode" : "FILE_6",
    "message" : "파일 이름이 잘못되었습니다."
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

409

data.errorCode

String

FILE_6

data.message

String

파일 이름이 잘못되었습니다. 0.jpg .. 1.jpg .. 처럼 순서대로 넣어주세요.

2. 상태메시지 변경 01/15 수정

요청(Request)

PUT /api/user/status/message HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Content-Length: 45
Host: 118.67.142.14

{
  "statusMessage" : "testStatusMessage"
}

요청헤더(Request Headers)

Name Description

Authorization

Bearer 액세스 토큰

요청 필드 설명(Request Fields)

Path Type Description

statusMessage

String

상태 메시지

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68

{
  "status" : 200,
  "data" : {
    "message" : "성공"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.message

String

성공 메시지

3. 사용자 정보 조회 01/15 수정

요청(Request)

GET /api/user/profile HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Host: 118.67.142.14

요청헤더(Request Headers)

Name Description

Authorization

Bearer 액세스 토큰

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 163

{
  "status" : 200,
  "data" : {
    "name" : "testUserName",
    "phoneNumber" : "82",
    "countryCode" : "01012345678",
    "birth" : "2026-04-24"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.name

String

사용자 이름

data.phoneNumber

String

전화번호

data.countryCode

String

국가 코드

data.birth

String

생일(YYYY-MM-DD) 없다면 빈칸

4. 사용자 정보 삭제 02/11 수정

요청(Request)

DELETE /api/user HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Host: 118.67.142.14

요청헤더(Request Headers)

Name Description

Authorization

Bearer 액세스 토큰

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68

{
  "status" : 200,
  "data" : {
    "message" : "성공"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.message

String

성공 메시지

5. 푸시 알림 설정 조회 04/06 수정

요청(Request)

GET /api/user/push/notification/testDeviceId HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Host: 118.67.142.14

요청헤더(Request Headers)

Name Description

Authorization

Bearer 액세스 토큰

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 145

{
  "status" : 200,
  "data" : {
    "deviceId" : "testDeviceId",
    "scheduleStatus" : "not_allowed",
    "chatStatus" : "allowed"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.deviceId

String

디바이스 ID

data.scheduleStatus

String

일정 알림 상태

data.chatStatus

String

채팅 알림 상태

6. 푸시 일정 알림 설정 변경 04/06 수정

요청(Request)

PUT /api/user/push/notification/chat HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Content-Length: 56
Host: 118.67.142.14

{
  "status" : false,
  "deviceId" : "testDeviceId"
}

요청헤더(Request Headers)

Name Description

Authorization

Bearer 액세스 토큰

요청 필드 설명(Request Fields)

Path Type Description

status

Boolean

푸시 알림 상태

deviceId

String

디바이스 ID

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68

{
  "status" : 200,
  "data" : {
    "message" : "성공"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.message

String

성공 메시지

7. 푸시 채팅 알림 설정 변경 04/06 수정

요청(Request)

PUT /api/user/push/notification/chat HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Content-Length: 55
Host: 118.67.142.14

{
  "status" : true,
  "deviceId" : "testDeviceId"
}

요청헤더(Request Headers)

Name Description

Authorization

Bearer 액세스 토큰

요청 필드 설명(Request Fields)

Path Type Description

status

Boolean

푸시 알림 상태

deviceId

String

디바이스 ID

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68

{
  "status" : 200,
  "data" : {
    "message" : "성공"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.message

String

성공 메시지

8. 유저 생일 변경 04/08 수정

요청(Request)

PUT /api/user/birthday HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Content-Length: 33
Host: 118.67.142.14

{
  "birthday" : "2023-10-10"
}

요청헤더(Request Headers)

Name Description

Authorization

Bearer 액세스 토큰

요청 필드 설명(Request Fields)

Path Type Description

birthday

String

생일

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68

{
  "status" : 200,
  "data" : {
    "message" : "성공"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.message

String

성공 메시지

FEED API

1. 파일 피드 작성 02/24 수정

요청(Request)

POST /api/feed/file?content=testContent&friendIds=testFriendId&friendIds=testFriendId2 HTTP/1.1
Content-Type: multipart/form-data;charset=ISO-8859-1; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Type: multipart/form-data; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Authorization: Bearer accessToken
Host: 118.67.142.14

--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=files; filename=0.jpg
Content-Type: image/jpeg

???JFIF??C		

 $.' ",#(7),01444'9=82<.342??C			

2!!22222222222222222222222222222222222222222222222222??dd"??
???}!1AQa"q2��?#B��R��$3br?
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz������������������������������������������������������������������������??
???w!1AQaq"2?B����	#3R?br?
$4?%?&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz������������������������������������������������������������������������???��(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(????
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=files; filename=1.jpg
Content-Type: image/jpeg

???JFIF??C		

 $.' ",#(7),01444'9=82<.342??C			

2!!22222222222222222222222222222222222222222222222222??dd"??
???}!1AQa"q2��?#B��R��$3br?
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz������������������������������������������������������������������������??
???w!1AQaq"2?B����	#3R?br?
$4?%?&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz������������������������������������������������������������������������???��(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(????
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--

요청헤더(Request Headers)

Name Description

Authorization

Bearer 액세스 토큰

요청 파트 설명(Request Parts)

Part Description

files

피드에 추가할 이미지 파일 (image/jpeg) - 형식은 0.jpg, 1.jpg, …​

요청 쿼리 파라미터 설명(Request Query Parameters)

Parameter Description

content

피드 내용

friendIds

피드를 공유할 친구 ID 목록(POST /api/feed?content=testContent&friendIds=testFriendId&friendIds=testFriendId2) 형식

응답(Response)

HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 72

{
  "status" : 201,
  "data" : {
    "feedId" : "testFeedId1"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.feedId

String

피드 아이디

2-1. 피드 작성 (파일 이름 없음) 02/11 수정

응답(Response)

HTTP/1.1 400 Bad Request
Content-Type: application/json
Content-Length: 122

{
  "status" : 400,
  "data" : {
    "errorCode" : "COMMON_1",
    "message" : "잘못된 메세드입니다."
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

409

data.errorCode

String

FILE_4

data.message

String

파일 이름을 넣어주세요.

2-2. 피드 작성 (파일 변환 실패) 02/11 수정

응답(Response)

HTTP/1.1 400 Bad Request
Content-Type: application/json
Content-Length: 122

{
  "status" : 400,
  "data" : {
    "errorCode" : "COMMON_1",
    "message" : "잘못된 메세드입니다."
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

409

data.errorCode

String

FILE_3

data.message

String

파일 변환에 실패했습니다. - 파일이 손상되었거나, 기타오류.

2-3. 피드 작성 (파일 저장 실패) 02/11 수정

응답(Response)

HTTP/1.1 400 Bad Request
Content-Type: application/json
Content-Length: 122

{
  "status" : 400,
  "data" : {
    "errorCode" : "COMMON_1",
    "message" : "잘못된 메세드입니다."
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

409

data.errorCode

String

FILE_1

data.message

String

파일 업로드에 실패 했음. 서버 오류, 네트워크 오류.

2-4. 피드 작성 (적절하지 않은 이름) 02/11 수정

응답(Response)

HTTP/1.1 400 Bad Request
Content-Type: application/json
Content-Length: 122

{
  "status" : 400,
  "data" : {
    "errorCode" : "COMMON_1",
    "message" : "잘못된 메세드입니다."
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

409

data.errorCode

String

FILE_6

data.message

String

파일 이름이 올바르지 않습니다.

2. 피드 삭제 01/16 수정

요청(Request)

DELETE /api/feed HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Content-Length: 69
Host: 118.67.142.14

[ {
  "feedId" : "testFeedId"
}, {
  "feedId" : "testFeedId2"
} ]

요청헤더(Request Headers)

Name Description

Authorization

Bearer 액세스 토큰

요청 필드 설명(Request Fields)

Path Type Description

[].feedId

String

삭제할 피드 아이디

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68

{
  "status" : 200,
  "data" : {
    "message" : "성공"
  }
}

2-1 피드 삭제 (소유하지 않은 피드가 존재) 02/11 수정

응답(Response)

HTTP/1.1 409 Conflict
Content-Type: application/json
Content-Length: 124

{
  "status" : 409,
  "data" : {
    "errorCode" : "FEED_4",
    "message" : "피드 작성자가 아닙니다."
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

409

data.errorCode

String

FEED_4

data.message

String

피드의 소유자가 아닙니다.

3. 나의 피드 썸네일 목록 조회 01/16 수정

요청(Request)

GET /api/feed/owned/list HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Host: 118.67.142.14

요청헤더(Request Headers)

Name Description

Authorization

Bearer 액세스 토큰

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 672

{
  "status" : 200,
  "data" : {
    "feeds" : [ {
      "feedId" : "testFeedId",
      "feedType" : "file",
      "ownerId" : "testUserId",
      "thumbnailFileUrl" : "www.example.com",
      "fileType" : "image/png",
      "uploadAt" : "2026-04-24 09:59:41",
      "count" : 2
    }, {
      "feedId" : "testFeedId",
      "feedType" : "text_sky",
      "ownerId" : "testUserId",
      "content" : "testContent",
      "uploadAt" : "2026-04-24 09:59:41"
    }, {
      "feedId" : "testFeedId",
      "feedType" : "text_blue",
      "ownerId" : "testUserId",
      "content" : "testContent",
      "uploadAt" : "2026-04-24 09:59:41"
    } ]
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.feeds[].feedId

String

피드 아이디

data.feeds[].uploadAt

String

피드 업로드 시간 - 형식 yyyy-MM-dd HH:mm:ss

data.feeds[].feedType

String

피드 타입(TEXT_BLUE, TEXT_SKY, FILE)

data.feeds[].thumbnailFileUrl

String

썸네일 파일 URL (파일 타입일 경우)

data.feeds[].fileType

String

미디어 타입(image/png, image/jpeg, image/jpg, image/png) (파일 타입일 경우)

data.feeds[].count

Number

파일 개수 (파일 타입일 경우)

data.feeds[].content

String

텍스트 피드 내용 (TEXT_BLUE, TEXT_SKY 타입일 경우)

data.feeds[].ownerId

String

피드 소유자 ID

4. 친구 피드 썸네일 목록 조회 01/16 수정

GET /api/feed/friend/testFriendId/list HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Host: 118.67.142.14

요청헤더(Request Headers)

Name Description

Authorization

Bearer 액세스 토큰

요청 경로 파라미터 설명(Request Path Parameters)

Table 1. /api/feed/friend/{friendId}/list
Parameter Description

friendId

조회할 친구의 ID

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 672

{
  "status" : 200,
  "data" : {
    "feeds" : [ {
      "feedId" : "testFeedId",
      "feedType" : "file",
      "ownerId" : "testUserId",
      "thumbnailFileUrl" : "www.example.com",
      "fileType" : "image/png",
      "uploadAt" : "2026-04-24 09:59:42",
      "count" : 2
    }, {
      "feedId" : "testFeedId",
      "feedType" : "text_sky",
      "ownerId" : "testUserId",
      "content" : "testContent",
      "uploadAt" : "2026-04-24 09:59:42"
    }, {
      "feedId" : "testFeedId",
      "feedType" : "text_blue",
      "ownerId" : "testUserId",
      "content" : "testContent",
      "uploadAt" : "2026-04-24 09:59:42"
    } ]
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.feeds[].feedId

String

피드 아이디

data.feeds[].uploadAt

String

피드 업로드 시간 - 형식 yyyy-MM-dd HH:mm:ss

data.feeds[].feedType

String

피드 타입(TEXT_BLUE, TEXT_SKY, FILE)

data.feeds[].thumbnailFileUrl

String

썸네일 파일 URL (파일 타입일 경우)

data.feeds[].fileType

String

미디어 타입(image/png, image/jpeg, image/jpg, image/png) (파일 타입일 경우)

data.feeds[].count

Number

파일 개수 (파일 타입일 경우)

data.feeds[].content

String

텍스트 피드 내용 (TEXT_BLUE, TEXT_SKY 타입일 경우)

data.feeds[].ownerId

String

피드 소유자 ID

5. 피드 상세 조회 01/16 수정

GET /api/feed/testFeedId/detail HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Host: 118.67.142.14

요청헤더(Request Headers)

Name Description

Authorization

Bearer 액세스 토큰

요청 경로 파라미터 설명(Request Path Parameters)

Table 2. /api/feed/{feedId}/detail
Parameter Description

feedId

조회할 피드의 ID

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 359

{
  "status" : 200,
  "data" : {
    "feedId" : "testFeedId",
    "uploadTime" : "2026-04-24 09:59:41",
    "content" : "testContent",
    "details" : [ {
      "index" : 0,
      "fileUrl" : "www.example.com",
      "type" : "image/png"
    }, {
      "index" : 0,
      "fileUrl" : "www.example.com",
      "type" : "image/png"
    } ]
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.feedId

String

피드 아이디

data.content

String

피드 내용

data.uploadTime

String

피드 업로드 시간 - 형식 yyyy-MM-dd HH:mm:ss

data.details[].index

Number

미디어 인덱스(0부터 시작)

data.details[].fileUrl

String

미디어 파일 URL

data.details[].type

String

미디어 타입(image/png, image/jpeg, image/jpg, image/png)

5.1 피드 상세 조회(피드 접근 권한 없음) 02/11 수정

응답(Response)

HTTP/1.1 409 Conflict
Content-Type: application/json
Content-Length: 122

{
  "status" : 409,
  "data" : {
    "errorCode" : "FEED_6",
    "message" : "피드를 볼 수 없습니다."
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

409

data.errorCode

String

FEED_6

data.message

String

피드의 접근 권한이 없습니다.

6. 글 피드 작성 02/24 수정

요청(Request)

POST /api/feed/text HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Content-Length: 112
Host: 118.67.142.14

{
  "content" : "testContent",
  "type" : "text_blue",
  "friendIds" : [ "testFriendId", "testFriendId2" ]
}

요청헤더(Request Headers)

Name Description

Authorization

Bearer 액세스 토큰

요청 필드 설명(Request Fields)

Path Type Description

content

String

피드 내용

type

String

피드 타입(TEXT_BLUE, TEXT_SKY)

friendIds

Array

피드를 공유할 친구 ID 목록

응답(Response)

HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 72

{
  "status" : 201,
  "data" : {
    "feedId" : "testFeedId1"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.feedId

String

피드 아이디

7. 피드 수정 04/12 수정

요청(Request)

PUT /api/feed/text HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Content-Length: 61
Host: 118.67.142.14

{
  "feedId" : "testFeedId",
  "content" : "testContent"
}

요청헤더(Request Headers)

Name Description

Authorization

Bearer 액세스 토큰

요청 필드 설명(Request Fields)

Path Type Description

feedId

String

피드 아이디

content

String

피드 내용

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68

{
  "status" : 200,
  "data" : {
    "message" : "성공"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.message

String

성공 메시지

Schedule API

1. 일정 목록 가져오기 01/19 수정

요청(Request)

GET /api/schedule/list?year=2021&month=1 HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Host: 118.67.142.14

요청 헤더(Request Headers)

Name Description

Authorization

Bearer 액세스 토큰

요청 쿼리 파라미터(Request Query Parameters)

Parameter Description

year

년도(yyyy) → 2021

month

월(1 ~ 12)

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 576

{
  "status" : 200,
  "data" : {
    "schedules" : [ {
      "scheduleId" : "testScheduleId",
      "title" : "testScheduleTitle",
      "dateTime" : "2026-04-24 09:56:26",
      "memo" : "testScheduleMemo",
      "location" : "testLocation",
      "timeDecided" : true,
      "isOwned" : true,
      "isParticipant" : false,
      "participants" : [ {
        "friendId" : "testUserId",
        "friendRole" : "participant"
      }, {
        "friendId" : "testUserId",
        "friendRole" : "participant"
      } ]
    } ],
    "unReadCount" : 2
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.schedules[].scheduleId

String

일정 ID

data.schedules[].title

String

일정 제목

data.schedules[].dateTime

String

일정 시간

data.schedules[].memo

String

일정 메모

data.schedules[].location

String

일정 장소

data.schedules[].timeDecided

Boolean

시간 확정 여부

data.schedules[].participants[].friendId

String

참여자(친구) ID, : 이떄 자기 자신의 아이디는 빠짐

data.schedules[].participants[].friendRole

String

참여자 역할(participant/owner)

data.schedules[].isOwned

Boolean

일정 소유자 여부(true/false) → true 시 일정 삭제 칸 보임/ false 시 일정 취소 칸 안보임

data.schedules[].isParticipant

Boolean

요청한 사람 참여 여부(true/false) → 요청한 사람의 Id는 노출되지 않음 친구 ID 만 노출

data.unReadCount

Number

읽지 않은 일정 개수

2. 일정 생성 01/19 수정

요청(Request)

POST /api/schedule HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Content-Length: 204
Host: 118.67.142.14

{
  "title" : "testTitle",
  "friendIds" : [ "testFriendId1", "testFriendId2" ],
  "dateTime" : "2021-01-01 00:00:00",
  "timeDecided" : true,
  "memo" : "testMemo",
  "location" : "testLocation"
}

요청 헤더(Request Headers)

Name Description

Authorization

Bearer 액세스 토큰

요청 필드 설명(Request Fields)

Path Type Description

title

String

일정 제목

dateTime

String

일정 시간

memo

String

일정 메모

location

String

일정 장소

timeDecided

Boolean

시간 확정 여부(true/false) - 디자인 상의 미정을 의미

friendIds[]

Array

참여자(친구) ID 목록 (각 ID는 문자열)

응답(Response)

HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 79

{
  "status" : 201,
  "data" : {
    "scheduleId" : "testScheduleId"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.scheduleId

String

생성된 일정 ID

3. 일정 수정 01/19 수정

요청(Request)

PUT /api/schedule HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Content-Length: 266
Host: 118.67.142.14

{
  "scheduleId" : "testScheduleId",
  "title" : "testTitle",
  "friendIds" : [ "testFriendId1", "testFriendId2" ],
  "dateTime" : "2021-01-01 00:00:00",
  "timeDecided" : true,
  "memo" : "testMemo",
  "location" : "testLocation",
  "participated" : true
}

요청 헤더(Request Headers)

Name Description

Authorization

Bearer 액세스 토큰

요청 필드 설명(Request Fields)

Path Type Description

scheduleId

String

일정 ID

title

String

일정 제목

dateTime

String

일정 시간

memo

String

일정 메모

location

String

일정 장소

timeDecided

Boolean

시간 확정 여부(true/false) - 디자인 상의 미정을 의미

friendIds[]

Array

본인을 제외한 참여자(친구) ID 목록 (각 ID는 문자열)

participated

Boolean

요청자 본인 참여 여부(true/false)

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68

{
  "status" : 200,
  "data" : {
    "message" : "성공"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.message

String

성공 메시지

3-1. 일정 수정 실패 (스케줄 참여 이력이 없음) 01/21 수정

응답(Response)

HTTP/1.1 404 Not Found
Content-Type: application/json
Content-Length: 128

{
  "status" : 404,
  "data" : {
    "errorCode" : "SCHEDULE_4",
    "message" : "일정 참여자가 아닙니다."
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

404

data.errorCode

String

SCHEDULE_4

data.message

String

일정 참여자가 아닙니다. → 일정에 참여한 적이 없는 경우 보안상 발생하는 에러 딱히 처리할 것은 없음

4. 일정 삭제 01/19 수정

요청(Request)

DELETE /api/schedule HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Content-Length: 39
Host: 118.67.142.14

{
  "scheduleId" : "testScheduleId"
}

요청 헤더(Request Headers)

Name Description

Authorization

Bearer 액세스 토큰

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68

{
  "status" : 200,
  "data" : {
    "message" : "성공"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.message

String

성공 메시지

4.1 일정 삭제 실패 (스케줄 참여 이력이 없음) 01/21 수정

응답(Response)

HTTP/1.1 404 Not Found
Content-Type: application/json
Content-Length: 128

{
  "status" : 404,
  "data" : {
    "errorCode" : "SCHEDULE_4",
    "message" : "일정 참여자가 아닙니다."
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

404

data.errorCode

String

SCHEDULE_4

data.message

String

일정 참여자가 아닙니다. → 일정에 참여한 적이 없는 경우 보안상 발생하는 에러 딱히 처리할 것은 없음

4.2 일정 삭제 실패 (스케줄 작성자가 아님) 01/21 수정

응답(Response)

HTTP/1.1 409 Conflict
Content-Type: application/json
Content-Length: 128

{
  "status" : 409,
  "data" : {
    "errorCode" : "SCHEDULE_5",
    "message" : "일정 작성자가 아닙니다."
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

409

data.errorCode

String

SCHEDULE_5

data.message

String

일정 소유자가 아닙니다. → 일정을 생성한 사람이 아닌 경우 → 일정을 생성한 사람만 삭제 가능(보안상 발생하는 에러 딱히 처리할 것은 없음)

5. 일정 취소 01/21 수정

요청(Request)

DELETE /api/schedule/cancel HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Content-Length: 39
Host: 118.67.142.14

{
  "scheduleId" : "testScheduleId"
}

요청 헤더(Request Headers)

Name Description

Authorization

Bearer 액세스 토큰

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68

{
  "status" : 200,
  "data" : {
    "message" : "성공"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.message

String

성공 메시지

5.1 일정 취소 실패 (스케줄 참여 이력이 없음) 01/21 수정

응답(Response)

HTTP/1.1 404 Not Found
Content-Type: application/json
Content-Length: 128

{
  "status" : 404,
  "data" : {
    "errorCode" : "SCHEDULE_4",
    "message" : "일정 참여자가 아닙니다."
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

404

data.errorCode

String

SCHEDULE_4

data.message

String

일정 참여자가 아닙니다. → 일정에 참여한 적이 없는 경우 보안상 발생하는 에러 딱히 처리할 것은 없음

6. 일정 로그 가져오기 01/21 수정

요청(Request)

GET /api/schedule/logs HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Host: 118.67.142.14

요청 헤더(Request Headers)

Name Description

Authorization

Bearer 액세스 토큰

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 672

{
  "status" : 200,
  "data" : {
    "logs" : [ {
      "scheduleId" : "testScheduleId",
      "userId" : "testUserId",
      "action" : "created",
      "createAt" : "2026-04-24 09:56:23"
    }, {
      "scheduleId" : "testScheduleId",
      "userId" : "testUserId",
      "action" : "updated",
      "createAt" : "2026-04-24 09:56:23"
    }, {
      "scheduleId" : "testScheduleId",
      "userId" : "testUserId",
      "action" : "deleted",
      "createAt" : "2026-04-24 09:56:23"
    }, {
      "scheduleId" : "testScheduleId",
      "userId" : "testUserId",
      "action" : "canceled",
      "createAt" : "2026-04-24 09:56:23"
    } ]
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.logs[].scheduleId

String

일정 ID

data.logs[].userId

String

로그를 남긴 사용자 ID

data.logs[].action

String

로그 액션(일정 생성, 일정 수정, 일정 삭제, 일정 취소)

data.logs[].createAt

String

로그 생성 시간

7. 일정 가져오기 01/21 수정

요청(Request)

GET /api/schedule/testScheduleId HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Host: 118.67.142.14

요청 헤더(Request Headers)

Name Description

Authorization

Bearer 액세스 토큰

경로 파라미터(Path Parameters)

Table 3. /api/schedule/{scheduleId}
Parameter Description

scheduleId

일정 ID

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 490

{
  "status" : 200,
  "data" : {
    "scheduleId" : "testScheduleId",
    "title" : "testScheduleTitle",
    "dateTime" : "2026-04-24 09:56:29",
    "memo" : "testScheduleMemo",
    "location" : "testLocation",
    "timeDecided" : true,
    "isOwned" : true,
    "isParticipant" : false,
    "participants" : [ {
      "friendId" : "testUserId",
      "friendRole" : "participant"
    }, {
      "friendId" : "testUserId",
      "friendRole" : "participant"
    } ]
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.scheduleId

String

일정 ID

data.title

String

일정 제목

data.dateTime

String

일정 시간

data.memo

String

일정 메모

data.location

String

일정 장소

data.timeDecided

Boolean

시간 확정 여부

data.isOwned

Boolean

일정 소유자 여부(true/false) → true 시 일정 삭제 칸 보임/ false 시 일정 취소 칸 안보임

data.isParticipant

Boolean

요청한 사람 참여 여부(true/false) → 요청한 사람의 Id는 노출되지 않음 친구 ID 만 노출

data.participants[].friendId

String

참여자(친구) ID, : 이떄 자기 자신의 아이디는 빠짐

data.participants[].friendRole

String

참여자 역할(participant/owner)

7-1. 일정 가져오기 실패 (일정이 존재하지 않음) 01/21 수정

응답(Response)

HTTP/1.1 404 Not Found
Content-Type: application/json
Content-Length: 123

{
  "status" : 404,
  "data" : {
    "errorCode" : "SCHEDULE_1",
    "message" : "일정을 찾을 수 없음."
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

404

data.errorCode

String

SCHEDULE_1

data.message

String

일정을 찾을 수 없는 경우 - 잘못된 일정 ID를 요청한 경우

Friend API

1. 친구들 추가하기 01/24 수정

요청(Request)

POST /api/friend/list HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Content-Length: 178
Host: 118.67.142.14

[ {
  "countryCode" : "82",
  "phoneNumber" : "01012345678",
  "name" : "testName"
}, {
  "countryCode" : "82",
  "phoneNumber" : "01012345678",
  "name" : "testName"
} ]

요청 헤더(Request Headers)

Name Description

Authorization

Bearer 액세스 토큰

응답(Response)

HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 1533

{
  "status" : 201,
  "data" : {
    "friends" : [ {
      "friendId" : "testFriendId1",
      "name" : "testFriendName",
      "profileImageUrl" : "www.example.com",
      "profileImageType" : "image/png",
      "phoneNumber" : "82",
      "countryCode" : "01012345678",
      "statusMessage" : "testStatusMessage",
      "favorite" : true,
      "status" : "friend",
      "birthday" : "2026-04-24"
    }, {
      "friendId" : "testFriendId2",
      "name" : "testFriendName",
      "profileImageUrl" : "www.example.com",
      "profileImageType" : "image/png",
      "phoneNumber" : "82",
      "countryCode" : "01012345678",
      "statusMessage" : "testStatusMessage",
      "favorite" : true,
      "status" : "delete",
      "birthday" : "2026-04-24"
    }, {
      "friendId" : "testFriendId3",
      "name" : "testFriendName",
      "profileImageUrl" : "www.example.com",
      "profileImageType" : "image/png",
      "phoneNumber" : "82",
      "countryCode" : "01012345678",
      "statusMessage" : "testStatusMessage",
      "favorite" : true,
      "status" : "block",
      "birthday" : "2026-04-24"
    }, {
      "friendId" : "testFriendId4",
      "name" : "testFriendName",
      "profileImageUrl" : "www.example.com",
      "profileImageType" : "image/png",
      "phoneNumber" : "82",
      "countryCode" : "01012345678",
      "statusMessage" : "testStatusMessage",
      "favorite" : true,
      "status" : "friend",
      "birthday" : "2026-04-24"
    } ]
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.friends[].phoneNumber

String

전화번호

data.friends[].countryCode

String

국가 코드

data.friends[].name

String

친구 이름

data.friends[].favorite

Boolean

즐겨찾기 여부

data.friends[].status

String

차단 여부/삭제 여부/NORMAL 시 친구가 아닌 상태(전화번호 추가 필요)

data.friends[].friendId

String

친구 ID

data.friends[].profileImageUrl

String

프로필 이미지 URL

data.friends[].profileImageType

String

프로필 이미지 타입(image/jpeg, image/png)

data.friends[].statusMessage

String

상태 메시지

data.friends[].birthday

String

생일(yyyy-MM-dd), 없다면 빈칸

2. 친구 삭제하기 01/24 수정

요청(Request)

DELETE /api/friend HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Content-Length: 35
Host: 118.67.142.14

{
  "friendId" : "testFriendId"
}

요청 헤더(Request Headers)

Name Description

Authorization

Bearer 액세스 토큰

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68

{
  "status" : 200,
  "data" : {
    "message" : "성공"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.message

String

성공 메시지

3. 친구 차단하기 01/24 수정

요청(Request)

DELETE /api/friend/block HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Content-Length: 35
Host: 118.67.142.14

{
  "friendId" : "testFriendId"
}

요청 헤더(Request Headers)

Name Description

Authorization

Bearer 액세스 토큰

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68

{
  "status" : 200,
  "data" : {
    "message" : "성공"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.message

String

성공 메시지

4. 친구 이름 변경하기 01/24 수정

요청(Request)

PUT /api/friend/name HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Content-Length: 59
Host: 118.67.142.14

{
  "friendId" : "testFriendId",
  "name" : "testName"
}

요청 헤더(Request Headers)

Name Description

Authorization

Bearer 액세스 토큰

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68

{
  "status" : 200,
  "data" : {
    "message" : "성공"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.message

String

성공 메시지

4.1 친구 이름 변경 실패 (친구를 차단 함) 02/12 수정

응답(Response)

HTTP/1.1 409 Conflict
Content-Type: application/json
Content-Length: 122

{
  "status" : 409,
  "data" : {
    "errorCode" : "FRIEND_5",
    "message" : "차단당한 친구입니다."
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

409

data.errorCode

String

FRIEND_5

data.message

String

내가 차단된 상태

4.2 친구 이름 변경 실패 (친구가 아님) 02/12 수정

응답(Response)

HTTP/1.1 409 Conflict
Content-Type: application/json
Content-Length: 119

{
  "status" : 409,
  "data" : {
    "errorCode" : "FRIEND_4",
    "message" : "차단한 친구입니다."
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

409

data.errorCode

String

FRIEND_4

data.message

String

친구가 아닌 상태(전화번호 추가 필요)

4.3 친구 이름 변경 실패 (내가 차단됨) 02/12 수정

응답(Response)

HTTP/1.1 409 Conflict
Content-Type: application/json
Content-Length: 122

{
  "status" : 409,
  "data" : {
    "errorCode" : "FRIEND_5",
    "message" : "차단당한 친구입니다."
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

409

data.errorCode

String

FRIEND_5

data.message

String

내가 차단된 상태

4.4 친구를 삭제함 02/12 수정

응답(Response)

HTTP/1.1 409 Conflict
Content-Type: application/json
Content-Length: 119

{
  "status" : 409,
  "data" : {
    "errorCode" : "FRIEND_6",
    "message" : "삭제된 친구입니다."
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

409

data.errorCode

String

FRIEND_6

data.message

String

친구를 삭제한 상태

5. 친구 즐겨찾기 변경하기 01/24 수정

요청(Request)

PUT /api/friend/favorite HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Content-Length: 57
Host: 118.67.142.14

{
  "friendId" : "testFriendId",
  "favorite" : true
}

요청 헤더(Request Headers)

Name Description

Authorization

Bearer 액세스 토큰

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68

{
  "status" : 200,
  "data" : {
    "message" : "성공"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.message

String

성공 메시지

5.1 친구 즐겨찾기 변경 실패 (친구가 아님) 02/12 수정

응답(Response)

HTTP/1.1 409 Conflict
Content-Type: application/json
Content-Length: 119

{
  "status" : 409,
  "data" : {
    "errorCode" : "FRIEND_4",
    "message" : "차단한 친구입니다."
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

409

data.errorCode

String

FRIEND_4

data.message

String

친구가 아닌 상태(전화번호 추가 필요)

5.2 친구 즐겨찾기 변경 실패 (내가 차단됨) 02/12 수정

응답(Response)

HTTP/1.1 409 Conflict
Content-Type: application/json
Content-Length: 122

{
  "status" : 409,
  "data" : {
    "errorCode" : "FRIEND_5",
    "message" : "차단당한 친구입니다."
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

409

data.errorCode

String

FRIEND_5

data.message

String

내가 차단된 상태

5.3 친구 즐겨찾기 변경 실패 (친구를 차단 함) 02/12 수정

응답(Response)

HTTP/1.1 409 Conflict
Content-Type: application/json
Content-Length: 122

{
  "status" : 409,
  "data" : {
    "errorCode" : "FRIEND_5",
    "message" : "차단당한 친구입니다."
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

409

data.errorCode

String

FRIEND_5

data.message

String

내가 차단된 상태

5.4 친구 즐겨찾기 변경 실패 (친구를 삭제함) 02/12 수정

응답(Response)

HTTP/1.1 409 Conflict
Content-Type: application/json
Content-Length: 119

{
  "status" : 409,
  "data" : {
    "errorCode" : "FRIEND_6",
    "message" : "삭제된 친구입니다."
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

409

data.errorCode

String

FRIEND_6

data.message

String

친구를 삭제한 상태

6 친구 상태를 친구로 변경(친구가 됨) 02/24 수정

요청(Request)

PUT /api/friend/allowed HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Content-Length: 65
Host: 118.67.142.14

{
  "friendId" : "testFriendId",
  "friendName" : "testName"
}

요청 헤더(Request Headers)

Name Description

Authorization

Bearer 액세스 토큰

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68

{
  "status" : 200,
  "data" : {
    "message" : "성공"
  }
}

7 친구 차단 해제 03/11 수정

요청(Request)

PUT /api/friend/unblock HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Content-Length: 35
Host: 118.67.142.14

{
  "friendId" : "testFriendId"
}

요청 헤더(Request Headers)

Name Description

Authorization

Bearer 액세스 토큰

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68

{
  "status" : 200,
  "data" : {
    "message" : "성공"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.message

String

성공 메시지

Main API

메인 페이지 01/15 수정

요청(Request)

GET /api/main HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Host: 118.67.142.14

요청헤더(Request Headers)

Name Description

Authorization

Bearer 액세스 토큰

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 6766

{
  "status" : 200,
  "data" : {
    "friends" : [ {
      "friendId" : "testUserId",
      "name" : "testFriendName",
      "profileImageUrl" : "www.example.com",
      "profileImageType" : "image/png",
      "phoneNumber" : "82",
      "countryCode" : "01012345678",
      "statusMessage" : "testStatusMessage",
      "favorite" : true,
      "status" : "friend",
      "birthday" : "2026-04-24"
    }, {
      "friendId" : "testUserId",
      "name" : "testFriendName",
      "profileImageUrl" : "www.example.com",
      "profileImageType" : "image/png",
      "phoneNumber" : "82",
      "countryCode" : "01012345678",
      "statusMessage" : "testStatusMessage",
      "favorite" : true,
      "status" : "delete",
      "birthday" : "2026-04-24"
    }, {
      "friendId" : "testUserId",
      "name" : "testFriendName",
      "profileImageUrl" : "www.example.com",
      "profileImageType" : "image/png",
      "phoneNumber" : "82",
      "countryCode" : "01012345678",
      "statusMessage" : "testStatusMessage",
      "favorite" : true,
      "status" : "block",
      "birthday" : "2026-04-24"
    }, {
      "friendId" : "testUserId",
      "name" : "testFriendName",
      "profileImageUrl" : "www.example.com",
      "profileImageType" : "image/png",
      "phoneNumber" : "82",
      "countryCode" : "01012345678",
      "statusMessage" : "testStatusMessage",
      "favorite" : true,
      "status" : "friend",
      "birthday" : "2026-04-24"
    } ],
    "user" : {
      "userId" : "testUserId",
      "statusMessage" : "testStatusMessage",
      "imageUrl" : "www.example.com",
      "imageType" : "image/png",
      "name" : "testUserName",
      "birthday" : "2026-04-24"
    },
    "totalFriends" : 4,
    "directChatRooms" : [ {
      "chatRoomId" : "directChatRoomId",
      "friendId" : "testFriendId",
      "chatLogs" : [ {
        "messageId" : "messageId",
        "type" : "normal",
        "senderId" : "senderId",
        "timestamp" : "2026-04-24 09:59:42",
        "seqNumber" : 1,
        "text" : "text"
      }, {
        "messageId" : "messageId",
        "type" : "file",
        "senderId" : "senderId",
        "timestamp" : "2026-04-24 09:59:42",
        "seqNumber" : 1,
        "files" : [ {
          "fileType" : "image/png",
          "fileUrl" : "www.example.com",
          "index" : 0
        } ]
      }, {
        "messageId" : "messageId",
        "type" : "delete",
        "senderId" : "senderId",
        "timestamp" : "2026-04-24 09:59:42",
        "seqNumber" : 1,
        "text" : "text"
      }, {
        "messageId" : "messageId",
        "type" : "delete",
        "senderId" : "senderId",
        "timestamp" : "2026-04-24 09:59:42",
        "seqNumber" : 1,
        "files" : [ {
          "fileType" : "image/png",
          "fileUrl" : "www.example.com",
          "index" : 0
        } ]
      }, {
        "messageId" : "messageId",
        "type" : "reply",
        "senderId" : "senderId",
        "parentMessageId" : "parentMessageId",
        "parentSeqNumber" : 0,
        "parentMessageText" : "parentMessageText",
        "parentMessageType" : "reply",
        "timestamp" : "2026-04-24 09:59:42",
        "seqNumber" : 1,
        "text" : "text"
      }, {
        "messageId" : "messageId",
        "type" : "delete",
        "senderId" : "senderId",
        "parentMessageId" : "parentMessageId",
        "parentSeqNumber" : 0,
        "parentMessageText" : "parentMessageText",
        "parentMessageType" : "reply",
        "timestamp" : "2026-04-24 09:59:42",
        "seqNumber" : 1,
        "text" : "text"
      } ]
    } ],
    "groupChatRooms" : [ {
      "chatRoomId" : "groupChatRoomId",
      "friendIds" : [ "testFriendId" ],
      "chatLogs" : [ {
        "messageId" : "messageId",
        "type" : "normal",
        "senderId" : "senderId",
        "timestamp" : "2026-04-24 09:59:42",
        "seqNumber" : 1,
        "text" : "text"
      }, {
        "messageId" : "messageId",
        "type" : "file",
        "senderId" : "senderId",
        "timestamp" : "2026-04-24 09:59:42",
        "seqNumber" : 1,
        "files" : [ {
          "fileType" : "image/png",
          "fileUrl" : "www.example.com",
          "index" : 0
        } ]
      }, {
        "messageId" : "messageId",
        "type" : "delete",
        "senderId" : "senderId",
        "timestamp" : "2026-04-24 09:59:42",
        "seqNumber" : 1,
        "text" : "text"
      }, {
        "messageId" : "messageId",
        "type" : "delete",
        "senderId" : "senderId",
        "timestamp" : "2026-04-24 09:59:42",
        "seqNumber" : 1,
        "files" : [ {
          "fileType" : "image/png",
          "fileUrl" : "www.example.com",
          "index" : 0
        } ]
      }, {
        "messageId" : "messageId",
        "type" : "reply",
        "senderId" : "senderId",
        "parentMessageId" : "parentMessageId",
        "parentSeqNumber" : 0,
        "parentMessageText" : "parentMessageText",
        "parentMessageType" : "reply",
        "timestamp" : "2026-04-24 09:59:42",
        "seqNumber" : 1,
        "text" : "text"
      }, {
        "messageId" : "messageId",
        "type" : "delete",
        "senderId" : "senderId",
        "parentMessageId" : "parentMessageId",
        "parentSeqNumber" : 0,
        "parentMessageText" : "parentMessageText",
        "parentMessageType" : "reply",
        "timestamp" : "2026-04-24 09:59:42",
        "seqNumber" : 1,
        "text" : "text"
      }, {
        "messageId" : "messageId",
        "type" : "leave",
        "senderId" : "senderId",
        "timestamp" : "2026-04-24 09:59:42",
        "seqNumber" : 1
      }, {
        "messageId" : "messageId",
        "type" : "invite",
        "senderId" : "senderId",
        "timestamp" : "2026-04-24 09:59:42",
        "seqNumber" : 1,
        "targetUserIds" : [ "targetUserId" ]
      } ]
    } ],
    "oneDayFeeds" : [ {
      "feedId" : "testFeedId",
      "feedType" : "file",
      "ownerId" : "testUserId",
      "thumbnailFileUrl" : "www.example.com",
      "fileType" : "image/png",
      "content" : "testContent",
      "uploadAt" : "2026-04-24 09:59:42",
      "count" : 2
    }, {
      "feedId" : "testFeedId",
      "feedType" : "text_sky",
      "ownerId" : "testUserId",
      "content" : "testContent",
      "uploadAt" : "2026-04-24 09:59:42"
    }, {
      "feedId" : "testFeedId",
      "feedType" : "text_blue",
      "ownerId" : "testUserId",
      "content" : "testContent",
      "uploadAt" : "2026-04-24 09:59:42"
    } ]
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.user

Object

사용자 정보

data.user.userId

String

사용자 ID

data.user.name

String

사용자 이름

data.user.statusMessage

String

사용자 상태 메시지

data.user.imageUrl

String

사용자 프로필 이미지 URL

data.user.imageType

String

프로필 이미지 타입 (예: 'default' / 'uploaded')

data.user.birthday

String

사용자 생일 (yyyy-MM-dd 형식) 없다면 빈칸으로 넘어옴

data.totalFriends

Number

전체 친구 수

data.friends[]

Array

친구 목록

data.friends[].phoneNumber

String

친구 전화번호

data.friends[].countryCode

String

친구 국가 코드

data.friends[].name

String

친구 이름

data.friends[].favorite

Boolean

친구 즐겨찾기 여부

data.friends[].status

String

친구 상태 (friend, delete, block 등)

data.friends[].friendId

String

친구 사용자 ID

data.friends[].profileImageUrl

String

친구 프로필 이미지 URL

data.friends[].profileImageType

String

친구 프로필 이미지 타입

data.friends[].statusMessage

String

친구 상태 메시지

data.friends[].birthday

String

친구 생일 (yyyy-MM-dd 형식) 없다면 빈칸으로 넘어옴

data.groupChatRooms[]

Array

그룹 채팅방 목록

data.groupChatRooms[].chatRoomId

String

그룹 채팅방 ID

data.groupChatRooms[].friendIds[]

Array

그룹 채팅방에 참여 중인 친구 ID 목록(본인 제외)

data.groupChatRooms[].chatLogs

Array

해당 채팅방 채팅 로그 목록

data.groupChatRooms[].chatLogs[].messageId

String

메시지 ID

data.groupChatRooms[].chatLogs[].type

String

메시지 타입 (reply, file, normal, invite, leave 등)

data.groupChatRooms[].chatLogs[].senderId

String

메시지 전송자 ID

data.groupChatRooms[].chatLogs[].timestamp

String

메시지 전송 시각 (yy-MM-dd HH:mm:ss)

data.groupChatRooms[].chatLogs[].seqNumber

Number

메시지 시퀀스 넘버 (1부터 시작)

data.groupChatRooms[].chatLogs[].parentMessageId

String

답장 대상 메시지 ID (reply 타입일 때만)

data.groupChatRooms[].chatLogs[].parentSeqNumber

Number

답장 대상 메시지 시퀀스 번호 (reply 타입일 때만)

data.groupChatRooms[].chatLogs[].parentMessageText

String

답장 대상 메시지 내용 (reply 타입일 때만)

data.groupChatRooms[].chatLogs[].parentMessageType

String

답장 대상 메시지 타입 (reply 타입일 때만)

data.groupChatRooms[].chatLogs[].text

String

메시지 텍스트 (reply, normal 타입일 때만)

data.groupChatRooms[].chatLogs[].files

Array

파일 목록 (file 타입일 때만)

data.groupChatRooms[].chatLogs[].files[].fileUrl

String

파일 URL

data.groupChatRooms[].chatLogs[].files[].fileType

String

파일 타입 (image 등)

data.groupChatRooms[].chatLogs[].files[].index

Number

파일 순서 (0부터 시작)

data.groupChatRooms[].chatLogs[].targetUserIds

Array

초대 대상 사용자 ID 목록 (invite 타입일 때만)

data.directChatRooms[]

Array

1:1 채팅방 목록

data.directChatRooms[].chatRoomId

String

1:1 채팅방 ID

data.directChatRooms[].friendId

String

상대방 친구 ID

data.directChatRooms[].chatLogs

Array

해당 채팅방 채팅 로그 목록

data.directChatRooms[].chatLogs[].messageId

String

메시지 ID

data.directChatRooms[].chatLogs[].type

String

메시지 타입

data.directChatRooms[].chatLogs[].senderId

String

메시지 전송자 ID

data.directChatRooms[].chatLogs[].timestamp

String

메시지 전송 시각

data.directChatRooms[].chatLogs[].seqNumber

Number

메시지 시퀀스 넘버(1부터 시작)

data.directChatRooms[].chatLogs[].parentMessageId

String

답장 대상 메시지 ID (reply 타입)

data.directChatRooms[].chatLogs[].parentSeqNumber

Number

답장 대상 메시지 시퀀스 번호 (reply 타입)

data.directChatRooms[].chatLogs[].parentMessageText

String

답장 대상 메시지 내용 (reply 타입)

data.directChatRooms[].chatLogs[].parentMessageType

String

답장 대상 메시지 타입 (reply 타입)

data.directChatRooms[].chatLogs[].text

String

메시지 텍스트 (reply, normal 타입)

data.directChatRooms[].chatLogs[].files

Array

파일 목록 (file 타입)

data.directChatRooms[].chatLogs[].files[].fileUrl

String

파일 URL

data.directChatRooms[].chatLogs[].files[].fileType

String

파일 타입

data.directChatRooms[].chatLogs[].files[].index

Number

파일 순서(0 부터 시작)

data.oneDayFeeds[].feedId

String

피드 아이디

data.oneDayFeeds[].uploadAt

String

피드 업로드 시간 - 형식 yyyy-MM-dd HH:mm:ss

data.oneDayFeeds[].feedType

String

피드 타입(TEXT_BLUE, TEXT_SKY, FILE)

data.oneDayFeeds[].ownerId

String

피드 소유자 ID

data.oneDayFeeds[].content

String

피드 내용

data.oneDayFeeds[].thumbnailFileUrl

String

썸네일 파일 URL (파일 타입일 경우)

data.oneDayFeeds[].fileType

String

미디어 타입(image/png, image/jpeg, image/jpg, image/png) (파일 타입일 경우)

data.oneDayFeeds[].count

Number

파일 개수 (파일 타입일 경우)

Chat WebSocket API 문서

본 문서는 WebSocket(STOMP) 채팅 기능을 Spring REST Docs와 유사한 형식으로 정리한 예시입니다.

1. WebSocket 연결 (Handshake)

  • URL: ws://118.67.142.14:80/ws-stomp

  • 프로토콜: STOMP

  • Authorization 헤더: Authorization: Bearer {JWT_ACCESS_TOKEN}

연결 순서는 대략 다음과 같습니다.

  1. 클라이언트가 `ws://118.67.142.14:80/ws-stomp`로 WebSocket 핸드셰이크를 시도 이때에도 헤더 파일을 넣어야함

  2. 서버가 HTTP 101 Switching Protocol로 업그레이드하면, STOMP CONNECT를 통해 연결 완료

  3. 연결 완료 후 클라이언트는 /app/…​ 경로로 SEND 메시지를 전송할 수 있고, 필요한 SUBSCRIBE를 통해 응답(브로드캐스트)을 수신

2. 개인 채팅방 STOMP 메시지 송신

개인 채팅방에서 4가지 메시지 전송을 확인할 수 있습니다.

메시지 타입 설명

Normal

일반 텍스트 메시지

Delete

메시지 삭제 메시지

Reply

답장(Reply) 메시지

Read

읽음 표시 메시지

2.1 개인 채팅방 일반 메시지 송신

  • STOMP SEND Destination: /app/chat/direct/common

  • Request:

{
"chatRoomId": "testRoomId",
"message": "testMessage"
}

응답 필드

설명

chatRoomId

채팅방 ID

message

메시지 내용

2.2 개인 채팅방 읽기 메시지 송신

  • STOMP SEND Destination: /app/chat/direct/read

  • Request:

{
"chatRoomId": "testRoomId",
"sequenceNumber": "0"
}

응답 필드

설명

chatRoomId

채팅방 ID

sequenceNumber

읽은 메시지 순번

2.3 개인 채팅방 삭제 메시지 송신

  • STOMP SEND Destination: /app/chat/direct/delete

  • Request:

{
"chatRoomId": "testRoomId",
"messageId": "testMessageId"
}

2.4 개인 채팅방 답장 메시지 송신

  • STOMP SEND Destination: /app/chat/direct/reply

  • Request:

{
"chatRoomId": "testRoomId",
"parentMessageId": "testParentMessageId",
"message": "testMessage"
}

응답 필드

설명

chatRoomId

채팅방 ID

parentMessageId

부모 메시지 ID

message

메시지 내용

3. 그룹 채팅방 STOMP 메시지 송신

그룹 채팅방에서 4가지 메시지 전송을 확인할 수 있습니다.

메시지 타입 설명

Normal

일반 텍스트 메시지

Delete

메시지 삭제 메시지

Reply

답장(Reply) 메시지

Read

읽음 표시 메시지

3.1 그룹 채팅방 일반 메시지 송신

  • STOMP SEND Destination: /app/chat/group/common

  • Request:

{
"chatRoomId": "testRoomId",
"message": "testMessage"
}

응답 필드

설명

chatRoomId

채팅방 ID

message

메시지 내용

3.2 그룹 채팅방 읽기 메시지 송신

  • STOMP SEND Destination: /app/chat/group/read

  • Request:

{
"chatRoomId": "testRoomId",
"sequenceNumber": "0"
}

응답 필드

설명

chatRoomId

채팅방 ID

sequenceNumber

읽은 메시지 순번

3.3 그룹 채팅방 삭제 메시지 송신

  • STOMP SEND Destination: /app/chat/group/delete

  • Request:

{
   "chatRoomId": "testRoomId",
   "messageId": "testMessageId"
}

응답 필드

설명

chatRoomId

채팅방 ID

messageId

메시지 ID

3.4 그룹 채팅방 답장 메시지 송신

  • STOMP SEND Destination: /app/chat/group/reply

  • Request:

{
  "chatRoomId": "testRoomId",
  "parentMessageId": "testParentMessageId",
  "message": "testMessage"
}

응답 필드

설명

chatRoomId

채팅방 ID

parentMessageId

부모 메시지 ID

message

메시지 내용

4. 개인 채팅방 STOMP 메시지 수신

개인 채팅방에서 5가지 메시지 수신을 확인할 수 있습니다.

개인 채팅방 메시지는 서버가 /user/queue/chat/direct 경로로 발행하며, 클라이언트는 해당 경로를 SUBSCRIBE해야 수신할 수 있습니다.

메시지 타입 설명

Normal

일반 텍스트 메시지

File

파일(이미지, 문서 등) 전송 메시지

Delete

메시지 삭제 알림

Reply

답장(Reply) 메시지

Error

에러 상태 전달 (예: 권한 없음, 유효성 오류 등)

Comment

피드 댓글 메시지

4.1 개인 채팅방 일반 메시지 수신

  • STOMP SEND Destination: /user/queue/chat/direct

  • Response:

{
  "messageId": "testMessageId1",
  "chatRoomId": "testChatRoomId1",
  "chatRoomType": "direct",
  "senderId": "someUserId",
  "type": "normal",
  "text": "이곳에 실제 메시지 내용",
  "timestamp": "2025-02-13 10:00:00",
  "seqNumber": 1
}
응답 필드 설명

messageId

메시지 ID

chatRoomId

채팅방 ID

chatRoomType

채팅방 타입 (direct, group)

senderId

보낸 사람 ID

type

메시지 타입(normal)

text

메시지 내용

timestamp

메시지 생성 시간

seqNumber

메시지 순번

4.2 개인 채팅방 파일 메시지 수신

  • STOMP SEND Destination: /user/queue/chat/direct

  • Response:

{
  "messageId": "testMessageId2",
  "chatRoomId": "testChatRoomId2",
  "chatRoomType": "group",
  "senderId": "someUserId",
  "type": "file",
  "timestamp": "2025-02-13 10:00:00",
  "seqNumber": 2,
  "files" : {
    "fileType": "image/png",
    "fileUrl": "http://some-url.com/some-image.jpg",
    "fileName": "some-image.jpg"
  }
}
응답 필드 설명

messageId

메시지 ID

chatRoomId

채팅방 ID

chatRoomType

채팅방 타입 (direct, group)

senderId

보낸 사람 ID

type

메시지 타입 (file)

timestamp

메시지 생성 시간

seqNumber

메시지 순번

files

파일 정보

fileType

파일 타입

fileUrl

파일 URL

fileName

파일 이름

4.3 개인 채팅방 삭제 메시지 수신

  • STOMP SEND Destination: /user/queue/chat/direct

  • Response:

{
  "targetMessageId": "testMessageId3",
  "chatRoomId": "testChatRoomId3",
  "chatRoomType": "direct",
  "senderId": "someUserId",
  "type": "delete",
  "timestamp": "2025-02-13 10:00:00",
  "seqNumber": 3
}
응답 필드 설명

targetMessageId

삭제 대상 메시지 ID

chatRoomId

채팅방 ID

chatRoomType

채팅방 타입 (direct, group)

senderId

보낸 사람 ID

type

메시지 타입 (delete)

timestamp

메시지 생성 시간

seqNumber

메시지 순번

4.4 개인 채팅방 답장 메시지 수신

  • STOMP SEND Destination: /user/queue/chat/direct

  • Response:

{
  "messageId": "testMessageId4",
  "chatRoomId": "testChatRoomId4",
  "chatRoomType": "direct",
  "senderId": "someUserId",
  "type": "reply",
  "text": "이곳에 실제 메시지 내용",
  "timestamp": "2025-02-13 10:00:00",
  "seqNumber": 4,
  "parentMessageId": "testParentMessageId",
  "parentSeqNumber": 3,
  "parentMessageText": "부모 메시지 내용"
}
응답 필드 설명

messageId

메시지 ID

chatRoomId

채팅방 ID

chatRoomType

채팅방 타입 (direct, group)

senderId

보낸 사람 ID

type

메시지 타입 (reply)

text

메시지 내용

timestamp

메시지 생성 시간

seqNumber

메시지 순번

parentMessageId

부모 메시지 ID

parentSeqNumber

부모 메시지 순번

parentMessageText

부모 메시지 내용

4.5 개인 채팅방 에러 메시지 수신

  • STOMP SEND Destination: /user/queue/chat/direct

  • Response:

{
  "chatRoomId": "testChatRoomId5",
  "chatRoomType": "direct",
  "senderId": "someUserId",
  "type": "error",
  "timestamp": "2025-02-13 10:00:00",
  "errorCode": "ERR-001",
  "errorMessage": "에러 메시지 내용"
}
응답 필드 설명

chatRoomId

채팅방 ID

chatRoomType

채팅방 타입 (direct, group)

senderId

보낸 사람 ID

type

메시지 타입 (error)

timestamp

메시지 생성 시간

errorCode

에러 코드

errorMessage

에러 메시지 내용

4.6 개인 채팅방 댓글 메시지 수신

  • STOMP SEND Destination: /user/queue/chat/direct

  • Response:

{
  "messageId": "testMessageId2",
  "chatRoomId": "testChatRoomId2",
  "chatRoomType": "group",
  "senderId": "someUserId",
  "type": "comment",
  "timestamp": "2025-02-13 10:00:00",
  "seqNumber": 2,
  "files" : {
    "fileType": "image/png",
    "fileUrl": "http://some-url.com/some-image.jpg",
    "fileName": "some-image.jpg"
  },
  "comment" : "comment",
  "feedId" : "testFeedId",
  "feedType" : "file/text_blue/text_sky",
  "content" : "testFeedContent"
}
응답 필드 설명

messageId

메시지 ID

chatRoomId

채팅방 ID

chatRoomType

채팅방 타입 (direct, group)

senderId

보낸 사람 ID

type

메시지 타입 (file)

timestamp

메시지 생성 시간

seqNumber

메시지 순번

files

피드 파일 정보

fileType

파일 타입

fileUrl

파일 URL

fileName

파일 이름

comment

댓글 내용

feedId

피드 ID

feedType

피드 타입

content

피드 내용

5. 그룹 채팅방 STOMP 메시지 수신

그룹 채팅방에서 7가지 메시지 수신을 확인할 수 있습니다.

개인 채팅방 메시지는 서버가 /user/queue/chat/group 경로로 발행하며, 클라이언트는 해당 경로를 SUBSCRIBE해야 수신할 수 있습니다.

메시지 타입 설명

Normal

일반 텍스트 메시지

File

파일(이미지, 문서 등) 전송 메시지

Delete

메시지 삭제 알림

Reply

답장(Reply) 메시지

Invite

그룹 채팅방 초대 메시지

Leave

그룹 채팅방 나감 메시지

Error

에러 상태 전달 (예: 권한 없음, 유효성 오류 등)

5.1 그룹 채팅방 일반 메시지 수신

  • STOMP SEND Destination: /user/queue/chat/group

  • Response:

{
  "messageId": "testMessageId1",
  "chatRoomId": "testChatRoomId1",
  "chatRoomType": "group",
  "senderId": "someUserId",
  "type": "normal",
  "text": "이곳에 실제 메시지 내용",
  "timestamp": "2025-02-13 10:00:00",
  "seqNumber": 1
}
응답 필드 설명

messageId

메시지 ID

chatRoomId

채팅방 ID

chatRoomType

채팅방 타입 (direct, group)

senderId

보낸 사람 ID

type

메시지 타입 (normal, file, delete, reply, error)

text

메시지 내용

timestamp

메시지 생성 시간

seqNumber

메시지 순번

5.2 그룹 채팅방 파일 메시지 수신

  • STOMP SEND Destination: /user/queue/chat/group

  • Response:

{
  "messageId": "testMessageId2",
  "chatRoomId": "testChatRoomId2",
  "chatRoomType": "group",
  "senderId": "someUserId",
  "type": "file",
  "timestamp": "2025-02-13 10:00:00",
  "seqNumber": 2,
  "files" : {
    "fileType": "image/png",
    "fileUrl": "http://some-url.com/some-image.jpg",
    "fileName": "some-image.jpg"
  }
}
응답 필드 설명

messageId

메시지 ID

chatRoomId

채팅방 ID

chatRoomType

채팅방 타입 (direct, group)

senderId

보낸 사람 ID

type

메시지 타입 (normal, file, delete, reply, error)

timestamp

메시지 생성 시간

seqNumber

메시지 순번

files

파일 정보

fileType

파일 타입

fileUrl

파일 URL

fileName

파일 이름

5.3 그룹 채팅방 삭제 메시지 수신

  • STOMP SEND Destination: /user/queue/chat/group

  • Response:

{
  "targetMessageId": "testMessageId3",
  "chatRoomId": "testChatRoomId3",
  "chatRoomType": "group",
  "senderId": "someUserId",
  "type": "delete",
  "timestamp": "2025-02-13 10:00:00",
  "seqNumber": 3
}
응답 필드 설명

targetMessageId

삭제 대상 메시지 ID

chatRoomId

채팅방 ID

chatRoomType

채팅방 타입 (direct, group)

senderId

보낸 사람 ID

type

메시지 타입 (normal, file, delete, reply, error)

timestamp

메시지 생성 시간

seqNumber

메시지 순번

5.4 그룹 채팅방 답장 메시지 수신

  • STOMP SEND Destination: /user/queue/chat/group

  • Response:

{
  "messageId": "testMessageId4",
  "chatRoomId": "testChatRoomId4",
  "chatRoomType": "group",
  "senderId": "someUserId",
  "type": "reply",
  "text": "이곳에 실제 메시지 내용",
  "timestamp": "2025-02-13 10:00:00",
  "seqNumber": 4,
  "parentMessageId": "testParentMessageId",
  "parentSeqNumber": 3,
  "parentMessageText": "부모 메시지 내용"
}
응답 필드 설명

messageId

메시지 ID

chatRoomId

채팅방 ID

chatRoomType

채팅방 타입 (direct, group)

senderId

보낸 사람 ID

type

메시지 타입 (normal, file, delete, reply, error)

text

메시지 내용

timestamp

메시지 생성 시간

seqNumber

메시지 순번

parentMessageId

부모 메시지 ID

parentSeqNumber

부모 메시지 순번

parentMessageText

부모 메시지 내용

5.5 그룹 채팅방 초대 메시지 수신

  • STOMP SEND Destination: /user/queue/chat/group

  • Response:

{
  "messageId": "testMessageId5",
  "chatRoomId": "testChatRoomId5",
  "chatRoomType": "group",
  "senderId": "someUserId",
  "type": "invite",
  "timestamp": "2025-02-13 10:00:00",
  "invitedUserId": "someInvitedUserId"
}
응답 필드 설명

messageId

메시지 ID

chatRoomId

채팅방 ID

chatRoomType

채팅방 타입 (direct, group)

senderId

보낸 사람 ID

type

메시지 타입 (normal, file, delete, reply, error)

timestamp

메시지 생성 시간

invitedUserId

초대된 사용자 ID

5.6 그룹 채팅방 나감 메시지 수신

  • STOMP SEND Destination: /user/queue/chat/group

  • Response:

{
  "messageId": "testMessageId6",
  "chatRoomId": "testChatRoomId6",
  "chatRoomType": "group",
  "senderId": "someUserId",
  "type": "leave",
  "timestamp": "2025-02-13 10:00:00",
  "seqNumber": 6
}
응답 필드 설명

messageId

메시지 ID

chatRoomId

채팅방 ID

chatRoomType

채팅방 타입 (direct, group)

senderId

보낸 사람 ID

type

메시지 타입 (normal, file, delete, reply, error)

timestamp

메시지 생성 시간

seqNumber

메시지 순번

5.7 그룹 채팅방 에러 메시지 수신

  • STOMP SEND Destination: /user/queue/chat/group

  • Response:

{
  "chatRoomId": "testChatRoomId7",
  "chatRoomType": "group",
  "senderId": "someUserId",
  "type": "error",
  "timestamp": "2025-02-13 10:00:00",
  "errorCode": "ERR-001",
  "errorMessage": "에러 메시지 내용"
}
응답 필드 설명

chatRoomId

채팅방 ID

chatRoomType

채팅방 타입 (direct, group)

senderId

보낸 사람 ID

type

메시지 타입 (normal, file, delete, reply, error)

timestamp

메시지 생성 시간

errorCode

에러 코드

errorMessage

에러 메시지 내용

6. 에러 메시지 종류

에러 메시지는 다음과 같은 종류가 있습니다.

에러 코드 에러 메시지 설명 CHATROOM_READ_FAILED 채팅방 읽음처리 실패 채팅방 읽음처리 실패했을 때 발생 CHATLOG_DELETE_MESSAGE_TIME_LIMIT 채팅방 삭제 실패 채팅방 삭제 실패했을 때 발생 시간초과 CHATROOM_NOT_FOUND 채팅방을 찾을 수 없음 채팅방을 찾을 수 없을 때 발생

Chat API

1. 개인 채팅 파일 업로드 02/17 수정

요청(Request)

POST /api/chat/direct/file/upload?chatRoomId=testChatRoomId HTTP/1.1
Content-Type: multipart/form-data;charset=ISO-8859-1; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Type: multipart/form-data; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Authorization: Bearer accessToken
Host: 118.67.142.14

--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=files; filename=0.jpg
Content-Type: image/jpeg

???JFIF??C		

 $.' ",#(7),01444'9=82<.342??C			

2!!22222222222222222222222222222222222222222222222222??dd"??
???}!1AQa"q2��?#B��R��$3br?
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz������������������������������������������������������������������������??
???w!1AQaq"2?B����	#3R?br?
$4?%?&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz������������������������������������������������������������������������???��(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(????
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=files; filename=1.jpg
Content-Type: image/jpeg

???JFIF??C		

 $.' ",#(7),01444'9=82<.342??C			

2!!22222222222222222222222222222222222222222222222222??dd"??
???}!1AQa"q2��?#B��R��$3br?
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz������������������������������������������������������������������������??
???w!1AQaq"2?B����	#3R?br?
$4?%?&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz������������������������������������������������������������������������???��(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(????
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--

요청헤더(Request Headers)

Name Description

Authorization

Bearer 액세스 토큰

요청 파트 설명(Request Parts)

Part Description

files

채팅방에 추가할 이미지 파일 (image/jpeg) - 형식은 0.jpg, 1.jpg, …​

요청 쿼리 파라미터 설명(Request Query Parameters)

Parameter Description

chatRoomId

채팅방 ID

응답(Response)

HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 75

{
  "status" : 201,
  "data" : {
    "message" : "생성 완료"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.message

String

성공 메시지

2. 그룹 채팅 파일 업로드 02/17 수정

요청(Request)

POST /api/chat/group/file/upload?chatRoomId=testChatRoomId HTTP/1.1
Content-Type: multipart/form-data;charset=ISO-8859-1; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Type: multipart/form-data; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Authorization: Bearer accessToken
Host: 118.67.142.14

--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=files; filename=0.jpg
Content-Type: image/jpeg

???JFIF??C		

 $.' ",#(7),01444'9=82<.342??C			

2!!22222222222222222222222222222222222222222222222222??dd"??
???}!1AQa"q2��?#B��R��$3br?
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz������������������������������������������������������������������������??
???w!1AQaq"2?B����	#3R?br?
$4?%?&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz������������������������������������������������������������������������???��(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(????
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=files; filename=1.jpg
Content-Type: image/jpeg

???JFIF??C		

 $.' ",#(7),01444'9=82<.342??C			

2!!22222222222222222222222222222222222222222222222222??dd"??
???}!1AQa"q2��?#B��R��$3br?
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz������������������������������������������������������������������������??
???w!1AQaq"2?B����	#3R?br?
$4?%?&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz������������������������������������������������������������������������???��(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(????
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--

요청헤더(Request Headers)

Name Description

Authorization

Bearer 액세스 토큰

요청 파트 설명(Request Parts)

Part Description

files

채팅방에 추가할 이미지 파일 (image/jpeg) - 형식은 0.jpg, 1.jpg, …​

요청 쿼리 파라미터 설명(Request Query Parameters)

Parameter Description

chatRoomId

채팅방 ID

응답(Response)

HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 75

{
  "status" : 201,
  "data" : {
    "message" : "생성 완료"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.message

String

성공 메시지

3. 비고(설명) 02/17 수정

  • 파일 업로드 요청(API)에서는 업로드 성공 여부와 파일 관련 정보만 반환됩니다.

  • 업로드 후 실제 채팅 메시지 생성 및 그에 따른 messageId 등 추가 정보는 서버에서 WebSocket을 통해 전달됩니다.

  • 따라서 클라이언트는 업로드 API 응답만 확인하는 것이 아니라, WebSocket 메시지를 통해 최종 채팅 메시지 정보를 수신해야 합니다.

Chat Room API

1. 채팅방 목록 조회

요청(Request)

GET /api/chatRoom/list HTTP/1.1
Content-Type: multipart/form-data;charset=ISO-8859-1
Content-Type: multipart/form-data
Authorization: Bearer accessToken
Host: 118.67.142.14

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1133

{
  "status" : 200,
  "data" : {
    "directChatRooms" : [ {
      "chatRoomId" : "testChatRoomId",
      "chatRoomSequenceNumber" : 1,
      "readSequenceNumber" : 0,
      "joinSequenceNumber" : 0,
      "latestChatLog" : {
        "messageId" : "messageId",
        "type" : "normal",
        "senderId" : "senderId",
        "timestamp" : "2026-04-24 09:55:38",
        "seqNumber" : 1,
        "text" : "text"
      },
      "chatRoomOwnStatus" : "normal",
      "friendId" : "testFriendId"
    } ],
    "groupChatRooms" : [ {
      "chatRoomId" : "testChatRoomId",
      "chatRoomName" : "testGroupName",
      "readSequenceNumber" : 0,
      "joinSequenceNumber" : 0,
      "chatRoomSequenceNumber" : 1,
      "latestChatLog" : {
        "messageId" : "messageId",
        "type" : "normal",
        "senderId" : "senderId",
        "timestamp" : "2026-04-24 09:55:38",
        "seqNumber" : 1,
        "text" : "text"
      },
      "chatRoomOwnStatus" : "normal",
      "friendInfos" : [ {
        "friendId" : "testFriendId",
        "friendStatus" : "normal"
      } ]
    } ]
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

응답 상태 코드

data.directChatRooms

Array

1:1 채팅방 목록

data.groupChatRooms

Array

그룹 채팅방 목록

data.directChatRooms[].chatRoomId

String

채팅방 ID

data.directChatRooms[].chatRoomSequenceNumber

Number

채팅방 시퀀스 번호

data.directChatRooms[].readSequenceNumber

Number

읽은 시퀀스 번호

data.directChatRooms[].joinSequenceNumber

Number

참여한 시퀀스 번호

data.directChatRooms[].latestChatLog.messageId

String

채팅 메시지 ID

data.directChatRooms[].latestChatLog.type

String

채팅 메시지 타입(Reply, File, Normal)

data.directChatRooms[].latestChatLog.senderId

String

보낸 사람 ID

data.directChatRooms[].latestChatLog.timestamp

String

보낸 시간

data.directChatRooms[].latestChatLog.seqNumber

Number

메시지 시퀀스 번호

data.directChatRooms[].latestChatLog.text

String

메시지 내용

data.directChatRooms[].chatRoomOwnStatus

String

채팅방 멤버 상태

data.directChatRooms[].friendId

String

친구 ID

data.groupChatRooms[].chatRoomId

String

채팅방 ID

data.groupChatRooms[].chatRoomName

String

채팅방 이름

data.groupChatRooms[].chatRoomSequenceNumber

Number

채팅방 시퀀스 번호

data.groupChatRooms[].readSequenceNumber

Number

읽은 시퀀스 번호

data.groupChatRooms[].joinSequenceNumber

Number

참여한 시퀀스 번호

data.groupChatRooms[].latestChatLog.messageId

String

채팅 메시지 ID

data.groupChatRooms[].latestChatLog.type

String

채팅 메시지 타입(Reply, Leave, Invite, File, Normal)

data.groupChatRooms[].latestChatLog.senderId

String

보낸 사람 ID

data.groupChatRooms[].latestChatLog.timestamp

String

보낸 시간

data.groupChatRooms[].latestChatLog.seqNumber

Number

메시지 시퀀스 번호

data.groupChatRooms[].latestChatLog.text

String

메시지 내용

data.groupChatRooms[].chatRoomOwnStatus

String

채팅방 멤버 상태

data.groupChatRooms[].friendInfos[].friendId

String

친구 ID(본인제외)

data.groupChatRooms[].friendInfos[].friendStatus

String

친구 상태

2. 개인 채팅방 가져오기(채팅하기 클릭시 친구 관계를 통해)

요청(Request)

GET /api/chatRoom/direct/relation/testFriendId HTTP/1.1
Content-Type: multipart/form-data;charset=ISO-8859-1
Content-Type: multipart/form-data
Authorization: Bearer accessToken
Host: 118.67.142.14

경로 파라미터 설명(Path Parameters)

Table 4. /api/chatRoom/direct/relation/{friendId}
Parameter Description

friendId

친구 ID

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 247

{
  "status" : 200,
  "data" : {
    "chatRoomId" : "testChatRoomId",
    "chatRoomSequenceNumber" : 1,
    "chatRoomOwnStatus" : "normal",
    "friendId" : "testFriendId",
    "readSequenceNumber" : 0,
    "joinSequenceNumber" : 0
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

응답 상태 코드

data.chatRoomId

String

채팅방 ID

data.chatRoomSequenceNumber

Number

채팅방 시퀀스 번호

data.readSequenceNumber

Number

읽은 시퀀스 번호

data.joinSequenceNumber

Number

참여한 시퀀스 번호

data.chatRoomOwnStatus

String

채팅방 멤버 상태

data.friendId

String

친구 ID

3. 그룹 채팅방 생성하기

요청(Request)

POST /api/chatRoom/group/create HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Content-Length: 82
Host: 118.67.142.14

{
  "friendIds" : [ "testFriendId1", "testFriendId2" ],
  "name" : "testName"
}

요청 필드 설명(Request Fields)

Path Type Description

friendIds

Array

친구 ID 목록

name

String

그룹 채팅방 이름

응답(Response)

HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 593

{
  "status" : 201,
  "data" : {
    "chatRoomId" : "testChatRoomId",
    "chatRoomName" : "testGroupName",
    "readSequenceNumber" : 0,
    "joinSequenceNumber" : 0,
    "chatRoomSequenceNumber" : 1,
    "latestChatLog" : {
      "messageId" : "messageId",
      "type" : "invite",
      "senderId" : "senderId",
      "timestamp" : "2026-04-24 09:55:36",
      "seqNumber" : 1,
      "targetUserIds" : [ "targetUserId" ]
    },
    "chatRoomOwnStatus" : "normal",
    "friendInfos" : [ {
      "friendId" : "testFriendId",
      "friendStatus" : "normal"
    } ]
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

응답 상태 코드

data.chatRoomId

String

채팅방 ID

data.chatRoomSequenceNumber

Number

채팅방 시퀀스 번호

data.readSequenceNumber

Number

읽은 시퀘스 번호

data.joinSequenceNumber

Number

참여한 시퀀스 번호

data.chatRoomOwnStatus

String

채팅방 멤버 상태

data.chatRoomName

String

채팅방 이름

data.latestChatLog.messageId

String

채팅 메시지 ID

data.latestChatLog.type

String

채팅 메시지 타입(Invite)

data.latestChatLog.senderId

String

보낸 사람 ID

data.latestChatLog.timestamp

String

보낸 시간

data.latestChatLog.seqNumber

Number

메시지 시퀀스 번호

data.latestChatLog.targetUserIds

Array

초대된 사용자 ID 목록

data.friendInfos[].friendId

String

친구 ID(본인제외)

data.friendInfos[].friendStatus

String

친구 상태

4. 일반 채팅방 매시지 보낼때 생성하기

요청(Request)

POST /api/chatRoom/direct/create/common HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Content-Length: 65
Host: 118.67.142.14

{
  "friendId" : "testFriendId",
  "message" : "testMessage"
}

요청 필드 설명(Request Fields)

Path Type Description

friendId

String

친구 ID

message

String

메시지

응답(Response)

HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 463

{
  "status" : 201,
  "data" : {
    "chatRoomId" : "testChatRoomId",
    "chatRoomSequenceNumber" : 1,
    "readSequenceNumber" : 0,
    "joinSequenceNumber" : 0,
    "latestChatLog" : {
      "messageId" : "messageId",
      "type" : "normal",
      "senderId" : "senderId",
      "timestamp" : "2026-04-24 09:55:37",
      "seqNumber" : 1,
      "text" : "text"
    },
    "chatRoomOwnStatus" : "normal",
    "friendId" : "testFriendId"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

응답 상태 코드

data.chatRoomId

String

채팅방 ID

data.chatRoomSequenceNumber

Number

채팅방 시퀀스 번호

data.readSequenceNumber

Number

읽은 시퀘스 번호

data.joinSequenceNumber

Number

참여한 시퀀스 번호

data.chatRoomOwnStatus

String

채팅방 멤버 상태

data.friendId

String

친구 ID

data.latestChatLog.messageId

String

채팅 메시지 ID

data.latestChatLog.type

String

채팅 메시지 타입(Normal)

data.latestChatLog.senderId

String

보낸 사람 ID

data.latestChatLog.timestamp

String

보낸 시간

data.latestChatLog.seqNumber

Number

메시지 시퀀스 번호

data.latestChatLog.text

String

메시지 내용

5. 일반 채팅방 파일 보낼때 생성하기

요청(Request)

POST /api/chatRoom/direct/create/files?friendId=testFriendId HTTP/1.1
Content-Type: multipart/form-data;charset=ISO-8859-1; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Type: multipart/form-data; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Authorization: Bearer accessToken
Host: 118.67.142.14

--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=files; filename=0.jpg
Content-Type: image/jpeg

???JFIF??C		

 $.' ",#(7),01444'9=82<.342??C			

2!!22222222222222222222222222222222222222222222222222??dd"??
???}!1AQa"q2��?#B��R��$3br?
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz������������������������������������������������������������������������??
???w!1AQaq"2?B����	#3R?br?
$4?%?&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz������������������������������������������������������������������������???��(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(????
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=files; filename=1.jpg
Content-Type: image/jpeg

???JFIF??C		

 $.' ",#(7),01444'9=82<.342??C			

2!!22222222222222222222222222222222222222222222222222??dd"??
???}!1AQa"q2��?#B��R��$3br?
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz������������������������������������������������������������������������??
???w!1AQaq"2?B����	#3R?br?
$4?%?&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz������������������������������������������������������������������������???��(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(????
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--

요청 파트 설명(Request Parts)

Part Description

files

채팅방에 추가할 이미지 파일 (image/jpeg) - 형식은 0.jpg, 1.jpg, …​

요청 쿼리 파라미터 설명(Request Query Parameters)

Parameter Description

friendId

친구 ID

응답(Response)

HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 566

{
  "status" : 201,
  "data" : {
    "chatRoomId" : "testChatRoomId",
    "chatRoomSequenceNumber" : 1,
    "readSequenceNumber" : 0,
    "joinSequenceNumber" : 0,
    "latestChatLog" : {
      "messageId" : "messageId",
      "type" : "file",
      "senderId" : "senderId",
      "timestamp" : "2026-04-24 09:55:33",
      "seqNumber" : 1,
      "files" : [ {
        "fileType" : "image/png",
        "fileUrl" : "www.example.com",
        "index" : 0
      } ]
    },
    "chatRoomOwnStatus" : "normal",
    "friendId" : "testFriendId"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

응답 상태 코드

data.chatRoomId

String

채팅방 ID

data.chatRoomSequenceNumber

Number

채팅방 시퀀스 번호

data.readSequenceNumber

Number

읽은 시퀘스 번호

data.joinSequenceNumber

Number

참여한 시퀀스 번호

data.chatRoomOwnStatus

String

채팅방 멤버 상태

data.friendId

String

친구 ID

data.latestChatLog.messageId

String

채팅 메시지 ID

data.latestChatLog.type

String

채팅 메시지 타입(file)

data.latestChatLog.senderId

String

보낸 사람 ID

data.latestChatLog.timestamp

String

보낸 시간

data.latestChatLog.seqNumber

Number

메시지 시퀀스 번호

data.latestChatLog.files[].fileType

String

파일 타입

data.latestChatLog.files[].fileUrl

String

파일 URL

data.latestChatLog.files[].index

Number

파일 인덱스

6. 개인 채팅방 삭제하기

요청(Request)

DELETE /api/chatRoom/direct/delete HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Content-Length: 39
Host: 118.67.142.14

{
  "chatRoomId" : "testChatRoomId"
}

요청 필드 설명(Request Fields)

Path Type Description

chatRoomId

String

채팅방 ID

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68

{
  "status" : 200,
  "data" : {
    "message" : "성공"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.message

String

성공 메시지

7. 그룹 채팅방 나가기

요청(Request)

DELETE /api/chatRoom/group/leave HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Content-Length: 39
Host: 118.67.142.14

{
  "chatRoomId" : "testChatRoomId"
}

요청 필드 설명(Request Fields)

Path Type Description

chatRoomId

String

채팅방 ID

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68

{
  "status" : 200,
  "data" : {
    "message" : "성공"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.message

String

성공 메시지

8. 그룹 채팅방 초대하기

요청(Request)

POST /api/chatRoom/group/invite HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Content-Length: 71
Host: 118.67.142.14

{
  "chatRoomId" : "testChatRoomId",
  "friendId" : "testFriendId"
}

요청 필드 설명(Request Fields)

Path Type Description

chatRoomId

String

채팅방 ID

friendId

String

친구 ID

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68

{
  "status" : 200,
  "data" : {
    "message" : "성공"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.message

String

성공 메시지

9. 개인 채팅방 즐겨찾기 변경하기

요청(Request)

PUT /api/chatRoom/direct/favorite HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Content-Length: 61
Host: 118.67.142.14

{
  "chatRoomId" : "testChatRoomId",
  "favorite" : true
}

요청 필드 설명(Request Fields)

Path Type Description

chatRoomId

String

채팅방 ID

favorite

Boolean

즐겨찾기 여부

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68

{
  "status" : 200,
  "data" : {
    "message" : "성공"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.message

String

성공 메시지

10. 그룹 채팅방 즐겨찾기 변경하기

요청(Request)

PUT /api/chatRoom/group/favorite HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Content-Length: 61
Host: 118.67.142.14

{
  "chatRoomId" : "testChatRoomId",
  "favorite" : true
}

요청 필드 설명(Request Fields)

Path Type Description

chatRoomId

String

채팅방 ID

favorite

Boolean

즐겨찾기 여부

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68

{
  "status" : 200,
  "data" : {
    "message" : "성공"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.message

String

성공 메시지

11. 채팅방 검색

요청(Request)

GET /api/chatRoom/search?friendIds=testFriendId&friendIds=testFriendId2 HTTP/1.1
Content-Type: multipart/form-data;charset=ISO-8859-1
Content-Type: multipart/form-data
Authorization: Bearer accessToken
Host: 118.67.142.14

쿼리 파라미터 설명(Query Parameters)

Parameter Description

friendIds

친구 ID 목록

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1133

{
  "status" : 200,
  "data" : {
    "directChatRooms" : [ {
      "chatRoomId" : "testChatRoomId",
      "chatRoomSequenceNumber" : 1,
      "readSequenceNumber" : 0,
      "joinSequenceNumber" : 0,
      "latestChatLog" : {
        "messageId" : "messageId",
        "type" : "normal",
        "senderId" : "senderId",
        "timestamp" : "2026-04-24 09:55:31",
        "seqNumber" : 1,
        "text" : "text"
      },
      "chatRoomOwnStatus" : "normal",
      "friendId" : "testFriendId"
    } ],
    "groupChatRooms" : [ {
      "chatRoomId" : "testChatRoomId",
      "chatRoomName" : "testGroupName",
      "readSequenceNumber" : 0,
      "joinSequenceNumber" : 0,
      "chatRoomSequenceNumber" : 1,
      "latestChatLog" : {
        "messageId" : "messageId",
        "type" : "normal",
        "senderId" : "senderId",
        "timestamp" : "2026-04-24 09:55:31",
        "seqNumber" : 1,
        "text" : "text"
      },
      "chatRoomOwnStatus" : "normal",
      "friendInfos" : [ {
        "friendId" : "testFriendId",
        "friendStatus" : "normal"
      } ]
    } ]
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

응답 상태 코드

data.directChatRooms

Array

1:1 채팅방 목록

data.groupChatRooms

Array

그룹 채팅방 목록

data.directChatRooms[].chatRoomId

String

채팅방 ID

data.directChatRooms[].chatRoomSequenceNumber

Number

채팅방 시퀀스 번호

data.directChatRooms[].readSequenceNumber

Number

읽은 시퀀스 번호

data.directChatRooms[].joinSequenceNumber

Number

참여한 시퀀스 번호

data.directChatRooms[].latestChatLog.messageId

String

채팅 메시지 ID

data.directChatRooms[].latestChatLog.type

String

채팅 메시지 타입(Reply, File, Normal)

data.directChatRooms[].latestChatLog.senderId

String

보낸 사람 ID

data.directChatRooms[].latestChatLog.timestamp

String

보낸 시간

data.directChatRooms[].latestChatLog.seqNumber

Number

메시지 시퀀스 번호

data.directChatRooms[].latestChatLog.text

String

메시지 내용

data.directChatRooms[].chatRoomOwnStatus

String

채팅방 멤버 상태

data.directChatRooms[].friendId

String

친구 ID

data.groupChatRooms[].chatRoomId

String

채팅방 ID

data.groupChatRooms[].chatRoomName

String

채팅방 이름

data.groupChatRooms[].chatRoomSequenceNumber

Number

채팅방 시퀀스 번호

data.groupChatRooms[].readSequenceNumber

Number

읽은 시퀀스 번호

data.groupChatRooms[].joinSequenceNumber

Number

참여한 시퀀스 번호

data.groupChatRooms[].latestChatLog.messageId

String

채팅 메시지 ID

data.groupChatRooms[].latestChatLog.type

String

채팅 메시지 타입(Reply, Leave, Invite, File, Normal)

data.groupChatRooms[].latestChatLog.senderId

String

보낸 사람 ID

data.groupChatRooms[].latestChatLog.timestamp

String

보낸 시간

data.groupChatRooms[].latestChatLog.seqNumber

Number

메시지 시퀀스 번호

data.groupChatRooms[].latestChatLog.text

String

메시지 내용

data.groupChatRooms[].chatRoomOwnStatus

String

채팅방 멤버 상태

data.groupChatRooms[].friendInfos[].friendId

String

친구 ID(본인제외)

data.groupChatRooms[].friendInfos[].friendStatus

String

친구 상태

12. 개인 채팅방 정보 가져오기(채팅방 아이디로 가져오기)

요청(Request)

GET /api/chatRoom/direct/testChatRoomId HTTP/1.1
Content-Type: multipart/form-data;charset=ISO-8859-1
Content-Type: multipart/form-data
Authorization: Bearer accessToken
Host: 118.67.142.14

경로 파라미터 설명(Path Parameters)

Table 5. /api/chatRoom/direct/{chatRoomId}
Parameter Description

chatRoomId

채팅방 ID

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 463

{
  "status" : 200,
  "data" : {
    "chatRoomId" : "testChatRoomId",
    "chatRoomSequenceNumber" : 1,
    "readSequenceNumber" : 0,
    "joinSequenceNumber" : 0,
    "latestChatLog" : {
      "messageId" : "messageId",
      "type" : "normal",
      "senderId" : "senderId",
      "timestamp" : "2026-04-24 09:55:35",
      "seqNumber" : 1,
      "text" : "text"
    },
    "chatRoomOwnStatus" : "normal",
    "friendId" : "testFriendId"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

응답 상태 코드

data.chatRoomId

String

채팅방 ID

data.chatRoomSequenceNumber

Number

채팅방 시퀀스 번호

data.readSequenceNumber

Number

읽은 시퀘스 번호

data.joinSequenceNumber

Number

참여한 시퀀스 번호

data.latestChatLog.messageId

String

채팅 메시지 ID

data.latestChatLog.type

String

채팅 메시지 타입(Normal)

data.latestChatLog.senderId

String

보낸 사람 ID

data.latestChatLog.timestamp

String

보낸 시간

data.latestChatLog.seqNumber

Number

메시지 시퀀스 번호

data.latestChatLog.text

String

메시지 내용

data.chatRoomOwnStatus

String

채팅방 멤버 상태

data.friendId

String

친구 ID

13. 그룹 채팅방 정보 가져오기(채팅방 아이디로 가져오기)

요청(Request)

GET /api/chatRoom/group/testGroupRoomId HTTP/1.1
Content-Type: multipart/form-data;charset=ISO-8859-1
Content-Type: multipart/form-data
Authorization: Bearer accessToken
Host: 118.67.142.14

경로 파라미터 설명(Path Parameters)

Table 6. /api/chatRoom/group/{chatRoomId}
Parameter Description

chatRoomId

그룹 채팅방 ID

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 573

{
  "status" : 200,
  "data" : {
    "chatRoomId" : "testGroupRoomId",
    "chatRoomName" : "testGroupName",
    "readSequenceNumber" : 0,
    "joinSequenceNumber" : 0,
    "chatRoomSequenceNumber" : 1,
    "latestChatLog" : {
      "messageId" : "messageId",
      "type" : "normal",
      "senderId" : "senderId",
      "timestamp" : "2026-04-24 09:55:29",
      "seqNumber" : 1,
      "text" : "text"
    },
    "chatRoomOwnStatus" : "normal",
    "friendInfos" : [ {
      "friendId" : "testFriendId",
      "friendStatus" : "normal"
    } ]
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

응답 상태 코드

data.chatRoomId

String

채팅방 ID

data.chatRoomName

String

채팅방 이름

data.chatRoomSequenceNumber

Number

채팅방 시퀀스 번호

data.readSequenceNumber

Number

읽은 시퀀스 번호

data.joinSequenceNumber

Number

참여한 시퀀스 번호

data.latestChatLog.messageId

String

최신 채팅 로그 ID

data.latestChatLog.type

String

최신 채팅 로그 타입

data.latestChatLog.senderId

String

메시지 발신자 ID

data.latestChatLog.timestamp

String

메시지 전송 시간

data.latestChatLog.seqNumber

Number

메시지 시퀀스 번호

data.latestChatLog.text

String

메시지 내용

data.chatRoomOwnStatus

String

채팅방 나의 현재 상태(NORMAL, FAVORITE)

data.friendInfos[].friendId

String

친구 ID

data.friendInfos[].friendStatus

String

친구 상태

14. 그룹 채팅방 이름 수정하기

요청(Request)

PUT /api/chatRoom/group/name HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Content-Length: 76
Host: 118.67.142.14

{
  "chatRoomId" : "testChatRoomId",
  "name" : "testGroupChatRoomName"
}

요청 필드 설명(Request Fields)

Path Type Description

chatRoomId

String

채팅방 ID

name

String

변경할 채팅방 이름

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68

{
  "status" : 200,
  "data" : {
    "message" : "성공"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.message

String

성공 메시지

Chat Log API

1. 개인 채팅방 로그 목록 조회 02/17 수정

요청(Request)

GET /api/chatRoom/testChatRoomId/direct/log?sequenceNumber=100 HTTP/1.1
Content-Type: multipart/form-data;charset=ISO-8859-1
Content-Type: multipart/form-data
Authorization: Bearer accessToken
Host: 118.67.142.14

요청 쿼리 파라미터 설명(Request Query Parameters)

Parameter Description

sequenceNumber

시퀀스 번호

요청 경로 파리미터 설명(Request Path Parameters)

Table 7. /api/chatRoom/{chatRoomId}/direct/log
Parameter Description

chatRoomId

채팅방 ID

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1350

{
  "status" : 200,
  "data" : {
    "chatLogs" : [ {
      "messageId" : "messageId",
      "type" : "file",
      "senderId" : "senderId",
      "timestamp" : "2026-04-24 09:59:37",
      "seqNumber" : 1,
      "files" : [ {
        "fileType" : "image/png",
        "fileUrl" : "www.example.com",
        "index" : 0
      } ]
    }, {
      "messageId" : "messageId",
      "type" : "reply",
      "senderId" : "senderId",
      "parentMessageId" : "parentMessageId",
      "parentSeqNumber" : 0,
      "parentMessageText" : "parentMessageText",
      "parentMessageType" : "reply",
      "timestamp" : "2026-04-24 09:59:37",
      "seqNumber" : 1,
      "text" : "text"
    }, {
      "messageId" : "messageId",
      "type" : "normal",
      "senderId" : "senderId",
      "timestamp" : "2026-04-24 09:59:37",
      "seqNumber" : 1,
      "text" : "text"
    }, {
      "messageId" : "messageId",
      "type" : "comment",
      "senderId" : "senderId",
      "timestamp" : "2026-04-24 09:59:37",
      "seqNumber" : 1,
      "text" : "comment",
      "files" : [ {
        "fileType" : "image/png",
        "fileUrl" : "www.example.com",
        "index" : 0
      } ],
      "feedId" : "feedId",
      "feedType" : "file",
      "content" : "content",
      "comment" : "comment"
    } ]
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.chatLogs[].messageId

String

메시지 ID (모든 타입 공통)

data.chatLogs[].type

String

메시지 타입: normal, file, reply, invite, leave

data.chatLogs[].senderId

String

보낸 사람 ID

data.chatLogs[].timestamp

String

보낸 시간(yyyy-MM-dd HH:mm:ss)

data.chatLogs[].seqNumber

Number

시퀀스 번호

data.chatLogs[].text

String

메시지 내용 (normal, reply 타입에서 사용)

data.chatLogs[].parentMessageId

String

부모 메시지 ID (reply 타입에서만 사용)

data.chatLogs[].parentSeqNumber

Number

부모 메시지 시퀀스 번호 (reply 타입에서만 사용)

data.chatLogs[].parentMessageText

String

부모 메시지 내용 (reply 타입에서만 사용)

data.chatLogs[].parentMessageType

String

부모 메시지 타입 (reply 타입에서만 사용)

data.chatLogs[].files[].fileType

String

파일 타입 (file 메시지에서만 사용)

data.chatLogs[].files[].fileUrl

String

파일 URL (file 메시지에서만 사용)

data.chatLogs[].files[].index

Number

파일 인덱스 (file 메시지에서만 사용)

data.chatLogs[].comment

String

댓글 내용 (comment 메시지에서만 사용)

data.chatLogs[].feedId

String

피드 ID (comment 메시지에서만 사용)

data.chatLogs[].feedType

String

피드 타입 (comment 메시지에서만 사용)

data.chatLogs[].content

String

컨텐츠 (comment 메시지에서만 사용)

2. 그룹 채팅방 로그 목록 조회 02/17 수정

요청(Request)

GET /api/chatRoom/testChatRoomId/group/log?sequenceNumber=100 HTTP/1.1
Content-Type: multipart/form-data;charset=ISO-8859-1
Content-Type: multipart/form-data
Authorization: Bearer accessToken
Host: 118.67.142.14

요청 쿼리 파라미터 설명(Request Query Parameters)

Parameter Description

sequenceNumber

시퀀스 번호

요청 경로 파리미터 설명(Request Path Parameters)

Table 8. /api/chatRoom/{chatRoomId}/group/log
Parameter Description

chatRoomId

채팅방 ID

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1290

{
  "status" : 200,
  "data" : {
    "chatLogs" : [ {
      "messageId" : "messageId",
      "type" : "file",
      "senderId" : "senderId",
      "timestamp" : "2026-04-24 09:59:36",
      "seqNumber" : 1,
      "files" : [ {
        "fileType" : "image/png",
        "fileUrl" : "www.example.com",
        "index" : 0
      } ]
    }, {
      "messageId" : "messageId",
      "type" : "reply",
      "senderId" : "senderId",
      "parentMessageId" : "parentMessageId",
      "parentSeqNumber" : 0,
      "parentMessageText" : "parentMessageText",
      "parentMessageType" : "reply",
      "timestamp" : "2026-04-24 09:59:36",
      "seqNumber" : 1,
      "text" : "text"
    }, {
      "messageId" : "messageId",
      "type" : "normal",
      "senderId" : "senderId",
      "timestamp" : "2026-04-24 09:59:36",
      "seqNumber" : 1,
      "text" : "text"
    }, {
      "messageId" : "messageId",
      "type" : "invite",
      "senderId" : "senderId",
      "timestamp" : "2026-04-24 09:59:36",
      "seqNumber" : 1,
      "targetUserIds" : [ "targetUserId" ]
    }, {
      "messageId" : "messageId",
      "type" : "leave",
      "senderId" : "senderId",
      "timestamp" : "2026-04-24 09:59:36",
      "seqNumber" : 1
    } ]
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.chatLogs[].messageId

String

메시지 ID (모든 타입 공통)

data.chatLogs[].type

String

메시지 타입: normal, file, reply, invite, leave

data.chatLogs[].senderId

String

보낸 사람 ID

data.chatLogs[].timestamp

String

보낸 시간(yyyy-MM-dd HH:mm:ss)

data.chatLogs[].seqNumber

Number

시퀀스 번호

data.chatLogs[].text

String

메시지 내용 (normal, reply 타입에서 사용)

data.chatLogs[].parentMessageId

String

부모 메시지 ID (reply 타입에서만 사용)

data.chatLogs[].parentSeqNumber

Number

부모 메시지 시퀀스 번호 (reply 타입에서만 사용)

data.chatLogs[].parentMessageText

String

부모 메시지 내용 (reply 타입에서만 사용)

data.chatLogs[].parentMessageType

String

부모 메시지 타입 (reply 타입에서만 사용)

data.chatLogs[].files[].fileType

String

파일 타입 (file 메시지에서만 사용)

data.chatLogs[].files[].fileUrl

String

파일 URL (file 메시지에서만 사용)

data.chatLogs[].files[].index

Number

파일 인덱스 (file 메시지에서만 사용)

data.chatLogs[].targetUserIds[]

Array

초대된 사용자 ID 리스트 (invite 메시지에서만 사용)

3. 개인 채팅방 로그 검색 02/17 수정

요청(Request)

GET /api/chatRoom/testChatRoomId/direct/log/search?keyword=keyword HTTP/1.1
Content-Type: multipart/form-data;charset=ISO-8859-1
Content-Type: multipart/form-data
Authorization: Bearer accessToken
Host: 118.67.142.14

요청 쿼리 파라미터 설명(Request Query Parameters)

Parameter Description

keyword

키워드

요청 경로 파리미터 설명(Request Path Parameters)

Table 9. /api/chatRoom/{chatRoomId}/direct/log/search
Parameter Description

chatRoomId

채팅방 ID

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 908

{
  "status" : 200,
  "data" : {
    "chatLogs" : [ {
      "messageId" : "messageId",
      "type" : "file",
      "senderId" : "senderId",
      "timestamp" : "2026-04-24 09:59:38",
      "seqNumber" : 1,
      "files" : [ {
        "fileType" : "image/png",
        "fileUrl" : "www.example.com",
        "index" : 0
      } ]
    }, {
      "messageId" : "messageId",
      "type" : "reply",
      "senderId" : "senderId",
      "parentMessageId" : "parentMessageId",
      "parentSeqNumber" : 0,
      "parentMessageText" : "parentMessageText",
      "parentMessageType" : "reply",
      "timestamp" : "2026-04-24 09:59:38",
      "seqNumber" : 1,
      "text" : "text"
    }, {
      "messageId" : "messageId",
      "type" : "normal",
      "senderId" : "senderId",
      "timestamp" : "2026-04-24 09:59:38",
      "seqNumber" : 1,
      "text" : "text"
    } ]
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.chatLogs[].messageId

String

메시지 ID (모든 타입 공통)

data.chatLogs[].type

String

메시지 타입: normal, file, reply, invite, leave

data.chatLogs[].senderId

String

보낸 사람 ID

data.chatLogs[].timestamp

String

보낸 시간(yyyy-MM-dd HH:mm:ss)

data.chatLogs[].seqNumber

Number

시퀀스 번호

data.chatLogs[].text

String

메시지 내용 (normal, reply 타입에서 사용)

data.chatLogs[].parentMessageId

String

부모 메시지 ID (reply 타입에서만 사용)

data.chatLogs[].parentSeqNumber

Number

부모 메시지 시퀀스 번호 (reply 타입에서만 사용)

data.chatLogs[].parentMessageText

String

부모 메시지 내용 (reply 타입에서만 사용)

data.chatLogs[].parentMessageType

String

부모 메시지 타입 (reply 타입에서만 사용)

data.chatLogs[].files[].fileType

String

파일 타입 (file 메시지에서만 사용)

data.chatLogs[].files[].fileUrl

String

파일 URL (file 메시지에서만 사용)

data.chatLogs[].files[].index

Number

파일 인덱스 (file 메시지에서만 사용)

4. 그룹 채팅방 로그 검색 02/17 수정

요청(Request)

GET /api/chatRoom/testChatRoomId/group/log/search?keyword=keyword HTTP/1.1
Content-Type: multipart/form-data;charset=ISO-8859-1
Content-Type: multipart/form-data
Authorization: Bearer accessToken
Host: 118.67.142.14

요청 쿼리 파라미터 설명(Request Query Parameters)

Parameter Description

keyword

키워드

요청 경로 파리미터 설명(Request Path Parameters)

Table 10. /api/chatRoom/{chatRoomId}/group/log/search
Parameter Description

chatRoomId

채팅방 ID

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 908

{
  "status" : 200,
  "data" : {
    "chatLogs" : [ {
      "messageId" : "messageId",
      "type" : "file",
      "senderId" : "senderId",
      "timestamp" : "2026-04-24 09:59:39",
      "seqNumber" : 1,
      "files" : [ {
        "fileType" : "image/png",
        "fileUrl" : "www.example.com",
        "index" : 0
      } ]
    }, {
      "messageId" : "messageId",
      "type" : "reply",
      "senderId" : "senderId",
      "parentMessageId" : "parentMessageId",
      "parentSeqNumber" : 0,
      "parentMessageText" : "parentMessageText",
      "parentMessageType" : "reply",
      "timestamp" : "2026-04-24 09:59:39",
      "seqNumber" : 1,
      "text" : "text"
    }, {
      "messageId" : "messageId",
      "type" : "normal",
      "senderId" : "senderId",
      "timestamp" : "2026-04-24 09:59:39",
      "seqNumber" : 1,
      "text" : "text"
    } ]
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

상태 코드

data.chatLogs[].messageId

String

메시지 ID (모든 타입 공통)

data.chatLogs[].type

String

메시지 타입: normal, file, reply, invite, leave

data.chatLogs[].senderId

String

보낸 사람 ID

data.chatLogs[].timestamp

String

보낸 시간(yyyy-MM-dd HH:mm:ss)

data.chatLogs[].seqNumber

Number

시퀀스 번호

data.chatLogs[].text

String

메시지 내용 (normal, reply 타입에서 사용)

data.chatLogs[].parentMessageId

String

부모 메시지 ID (reply 타입에서만 사용)

data.chatLogs[].parentSeqNumber

Number

부모 메시지 시퀀스 번호 (reply 타입에서만 사용)

data.chatLogs[].parentMessageText

String

부모 메시지 내용 (reply 타입에서만 사용)

data.chatLogs[].parentMessageType

String

부모 메시지 타입 (reply 타입에서만 사용)

data.chatLogs[].files[].fileType

String

파일 타입 (file 메시지에서만 사용)

data.chatLogs[].files[].fileUrl

String

파일 URL (file 메시지에서만 사용)

data.chatLogs[].files[].index

Number

파일 인덱스 (file 메시지에서만 사용)

Notification API 문서

본 문서는 Fcm을 이용한 Notification API에 대한 명세서입니다.

메시지 타입 설명

CHAT_NORMAL

일반 텍스트 메시지

CHAT_FILE

파일 전송 메시지

CHAT_LEAVE

퇴장 메시지

CHAT_INVITE

초대 메시지

CHAT_REPLY

답장 메시지

[
    {
        "senderId": "sender_id",
        "senderName": "sender_name",
        "type": "chat_file",
        "targetId": "chat_room_id",
        "content": "media_url"
    },
    {
        "senderId": "sender_id",
        "senderName": "sender_name",
        "type": "chat_normal",
        "targetId": "chat_room_id",
        "content": "text_message"
    },
    {
        "senderId": "sender_id",
        "senderName": "sender_name",
        "type": "chat_invite",
        "targetId": "chat_room_id",
        "content": ""
    },
    {
        "senderId": "sender_id",
        "senderName": "sender_name",
        "type": "chat_leave",
        "targetId": "chat_room_id",
        "content": ""
    },
    {
        "senderId": "sender_id",
        "senderName": "sender_name",
        "type": "chat_reply",
        "targetId": "chat_room_id",
        "content": "reply_message"
    }
]

3. 필드 설명

필드명 타입 필수 여부 설명

senderId

String

✅ 필수

메시지를 보낸 사용자의 ID

senderName

String

✅ 필수

메시지를 보낸 사용자의 이름

type

String

✅ 필수

메시지 타입 (CHAT_NORMAL, CHAT_FILE, CHAT_LEAVE, CHAT_INVITE, CHAT_REPLY)

targetId

String

✅ 필수

메시지가 전송될 채팅방 ID

content

String

선택

메시지의 내용 (파일 URL, 텍스트, 답장 내용 등) CHAT_INVITE, CHAT_LEAVE 타입에서는 포함되지 않음

Report API

1. 피드 신고하기 04/19 수정

요청(Request)

POST /api/report/feed HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Content-Length: 48
Host: 118.67.142.14

{"feedId":"testFeedId","reason":"?���? ?��?��"}

요청 헤더(Request Headers)

Unresolved directive in Report-API.adoc - include::C:\Users\김영호\Desktop\drr\Back-end\api\build\generated-snippets/report-controller-test/report-feed/request-headers.adoc[]

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68

{
  "status" : 200,
  "data" : {
    "message" : "성공"
  }
}

응답 필드 설명(Response Fields)

Unresolved directive in Report-API.adoc - include::C:\Users\김영호\Desktop\drr\Back-end\api\build\generated-snippets/report-controller-test/report-feed/response-fields.adoc[]

Ai API

1. Ai 채팅방 생성

요청(Request)

POST /api/ai/chat/room HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Host: 118.67.142.14

응답(Response)

HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 76

{
  "status" : 201,
  "data" : {
    "chatRoomId" : "ai-room-001"
  }
}

응답 필드 설명(Response Fields)

Path Type Description

status

Number

응답 상태

data.chatRoomId

String

AI 채팅방 ID

2. AI 클론 채팅

요청(Request)

POST /api/ai/chat/clone HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Authorization: Bearer accessToken
Content-Length: 82
Host: 118.67.142.14

{"prompt":"?��?��","sourceChatRoomId":"chatroom-001","aiChatRoomId":"ai-room-001"}

응답(Response)

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 556

{
  "status" : 200,
  "data" : {
    "userMessage" : {
      "messageId" : "msg-001",
      "type" : "normal",
      "senderId" : "testUserId",
      "timestamp" : "2026-04-24T09:55:57.950040200",
      "seqNumber" : 1,
      "text" : "안녕",
      "senderType" : "user"
    },
    "aiMessage" : {
      "messageId" : "msg-002",
      "type" : "normal",
      "senderId" : "ai-user",
      "timestamp" : "2026-04-24T09:55:57.946037800",
      "seqNumber" : 2,
      "text" : "안녕하세요!",
      "senderType" : "ai"
    }
  }
}

응답 필드 설명(Response Fields)

Unresolved directive in Ai-API.adoc - include::C:\Users\김영호\Desktop\drr\Back-end\api\build\generated-snippets/ai-controller-test/clone-ai-chat-room/response-fields.adoc[]