소개
API 문서입니다.
상태 코드
상태 코드 |
의미 |
설명 |
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 |
|---|---|---|
|
|
상태 코드 |
|
|
공지사항 ID |
|
|
공지사항 제목 |
|
|
공지사항 업로드 시간 - 형식 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 |
|---|---|---|
|
|
상태 코드 |
|
|
공지사항 내용 |
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 |
|---|---|---|
|
|
404 |
|
|
ANNOUNCEMENT_1 |
|
|
공지사항을 찾을 수 없습니다. 잘못된 아이디를 보냈다면 생기는 문제입니다. |
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 |
|---|---|---|
|
|
국가 코드) |
|
|
휴대폰 번호 |
응답(Response)
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68
{
"status" : 200,
"data" : {
"message" : "성공"
}
}
응답 필드 설명(Response Fields)
| Path | Type | Description |
|---|---|---|
|
|
상태 코드 |
|
|
성공 메시지 |
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 |
|---|---|---|
|
|
409 |
|
|
USER_3 |
|
|
계정이 이미 생성되었음으로 로그인으로 유도 해야함 |
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 |
|---|---|---|
|
|
국가 코드 |
|
|
휴대폰 번호 |
응답(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 |
|---|---|---|
|
|
409 |
|
|
USER_4 |
|
|
비밀번호 초기화를 하려고 했으나 계정이 생성되지 않았음으로 가입을 유도 해야함 |
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 |
|---|---|---|
|
|
휴대폰 번호 |
|
|
국가 코드 |
|
|
인증번호 |
|
|
디바이스 아이디(디바이스 식별을 위한 정보) |
|
|
플랫폼(ios, android) |
|
|
앱 토큰(푸시 토큰) |
|
|
사용자 이름 |
응답(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 |
|---|---|---|
|
|
상태 코드 |
|
|
액세스 토큰 |
|
|
리프레시 토큰 |
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 |
|---|---|---|
|
|
409 |
|
|
USER_3 |
|
|
계정이 이미 생성되었으므로 로그인으로 유도 해야함. 다만, 전화번호 인증 요청시 이미 검증이 되었는데 발생한 잘못된 접근 임. |
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 |
|---|---|---|
|
|
401 |
|
|
AUTH_1 |
|
|
휴대폰 인증번호가 잘못되었음 - 재인증 요청으로 유도해야함 |
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 |
|---|---|---|
|
|
401 |
|
|
AUTH_2 |
|
|
휴대폰 인증번호가 만료됨 - 재인증 요청으로 유도해야함 |
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 |
|---|---|---|
|
|
휴대폰 번호 |
|
|
국가 코드 |
|
|
인증번호 |
응답(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 |
|---|---|---|
|
|
상태 코드 |
|
|
액세스 토큰 |
|
|
리프레시 토큰 |
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 |
|---|---|---|
|
|
404 |
|
|
USER_1 |
|
|
계정이 존재하지 않음으로 회원가입을 유도해야함 - 비밀번호 초기화시 휴대폰 인증 할때 이미 존재 유무를 검증하는데 이때 오류 발생시 잘못된 접근 |
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 |
|---|---|---|
|
|
401 |
|
|
AUTH_1 |
|
|
휴대폰 인증번호가 잘못되었음 - 재인증 요청으로 유도해야함 |
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 |
|---|---|---|
|
|
401 |
|
|
AUTH_2 |
|
|
휴대폰 인증번호가 만료됨 - 재인증 요청으로 유도해야함 |
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 |
|---|---|
|
Bearer 액세스 토큰 |
요청 필드 설명(Request Fields)
| Path | Type | Description |
|---|---|---|
|
|
변경할 비밀번호 |
응답(Response)
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68
{
"status" : 200,
"data" : {
"message" : "성공"
}
}
응답 필드 설명(Response Fields)
| Path | Type | Description |
|---|---|---|
|
|
상태 코드 |
|
|
성공 메시지 |
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 |
|---|---|
|
Bearer 액세스 토큰 |
요청 필드 설명(Request Fields)
| Path | Type | Description |
|---|---|---|
|
|
생성할 비밀번호 |
응답(Response)
HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 75
{
"status" : 201,
"data" : {
"message" : "생성 완료"
}
}
응답 필드 설명(Response Fields)
| Path | Type | Description |
|---|---|---|
|
|
상태 코드 |
|
|
성공 메시지 |
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 |
|---|---|---|
|
|
휴대폰 번호 |
|
|
국가 코드 |
|
|
비밀번호 |
|
|
디바이스 아이디(디바이스 식별을 위한 정보) |
|
|
플랫폼(ios, android) |
|
|
앱 토큰(푸시 토큰) |
응답(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 |
|---|---|---|
|
|
상태 코드 |
|
|
액세스 토큰 |
|
|
리프레시 토큰 |
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 |
|---|---|---|
|
|
401 |
|
|
AUTH_9 |
|
|
비밀번호가 잘못되었음 - 새로운 인증 번호 요청으로 유도해야함 |
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 |
|---|---|---|
|
|
404 |
|
|
USER_1 |
|
|
계정이 존재하지 않음으로 회원가입을 유도해야함 - 로그인시 휴대폰 인증 할때 이미 존재 유무를 검증하는데 이때 오류 발생시 잘못된 접근 |
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 |
|---|---|
|
리프레시 토큰 |
응답(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 |
|---|---|
|
리프레시 토큰 |
응답(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 |
|---|---|---|
|
|
상태 코드 |
|
|
액세스 토큰 |
|
|
리프레시 토큰 |
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?? d d" ??
?? ? } !1AQa"q2��?#B��R��$3br?
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz������������������������������������������������������������������������??
?? ? w !1AQaq"2?B���� #3R?br?
$4?%?&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz������������������������������������������������������������������������?? ? ��(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(????
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
요청헤더(Request Headers)
| Name | Description |
|---|---|
|
멀티파트 폼 데이터 타입 (image/*) |
|
액세스 토큰 |
요청 파트 설명(Request Parts)
| Part | Description |
|---|---|
|
프로필 이미지 파일 (image/jpeg) |
응답(Response)
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68
{
"status" : 200,
"data" : {
"message" : "성공"
}
}
응답 필드 설명(Response Fields)
| Path | Type | Description |
|---|---|---|
|
|
상태 코드 |
|
|
성공 메시지 |
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 |
|---|---|---|
|
|
409 |
|
|
FILE_4 |
|
|
파일 이름을 넣어주세요. |
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 |
|---|---|---|
|
|
409 |
|
|
FILE_3 |
|
|
파일 변환에 실패했습니다. - 파일이 손상되었거나, 기타오류. |
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 |
|---|---|---|
|
|
409 |
|
|
FILE_1 |
|
|
파일 업로드에 실패 했음. 서버 오류, 네트워크 오류. |
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 |
|---|---|---|
|
|
409 |
|
|
FILE_6 |
|
|
파일 이름이 잘못되었습니다. 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 |
|---|---|
|
Bearer 액세스 토큰 |
요청 필드 설명(Request Fields)
| Path | Type | Description |
|---|---|---|
|
|
상태 메시지 |
응답(Response)
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68
{
"status" : 200,
"data" : {
"message" : "성공"
}
}
응답 필드 설명(Response Fields)
| Path | Type | Description |
|---|---|---|
|
|
상태 코드 |
|
|
성공 메시지 |
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 |
|---|---|
|
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 |
|---|---|---|
|
|
상태 코드 |
|
|
사용자 이름 |
|
|
전화번호 |
|
|
국가 코드 |
|
|
생일(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 |
|---|---|
|
Bearer 액세스 토큰 |
응답(Response)
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68
{
"status" : 200,
"data" : {
"message" : "성공"
}
}
응답 필드 설명(Response Fields)
| Path | Type | Description |
|---|---|---|
|
|
상태 코드 |
|
|
성공 메시지 |
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 |
|---|---|
|
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 |
|---|---|---|
|
|
상태 코드 |
|
|
디바이스 ID |
|
|
일정 알림 상태 |
|
|
채팅 알림 상태 |
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 |
|---|---|
|
Bearer 액세스 토큰 |
요청 필드 설명(Request Fields)
| Path | Type | Description |
|---|---|---|
|
|
푸시 알림 상태 |
|
|
디바이스 ID |
응답(Response)
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68
{
"status" : 200,
"data" : {
"message" : "성공"
}
}
응답 필드 설명(Response Fields)
| Path | Type | Description |
|---|---|---|
|
|
상태 코드 |
|
|
성공 메시지 |
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 |
|---|---|
|
Bearer 액세스 토큰 |
요청 필드 설명(Request Fields)
| Path | Type | Description |
|---|---|---|
|
|
푸시 알림 상태 |
|
|
디바이스 ID |
응답(Response)
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68
{
"status" : 200,
"data" : {
"message" : "성공"
}
}
응답 필드 설명(Response Fields)
| Path | Type | Description |
|---|---|---|
|
|
상태 코드 |
|
|
성공 메시지 |
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 |
|---|---|
|
Bearer 액세스 토큰 |
요청 필드 설명(Request Fields)
| Path | Type | Description |
|---|---|---|
|
|
생일 |
응답(Response)
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68
{
"status" : 200,
"data" : {
"message" : "성공"
}
}
응답 필드 설명(Response Fields)
| Path | Type | Description |
|---|---|---|
|
|
상태 코드 |
|
|
성공 메시지 |
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?? d d" ??
?? ? } !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?? d d" ??
?? ? } !1AQa"q2��?#B��R��$3br?
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz������������������������������������������������������������������������??
?? ? w !1AQaq"2?B���� #3R?br?
$4?%?&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz������������������������������������������������������������������������?? ? ��(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(????
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
요청헤더(Request Headers)
| Name | Description |
|---|---|
|
Bearer 액세스 토큰 |
요청 파트 설명(Request Parts)
| Part | Description |
|---|---|
|
피드에 추가할 이미지 파일 (image/jpeg) - 형식은 0.jpg, 1.jpg, … |
요청 쿼리 파라미터 설명(Request Query Parameters)
| Parameter | Description |
|---|---|
|
피드 내용 |
|
피드를 공유할 친구 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 |
|---|---|---|
|
|
상태 코드 |
|
|
피드 아이디 |
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 |
|---|---|---|
|
|
409 |
|
|
FILE_4 |
|
|
파일 이름을 넣어주세요. |
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 |
|---|---|---|
|
|
409 |
|
|
FILE_3 |
|
|
파일 변환에 실패했습니다. - 파일이 손상되었거나, 기타오류. |
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 |
|---|---|---|
|
|
409 |
|
|
FILE_1 |
|
|
파일 업로드에 실패 했음. 서버 오류, 네트워크 오류. |
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 |
|---|---|---|
|
|
409 |
|
|
FILE_6 |
|
|
파일 이름이 올바르지 않습니다. |
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 |
|---|---|
|
Bearer 액세스 토큰 |
요청 필드 설명(Request Fields)
| Path | Type | Description |
|---|---|---|
|
|
삭제할 피드 아이디 |
응답(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 |
|---|---|---|
|
|
409 |
|
|
FEED_4 |
|
|
피드의 소유자가 아닙니다. |
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 |
|---|---|
|
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 |
|---|---|---|
|
|
상태 코드 |
|
|
피드 아이디 |
|
|
피드 업로드 시간 - 형식 yyyy-MM-dd HH:mm:ss |
|
|
피드 타입(TEXT_BLUE, TEXT_SKY, FILE) |
|
|
썸네일 파일 URL (파일 타입일 경우) |
|
|
미디어 타입(image/png, image/jpeg, image/jpg, image/png) (파일 타입일 경우) |
|
|
파일 개수 (파일 타입일 경우) |
|
|
텍스트 피드 내용 (TEXT_BLUE, TEXT_SKY 타입일 경우) |
|
|
피드 소유자 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 |
|---|---|
|
Bearer 액세스 토큰 |
요청 경로 파라미터 설명(Request Path Parameters)
| Parameter | Description |
|---|---|
|
조회할 친구의 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 |
|---|---|---|
|
|
상태 코드 |
|
|
피드 아이디 |
|
|
피드 업로드 시간 - 형식 yyyy-MM-dd HH:mm:ss |
|
|
피드 타입(TEXT_BLUE, TEXT_SKY, FILE) |
|
|
썸네일 파일 URL (파일 타입일 경우) |
|
|
미디어 타입(image/png, image/jpeg, image/jpg, image/png) (파일 타입일 경우) |
|
|
파일 개수 (파일 타입일 경우) |
|
|
텍스트 피드 내용 (TEXT_BLUE, TEXT_SKY 타입일 경우) |
|
|
피드 소유자 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 |
|---|---|
|
Bearer 액세스 토큰 |
요청 경로 파라미터 설명(Request Path Parameters)
| Parameter | Description |
|---|---|
|
조회할 피드의 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 |
|---|---|---|
|
|
상태 코드 |
|
|
피드 아이디 |
|
|
피드 내용 |
|
|
피드 업로드 시간 - 형식 yyyy-MM-dd HH:mm:ss |
|
|
미디어 인덱스(0부터 시작) |
|
|
미디어 파일 URL |
|
|
미디어 타입(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 |
|---|---|---|
|
|
409 |
|
|
FEED_6 |
|
|
피드의 접근 권한이 없습니다. |
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 |
|---|---|
|
Bearer 액세스 토큰 |
요청 필드 설명(Request Fields)
| Path | Type | Description |
|---|---|---|
|
|
피드 내용 |
|
|
피드 타입(TEXT_BLUE, TEXT_SKY) |
|
|
피드를 공유할 친구 ID 목록 |
응답(Response)
HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 72
{
"status" : 201,
"data" : {
"feedId" : "testFeedId1"
}
}
응답 필드 설명(Response Fields)
| Path | Type | Description |
|---|---|---|
|
|
상태 코드 |
|
|
피드 아이디 |
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 |
|---|---|
|
Bearer 액세스 토큰 |
요청 필드 설명(Request Fields)
| Path | Type | Description |
|---|---|---|
|
|
피드 아이디 |
|
|
피드 내용 |
응답(Response)
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68
{
"status" : 200,
"data" : {
"message" : "성공"
}
}
응답 필드 설명(Response Fields)
| Path | Type | Description |
|---|---|---|
|
|
상태 코드 |
|
|
성공 메시지 |
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 |
|---|---|
|
Bearer 액세스 토큰 |
요청 쿼리 파라미터(Request Query Parameters)
| Parameter | Description |
|---|---|
|
년도(yyyy) → 2021 |
|
월(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 |
|---|---|---|
|
|
상태 코드 |
|
|
일정 ID |
|
|
일정 제목 |
|
|
일정 시간 |
|
|
일정 메모 |
|
|
일정 장소 |
|
|
시간 확정 여부 |
|
|
참여자(친구) ID, : 이떄 자기 자신의 아이디는 빠짐 |
|
|
참여자 역할(participant/owner) |
|
|
일정 소유자 여부(true/false) → true 시 일정 삭제 칸 보임/ false 시 일정 취소 칸 안보임 |
|
|
요청한 사람 참여 여부(true/false) → 요청한 사람의 Id는 노출되지 않음 친구 ID 만 노출 |
|
|
읽지 않은 일정 개수 |
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 |
|---|---|
|
Bearer 액세스 토큰 |
요청 필드 설명(Request Fields)
| Path | Type | Description |
|---|---|---|
|
|
일정 제목 |
|
|
일정 시간 |
|
|
일정 메모 |
|
|
일정 장소 |
|
|
시간 확정 여부(true/false) - 디자인 상의 미정을 의미 |
|
|
참여자(친구) 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 |
|---|---|---|
|
|
상태 코드 |
|
|
생성된 일정 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 |
|---|---|
|
Bearer 액세스 토큰 |
요청 필드 설명(Request Fields)
| Path | Type | Description |
|---|---|---|
|
|
일정 ID |
|
|
일정 제목 |
|
|
일정 시간 |
|
|
일정 메모 |
|
|
일정 장소 |
|
|
시간 확정 여부(true/false) - 디자인 상의 미정을 의미 |
|
|
본인을 제외한 참여자(친구) ID 목록 (각 ID는 문자열) |
|
|
요청자 본인 참여 여부(true/false) |
응답(Response)
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68
{
"status" : 200,
"data" : {
"message" : "성공"
}
}
응답 필드 설명(Response Fields)
| Path | Type | Description |
|---|---|---|
|
|
상태 코드 |
|
|
성공 메시지 |
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 |
|---|---|---|
|
|
404 |
|
|
SCHEDULE_4 |
|
|
일정 참여자가 아닙니다. → 일정에 참여한 적이 없는 경우 보안상 발생하는 에러 딱히 처리할 것은 없음 |
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 |
|---|---|
|
Bearer 액세스 토큰 |
응답(Response)
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68
{
"status" : 200,
"data" : {
"message" : "성공"
}
}
응답 필드 설명(Response Fields)
| Path | Type | Description |
|---|---|---|
|
|
상태 코드 |
|
|
성공 메시지 |
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 |
|---|---|---|
|
|
404 |
|
|
SCHEDULE_4 |
|
|
일정 참여자가 아닙니다. → 일정에 참여한 적이 없는 경우 보안상 발생하는 에러 딱히 처리할 것은 없음 |
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 |
|---|---|---|
|
|
409 |
|
|
SCHEDULE_5 |
|
|
일정 소유자가 아닙니다. → 일정을 생성한 사람이 아닌 경우 → 일정을 생성한 사람만 삭제 가능(보안상 발생하는 에러 딱히 처리할 것은 없음) |
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 |
|---|---|
|
Bearer 액세스 토큰 |
응답(Response)
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68
{
"status" : 200,
"data" : {
"message" : "성공"
}
}
응답 필드 설명(Response Fields)
| Path | Type | Description |
|---|---|---|
|
|
상태 코드 |
|
|
성공 메시지 |
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 |
|---|---|---|
|
|
404 |
|
|
SCHEDULE_4 |
|
|
일정 참여자가 아닙니다. → 일정에 참여한 적이 없는 경우 보안상 발생하는 에러 딱히 처리할 것은 없음 |
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 |
|---|---|
|
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 |
|---|---|---|
|
|
상태 코드 |
|
|
일정 ID |
|
|
로그를 남긴 사용자 ID |
|
|
로그 액션(일정 생성, 일정 수정, 일정 삭제, 일정 취소) |
|
|
로그 생성 시간 |
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 |
|---|---|
|
Bearer 액세스 토큰 |
경로 파라미터(Path Parameters)
| Parameter | Description |
|---|---|
|
일정 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 |
|---|---|---|
|
|
상태 코드 |
|
|
일정 ID |
|
|
일정 제목 |
|
|
일정 시간 |
|
|
일정 메모 |
|
|
일정 장소 |
|
|
시간 확정 여부 |
|
|
일정 소유자 여부(true/false) → true 시 일정 삭제 칸 보임/ false 시 일정 취소 칸 안보임 |
|
|
요청한 사람 참여 여부(true/false) → 요청한 사람의 Id는 노출되지 않음 친구 ID 만 노출 |
|
|
참여자(친구) ID, : 이떄 자기 자신의 아이디는 빠짐 |
|
|
참여자 역할(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 |
|---|---|---|
|
|
404 |
|
|
SCHEDULE_1 |
|
|
일정을 찾을 수 없는 경우 - 잘못된 일정 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 |
|---|---|
|
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 |
|---|---|---|
|
|
상태 코드 |
|
|
전화번호 |
|
|
국가 코드 |
|
|
친구 이름 |
|
|
즐겨찾기 여부 |
|
|
차단 여부/삭제 여부/NORMAL 시 친구가 아닌 상태(전화번호 추가 필요) |
|
|
친구 ID |
|
|
프로필 이미지 URL |
|
|
프로필 이미지 타입(image/jpeg, image/png) |
|
|
상태 메시지 |
|
|
생일(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 |
|---|---|
|
Bearer 액세스 토큰 |
응답(Response)
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68
{
"status" : 200,
"data" : {
"message" : "성공"
}
}
응답 필드 설명(Response Fields)
| Path | Type | Description |
|---|---|---|
|
|
상태 코드 |
|
|
성공 메시지 |
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 |
|---|---|
|
Bearer 액세스 토큰 |
응답(Response)
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68
{
"status" : 200,
"data" : {
"message" : "성공"
}
}
응답 필드 설명(Response Fields)
| Path | Type | Description |
|---|---|---|
|
|
상태 코드 |
|
|
성공 메시지 |
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 |
|---|---|
|
Bearer 액세스 토큰 |
응답(Response)
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68
{
"status" : 200,
"data" : {
"message" : "성공"
}
}
응답 필드 설명(Response Fields)
| Path | Type | Description |
|---|---|---|
|
|
상태 코드 |
|
|
성공 메시지 |
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 |
|---|---|---|
|
|
409 |
|
|
FRIEND_5 |
|
|
내가 차단된 상태 |
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 |
|---|---|---|
|
|
409 |
|
|
FRIEND_4 |
|
|
친구가 아닌 상태(전화번호 추가 필요) |
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 |
|---|---|---|
|
|
409 |
|
|
FRIEND_5 |
|
|
내가 차단된 상태 |
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 |
|---|---|---|
|
|
409 |
|
|
FRIEND_6 |
|
|
친구를 삭제한 상태 |
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 |
|---|---|
|
Bearer 액세스 토큰 |
응답(Response)
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68
{
"status" : 200,
"data" : {
"message" : "성공"
}
}
응답 필드 설명(Response Fields)
| Path | Type | Description |
|---|---|---|
|
|
상태 코드 |
|
|
성공 메시지 |
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 |
|---|---|---|
|
|
409 |
|
|
FRIEND_4 |
|
|
친구가 아닌 상태(전화번호 추가 필요) |
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 |
|---|---|---|
|
|
409 |
|
|
FRIEND_5 |
|
|
내가 차단된 상태 |
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 |
|---|---|---|
|
|
409 |
|
|
FRIEND_5 |
|
|
내가 차단된 상태 |
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 |
|---|---|---|
|
|
409 |
|
|
FRIEND_6 |
|
|
친구를 삭제한 상태 |
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 |
|---|---|
|
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 |
|---|---|
|
Bearer 액세스 토큰 |
응답(Response)
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68
{
"status" : 200,
"data" : {
"message" : "성공"
}
}
응답 필드 설명(Response Fields)
| Path | Type | Description |
|---|---|---|
|
|
상태 코드 |
|
|
성공 메시지 |
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 |
|---|---|
|
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 |
|---|---|---|
|
|
상태 코드 |
|
|
사용자 정보 |
|
|
사용자 ID |
|
|
사용자 이름 |
|
|
사용자 상태 메시지 |
|
|
사용자 프로필 이미지 URL |
|
|
프로필 이미지 타입 (예: 'default' / 'uploaded') |
|
|
사용자 생일 (yyyy-MM-dd 형식) 없다면 빈칸으로 넘어옴 |
|
|
전체 친구 수 |
|
|
친구 목록 |
|
|
친구 전화번호 |
|
|
친구 국가 코드 |
|
|
친구 이름 |
|
|
친구 즐겨찾기 여부 |
|
|
친구 상태 (friend, delete, block 등) |
|
|
친구 사용자 ID |
|
|
친구 프로필 이미지 URL |
|
|
친구 프로필 이미지 타입 |
|
|
친구 상태 메시지 |
|
|
친구 생일 (yyyy-MM-dd 형식) 없다면 빈칸으로 넘어옴 |
|
|
그룹 채팅방 목록 |
|
|
그룹 채팅방 ID |
|
|
그룹 채팅방에 참여 중인 친구 ID 목록(본인 제외) |
|
|
해당 채팅방 채팅 로그 목록 |
|
|
메시지 ID |
|
|
메시지 타입 (reply, file, normal, invite, leave 등) |
|
|
메시지 전송자 ID |
|
|
메시지 전송 시각 (yy-MM-dd HH:mm:ss) |
|
|
메시지 시퀀스 넘버 (1부터 시작) |
|
|
답장 대상 메시지 ID (reply 타입일 때만) |
|
|
답장 대상 메시지 시퀀스 번호 (reply 타입일 때만) |
|
|
답장 대상 메시지 내용 (reply 타입일 때만) |
|
|
답장 대상 메시지 타입 (reply 타입일 때만) |
|
|
메시지 텍스트 (reply, normal 타입일 때만) |
|
|
파일 목록 (file 타입일 때만) |
|
|
파일 URL |
|
|
파일 타입 (image 등) |
|
|
파일 순서 (0부터 시작) |
|
|
초대 대상 사용자 ID 목록 (invite 타입일 때만) |
|
|
1:1 채팅방 목록 |
|
|
1:1 채팅방 ID |
|
|
상대방 친구 ID |
|
|
해당 채팅방 채팅 로그 목록 |
|
|
메시지 ID |
|
|
메시지 타입 |
|
|
메시지 전송자 ID |
|
|
메시지 전송 시각 |
|
|
메시지 시퀀스 넘버(1부터 시작) |
|
|
답장 대상 메시지 ID (reply 타입) |
|
|
답장 대상 메시지 시퀀스 번호 (reply 타입) |
|
|
답장 대상 메시지 내용 (reply 타입) |
|
|
답장 대상 메시지 타입 (reply 타입) |
|
|
메시지 텍스트 (reply, normal 타입) |
|
|
파일 목록 (file 타입) |
|
|
파일 URL |
|
|
파일 타입 |
|
|
파일 순서(0 부터 시작) |
|
|
피드 아이디 |
|
|
피드 업로드 시간 - 형식 yyyy-MM-dd HH:mm:ss |
|
|
피드 타입(TEXT_BLUE, TEXT_SKY, FILE) |
|
|
피드 소유자 ID |
|
|
피드 내용 |
|
|
썸네일 파일 URL (파일 타입일 경우) |
|
|
미디어 타입(image/png, image/jpeg, image/jpg, image/png) (파일 타입일 경우) |
|
|
파일 개수 (파일 타입일 경우) |
Chat WebSocket API 문서
1. WebSocket 연결 (Handshake)
-
URL:
ws://118.67.142.14:80/ws-stomp -
프로토콜: STOMP
-
Authorization 헤더:
Authorization: Bearer {JWT_ACCESS_TOKEN}
연결 순서는 대략 다음과 같습니다.
-
클라이언트가 `ws://118.67.142.14:80/ws-stomp`로 WebSocket 핸드셰이크를 시도 이때에도 헤더 파일을 넣어야함
-
서버가 HTTP 101 Switching Protocol로 업그레이드하면, STOMP CONNECT를 통해 연결 완료
-
연결 완료 후 클라이언트는
/app/…경로로 SEND 메시지를 전송할 수 있고, 필요한 SUBSCRIBE를 통해 응답(브로드캐스트)을 수신
2. 개인 채팅방 STOMP 메시지 송신
개인 채팅방에서 4가지 메시지 전송을 확인할 수 있습니다.
| 메시지 타입 | 설명 |
|---|---|
|
일반 텍스트 메시지 |
|
메시지 삭제 메시지 |
|
답장(Reply) 메시지 |
|
읽음 표시 메시지 |
2.1 개인 채팅방 일반 메시지 송신
-
STOMP SEND Destination:
/app/chat/direct/common -
Request:
{
"chatRoomId": "testRoomId",
"message": "testMessage"
}
응답 필드 |
설명 |
|
채팅방 ID |
|
메시지 내용 |
2.2 개인 채팅방 읽기 메시지 송신
-
STOMP SEND Destination:
/app/chat/direct/read -
Request:
{
"chatRoomId": "testRoomId",
"sequenceNumber": "0"
}
응답 필드 |
설명 |
|
채팅방 ID |
|
읽은 메시지 순번 |
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"
}
응답 필드 |
설명 |
|
채팅방 ID |
|
부모 메시지 ID |
|
메시지 내용 |
3. 그룹 채팅방 STOMP 메시지 송신
그룹 채팅방에서 4가지 메시지 전송을 확인할 수 있습니다.
| 메시지 타입 | 설명 |
|---|---|
|
일반 텍스트 메시지 |
|
메시지 삭제 메시지 |
|
답장(Reply) 메시지 |
|
읽음 표시 메시지 |
3.1 그룹 채팅방 일반 메시지 송신
-
STOMP SEND Destination:
/app/chat/group/common -
Request:
{
"chatRoomId": "testRoomId",
"message": "testMessage"
}
응답 필드 |
설명 |
|
채팅방 ID |
|
메시지 내용 |
3.2 그룹 채팅방 읽기 메시지 송신
-
STOMP SEND Destination:
/app/chat/group/read -
Request:
{
"chatRoomId": "testRoomId",
"sequenceNumber": "0"
}
응답 필드 |
설명 |
|
채팅방 ID |
|
읽은 메시지 순번 |
3.3 그룹 채팅방 삭제 메시지 송신
-
STOMP SEND Destination:
/app/chat/group/delete -
Request:
{
"chatRoomId": "testRoomId",
"messageId": "testMessageId"
}
응답 필드 |
설명 |
|
채팅방 ID |
|
메시지 ID |
3.4 그룹 채팅방 답장 메시지 송신
-
STOMP SEND Destination:
/app/chat/group/reply -
Request:
{
"chatRoomId": "testRoomId",
"parentMessageId": "testParentMessageId",
"message": "testMessage"
}
응답 필드 |
설명 |
|
채팅방 ID |
|
부모 메시지 ID |
|
메시지 내용 |
4. 개인 채팅방 STOMP 메시지 수신
개인 채팅방에서 5가지 메시지 수신을 확인할 수 있습니다.
개인 채팅방 메시지는 서버가 /user/queue/chat/direct 경로로 발행하며, 클라이언트는 해당 경로를 SUBSCRIBE해야 수신할 수 있습니다.
| 메시지 타입 | 설명 |
|---|---|
|
일반 텍스트 메시지 |
|
파일(이미지, 문서 등) 전송 메시지 |
|
메시지 삭제 알림 |
|
답장(Reply) 메시지 |
|
에러 상태 전달 (예: 권한 없음, 유효성 오류 등) |
|
피드 댓글 메시지 |
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
}
| 응답 필드 | 설명 |
|---|---|
|
메시지 ID |
|
채팅방 ID |
|
채팅방 타입 (direct, group) |
|
보낸 사람 ID |
|
메시지 타입(normal) |
|
메시지 내용 |
|
메시지 생성 시간 |
|
메시지 순번 |
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"
}
}
| 응답 필드 | 설명 |
|---|---|
|
메시지 ID |
|
채팅방 ID |
|
채팅방 타입 (direct, group) |
|
보낸 사람 ID |
|
메시지 타입 (file) |
|
메시지 생성 시간 |
|
메시지 순번 |
|
파일 정보 |
|
파일 타입 |
|
파일 URL |
|
파일 이름 |
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
}
| 응답 필드 | 설명 |
|---|---|
|
삭제 대상 메시지 ID |
|
채팅방 ID |
|
채팅방 타입 (direct, group) |
|
보낸 사람 ID |
|
메시지 타입 (delete) |
|
메시지 생성 시간 |
|
메시지 순번 |
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": "부모 메시지 내용"
}
| 응답 필드 | 설명 |
|---|---|
|
메시지 ID |
|
채팅방 ID |
|
채팅방 타입 (direct, group) |
|
보낸 사람 ID |
|
메시지 타입 (reply) |
|
메시지 내용 |
|
메시지 생성 시간 |
|
메시지 순번 |
|
부모 메시지 ID |
|
부모 메시지 순번 |
|
부모 메시지 내용 |
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": "에러 메시지 내용"
}
| 응답 필드 | 설명 |
|---|---|
|
채팅방 ID |
|
채팅방 타입 (direct, group) |
|
보낸 사람 ID |
|
메시지 타입 (error) |
|
메시지 생성 시간 |
|
에러 코드 |
|
에러 메시지 내용 |
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"
}
| 응답 필드 | 설명 |
|---|---|
|
메시지 ID |
|
채팅방 ID |
|
채팅방 타입 (direct, group) |
|
보낸 사람 ID |
|
메시지 타입 (file) |
|
메시지 생성 시간 |
|
메시지 순번 |
|
피드 파일 정보 |
|
파일 타입 |
|
파일 URL |
|
파일 이름 |
|
댓글 내용 |
|
피드 ID |
|
피드 타입 |
|
피드 내용 |
5. 그룹 채팅방 STOMP 메시지 수신
그룹 채팅방에서 7가지 메시지 수신을 확인할 수 있습니다.
개인 채팅방 메시지는 서버가 /user/queue/chat/group 경로로 발행하며, 클라이언트는 해당 경로를 SUBSCRIBE해야 수신할 수 있습니다.
| 메시지 타입 | 설명 |
|---|---|
|
일반 텍스트 메시지 |
|
파일(이미지, 문서 등) 전송 메시지 |
|
메시지 삭제 알림 |
|
답장(Reply) 메시지 |
|
그룹 채팅방 초대 메시지 |
|
그룹 채팅방 나감 메시지 |
|
에러 상태 전달 (예: 권한 없음, 유효성 오류 등) |
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
}
| 응답 필드 | 설명 |
|---|---|
|
메시지 ID |
|
채팅방 ID |
|
채팅방 타입 (direct, group) |
|
보낸 사람 ID |
|
메시지 타입 (normal, file, delete, reply, error) |
|
메시지 내용 |
|
메시지 생성 시간 |
|
메시지 순번 |
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"
}
}
| 응답 필드 | 설명 |
|---|---|
|
메시지 ID |
|
채팅방 ID |
|
채팅방 타입 (direct, group) |
|
보낸 사람 ID |
|
메시지 타입 (normal, file, delete, reply, error) |
|
메시지 생성 시간 |
|
메시지 순번 |
|
파일 정보 |
|
파일 타입 |
|
파일 URL |
|
파일 이름 |
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
}
| 응답 필드 | 설명 |
|---|---|
|
삭제 대상 메시지 ID |
|
채팅방 ID |
|
채팅방 타입 (direct, group) |
|
보낸 사람 ID |
|
메시지 타입 (normal, file, delete, reply, error) |
|
메시지 생성 시간 |
|
메시지 순번 |
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": "부모 메시지 내용"
}
| 응답 필드 | 설명 |
|---|---|
|
메시지 ID |
|
채팅방 ID |
|
채팅방 타입 (direct, group) |
|
보낸 사람 ID |
|
메시지 타입 (normal, file, delete, reply, error) |
|
메시지 내용 |
|
메시지 생성 시간 |
|
메시지 순번 |
|
부모 메시지 ID |
|
부모 메시지 순번 |
|
부모 메시지 내용 |
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"
}
| 응답 필드 | 설명 |
|---|---|
|
메시지 ID |
|
채팅방 ID |
|
채팅방 타입 (direct, group) |
|
보낸 사람 ID |
|
메시지 타입 (normal, file, delete, reply, error) |
|
메시지 생성 시간 |
|
초대된 사용자 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
}
| 응답 필드 | 설명 |
|---|---|
|
메시지 ID |
|
채팅방 ID |
|
채팅방 타입 (direct, group) |
|
보낸 사람 ID |
|
메시지 타입 (normal, file, delete, reply, error) |
|
메시지 생성 시간 |
|
메시지 순번 |
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": "에러 메시지 내용"
}
| 응답 필드 | 설명 |
|---|---|
|
채팅방 ID |
|
채팅방 타입 (direct, group) |
|
보낸 사람 ID |
|
메시지 타입 (normal, file, delete, reply, error) |
|
메시지 생성 시간 |
|
에러 코드 |
|
에러 메시지 내용 |
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?? d d" ??
?? ? } !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?? d d" ??
?? ? } !1AQa"q2��?#B��R��$3br?
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz������������������������������������������������������������������������??
?? ? w !1AQaq"2?B���� #3R?br?
$4?%?&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz������������������������������������������������������������������������?? ? ��(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(????
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
요청헤더(Request Headers)
| Name | Description |
|---|---|
|
Bearer 액세스 토큰 |
요청 파트 설명(Request Parts)
| Part | Description |
|---|---|
|
채팅방에 추가할 이미지 파일 (image/jpeg) - 형식은 0.jpg, 1.jpg, … |
요청 쿼리 파라미터 설명(Request Query Parameters)
| Parameter | Description |
|---|---|
|
채팅방 ID |
응답(Response)
HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 75
{
"status" : 201,
"data" : {
"message" : "생성 완료"
}
}
응답 필드 설명(Response Fields)
| Path | Type | Description |
|---|---|---|
|
|
상태 코드 |
|
|
성공 메시지 |
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?? d d" ??
?? ? } !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?? d d" ??
?? ? } !1AQa"q2��?#B��R��$3br?
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz������������������������������������������������������������������������??
?? ? w !1AQaq"2?B���� #3R?br?
$4?%?&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz������������������������������������������������������������������������?? ? ��(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(????
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
요청헤더(Request Headers)
| Name | Description |
|---|---|
|
Bearer 액세스 토큰 |
요청 파트 설명(Request Parts)
| Part | Description |
|---|---|
|
채팅방에 추가할 이미지 파일 (image/jpeg) - 형식은 0.jpg, 1.jpg, … |
요청 쿼리 파라미터 설명(Request Query Parameters)
| Parameter | Description |
|---|---|
|
채팅방 ID |
응답(Response)
HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 75
{
"status" : 201,
"data" : {
"message" : "생성 완료"
}
}
응답 필드 설명(Response Fields)
| Path | Type | Description |
|---|---|---|
|
|
상태 코드 |
|
|
성공 메시지 |
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 |
|---|---|---|
|
|
응답 상태 코드 |
|
|
1:1 채팅방 목록 |
|
|
그룹 채팅방 목록 |
|
|
채팅방 ID |
|
|
채팅방 시퀀스 번호 |
|
|
읽은 시퀀스 번호 |
|
|
참여한 시퀀스 번호 |
|
|
채팅 메시지 ID |
|
|
채팅 메시지 타입(Reply, File, Normal) |
|
|
보낸 사람 ID |
|
|
보낸 시간 |
|
|
메시지 시퀀스 번호 |
|
|
메시지 내용 |
|
|
채팅방 멤버 상태 |
|
|
친구 ID |
|
|
채팅방 ID |
|
|
채팅방 이름 |
|
|
채팅방 시퀀스 번호 |
|
|
읽은 시퀀스 번호 |
|
|
참여한 시퀀스 번호 |
|
|
채팅 메시지 ID |
|
|
채팅 메시지 타입(Reply, Leave, Invite, File, Normal) |
|
|
보낸 사람 ID |
|
|
보낸 시간 |
|
|
메시지 시퀀스 번호 |
|
|
메시지 내용 |
|
|
채팅방 멤버 상태 |
|
|
친구 ID(본인제외) |
|
|
친구 상태 |
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)
| Parameter | Description |
|---|---|
|
친구 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 |
|---|---|---|
|
|
응답 상태 코드 |
|
|
채팅방 ID |
|
|
채팅방 시퀀스 번호 |
|
|
읽은 시퀀스 번호 |
|
|
참여한 시퀀스 번호 |
|
|
채팅방 멤버 상태 |
|
|
친구 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 |
|---|---|---|
|
|
친구 ID 목록 |
|
|
그룹 채팅방 이름 |
응답(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 |
|---|---|---|
|
|
응답 상태 코드 |
|
|
채팅방 ID |
|
|
채팅방 시퀀스 번호 |
|
|
읽은 시퀘스 번호 |
|
|
참여한 시퀀스 번호 |
|
|
채팅방 멤버 상태 |
|
|
채팅방 이름 |
|
|
채팅 메시지 ID |
|
|
채팅 메시지 타입(Invite) |
|
|
보낸 사람 ID |
|
|
보낸 시간 |
|
|
메시지 시퀀스 번호 |
|
|
초대된 사용자 ID 목록 |
|
|
친구 ID(본인제외) |
|
|
친구 상태 |
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 |
|---|---|---|
|
|
친구 ID |
|
|
메시지 |
응답(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 |
|---|---|---|
|
|
응답 상태 코드 |
|
|
채팅방 ID |
|
|
채팅방 시퀀스 번호 |
|
|
읽은 시퀘스 번호 |
|
|
참여한 시퀀스 번호 |
|
|
채팅방 멤버 상태 |
|
|
친구 ID |
|
|
채팅 메시지 ID |
|
|
채팅 메시지 타입(Normal) |
|
|
보낸 사람 ID |
|
|
보낸 시간 |
|
|
메시지 시퀀스 번호 |
|
|
메시지 내용 |
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?? d d" ??
?? ? } !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?? d d" ??
?? ? } !1AQa"q2��?#B��R��$3br?
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz������������������������������������������������������������������������??
?? ? w !1AQaq"2?B���� #3R?br?
$4?%?&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz������������������������������������������������������������������������?? ? ��(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(?
(????
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
요청 파트 설명(Request Parts)
| Part | Description |
|---|---|
|
채팅방에 추가할 이미지 파일 (image/jpeg) - 형식은 0.jpg, 1.jpg, … |
요청 쿼리 파라미터 설명(Request Query Parameters)
| Parameter | Description |
|---|---|
|
친구 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 |
|---|---|---|
|
|
응답 상태 코드 |
|
|
채팅방 ID |
|
|
채팅방 시퀀스 번호 |
|
|
읽은 시퀘스 번호 |
|
|
참여한 시퀀스 번호 |
|
|
채팅방 멤버 상태 |
|
|
친구 ID |
|
|
채팅 메시지 ID |
|
|
채팅 메시지 타입(file) |
|
|
보낸 사람 ID |
|
|
보낸 시간 |
|
|
메시지 시퀀스 번호 |
|
|
파일 타입 |
|
|
파일 URL |
|
|
파일 인덱스 |
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 |
|---|---|---|
|
|
채팅방 ID |
응답(Response)
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68
{
"status" : 200,
"data" : {
"message" : "성공"
}
}
응답 필드 설명(Response Fields)
| Path | Type | Description |
|---|---|---|
|
|
상태 코드 |
|
|
성공 메시지 |
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 |
|---|---|---|
|
|
채팅방 ID |
응답(Response)
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68
{
"status" : 200,
"data" : {
"message" : "성공"
}
}
응답 필드 설명(Response Fields)
| Path | Type | Description |
|---|---|---|
|
|
상태 코드 |
|
|
성공 메시지 |
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 |
|---|---|---|
|
|
채팅방 ID |
|
|
친구 ID |
응답(Response)
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68
{
"status" : 200,
"data" : {
"message" : "성공"
}
}
응답 필드 설명(Response Fields)
| Path | Type | Description |
|---|---|---|
|
|
상태 코드 |
|
|
성공 메시지 |
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 |
|---|---|---|
|
|
채팅방 ID |
|
|
즐겨찾기 여부 |
응답(Response)
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68
{
"status" : 200,
"data" : {
"message" : "성공"
}
}
응답 필드 설명(Response Fields)
| Path | Type | Description |
|---|---|---|
|
|
상태 코드 |
|
|
성공 메시지 |
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 |
|---|---|---|
|
|
채팅방 ID |
|
|
즐겨찾기 여부 |
응답(Response)
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68
{
"status" : 200,
"data" : {
"message" : "성공"
}
}
응답 필드 설명(Response Fields)
| Path | Type | Description |
|---|---|---|
|
|
상태 코드 |
|
|
성공 메시지 |
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 |
|---|---|
|
친구 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 |
|---|---|---|
|
|
응답 상태 코드 |
|
|
1:1 채팅방 목록 |
|
|
그룹 채팅방 목록 |
|
|
채팅방 ID |
|
|
채팅방 시퀀스 번호 |
|
|
읽은 시퀀스 번호 |
|
|
참여한 시퀀스 번호 |
|
|
채팅 메시지 ID |
|
|
채팅 메시지 타입(Reply, File, Normal) |
|
|
보낸 사람 ID |
|
|
보낸 시간 |
|
|
메시지 시퀀스 번호 |
|
|
메시지 내용 |
|
|
채팅방 멤버 상태 |
|
|
친구 ID |
|
|
채팅방 ID |
|
|
채팅방 이름 |
|
|
채팅방 시퀀스 번호 |
|
|
읽은 시퀀스 번호 |
|
|
참여한 시퀀스 번호 |
|
|
채팅 메시지 ID |
|
|
채팅 메시지 타입(Reply, Leave, Invite, File, Normal) |
|
|
보낸 사람 ID |
|
|
보낸 시간 |
|
|
메시지 시퀀스 번호 |
|
|
메시지 내용 |
|
|
채팅방 멤버 상태 |
|
|
친구 ID(본인제외) |
|
|
친구 상태 |
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)
| Parameter | Description |
|---|---|
|
채팅방 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 |
|---|---|---|
|
|
응답 상태 코드 |
|
|
채팅방 ID |
|
|
채팅방 시퀀스 번호 |
|
|
읽은 시퀘스 번호 |
|
|
참여한 시퀀스 번호 |
|
|
채팅 메시지 ID |
|
|
채팅 메시지 타입(Normal) |
|
|
보낸 사람 ID |
|
|
보낸 시간 |
|
|
메시지 시퀀스 번호 |
|
|
메시지 내용 |
|
|
채팅방 멤버 상태 |
|
|
친구 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)
| Parameter | Description |
|---|---|
|
그룹 채팅방 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 |
|---|---|---|
|
|
응답 상태 코드 |
|
|
채팅방 ID |
|
|
채팅방 이름 |
|
|
채팅방 시퀀스 번호 |
|
|
읽은 시퀀스 번호 |
|
|
참여한 시퀀스 번호 |
|
|
최신 채팅 로그 ID |
|
|
최신 채팅 로그 타입 |
|
|
메시지 발신자 ID |
|
|
메시지 전송 시간 |
|
|
메시지 시퀀스 번호 |
|
|
메시지 내용 |
|
|
채팅방 나의 현재 상태(NORMAL, FAVORITE) |
|
|
친구 ID |
|
|
친구 상태 |
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 |
|---|---|---|
|
|
채팅방 ID |
|
|
변경할 채팅방 이름 |
응답(Response)
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 68
{
"status" : 200,
"data" : {
"message" : "성공"
}
}
응답 필드 설명(Response Fields)
| Path | Type | Description |
|---|---|---|
|
|
상태 코드 |
|
|
성공 메시지 |
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 |
|---|---|
|
시퀀스 번호 |
요청 경로 파리미터 설명(Request Path Parameters)
| Parameter | Description |
|---|---|
|
채팅방 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 |
|---|---|---|
|
|
상태 코드 |
|
|
메시지 ID (모든 타입 공통) |
|
|
메시지 타입: normal, file, reply, invite, leave |
|
|
보낸 사람 ID |
|
|
보낸 시간(yyyy-MM-dd HH:mm:ss) |
|
|
시퀀스 번호 |
|
|
메시지 내용 (normal, reply 타입에서 사용) |
|
|
부모 메시지 ID (reply 타입에서만 사용) |
|
|
부모 메시지 시퀀스 번호 (reply 타입에서만 사용) |
|
|
부모 메시지 내용 (reply 타입에서만 사용) |
|
|
부모 메시지 타입 (reply 타입에서만 사용) |
|
|
파일 타입 (file 메시지에서만 사용) |
|
|
파일 URL (file 메시지에서만 사용) |
|
|
파일 인덱스 (file 메시지에서만 사용) |
|
|
댓글 내용 (comment 메시지에서만 사용) |
|
|
피드 ID (comment 메시지에서만 사용) |
|
|
피드 타입 (comment 메시지에서만 사용) |
|
|
컨텐츠 (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 |
|---|---|
|
시퀀스 번호 |
요청 경로 파리미터 설명(Request Path Parameters)
| Parameter | Description |
|---|---|
|
채팅방 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 |
|---|---|---|
|
|
상태 코드 |
|
|
메시지 ID (모든 타입 공통) |
|
|
메시지 타입: normal, file, reply, invite, leave |
|
|
보낸 사람 ID |
|
|
보낸 시간(yyyy-MM-dd HH:mm:ss) |
|
|
시퀀스 번호 |
|
|
메시지 내용 (normal, reply 타입에서 사용) |
|
|
부모 메시지 ID (reply 타입에서만 사용) |
|
|
부모 메시지 시퀀스 번호 (reply 타입에서만 사용) |
|
|
부모 메시지 내용 (reply 타입에서만 사용) |
|
|
부모 메시지 타입 (reply 타입에서만 사용) |
|
|
파일 타입 (file 메시지에서만 사용) |
|
|
파일 URL (file 메시지에서만 사용) |
|
|
파일 인덱스 (file 메시지에서만 사용) |
|
|
초대된 사용자 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 |
|---|---|
|
키워드 |
요청 경로 파리미터 설명(Request Path Parameters)
| Parameter | Description |
|---|---|
|
채팅방 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 |
|---|---|---|
|
|
상태 코드 |
|
|
메시지 ID (모든 타입 공통) |
|
|
메시지 타입: normal, file, reply, invite, leave |
|
|
보낸 사람 ID |
|
|
보낸 시간(yyyy-MM-dd HH:mm:ss) |
|
|
시퀀스 번호 |
|
|
메시지 내용 (normal, reply 타입에서 사용) |
|
|
부모 메시지 ID (reply 타입에서만 사용) |
|
|
부모 메시지 시퀀스 번호 (reply 타입에서만 사용) |
|
|
부모 메시지 내용 (reply 타입에서만 사용) |
|
|
부모 메시지 타입 (reply 타입에서만 사용) |
|
|
파일 타입 (file 메시지에서만 사용) |
|
|
파일 URL (file 메시지에서만 사용) |
|
|
파일 인덱스 (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 |
|---|---|
|
키워드 |
요청 경로 파리미터 설명(Request Path Parameters)
| Parameter | Description |
|---|---|
|
채팅방 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 |
|---|---|---|
|
|
상태 코드 |
|
|
메시지 ID (모든 타입 공통) |
|
|
메시지 타입: normal, file, reply, invite, leave |
|
|
보낸 사람 ID |
|
|
보낸 시간(yyyy-MM-dd HH:mm:ss) |
|
|
시퀀스 번호 |
|
|
메시지 내용 (normal, reply 타입에서 사용) |
|
|
부모 메시지 ID (reply 타입에서만 사용) |
|
|
부모 메시지 시퀀스 번호 (reply 타입에서만 사용) |
|
|
부모 메시지 내용 (reply 타입에서만 사용) |
|
|
부모 메시지 타입 (reply 타입에서만 사용) |
|
|
파일 타입 (file 메시지에서만 사용) |
|
|
파일 URL (file 메시지에서만 사용) |
|
|
파일 인덱스 (file 메시지에서만 사용) |
Notification API 문서
본 문서는 Fcm을 이용한 Notification API에 대한 명세서입니다.
| 메시지 타입 | 설명 |
|---|---|
|
일반 텍스트 메시지 |
|
파일 전송 메시지 |
|
퇴장 메시지 |
|
초대 메시지 |
|
답장 메시지 |
[
{
"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 |
|---|---|---|
|
|
응답 상태 |
|
|
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[]