728x90
이 글은 Spring Boot 기반 MSA(Microservices Architecture) 환경에서 Auth-Service와 User-Service를 나눠 개발하면서 직접 겪었던 문제들과 그에 대한 해결 과정을 정리한 기록입니다.
1️⃣ Auth-Service vs User-Service 분리 설계 고민
문제:
- 회원가입 시 이메일, 비밀번호, 닉네임, 주소 등의 정보가 한 번에 들어오지만, 비밀번호는 Auth-Service가 관리하고,
- 나머지 정보는 User-Service가 관리하는 구조를 어떻게 깔끔하게 나눌지?
결론:
- Auth-Service → 이메일, 비밀번호, role만 저장
- User-Service → 닉네임, 이름, 전화번호, 주소 등 상세 정보 저장
- 회원가입 시 Auth-Service가 DB 저장 후 User-Service로 API 동기 호출로 프로필 생성 요청
참고:
- Kafka 이벤트 방식은 데이터 일관성 이슈가 있어 핵심 흐름에는 사용하지 않음
2️⃣ DTO 구조 설계 팁
문제:
- Auth-Service → User-Service로 넘길 때 불필요한 필드까지 넘기는 상황 방지
해결:
- SignUpRequest: 클라이언트 → Auth-Service
- CreateUserProfileRequest: Auth-Service → User-Service
public record SignUpRequest(
String email,
String password,
String nickname,
String name,
String phoneNumber,
AddressDto address
) {
public record AddressDto(String city, String street, String zipcode) {}
}
3️⃣ FeignClient 설정과 Connection Refused 문제
문제:
- User-Service가 없는 상태에서 FeignClient 호출 시 "Connection refused"
해결:
- 개발 중에는 @MockBean UserClient 설정 후 테스트
- 운영 환경에서는 User-Service 컨테이너 먼저 실행 확인
- application.yml:
- user-service.url: http://localhost:8082
4️⃣ AuthUser Entity Unique 제약조건
문제:
- email뿐만 아니라 nickname도 unique해야 할 때 설정 방법
해결:
@Table(name = "auth_users", uniqueConstraints = {
@UniqueConstraint(columnNames = {"email"}),
@UniqueConstraint(columnNames = {"nickname"})
})
5️⃣ Spring Security PasswordEncoder 빈 설정
문제:
- PasswordEncoder 주입 에러 발생
해결:
- SecurityConfig:
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
6️⃣ 테스트 코드 작성 팁 (AuthServiceTest)
문제:
- UserClient 실제 호출 없이 테스트하고 싶음
- verify(userClient).createUserProfile(any()) 작동 안 함
해결:
- @MockBean을 이용한 UserClient 주입
- Mockito verify 사용 시 static import 필수:
import static org.mockito.Mockito.verify;
import static org.mockito.ArgumentMatchers.any;
✅ 마무리
MSA 구조에서는 기능 분리뿐 아니라 데이터 흐름, API 호출 구조까지 고려해야 할 부분이 많습니다. 단순히 코드만 나누는 것이 아니라, 어떻게 데이터 일관성을 유지하고, 테스트 환경을 설계할지까지 고민했던 실제 경험을 공유했습니다.
추후에는 Spring Security와 Gateway 연동, Token 인증 필터 적용까지도 별도로 정리할 계획입니다.
'Spring & SpringBoot' 카테고리의 다른 글
| GitHub Actions + Self-hosted Runner로 구성한 MSA 자동 배포 시스템 (2) | 2025.07.22 |
|---|---|
| Spring Cloud Gateway와 MSA 환경에서 내부 서비스 간 인증 처리 전략 (0) | 2025.07.18 |
| Docker + Spring Boot + Nginx로 나만의 이미지 파일 서버 만들기 (1) | 2025.05.02 |
| Gateway란? Front Desk? Entrance? (0) | 2025.04.15 |
| MSA 환경에서 Spring Clound의 Role (1) | 2025.04.15 |