@startuml
!theme mono
title User Service 클래스 다이어그램 (요약)
' ====================
' Layered Architecture
' ====================
package "Presentation Layer" {
class UserController {
+ register()
+ login()
+ logout()
+ getProfile()
+ updateProfile()
+ changePassword()
}
}
package "Business Layer" {
interface UserService {
+ register()
+ getProfile()
+ updateProfile()
+ changePassword()
+ updateLastLoginAt()
}
interface AuthenticationService {
+ login()
+ logout()
}
class UserServiceImpl implements UserService
class AuthenticationServiceImpl implements AuthenticationService
}
package "Data Access Layer" {
interface UserRepository
interface StoreRepository
}
package "Domain Layer" {
class User {
- id: UUID
- name: String
- phoneNumber: String
- email: String
- passwordHash: String
- role: UserRole
- status: UserStatus
- lastLoginAt: LocalDateTime
}
class Store {
- id: UUID
- name: String
- industry: String
- address: String
- businessHours: String
}
enum UserRole {
OWNER
ADMIN
}
enum UserStatus {
ACTIVE
INACTIVE
LOCKED
WITHDRAWN
}
}
package "DTO Layer" {
class "Request DTOs" as RequestDTO {
RegisterRequest
LoginRequest
UpdateProfileRequest
ChangePasswordRequest
}
class "Response DTOs" as ResponseDTO {
RegisterResponse
LoginResponse
LogoutResponse
ProfileResponse
}
}
package "Exception Layer" {
enum UserErrorCode {
USER_DUPLICATE_EMAIL
USER_DUPLICATE_PHONE
USER_NOT_FOUND
AUTH_FAILED
AUTH_INVALID_TOKEN
PWD_INVALID_CURRENT
PWD_SAME_AS_CURRENT
}
}
package "Configuration Layer" {
class SecurityConfig
class RedisConfig
class AsyncConfig
class SwaggerConfig
}
' ====================
' Layer 간 의존성
' ====================
' Vertical dependencies (Top → Bottom)
UserController --> UserService
UserController --> AuthenticationService
UserServiceImpl --> UserRepository
UserServiceImpl --> StoreRepository
AuthenticationServiceImpl --> UserRepository
AuthenticationServiceImpl --> StoreRepository
UserRepository --> User
StoreRepository --> Store
' DTO usage
UserController ..> RequestDTO : uses
UserController ..> ResponseDTO : uses
UserServiceImpl ..> RequestDTO : uses
UserServiceImpl ..> ResponseDTO : uses
AuthenticationServiceImpl ..> RequestDTO : uses
AuthenticationServiceImpl ..> ResponseDTO : uses
' Domain relationships
User "1" -- "0..1" Store : has >
User +-- UserRole
User +-- UserStatus
' Exception
UserServiceImpl ..> UserErrorCode : throws
AuthenticationServiceImpl ..> UserErrorCode : throws
' Configuration
SecurityConfig ..> UserService : configures
RedisConfig ..> UserServiceImpl : provides Redis
' ====================
' Architecture Notes
' ====================
note top of UserController
Presentation Layer
REST API 엔드포인트
end note
note top of UserService
Business Layer
비즈니스 로직 처리
트랜잭션 관리
end note
note top of UserRepository
Data Access Layer
JPA 기반 CRUD
end note
note top of User
Domain Layer
비즈니스 엔티티
도메인 로직
end note
note bottom of "Presentation Layer"
Layered Architecture Pattern
각 계층은 바로 아래 계층만 의존
상위 계층은 하위 계층을 알지만
하위 계층은 상위 계층을 모름
end note
note right of UserServiceImpl
핵심 비즈니스 플로우
1. 회원가입
- 중복 검증
- 비밀번호 해싱
- User/Store 생성
- JWT 발급
- Redis 세션 저장
2. 로그인
- 인증 정보 검증
- JWT 발급
- 최종 로그인 시각 업데이트
3. 프로필 관리
- 조회/수정
- 비밀번호 변경
4. 로그아웃
- Redis 세션 삭제
- JWT Blacklist 추가
end note
note right of User
도메인 특성
- User와 Store는 1:1 관계
- UserRole: OWNER(소상공인), ADMIN
- UserStatus: ACTIVE, INACTIVE,
LOCKED, WITHDRAWN
- JWT 기반 인증
- Redis 세션 관리
end note
@enduml