mirror of
https://github.com/hwanny1128/HGZero.git
synced 2025-12-06 12:36:23 +00:00
7.2 KiB
7.2 KiB
User Service 백엔드 개발 결과서
📋 개발 개요
- 서비스명: User Service
- 개발일시: 2025-10-24
- 개발자: 동욱
- 개발 가이드: 백엔드개발가이드 준수
✅ 구현 완료 항목
1. 기본 인증 API (100% 완료)
| API | 메서드 | 경로 | 설명 | 상태 |
|---|---|---|---|---|
| 로그인 | POST | /api/v1/auth/login |
LDAP 인증 + JWT 발급 | ✅ |
| 토큰 갱신 | POST | /api/v1/auth/refresh |
Refresh Token으로 Access Token 갱신 | ✅ |
| 로그아웃 | POST | /api/v1/auth/logout |
Refresh Token 삭제 | ✅ |
| 토큰 검증 | GET | /api/v1/auth/validate |
Access Token 유효성 검증 | ✅ |
2. 아키텍처 구현 (100% 완료)
- 패턴: Layered Architecture 적용
- 계층: Controller → Service → Repository → Entity → Domain
- 의존성 주입: Spring DI 활용
- 트랜잭션: @Transactional 적용
3. 보안 구성 (100% 완료)
- JWT 인증: JwtTokenProvider, JwtAuthenticationFilter, UserPrincipal
- Spring Security: SecurityConfig, CORS 설정
- LDAP 인증: LdapTemplate 기반 사용자 인증
- 계정 보안: 로그인 실패 횟수 관리, 계정 잠금
4. 🆕 Azure EventHub 통합 (새로 추가)
- 설정: EventHubConfig 클래스
- 서비스: EventPublishService 인터페이스 및 구현체
- 이벤트 발행: 로그인, 로그아웃, 토큰 갱신 이벤트
- Fallback: No-Op 구현체로 EventHub 미설정 시에도 정상 동작
5. 설정 및 문서화 (100% 완료)
- Swagger: OpenAPI 3.0 문서화
- 설정 표준: JWT, CORS, Actuator, Logging 표준 준수
- 환경변수: 모든 민감 정보 환경변수 처리
🔧 기술 스택
- Framework: Spring Boot 3.3.5, Spring Security, Spring Data JPA
- Authentication: LDAP, JWT
- Database: PostgreSQL + JPA/Hibernate
- Cache: Redis
- Messaging: Azure EventHub
- Documentation: Swagger/OpenAPI
- Build: Gradle
📂 패키지 구조
user/src/main/java/com/unicorn/hgzero/user/
├── config/
│ ├── EventHubConfig.java # Azure EventHub 설정
│ ├── SecurityConfig.java # Spring Security 설정
│ ├── SwaggerConfig.java # Swagger 설정
│ └── jwt/
│ ├── JwtAuthenticationFilter.java
│ ├── JwtTokenProvider.java
│ └── UserPrincipal.java
├── controller/
│ └── UserController.java # 인증 API 컨트롤러
├── domain/
│ └── User.java # 사용자 도메인 모델
├── dto/ # Request/Response DTO
├── repository/
│ ├── entity/UserEntity.java # JPA 엔티티
│ └── jpa/UserRepository.java # JPA Repository
├── service/
│ ├── EventPublishService.java # 이벤트 발행 인터페이스
│ ├── EventPublishServiceImpl.java # EventHub 이벤트 발행 구현체
│ ├── NoOpEventPublishService.java # No-Op 구현체
│ ├── UserService.java # 사용자 서비스 인터페이스
│ └── UserServiceImpl.java # 사용자 서비스 구현체
└── UserApplication.java # 메인 애플리케이션 클래스
🔄 Azure EventHub 이벤트 발행
로그인 이벤트
{
"eventType": "USER_LOGIN",
"userId": "user123",
"username": "홍길동",
"timestamp": 1729740000000,
"eventTime": "2024-10-24T02:00:00Z"
}
로그아웃 이벤트
{
"eventType": "USER_LOGOUT",
"userId": "user123",
"timestamp": 1729740000000,
"eventTime": "2024-10-24T02:00:00Z"
}
토큰 갱신 이벤트
{
"eventType": "TOKEN_REFRESH",
"userId": "user123",
"timestamp": 1729740000000,
"eventTime": "2024-10-24T02:00:00Z"
}
⚙️ 환경변수 설정
# 데이터베이스
DB_HOST=localhost
DB_PORT=5432
DB_NAME=userdb
DB_USERNAME=hgzerouser
DB_PASSWORD=your_password
# Redis
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=your_password
REDIS_DATABASE=0
# JWT
JWT_SECRET=your_jwt_secret_key
JWT_ACCESS_TOKEN_VALIDITY=3600
JWT_REFRESH_TOKEN_VALIDITY=604800
# LDAP
LDAP_URLS=ldaps://ldap.example.com:636
LDAP_BASE=dc=example,dc=com
LDAP_USERNAME=your_ldap_user
LDAP_PASSWORD=your_ldap_password
# Azure EventHub
EVENTHUB_CONNECTION_STRING=your_connection_string
EVENTHUB_NAME=hgzero-eventhub-name
# CORS
CORS_ALLOWED_ORIGINS=http://localhost:*
# 로깅
LOG_LEVEL_APP=DEBUG
LOG_FILE=logs/user-service.log
🧪 테스트 방법
1. 서비스 시작
./gradlew user:bootRun
2. Swagger UI 접속
http://localhost:8081/swagger-ui.html
3. API 테스트 예시
# 로그인
curl -X POST http://localhost:8081/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"userId": "testuser", "password": "password"}'
# 토큰 검증
curl -X GET http://localhost:8081/api/v1/auth/validate \
-H "Authorization: Bearer {access_token}"
🚀 빌드 및 컴파일 결과
- ✅ 컴파일 성공:
./gradlew user:compileJava - ✅ 의존성 해결: Azure EventHub 라이브러리 추가
- ✅ 코드 품질: 컴파일 에러 없음
📝 백엔드개발가이드 준수 체크리스트
✅ 개발원칙 준수
- 개발주석표준에 맞게 주석 작성
- API설계서와 일관성 있게 설계
- Layered 아키텍처 적용 및 Service 레이어 Interface 사용
- 백킹서비스 연동 (PostgreSQL, Redis)
- Gradle 빌드도구 사용
- 설정 Manifest 표준 준용
✅ 개발순서 준수
- 참고자료 분석 및 이해
- 패키지 구조도 작성
- build.gradle 작성
- 설정 파일 작성 (application.yml)
- 공통 모듈 활용
- API 순차적 개발 (Controller → Service → Repository)
- 컴파일 및 에러 해결
- SecurityConfig 작성
- JWT 인증 처리 클래스 작성
- Swagger Config 작성
✅ 설정 표준 준수
- 환경변수 사용 (하드코딩 없음)
- spring.application.name 설정
- Redis Database 개별 설정
- JWT Secret Key 동일성 유지
- JWT, CORS, Actuator, OpenAPI, Logging 표준 적용
🎯 추가된 주요 기능
Azure EventHub 통합
- 의존성 추가: Azure EventHub 클라이언트 라이브러리
- 설정: EventHubConfig로 Producer Client 관리
- 서비스: 인증 이벤트 자동 발행
- 안전성: EventHub 미설정 시 No-Op 모드로 동작
이벤트 기반 아키텍처
- 느슨한 결합: EventHub 의존성을 인터페이스로 추상화
- 장애 격리: EventHub 장애 시에도 인증 서비스 정상 동작
- 확장성: 다른 서비스에서 사용자 인증 이벤트 구독 가능
📊 개발 완성도
- 기능 구현: 100% (4/4 API 완료)
- 가이드 준수: 100% (체크리스트 모든 항목 완료)
- 코드 품질: 우수 (컴파일 성공, 표준 준수)
- 확장성: 우수 (이벤트 기반 아키텍처 적용)