API 설계

← 아키텍처 개요


요약

항목 내용
REST Base URL /api/v1
인증 JWT Bearer Token (HMAC-SHA256)
WebSocket STOMP at /ws (SockJS fallback)
총 엔드포인트 68개
API 문서 상세 API Reference

REST API 엔드포인트

인증 (/api/v1/auth)

Method 경로 설명
POST /auth/signup 회원가입
POST /auth/login 로그인
POST /auth/logout 로그아웃
POST /auth/refresh 토큰 갱신
GET /auth/me 내 정보
PUT /auth/me 프로필 수정
DELETE /auth/me 계정 삭제

사용자 (/api/v1/users)

Method 경로 설명
GET /users/{id} 사용자 조회
GET /users/search?q= 사용자 검색
GET /users/{id}/profile 프로필 조회

친구 (/api/v1/friends)

Method 경로 설명
GET /friends 친구 목록
POST /friends/requests 친구 요청
POST /friends/requests/{id}/accept 수락
POST /friends/requests/{id}/reject 거절
DELETE /friends/{id} 친구 삭제
POST /friends/{id}/block 차단
POST /friends/{id}/hide 숨김

채팅방 (/api/v1/chat/rooms)

Method 경로 설명
GET /chat/rooms 채팅방 목록
POST /chat/rooms 채팅방 생성
GET /chat/rooms/{id} 상세 조회
POST /chat/rooms/direct/{userId} 1:1 채팅 생성/조회
POST /chat/rooms/self 셀프 채팅
DELETE /chat/rooms/{id} 나가기
POST /chat/rooms/{id}/read 읽음 처리

메시지 (/api/v1/chat/rooms/{roomId}/messages)

Method 경로 설명
GET .../messages 히스토리 (커서 페이지네이션)
POST .../messages 메시지 전송 (REST 폴백)
PUT .../messages/{id} 수정
DELETE .../messages/{id} 삭제 (soft)
POST .../messages/{id}/reactions 리액션 추가
POST .../messages/{id}/forward 전달
GET .../messages/since?messageId= Gap Recovery

기타

컨트롤러 주요 엔드포인트
Notification 알림 설정 조회/수정, 디바이스 토큰 등록/해제
File 파일 업로드 (multipart)
Admin 신고 관리, 사용자 관리, 통계

전체 68개 엔드포인트의 상세 스펙은 API Reference 참조


WebSocket (STOMP)

클라이언트 → 서버

Destination 설명
/app/chat/message 메시지 전송
/app/chat/typing 타이핑 시작
/app/chat/typing/stop 타이핑 중지
/app/chat/read 읽음 확인
/app/chat/reaction 리액션 추가/제거

서버 → 클라이언트

Topic 이벤트
/topic/chat/room/{roomId} MESSAGE, LINK_PREVIEW_UPDATED
/topic/chat/room/{roomId}/reaction REACTION_ADDED/REMOVED
/topic/chat/room/{roomId}/event TYPING, READ, DELETE, UPDATE, USER_LEFT/JOINED
/topic/user/{userId} 채팅 목록 업데이트, 온라인 상태

메시지 페이로드

1
2
3
4
5
6
{
  "eventId": "고유 ID (중복 제거용)",
  "schemaVersion": 1,
  "type": "MESSAGE",
  "data": { ... }
}

메시지 전송 흐름

sequenceDiagram
    participant C as Flutter
    participant WS as STOMP 서버
    participant DB as PostgreSQL
    participant R as Redis Pub/Sub
    participant All as 3개 인스턴스
    participant FCM as FCM

    C->>WS: SEND /app/chat/message
    WS->>DB: 저장 (AES-256 암호화)
    WS->>R: PUBLISH chat:room:{id}
    R->>All: 전 인스턴스 수신 → WebSocket 전달
    WS->>FCM: 오프라인 멤버에게 푸시

관련 문서

API Reference (상세)백엔드 아키텍처