[BE] API 설계 - 100-hours-a-week/6-nemo-wiki GitHub Wiki
NE:MO API 명세서
📋 서비스 개요
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로 변경 처리됩니다.