[BE] API 설계 - 100-hours-a-week/6-nemo-wiki GitHub Wiki

NE:MO API 명세서

👉 명세서 Excel로 보기

📋 서비스 개요

NE:MO는 모임 관리 서비스로, 사용자가 모임을 생성하고 모임 내에서 일정을 관리할 수 있는 플랫폼입니다.

주요 기능

  • 모임 생성 및 관리
  • 모임 내 일정 생성 및 참여 관리
  • 실시간 알림 (알림톡, 이메일, 서비스 내 알림)
  • 카카오 간편 로그인
  • 비회원도 모임 목록 검색 가능

도메인 구조

  • 회원 (User): 서비스 사용자
  • 모임 (Group): 사용자들이 참여하는 커뮤니티 단위
  • 모임원 (Participant): 모임에 참여한 사용자
  • 일정 (Schedule): 모임 내 생성되는 일정
  • 일정 참여자 (Schedule Participant): 일정에 참여한 사용자
  • 외부 알림: 알림톡, 이메일 등 외부 채널
  • 내부 알림: 웹 서비스 내 알림

🔐 인증 API

1. 카카오 로그인

  • [GET] /api/v1/auth/login/kakao

카카오 OAuth를 통한 로그인 URL 요청

2. 로그아웃

  • [DELETE] /api/v1/auth/logout/kakao

    Headers:

Authorization: Bearer {ACCESS_TOKEN}
Cookie: Refresh Token

3. Access Token 재발행

  • [POST] /api/v1/auth/token/refresh

    Headers:

Cookie: Refresh Token

👤 사용자 API

1. 마이페이지 조회

  • [GET] /api/v2/users/{userId}

    Headers:

Authorization: Bearer {ACCESS_TOKEN}

2. 프로필 이미지 수정

  • [PUT] /api/v2/users/me/profile-image

    Headers:

Authorization: Bearer {ACCESS_TOKEN}

Request (multipart/form-data):

  • profileImage: 이미지 파일

🏠 모임 API

1. AI 기반 모임 정보 생성

  • [POST] /api/v1/groups/ai-generate

    Headers:

Authorization: Bearer {ACCESS_TOKEN}

Request Body:

{
  "name": "백엔드 스터디",
  "goal": "스프링 마스터하기",
  "category": "개발/IT",
  "location": "서울 강남",
  "period": "1개월 이하",
  "maxUserCount": 10,
  "isPlanCreated": true
}

2. 모임 생성

  • [POST] /api/v1/groups

    Headers:

Authorization: Bearer {ACCESS_TOKEN}

Request Body:

{
  "name": "SB 모임",
  "summary": "Spring boot를 개발할 수 있다.",
  "description": "Spring boot를 학습하는 SB 모임입니다.",
  "category": "개발",
  "location": "판교",
  "maxUserCount": 50,
  "imageUrl": "image.jpg",
  "tags": ["Java", "비전공자 환영", "온라인스터디", "기초부터"],
  "plan": "..."
}

3. 모임 수정 (전체)

  • [PUT] /api/v2/groups/{groupId} (요청 형식은 생성과 동일)

4. 모임 일부 정보 수정

  • 이름 수정 PATCH /api/v2/groups/{groupId}/name
{ "name": "새로운 모임명" }
  • 요약 수정 PATCH /api/v2/groups/{groupId}/summary
{ "summary": "새로운 한줄소개" }
  • 설명 수정 PATCH /api/v2/groups/{groupId}/description
{ "description": "새로운 설명" }
  • 기본정보 수정 PATCH /api/v2/groups/{groupId}/info
{ "category": "개발", "location": "서울", "maxUserCount": 20 }
  • 대표 이미지 수정 PATCH /api/v2/groups/{groupId}/image
{ "imageUrl": "https://..." }

5. 모임 해체

  • [DELETE] /api/v2/groups/{groupId}

    Headers:

Authorization: Bearer {ACCESS_TOKEN}

6. 모임 리스트 조회

  • [GET] /api/v1/groups Query Params: ?sort=createdAt&page=0&size=10

7. 모임 검색

  • [GET] /api/v1/groups/search Query Params: ?keyword=스터디&sort=createdAt&page=0&size=10

8. 모임 상세 조회

  • [GET] /api/v1/groups/{groupId}

👥 모임원 API

1. 모임 가입 신청

  • [POST] /api/v1/groups/{groupId}/applications

    Headers:

Authorization: Bearer {ACCESS_TOKEN}

2. 모임원 추방

  • [PATCH] /api/v2/groups/{groupId}/participants/{userId}
{ "status": "KICKED" }

3. 모임 탈퇴

  • [PATCH] /api/v2/groups/{groupId}/participants/me
{ "status": "WITHDRAWN" }

4. 모임원 리스트 조회

  • [GET] /api/v1/groups/{groupId}/participants

5. 나의 모임 목록 조회

  • [GET] /api/v1/groups/me

    Headers:

Authorization: Bearer {ACCESS_TOKEN}

## 📅 일정 API

### 1. 일정 생성

* **[POST] /api/v1/schedules**

  **Headers:**

Authorization: Bearer {ACCESS_TOKEN}


**Request Body:**

```json
{
  "groupId": 2,
  "title": "일정명",
  "description": "API 설계 학습",
  "address": "카카오테크 부트캠프",
  "addressDetail": "RYON 3",
  "startAt": "2025-04-01T14:00:00",
  "endAt": "2025-04-01T16:00:00",
  "maximumParticipant": 10
}

2. 일정 삭제(취소)

  • [DELETE] /api/v1/schedules/{scheduleId}

    Headers:

    Authorization: Bearer {ACCESS_TOKEN}
    

    Request Body:

    {
      "status": "CANCELED"
    }
    

3. 일정 상세 조회

  • [GET] /api/v1/schedules/{scheduleId}

4. 모임의 일정 리스트 조회 (모임 상세 - 일정)

  • [GET] /api/v1/{groupId}/schedules

5. 일정 참/불참 선택

  • [PATCH] /api/v1/schedules/{scheduleId}/participants

    Headers:

    Authorization: Bearer {ACCESS_TOKEN}
    

    Request Body:

    {
      "status": "ACCEPTED"
    }
    

    Status ENUM:

    • PENDING
    • ACCEPTED
    • REJECTED

    일정이 취소되어도 일정 참여자의 상태는 변경되지 않습니다.
    불필요한 데이터 변경을 최소화하기 위함입니다.


6. 나의 일정 리스트 조회

  • [GET] /api/v1/schedule/me

    Headers:

    Authorization: Bearer {ACCESS_TOKEN}
    

🔔 알림 API

1. 알림 조회

  • [GET] /api/v2/notices?sort=createdAt,desc&cursor=2025-04-23T10:00:00&cursorId=123&size=10

    Headers:

    Authorization: Bearer {ACCESS_TOKEN}
    

2. 알림 읽음 처리

  • [PATCH] /api/v2/notifications/{id}

    Headers:

    Authorization: Bearer {ACCESS_TOKEN}
    

    별도의 Request Body 없이 서버에서 isRead = true로 변경 처리됩니다.