add outer/inner sequence
@@ -0,0 +1,104 @@
|
||||
=====================================
|
||||
PlantUML 파일 검증 시작 (UTF-8)
|
||||
=====================================
|
||||
|
||||
[1] 검증 중: design/backend/sequence/inner/ai-트렌드분석및추천.puml
|
||||
❌ 실패: ai-트렌드분석및추천.puml (HTTP 400)
|
||||
|
||||
[2] 검증 중: design/backend/sequence/inner/analytics-대시보드조회-캐시미스.puml
|
||||
✅ 성공: analytics-대시보드조회-캐시미스.puml
|
||||
|
||||
[3] 검증 중: design/backend/sequence/inner/analytics-대시보드조회-캐시히트.puml
|
||||
✅ 성공: analytics-대시보드조회-캐시히트.puml
|
||||
|
||||
[4] 검증 중: design/backend/sequence/inner/analytics-배포완료구독.puml
|
||||
✅ 성공: analytics-배포완료구독.puml
|
||||
|
||||
[5] 검증 중: design/backend/sequence/inner/analytics-이벤트생성구독.puml
|
||||
✅ 성공: analytics-이벤트생성구독.puml
|
||||
|
||||
[6] 검증 중: design/backend/sequence/inner/analytics-참여자등록구독.puml
|
||||
✅ 성공: analytics-참여자등록구독.puml
|
||||
|
||||
[7] 검증 중: design/backend/sequence/inner/content-이미지생성.puml
|
||||
❌ 실패: content-이미지생성.puml (HTTP 400)
|
||||
|
||||
[8] 검증 중: design/backend/sequence/inner/distribution-다중채널배포.puml
|
||||
❌ 실패: distribution-다중채널배포.puml (HTTP 400)
|
||||
|
||||
[9] 검증 중: design/backend/sequence/inner/distribution-배포상태조회.puml
|
||||
✅ 성공: distribution-배포상태조회.puml
|
||||
|
||||
[10] 검증 중: design/backend/sequence/inner/event-AI추천요청.puml
|
||||
✅ 성공: event-AI추천요청.puml
|
||||
|
||||
[11] 검증 중: design/backend/sequence/inner/event-목록조회.puml
|
||||
✅ 성공: event-목록조회.puml
|
||||
|
||||
[12] 검증 중: design/backend/sequence/inner/event-목적선택.puml
|
||||
✅ 성공: event-목적선택.puml
|
||||
|
||||
[13] 검증 중: design/backend/sequence/inner/event-상세조회.puml
|
||||
✅ 성공: event-상세조회.puml
|
||||
|
||||
[14] 검증 중: design/backend/sequence/inner/event-콘텐츠선택.puml
|
||||
✅ 성공: event-콘텐츠선택.puml
|
||||
|
||||
[15] 검증 중: design/backend/sequence/inner/event-대시보드조회.puml
|
||||
❌ 실패: event-대시보드조회.puml (HTTP 400)
|
||||
|
||||
[16] 검증 중: design/backend/sequence/inner/event-추천결과조회.puml
|
||||
✅ 성공: event-추천결과조회.puml
|
||||
|
||||
[17] 검증 중: design/backend/sequence/inner/event-이미지결과조회.puml
|
||||
✅ 성공: event-이미지결과조회.puml
|
||||
|
||||
[18] 검증 중: design/backend/sequence/inner/event-이미지생성요청.puml
|
||||
✅ 성공: event-이미지생성요청.puml
|
||||
|
||||
[19] 검증 중: design/backend/sequence/inner/event-최종승인및배포.puml
|
||||
✅ 성공: event-최종승인및배포.puml
|
||||
|
||||
[20] 검증 중: design/backend/sequence/inner/participation-당첨자추첨.puml
|
||||
✅ 성공: participation-당첨자추첨.puml
|
||||
|
||||
[21] 검증 중: design/backend/sequence/inner/participation-이벤트참여.puml
|
||||
✅ 성공: participation-이벤트참여.puml
|
||||
|
||||
[22] 검증 중: design/backend/sequence/inner/participation-참여자목록조회.puml
|
||||
✅ 성공: participation-참여자목록조회.puml
|
||||
|
||||
[23] 검증 중: design/backend/sequence/inner/user-로그인.puml
|
||||
✅ 성공: user-로그인.puml
|
||||
|
||||
[24] 검증 중: design/backend/sequence/inner/user-로그아웃.puml
|
||||
✅ 성공: user-로그아웃.puml
|
||||
|
||||
[25] 검증 중: design/backend/sequence/inner/user-회원가입.puml
|
||||
✅ 성공: user-회원가입.puml
|
||||
|
||||
[26] 검증 중: design/backend/sequence/inner/user-프로필수정.puml
|
||||
✅ 성공: user-프로필수정.puml
|
||||
|
||||
[27] 검증 중: design/backend/sequence/outer/고객참여플로우.puml
|
||||
✅ 성공: 고객참여플로우.puml
|
||||
|
||||
[28] 검증 중: design/backend/sequence/outer/성과분석플로우.puml
|
||||
✅ 성공: 성과분석플로우.puml
|
||||
|
||||
[29] 검증 중: design/backend/sequence/outer/사용자인증플로우.puml
|
||||
✅ 성공: 사용자인증플로우.puml
|
||||
|
||||
[30] 검증 중: design/backend/sequence/outer/이벤트생성플로우.puml
|
||||
❌ 실패: 이벤트생성플로우.puml (HTTP 400)
|
||||
|
||||
=====================================
|
||||
검증 완료
|
||||
=====================================
|
||||
총 파일 수: 30
|
||||
성공: 25
|
||||
실패: 5
|
||||
|
||||
상세 결과: debug/puml-validation/validation-result.txt
|
||||
오류 상세: debug/puml-validation/validation-errors.txt
|
||||
=====================================
|
||||
@@ -0,0 +1,32 @@
|
||||
[From string (line 208) ]
|
||||
|
||||
@startuml ai-트렌드분석및추천
|
||||
|
||||
|
||||
|
||||
|
||||
...
|
||||
... ( skipping 354 lines )
|
||||
...
|
||||
트렌드: {트렌드}
|
||||
매장: {매장정보}
|
||||
|
||||
출력 형식:
|
||||
- 이벤트 제목
|
||||
- 추천 경품 (예산: 저)
|
||||
- 참여 방법 (난이도: 낮음)
|
||||
- 예상 참여자 수
|
||||
- 예상 비용
|
||||
- 예상 ROI"
|
||||
end note
|
||||
|
||||
AIClient -> ExternalAPI: POST /api/v1/recommend\n(저비용 옵션)
|
||||
ExternalAPI --> AIClient: 200 OK\n{추천안 1}
|
||||
AIClient --> CB: 추천안 1
|
||||
deactivate AIClient
|
||||
CB --> RecommendEngine: 옵션 1 완료
|
||||
deactivate CB
|
||||
|
||||
and
|
||||
^^^^^
|
||||
Syntax Error? (Assumed diagram type: sequence)
|
||||
|
After Width: | Height: | Size: 223 KiB |
|
After Width: | Height: | Size: 153 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 110 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 80 KiB |
@@ -0,0 +1,32 @@
|
||||
[From string (line 101) ]
|
||||
|
||||
@startuml content-이미지생성
|
||||
|
||||
|
||||
|
||||
|
||||
...
|
||||
... ( skipping 247 lines )
|
||||
...
|
||||
CB --> Generator: Circuit State
|
||||
deactivate CB
|
||||
|
||||
Generator -> DALLEClient: Fallback - DALL-E API 호출\n{prompt, style: SIMPLE}\nTimeout: 20초
|
||||
activate DALLEClient
|
||||
alt Fallback 성공
|
||||
DALLEClient --> Generator: 심플 이미지 URL
|
||||
deactivate DALLEClient
|
||||
Generator -> CDN: CDN 업로드 요청\n{imageUrl, eventId, style: SIMPLE}
|
||||
activate CDN
|
||||
CDN --> Generator: CDN URL (심플)
|
||||
deactivate CDN
|
||||
else Fallback 실패
|
||||
DALLEClient --> Generator: 실패 응답
|
||||
deactivate DALLEClient
|
||||
Generator -> Generator: 기본 템플릿 사용\n(심플)
|
||||
end
|
||||
end
|
||||
|
||||
and
|
||||
^^^^^
|
||||
Syntax Error? (Assumed diagram type: sequence)
|
||||
|
After Width: | Height: | Size: 184 KiB |
@@ -0,0 +1,32 @@
|
||||
[From string (line 92) ]
|
||||
|
||||
@startuml distribution-다중채널배포
|
||||
|
||||
|
||||
|
||||
|
||||
...
|
||||
... ( skipping 238 lines )
|
||||
...
|
||||
else 실패 (일시적 오류)
|
||||
WooridongneTV --> Retry: 500 Internal Server Error
|
||||
deactivate WooridongneTV
|
||||
note over Retry: 지수 백오프 대기\n(1초 → 2초 → 4초)
|
||||
end
|
||||
end
|
||||
|
||||
alt 3회 모두 실패
|
||||
Retry --> Distributor: 배포 실패 (Retry 소진)
|
||||
deactivate Retry
|
||||
Distributor -> CB: recordFailure("WooridongneTV")
|
||||
note over CB: 실패율 50% 초과 시\nCircuit Open (30초)
|
||||
Distributor -> DB: 배포 채널 로그 저장\n{channel: WooridongneTV, status: FAILED, retries: 3}
|
||||
Distributor --> Service: 실패 (Retry 소진)
|
||||
end
|
||||
end
|
||||
deactivate Distributor
|
||||
end
|
||||
|
||||
and
|
||||
^^^^^
|
||||
Syntax Error? (Assumed diagram type: sequence)
|
||||
|
After Width: | Height: | Size: 202 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 166 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 44 KiB |
@@ -0,0 +1,32 @@
|
||||
[From string (line 38) ]
|
||||
|
||||
@startuml event-대시보드조회
|
||||
|
||||
|
||||
|
||||
|
||||
...
|
||||
... ( skipping 184 lines )
|
||||
...
|
||||
|
||||
alt 캐시 히트
|
||||
Cache --> Service: Dashboard data
|
||||
Service --> Controller: DashboardResponse
|
||||
|
||||
else 캐시 미스
|
||||
Cache --> Service: null
|
||||
deactivate Cache
|
||||
|
||||
par
|
||||
Service -> Repo: findTopByStatusAndUserId(ACTIVE, userId, limit=5)
|
||||
activate Repo
|
||||
Repo -> DB: SELECT e.*, COUNT(p.id) as participant_count\nFROM events e\nLEFT JOIN participants p ON e.id = p.ev ...
|
||||
activate DB
|
||||
DB --> Repo: Active events
|
||||
deactivate DB
|
||||
Repo --> Service: List<Event> (active)
|
||||
deactivate Repo
|
||||
|
||||
and
|
||||
^^^^^
|
||||
Syntax Error? (Assumed diagram type: sequence)
|
||||
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 67 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 47 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 66 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 146 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 104 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 97 KiB |
@@ -0,0 +1,32 @@
|
||||
[From string (line 38) ]
|
||||
|
||||
@startuml user-로그아웃
|
||||
|
||||
|
||||
|
||||
|
||||
...
|
||||
... ( skipping 184 lines )
|
||||
...
|
||||
activate Controller
|
||||
|
||||
Controller -> Controller: @AuthenticationPrincipal\n(JWT에서 userId 추출)
|
||||
|
||||
Controller -> Controller: JWT 토큰 추출\n(Authorization 헤더에서)
|
||||
|
||||
Controller -> AuthService: logout(token, userId)
|
||||
activate AuthService
|
||||
|
||||
== 1단계: JWT 토큰 검증 ==
|
||||
|
||||
AuthService -> JwtProvider: validateToken(token)
|
||||
activate JwtProvider
|
||||
JwtProvider -> JwtProvider: JWT 서명 검증\n(만료 시간 확인)
|
||||
JwtProvider --> AuthService: boolean (유효 여부)
|
||||
deactivate JwtProvider
|
||||
|
||||
alt JWT 토큰 무효
|
||||
AuthService --> Controller: throw InvalidTokenException\n("유효하지 않은 토큰입니다")
|
||||
Controller --> [: 401 Unauthorized\n{"error": "유효하지 않은 토큰입니다"}
|
||||
^^^^^
|
||||
Syntax Error? (Assumed diagram type: sequence)
|
||||
|
After Width: | Height: | Size: 79 KiB |
@@ -0,0 +1,32 @@
|
||||
[From string (line 49) ]
|
||||
|
||||
@startuml user-로그인
|
||||
|
||||
|
||||
|
||||
|
||||
...
|
||||
... ( skipping 195 lines )
|
||||
...
|
||||
activate AuthService
|
||||
|
||||
== 1단계: 사용자 조회 ==
|
||||
|
||||
AuthService -> Service: findByPhoneNumber(phoneNumber)
|
||||
activate Service
|
||||
Service -> UserRepo: findByPhoneNumber(phoneNumber)
|
||||
activate UserRepo
|
||||
UserRepo -> UserDB: SELECT user_id, password_hash,\nrole, name, email\nFROM users\nWHERE phone_number = ?
|
||||
activate UserDB
|
||||
UserDB --> UserRepo: 사용자 정보 또는 NULL
|
||||
deactivate UserDB
|
||||
UserRepo --> Service: Optional<User>
|
||||
deactivate UserRepo
|
||||
Service --> AuthService: Optional<User>
|
||||
deactivate Service
|
||||
|
||||
alt 사용자 없음
|
||||
AuthService --> Controller: throw AuthenticationFailedException\n("전화번호 또는 비밀번호를 확인해주세요")
|
||||
Controller --> [: 401 Unauthorized\n{"error": "전화번호 또는 비밀번호를\n확인해주세요"}
|
||||
^^^^^
|
||||
Syntax Error? (Assumed diagram type: sequence)
|
||||
|
After Width: | Height: | Size: 105 KiB |
@@ -0,0 +1,32 @@
|
||||
[From string (line 45) ]
|
||||
|
||||
@startuml user-프로필수정
|
||||
|
||||
|
||||
|
||||
|
||||
...
|
||||
... ( skipping 191 lines )
|
||||
...
|
||||
|
||||
Controller -> Controller: @Valid 어노테이션 검증\n(이메일 형식, 필드 길이 등)
|
||||
|
||||
Controller -> Service: updateProfile(userId, UpdateProfileRequest)
|
||||
activate Service
|
||||
|
||||
== 1단계: 기존 사용자 정보 조회 ==
|
||||
|
||||
Service -> UserRepo: findById(userId)
|
||||
activate UserRepo
|
||||
UserRepo -> UserDB: SELECT * FROM users\nWHERE user_id = ?
|
||||
activate UserDB
|
||||
UserDB --> UserRepo: 사용자 정보
|
||||
deactivate UserDB
|
||||
UserRepo --> Service: User 엔티티
|
||||
deactivate UserRepo
|
||||
|
||||
alt 사용자 없음
|
||||
Service --> Controller: throw UserNotFoundException\n("사용자를 찾을 수 없습니다")
|
||||
Controller --> [: 404 Not Found\n{"error": "사용자를 찾을 수 없습니다"}
|
||||
^^^^^
|
||||
Syntax Error? (Assumed diagram type: sequence)
|
||||
|
After Width: | Height: | Size: 147 KiB |
@@ -0,0 +1,32 @@
|
||||
[From string (line 47) ]
|
||||
|
||||
@startuml user-회원가입
|
||||
|
||||
|
||||
|
||||
|
||||
...
|
||||
... ( skipping 193 lines )
|
||||
...
|
||||
|
||||
Controller -> Controller: @Valid 어노테이션 검증\n(이메일 형식, 비밀번호 8자 이상 등)
|
||||
|
||||
Controller -> Service: register(RegisterRequest)
|
||||
activate Service
|
||||
|
||||
== 1단계: 중복 사용자 확인 ==
|
||||
|
||||
Service -> UserRepo: findByPhoneNumber(phoneNumber)
|
||||
activate UserRepo
|
||||
UserRepo -> UserDB: SELECT * FROM users\nWHERE phone_number = ?
|
||||
activate UserDB
|
||||
UserDB --> UserRepo: 조회 결과
|
||||
deactivate UserDB
|
||||
UserRepo --> Service: Optional<User>
|
||||
deactivate UserRepo
|
||||
|
||||
alt 중복 사용자 존재
|
||||
Service --> Controller: throw DuplicateUserException\n("이미 가입된 전화번호입니다")
|
||||
Controller --> [: 400 Bad Request\n{"error": "이미 가입된 전화번호입니다"}
|
||||
^^^^^
|
||||
Syntax Error? (Assumed diagram type: sequence)
|
||||
|
After Width: | Height: | Size: 168 KiB |
@@ -0,0 +1,30 @@
|
||||
✅ design/backend/sequence/inner/ai-트렌드분석및추천.puml - HTTP 200
|
||||
✅ design/backend/sequence/inner/analytics-대시보드조회-캐시미스.puml - HTTP 200
|
||||
✅ design/backend/sequence/inner/analytics-대시보드조회-캐시히트.puml - HTTP 200
|
||||
✅ design/backend/sequence/inner/analytics-배포완료구독.puml - HTTP 200
|
||||
✅ design/backend/sequence/inner/analytics-이벤트생성구독.puml - HTTP 200
|
||||
✅ design/backend/sequence/inner/analytics-참여자등록구독.puml - HTTP 200
|
||||
✅ design/backend/sequence/inner/content-이미지생성.puml - HTTP 200
|
||||
✅ design/backend/sequence/inner/distribution-다중채널배포.puml - HTTP 200
|
||||
✅ design/backend/sequence/inner/distribution-배포상태조회.puml - HTTP 200
|
||||
✅ design/backend/sequence/inner/event-AI추천요청.puml - HTTP 200
|
||||
✅ design/backend/sequence/inner/event-목록조회.puml - HTTP 200
|
||||
✅ design/backend/sequence/inner/event-목적선택.puml - HTTP 200
|
||||
✅ design/backend/sequence/inner/event-상세조회.puml - HTTP 200
|
||||
✅ design/backend/sequence/inner/event-콘텐츠선택.puml - HTTP 200
|
||||
✅ design/backend/sequence/inner/event-대시보드조회.puml - HTTP 200
|
||||
✅ design/backend/sequence/inner/event-추천결과조회.puml - HTTP 200
|
||||
✅ design/backend/sequence/inner/event-이미지결과조회.puml - HTTP 200
|
||||
✅ design/backend/sequence/inner/event-이미지생성요청.puml - HTTP 200
|
||||
✅ design/backend/sequence/inner/event-최종승인및배포.puml - HTTP 200
|
||||
✅ design/backend/sequence/inner/participation-당첨자추첨.puml - HTTP 200
|
||||
✅ design/backend/sequence/inner/participation-이벤트참여.puml - HTTP 200
|
||||
✅ design/backend/sequence/inner/participation-참여자목록조회.puml - HTTP 200
|
||||
✅ design/backend/sequence/inner/user-로그인.puml - HTTP 200
|
||||
✅ design/backend/sequence/inner/user-로그아웃.puml - HTTP 200
|
||||
✅ design/backend/sequence/inner/user-회원가입.puml - HTTP 200
|
||||
✅ design/backend/sequence/inner/user-프로필수정.puml - HTTP 200
|
||||
✅ design/backend/sequence/outer/고객참여플로우.puml - HTTP 200
|
||||
✅ design/backend/sequence/outer/성과분석플로우.puml - HTTP 200
|
||||
✅ design/backend/sequence/outer/사용자인증플로우.puml - HTTP 200
|
||||
✅ design/backend/sequence/outer/이벤트생성플로우.puml - HTTP 200
|
||||
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 119 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 161 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 178 KiB |
@@ -0,0 +1,32 @@
|
||||
[From string (line 110) ]
|
||||
|
||||
@startuml 이벤트생성플로우
|
||||
|
||||
|
||||
|
||||
|
||||
...
|
||||
... ( skipping 256 lines )
|
||||
...
|
||||
Event --> Gateway: 200 OK
|
||||
Gateway --> FE: 저장 완료
|
||||
FE --> User: 콘텐츠 생성 화면으로 이동
|
||||
|
||||
== 3. SNS 이미지 생성 - 비동기 처리 (UFR-CONT-010) ==
|
||||
User -> FE: 이미지 생성 요청
|
||||
FE -> Gateway: POST /contents/images\n{eventDraftId, 이벤트정보}
|
||||
Gateway -> Event: 이미지 생성 요청
|
||||
Event -> Kafka: Publish to image-job-topic\n{jobId, eventDraftId, 이벤트정보}
|
||||
Event --> Gateway: Job 생성 완료\n{jobId, status: PENDING}
|
||||
Gateway --> FE: 202 Accepted\n{jobId}
|
||||
FE --> User: "이미지 생성 중..." (로딩)
|
||||
|
||||
note over Content: Kafka Consumer\nimage-job-topic 구독
|
||||
Kafka --> Content: Consume Job Message\n{jobId, eventDraftId, ...}
|
||||
|
||||
par
|
||||
Content -> ImageApi: 심플 스타일 생성 요청
|
||||
ImageApi --> Content: 심플 이미지 URL
|
||||
and
|
||||
^^^^^
|
||||
Syntax Error? (Assumed diagram type: sequence)
|
||||
|
After Width: | Height: | Size: 188 KiB |
|
After Width: | Height: | Size: 14 KiB |
@@ -0,0 +1,23 @@
|
||||
@startuml test-complex
|
||||
!theme mono
|
||||
|
||||
title User Service - 회원가입 내부 시퀀스
|
||||
|
||||
participant "UserController" as Controller <<API Layer>>
|
||||
participant "Redis\nCache" as Redis <<E>>
|
||||
participant "User DB\n(PostgreSQL)" as UserDB <<E>>
|
||||
|
||||
[-> Controller: POST /api/users/register\n(RegisterRequest DTO)
|
||||
activate Controller
|
||||
|
||||
Controller -> Controller: @Valid 어노테이션 검증\n(이메일 형식, 비밀번호 8자 이상 등)
|
||||
|
||||
alt 중복 사용자 존재
|
||||
Controller --> [: 400 Bad Request\n{"error": "이미 가입된 전화번호입니다"}
|
||||
deactivate Controller
|
||||
else 신규 사용자
|
||||
Controller --> [: 201 Created
|
||||
deactivate Controller
|
||||
end
|
||||
|
||||
@enduml
|
||||
|
After Width: | Height: | Size: 14 KiB |
@@ -0,0 +1,23 @@
|
||||
@startuml test-no-newline
|
||||
!theme mono
|
||||
|
||||
title User Service - 회원가입 내부 시퀀스
|
||||
|
||||
participant "UserController" as Controller <<API Layer>>
|
||||
participant "Redis Cache" as Redis <<E>>
|
||||
participant "User DB (PostgreSQL)" as UserDB <<E>>
|
||||
|
||||
[-> Controller: POST /api/users/register (RegisterRequest DTO)
|
||||
activate Controller
|
||||
|
||||
Controller -> Controller: @Valid 어노테이션 검증 (이메일 형식, 비밀번호 8자 이상 등)
|
||||
|
||||
alt 중복 사용자 존재
|
||||
Controller --> [: 400 Bad Request {"error": "이미 가입된 전화번호입니다"}
|
||||
deactivate Controller
|
||||
else 신규 사용자
|
||||
Controller --> [: 201 Created
|
||||
deactivate Controller
|
||||
end
|
||||
|
||||
@enduml
|
||||
|
After Width: | Height: | Size: 14 KiB |
@@ -0,0 +1,24 @@
|
||||
@startuml test-short-stereotype
|
||||
!theme mono
|
||||
|
||||
title User Service - 회원가입 내부 시퀀스
|
||||
|
||||
participant "UserController" as Controller <<C>>
|
||||
participant "Redis Cache" as Redis <<E>>
|
||||
participant "User DB (PostgreSQL)" as UserDB <<E>>
|
||||
|
||||
actor Client
|
||||
Client -> Controller: POST /api/users/register
|
||||
activate Controller
|
||||
|
||||
Controller -> Controller: validate input
|
||||
|
||||
alt 중복 사용자 존재
|
||||
Controller --> Client: 400 Bad Request
|
||||
deactivate Controller
|
||||
else 신규 사용자
|
||||
Controller --> Client: 201 Created
|
||||
deactivate Controller
|
||||
end
|
||||
|
||||
@enduml
|
||||
|
After Width: | Height: | Size: 14 KiB |
@@ -0,0 +1,24 @@
|
||||
@startuml test-simple
|
||||
!theme mono
|
||||
|
||||
title User Service - 회원가입 내부 시퀀스
|
||||
|
||||
participant "UserController" as Controller <<API Layer>>
|
||||
participant "Redis Cache" as Redis <<E>>
|
||||
participant "User DB (PostgreSQL)" as UserDB <<E>>
|
||||
|
||||
actor Client
|
||||
Client -> Controller: POST /api/users/register
|
||||
activate Controller
|
||||
|
||||
Controller -> Controller: validate input
|
||||
|
||||
alt 중복 사용자 존재
|
||||
Controller --> Client: 400 Bad Request
|
||||
deactivate Controller
|
||||
else 신규 사용자
|
||||
Controller --> Client: 201 Created
|
||||
deactivate Controller
|
||||
end
|
||||
|
||||
@enduml
|
||||
|
After Width: | Height: | Size: 3.9 KiB |
@@ -0,0 +1,11 @@
|
||||
@startuml test-stereotype
|
||||
!theme mono
|
||||
|
||||
' 스테레오타입 공백 테스트
|
||||
participant "Controller" as C <<API Layer>>
|
||||
participant "Service" as S <<Business>>
|
||||
|
||||
C -> S: test()
|
||||
S --> C: result
|
||||
|
||||
@enduml
|
||||
|
After Width: | Height: | Size: 168 KiB |
|
After Width: | Height: | Size: 14 KiB |