◇ 이메일 도메인 리팩토링
내부적으로 더 유연하고 확장 가능한 구조 확보, 외부적으로는 사용자의 계정 보안과 편의성을 크게 높이는 필수 기능들을 확보했음.
EmailService 비동기 처리:
개요: 메인 애플리케이션에 @EnableAsync를 선언하고, EmailService의 sendEmail 메서드에 @Async를 적용했음.
목표: 이메일 발송처럼 시간이 걸리는 네트워크 작업을 백그라운드 스레드에서 처리하게 바꿨음. 덕분에 API 응답 시간이 짧아지고 서버 자원 효율이 높아져서, 전체적인 시스템 성능과 사용자 경험 향상.
인증 코드 저장소 추상화:
작업: 기존의 VerificationCodeManager 역할을 VerificationCodeStore라는 인터페이스로 추상화하고, 기존 로직은 InMemoryVerificationCodeStore라는 메모리 기반 구현체로 분리했음.
목표: EmailVerificationService가 구체적인 저장 방식(ConcurrentHashMap)이 아니라 추상적인 역할(인터페이스)에만 의존하게 바꿈. 나중에 인증 코드 저장소를 Redis나 데이터베이스로 교체해야 할 때, 상위 서비스 코드를 바꿀 필요 없이 구현체만 교체하면 되는 유연하고 확장 가능한 구조를 확보.
EmailVerificationService 역할 명확화:
개요: 목적별로 나뉘어 있던 여러 send...Code 메서드를, 인증 목적(VerificationPurpose)을 파라미터로 받는 단일 sendCode 메서드로 통합했음.
목표: 코드 중복을 없애고, 서비스의 책임을 "어떤 목적이든, 요청받은 인증 코드를 만들고 보내는 것"으로 명확히 해서 유지보수성 향상.
작업절차:
△ VerificationPurpose.java (신규 생성) REGISTER, RESET_PASSWORD, FIND_ID 등 이메일 인증의 목적을 정의하는 열거형을 새로 만들었음.
△ VerificationCodeManager.java (수정) storeCode와 verifyCode 메서드가 VerificationPurpose를 파라미터로 받도록 수정해서, 여러 목적의 인증 코드를 충돌 없이 관리할 수 있도록 개선했음.
△ EmailVerificationService.java (리팩토링 및 수정) 이메일 중복 확인 같은 비즈니스 로직을 제거하고, "요청받은 목적의 이메일을 발송"하는 역할에만 집중하도록 리팩토링했음.
△ EmailVerificationController.java (수정) 리팩토링된 EmailVerificationService의 새로운 메서드를 호출하도록 수정하고, 회원가입용 API 엔드포인트를 더 명확하게 변경했음.
△ MemberAuthService.java (수정) EmailVerificationService에서 제거된 이메일 중복 확인 로직을 이 서비스로 가져와서, 비즈니스 규칙 검증의 책임을 명확하게 했음.
email
├── VerificationPurpose.java
├── controllers
│ ├── AccountIdFinderController.java
│ ├── EmailVerificationController.java
│ └── PasswordResetController.java
├── dtos
│ ├── ConfirmVerificationRequest.java
│ ├── FindIdResponse.java
│ ├── PasswordResetRequest.java
│ ├── PasswordResetTokenResponse.java
│ ├── SendPasswordResetCodeRequest.java
│ └── SendVerificationRequest.java
└── services
├── EmailService.java
├── InMemoryVerificationCodeStore.java
├── VerificationCodeStore.java
└── EmailVerificationService.java
'My Project' 카테고리의 다른 글
Flutter로컬커머스) 비밀번호 찾기 기능 구현 (0) | 2025.09.02 |
---|---|
Flutter로컬커머스) 인증메일 발송기능 구현 (1) | 2025.09.01 |
CRUD 이후 필요한 고급 기능 체크리스트 (1) | 2025.08.06 |