Skip to content

Conversation

@DDINGJOO
Copy link
Owner

목적

SMS 인증을 위한 Kafka 이벤트 발행 기능을 구현합니다.
Notification Service에서 SMS 발송을 처리할 수 있도록 이벤트를 제공합니다.

Kafka 토픽

1. sms-confirm-request

발행 시점: SMS 인증 코드 발급 시

{
  "phoneNumber": "01012345678",
  "code": "123456"
}

2. phone-number-verified

발행 시점: SMS 인증 완료 시

{
  "userId": "user-id-123",
  "phoneNumber": "01012345678"
}

API 엔드포인트

Method Endpoint 설명
POST /api/v1/auth/sms/{userId}/{phoneNumber} 인증 코드 발급
GET /api/v1/auth/sms/{userId}/{phoneNumber}?code=123456 인증 확인
PUT /api/v1/auth/sms/{userId}/{phoneNumber} 재발신

인증 플로우

1. 클라이언트 → POST /api/v1/auth/sms/{userId}/{phoneNumber}
2. Auth Server → 인증 코드 생성 (6자리)
3. Auth Server → Redis 저장 (key: sms:{userId}:{phoneNumber}, TTL: 5분)
4. Auth Server → sms-confirm-request 이벤트 발행
5. Notification Service → SMS 발송
6. 사용자 → SMS 수신
7. 클라이언트 → GET /api/v1/auth/sms/{userId}/{phoneNumber}?code=123456
8. Auth Server → Redis 검증
9. Auth Server → 성공 시 phoneNumber 암호화 → DB 저장
10. Auth Server → phone-number-verified 이벤트 발행

신규 파일

파일 설명
SmsConfirmRequest.java SMS 인증 코드 발송 이벤트 DTO
PhoneNumberVerifiedEvent.java 전화번호 인증 완료 이벤트 DTO
SmsConfirmRequestEventPub.java sms-confirm-request Publisher
PhoneNumberVerifiedEventPub.java phone-number-verified Publisher
SmsCodeGenerator.java 인증 코드 생성 및 Redis 저장
SmsConfirmService.java 서비스 인터페이스
SmsConfirmServiceImpl.java 서비스 구현체
SmsConfirmController.java API 컨트롤러

Redis 키 구조

  • : sms:{userId}:{phoneNumber}
  • : 인증 코드 (6자리) 또는 "confirmed"
  • TTL: 5분 (인증 코드) / 10분 (confirmed 상태)

테스트

  • 빌드 성공
  • 전체 테스트 통과

관련 이슈

Closes #75

SMS 인증을 위한 Kafka 이벤트 발행 기능을 구현합니다.

## 신규 파일

### 이벤트 DTO
- SmsConfirmRequest.java: SMS 인증 코드 발송 이벤트 (phoneNumber, code)
- PhoneNumberVerifiedEvent.java: 전화번호 인증 완료 이벤트 (userId, phoneNumber)

### Publisher
- SmsConfirmRequestEventPub.java: sms-confirm-request 토픽 발행
- PhoneNumberVerifiedEventPub.java: phone-number-verified 토픽 발행

### 코드 생성기
- SmsCodeGenerator.java: 인증 코드 생성 및 Redis 저장

### 서비스
- SmsConfirmService.java: 인터페이스
- SmsConfirmServiceImpl.java: 구현체

### 컨트롤러
- SmsConfirmController.java: API 엔드포인트

## Kafka 토픽

### 1. sms-confirm-request
- 발행 시점: SMS 인증 코드 발급 시
- 스키마: { phoneNumber, code }

### 2. phone-number-verified
- 발행 시점: SMS 인증 완료 시
- 스키마: { userId, phoneNumber }

## API 엔드포인트

| Method | Endpoint | 설명 |
|--------|----------|------|
| POST | /api/v1/auth/sms/{userId}/{phoneNumber} | 인증 코드 발급 |
| GET | /api/v1/auth/sms/{userId}/{phoneNumber}?code=123456 | 인증 확인 |
| PUT | /api/v1/auth/sms/{userId}/{phoneNumber} | 재발신 |

## 인증 플로우

1. 클라이언트 → POST 요청 (userId, phoneNumber)
2. Auth Server → 인증 코드 생성 → Redis 저장 (sms:{userId}:{phoneNumber})
3. Auth Server → sms-confirm-request 이벤트 발행
4. Notification Service → SMS 발송
5. 클라이언트 → GET 요청 (인증 코드)
6. Auth Server → Redis 검증 → 성공 시 DB 저장 (암호화)
7. Auth Server → phone-number-verified 이벤트 발행

Closes #75
@DDINGJOO DDINGJOO merged commit 1a27d09 into main Dec 12, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEAT] SMS 인증 코드 발송 이벤트 구현

2 participants