GROW Member Service는 플랫폼 전체의 회원 도메인 역할을 수행하는 핵심 마이크로서비스입니다.
회원의 **인증·인가(OAuth2 기반 소셜 로그인)**부터 프로필 관리, 휴대폰 인증, 탈퇴 및 개인정보 보호,
그리고 업적·포인트·퀴즈 결과·멤버 온도(평판) 등 성장 지표를 통합 관리합니다.
| 장무영 | 최지선 |
|---|---|
| GitHub | GitHub |
서비스는 DDD(Domain-Driven Design) 원칙을 중심으로 Hexagonal Architecture (Ports & Adapters) 구조로 설계되어,
도메인 로직과 인프라 의존성을 명확히 분리하고 높은 응집도와 낮은 결합도를 유지합니다.
핵심 비즈니스 규칙은 domain 계층에서 관리되며,
외부 연동(예: Kafka, Redis, JPA, 외부 API)은 infra 어댑터를 통해 주입됩니다.
application 계층에서는 트랜잭션 단위의 유스케이스(예: 회원 탈퇴, 포인트 적립, 업적 트리거)를 조합하고,
presentation 계층에서는 REST API를 통해 게이트웨이와 통신합니다.
모든 마이크로서비스(member, payment, notification 등)는 Kubernetes 환경에서 컨테이너 단위로 배포되며, 게이트웨이와 데이터 계층, 외부 연동 API까지 완전한 클라우드 네이티브 구조로 설계되었습니다.
서비스 간 연결은 Gateway, Kafka, Redis, Kubernetes를 중심으로 구성되어 있습니다.
| 구성 요소 | 역할 |
|---|---|
| 🧭 Gateway (Spring Cloud Gateway) | JWT 기반 인증 검증 및 요청 라우팅. 로그인 성공 후 게이트웨이 리다이렉트 처리 |
| 🧵 Kafka (Event Bus) | 각종 이벤트를 발행하고, 퀴즈/결제 결과 이벤트를 구독하여 데이터 동기화 |
| 💾 Redis (Cache & Lock) | 분산 캐시 및 멱등 처리(Idempotency Key) 관리 — SETNX 기반 요청 중복 방지 |
| 🗃️ MySQL (Primary DB) | 회원 프로필, 활동 이력, 포인트/업적 로그의 영속 데이터 저장소 |
| ☸️ Kubernetes | 서비스 배포·스케일링·롤링 업데이트를 자동화하여 고가용성(HA) 확보 |
| 📊 Prometheus + Grafana | 회원 이벤트 처리율, 로그인 성공률, 탈퇴 처리 지연 등 메트릭 기반 실시간 모니터링 |
| 구분 | 기능 설명 |
|---|---|
| 🔐 OAuth2 소셜 로그인 | Google, Kakao, Naver 등 외부 플랫폼 로그인 연동 및 신규 회원 자동 등록 |
| 👤 회원 정보 관리 | 프로필, 추가 정보(휴대폰, 주소 등) 수정 및 상태 관리 |
| 📱 휴대폰 인증 | 인증 토큰 기반으로 휴대폰 번호 검증 및 검증 상태 유지 |
| 🧾 회원 탈퇴 처리 | UUID 기반 개인정보 마스킹, 탈퇴 로그 저장 |
| 🌡️ 멤버 온도 시스템 | 리뷰 평균 점수 기반으로 온도(기본값 36.5℃) 변동 — 신뢰도 지표 반영 |
| 🏆 업적(Achievement) 관리 | 로그인, 인증, 결제, 퀴즈, 학습 등 이벤트 기반 업적 달성 처리 |
| 💰 포인트(Point) 관리 | 업적·퀴즈·결제 등 플랫폼 내 다양한 활동에 따른 포인트 적립 및 차감 |
| 🧠 퀴즈 결과 기록 관리 | 퀴즈 서비스와의 Kafka 이벤트 연동을 통해 퀴즈 참여 및 정답률 추적 |
| 📨 이벤트 기반 연동 | Notification/Payment/Challenge 등 타 서비스와 Kafka 이벤트로 통신 |
| 🧱 캐시 및 데이터 보호 | Redis 기반 캐시 관리, 민감 정보 마스킹 및 로그 저장으로 데이터 무결성 보장 |
| 이모지 | 타입 | 설명 | 예시 커밋 메시지 |
|---|---|---|---|
| ✨ | feat | 새로운 기능 추가 | feat: 로그인 기능 추가 |
| 🐛 | fix | 버그 수정 | fix: 회원가입 시 이메일 중복 체크 오류 수정 |
| 📝 | docs | 문서 수정 | docs: README 오타 수정 |
| 💄 | style | 코드 포맷, 세미콜론 누락 등 스타일 변경 (기능 변경 없음) | style: 코드 정렬 및 세미콜론 추가 |
| ♻️ | refactor | 코드 리팩토링 (기능 변경 없음) | refactor: 중복 코드 함수로 분리 |
| ⚡ | perf | 성능 개선 | perf: 이미지 로딩 속도 개선 |
| ✅ | test | 테스트 코드 추가/수정 | test: 유저 API 테스트 코드 추가 |
| 🛠️ | build | 빌드 시스템 관련 변경 | build: 배포 스크립트 수정 |
| 🔧 | ci | CI 설정 변경 | ci: GitHub Actions 워크플로우 수정 |
타입(범위): 간결한 설명 (50자 이내, 한글 작성)
(필요시) 변경 이유/상세 내용
-
하나의 커밋에는 하나의 목적만 담기
→ 여러 변경 사항을 한 커밋에 몰아넣지 않기
-
제목 끝에 마침표(.)를 붙이지 않기
-
본문(Body)은 선택 사항이지만, 변경 이유나 상세 설명이 필요할 때 작성
→ 72자 단위로 줄바꿈, 제목과 본문 사이에 한 줄 띄우기
-
작업 중간 저장은 WIP(Work In Progress)로 표시할 것
→ 예) WIP: 회원가입 로직 구현 중
팀원들이 주로 활동하는 시간대입니다.
이 시간에 맞춰 커뮤니케이션과 코드 리뷰, 회의 등을 진행합니다.
| 요일 | 활동 시간 |
|---|---|
| 📅 평일 | 14:00 ~ 18:00, 20:00 ~ 23:00 |
| 📅 주말 | 14:00 ~ 18:00 |
- PR 제목과 설명을 명확하게 작성 (변경 내용, 목적, 참고 이슈 등 포함)
- Conventional Commits 규칙을 준수하여 커밋 메시지 작성
- 하나의 PR에는 하나의 기능/이슈만 포함
- 코드 스타일, 네이밍, 로직, 성능, 보안, 예외 처리 등 꼼꼼히 확인
- 리뷰 코멘트에는 반드시 답변, 필요시 추가 커밋으로 반영
- 모든 리뷰 코멘트 resolve 후 머지
- 스쿼시 머지 방식 권장, 충돌 발생 시 머지 전 해결
- 리뷰는 24시간 이내 진행, 모르는 부분은 적극적으로 질문
- 리뷰 과정에서 배운 점은 팀 문서에 공유 (트러블 슈팅 등)