🔐 Auth 도메인 개요

사용자 인증과 소셜 로그인 연동을 담당합니다.

기존 User 도메인과 통신하여 로그인 검증을 수행하고, JWT·OAuth2 기반 인증 흐름과 RabbitMQ 이벤트 소비, Slack 알림 등 부가기능을 제공합니다.


📌 주요 기능

기능 설명
일반 로그인 AuthService가 User 도메인(UserClient)에서 사용자 정보를 조회 후 비밀번호(BCrypt) 검증
JWT 발급/재발급 **AuthController**에서 Access/Refresh 토큰을 발급하고, Refresh 토큰 쿠키 기반 재발급 지원
소셜 로그인(OAuth2) **OAuth2UserService**가 Naver/Google OAuth2 응답을 처리하고 기존 계정과 자동 연동
소셜 계정 매핑 UserSocial 엔티티로 provider별 사용자 식별자 관리, **UserSocialRepository**로 CRUD 수행
회원탈퇴 이벤트 처리 RabbitMQ로 전달된 user.withdrawn 이벤트를 **AuthUserEventConsumer**가 수신하여 매핑 정보 삭제
Slack 알림 이벤트 소비 실패 시 **SlackNotifier**가 Slack 채널로 오류 정보 전송

🏗️ 패키지 구조

📁 com.example.momo.domain.auth
├── 📁 application/          # 애플리케이션 서비스
│   ├── AuthService.java            # 로그인 처리
│   ├── OAuth2UserService.java      # OAuth2 사용자 정보 로딩 및 연동
│   └── 📁 dto/                     # 요청/응답 DTO
│       ├── LoginRequestDto.java
│       ├── LoginResponseDto.java
│       ├── CustomOAuth2User.java
│       ├── OAuth2Response.java
│       ├── GoogleOAuth2Dto.java
│       ├── NaverOAuth2Dto.java
│       └── AuthUser.java
├── 📁 domain/              # 도메인 엔티티
│   └── UserSocial.java             # 사용자-소셜 계정 매핑
├── 📁 infra/               # 인프라스트럭처
│   └── UserSocialRepository.java   # JPA 리포지토리
├── 📁 presentation/        # 프레젠테이션 레이어
│   └── AuthController.java         # /auth/login, /auth/reissue
├── 📁 event/               # RabbitMQ 이벤트 처리
│   ├── 📁 config/
│   │   └── AuthRabbitMQConfig.java     # 큐/익스체인지 설정
│   └── 📁 consumer/
│       └── AuthUserEventConsumer.java  # user.withdrawn 이벤트 소비
├── 📁 slack/               # Slack 알림
│   └── SlackNotifier.java
└── 📁 exception/
    ├── AuthException.java
    └── AuthExceptionHandler.java

🔄 인증 흐름 요약

로그인

  1. AuthController.login() → AuthService.loginUser()
  2. User 도메인에서 이메일로 사용자 조회 후 BCrypt로 비밀번호 검증
  3. 성공 시 Access/Refresh 토큰 발급 (JwtTokenProvider)

토큰 재발급

  1. AuthController.reissueToken()
  2. 쿠키에서 Refresh 토큰 추출 → 유효성 검증 후 Access 토큰 재생성

OAuth2 로그인

  1. OAuth2UserService.loadUser()
  2. 리소스 서버(Naver/Google) 응답 → OAuth2Response 변환