커뮤니티
개요
기수(Cohort) 기반으로 사용자를 모집하고, 참가 완료 시 카카오 오픈채팅 링크와 알림톡을 발송하는 기능입니다.
기수(Cohort) 구조
| 필드 | 설명 |
|---|---|
name | 기수 이름 |
capacity | 최대 정원 |
currentCount | 현재 참가 인원 |
openChatUrl | 카카오 오픈채팅 URL |
expiredAt | 모집 마감 시각 |
참가 흐름
GET /api/community/cohorts/current ← 현재 모집 중인 기수 조회
↓
POST /api/community/cohorts/{id}/join
↓
비관적 락(PESSIMISTIC_WRITE)으로 기수 행 잠금
↓
정원 초과 여부 확인 (isFull())
↓ 정원 미달
currentCount++ 후 저장
↓
카카오 알림톡 발송 (오픈채팅 URL 포함)
동시성 제어
여러 사용자가 동시에 마지막 자리를 두고 참가 요청을 보낼 때 정원을 초과하지 않도록 **비관적 락(Pessimistic Lock)**을 사용합니다.
기수 행을 조회할 때 DB 수준의 쓰기 잠금을 획득하고, 정원 초과 여부 확인과 인원 증가를 하나의 원자적 흐름으로 처리합니다. 이를 통해 경쟁 조건(race condition)을 방지합니다.
알림 발송
카카오 비즈메시지(알림톡) API를 통해 참가 확인 메시지와 오픈채팅 링크를 사용자 전화번호로 발송합니다. 템플릿 코드와 변수 치환 방식을 사용합니다.