ํ๋ก์ ํธ๋ช '๋ค๋ด' ์ '๋ค' ๊ฐ์ด '๋ณธ๋ค' ๋ ๋์ ์์ฒญ์ ํต์ฌ ๊ธฐ๋ฅ๊ณผ ์๋ก์ด ๋์งํธ ๊ณต๋์ฒด ๋ฌธํ๊ฐ '๋ด' ์ฒ๋ผ ์๋กญ๊ฒ ์์๋๋ค๋ ์๋ฏธ๋ฅผ ๋์์ ๋ด๊ณ ์์ต๋๋ค.
![]() ํ์: ์ต๋ฏผ์ฑ |
![]() ํ์: ์ํ๋ชจ |
![]() ํ์ : ๊น์ฑ์ธ |
![]() ํ์ : ๊น๋ฅํ |
![]() ํ์ : ๊ฐ๋ณ์ฑ |
"ํผ์ ๋ณด๋ ์์์์ ํจ๊ปํ๋ ๊ฒฝํ์ผ๋ก"
๋น๋๋ฉด ์ํต์ด ์ผ์ํ๋ ์๋์, ๋จ์ํ ์์ ์์ฒญ์ ๋์ด ์ค์๊ฐ ๊ณต์ ์ ์ํต์ด ๊ฐ๋ฅํ ์คํธ๋ฆฌ๋ฐ ์๋น์ค๋ฅผ ๊ฐ๋ฐํ๊ณ ์ ํฉ๋๋ค. ์์ ์ฝํ ์ธ ์ ์ค์๊ฐ ์ฑํ , ๋์ ์์ฒญ ๊ธฐ๋ฅ์ ๊ฒฐํฉํ์ฌ ์๋ก์ด ํํ์ ๋์งํธ ๊ณต๋์ฒด ๊ฒฝํ์ ์ ๊ณตํ๋ ๊ฒ์ด ์ ํฌ์ ๋ชฉํ์ ๋๋ค.
์ธ์ฆ/์ธ๊ฐ (Member)
- JWT + Refresh Token ๊ตฌ์กฐ๋ก ์ ํํด ์ธ์ ์ ์ฅ์ ์์กด๋๋ฅผ ์ ๊ฑฐ
- HTTP-Only Cookie ์ ์ฅ ๋ฐฉ์์ผ๋ก ๋ณด์ ๊ฐํ
- Access/Refresh๊ฐ ํจ๊ป ์ ๋ฌ๋๋ ํน์ฑ์ ํ์ฉํด ์ฌ๋ฐ๊ธ ํต์ ๋จ์ถ
์ค์๊ฐ ๊ฐ์ด๋ณด๊ธฐ (Together)
- STOMP ๊ธฐ๋ฐ WebSocket์์ ์ฑํ /์ ์ด ์ด๋ฒคํธ๋ฅผ ๋ถ๋ฆฌ ๊ตฌ๋ ํ๋๋ก ์ค๊ณ
- ๋ฐฉ์ฅ ์ ์ด ์ด๋ฒคํธ๊ฐ ๋ชจ๋ ์์ฒญ์์๊ฒ ๋๊ธฐํ๋๋๋ก ์ฒ๋ฆฌ
- ์ธ์ฆ/์ธ๊ฐ ํ๋ก์ฐ๋ฅผ ๋จ์ํํด ๋ณด์์ฑ๊ณผ ํจ์จ์ฑ ๋์ ํ๋ณด
- N+1 ๊ฐ์ ๋ฐ ๋ฐ์ ๊ทํ๋ก ์๋ต ์๊ฐ ์ฝ 20% ๊ฐ์
- ๊ตฌ๋ ๋ถ๋ฆฌ๋ก ์ค์๊ฐ ์๋น์ค ์์ ์ฑ ๊ฐํ
- ํ์๊ฐ์ /๋ก๊ทธ์ธ/๋ก๊ทธ์์, ์ด๋ฉ์ผยท์ฑ๋๋ช ์ค๋ณต ์ฒดํฌ
- JWT Access/Refresh ์ฟ ํค ๊ธฐ๋ฐ ์ธ์ฆ ๋ฐ ์ฌ๋ฐ๊ธ ํ๋ก์ฐ
- ์ฑ๋ ์ ๋ณด ์กฐํ/์์ , ์ํํธ ์ญ์ ์ฒ๋ฆฌ
- ํ๋กํ/๋ฐฐ๋ ์ด๋ฏธ์ง S3 URL ์ฐ๋
- ์ธ์ฆ ์ํ ์ ์ง๋ฅผ ์ํด Stateless JWT + ์ฟ ํค ์ ์ฅ ๋ฐฉ์ ๋์
- ์ฑ๋๋ช ์ค๋ณต ๋ฐฉ์ง ๋ฐ ์ํํธ ์ญ์ ํ์์ ์ฌ๊ฐ์ ์ฒ๋ฆฌ
- ๋ฐฉ ์์ฑ/๊ฒ์/์ฐธ์ฌ/์ญ์ , ๊ณต๊ฐ/๋น๊ณต๊ฐ + ์ฐธ์ฌ ์ฝ๋(UUID) ๊ธฐ๋ฐ ์ ์ฅ
- ๋ฐฉ์ฅ ๊ถํ ์ ์ด (์ ๋ชฉ/์์/์ธ์/๊ณต๊ฐ ์ฌ๋ถ ๋ณ๊ฒฝ)
- ์ฐธ์ฌ์ ๊ด๋ฆฌ (์ ์ฅ/ํด์ฅ/๊ฐํด, ์ธ์ ์ ๋๊ธฐํ)
- ๋ฐฉ์ฅ ๊ถํ์ ๋ฐ๋ฅธ ๋ณ๊ฒฝ/๊ฐํด ๋ก์ง ๋ถ๋ฆฌ๋ก ๊ถํ ๊ฒ์ฆ ํ๋ฆ ๋ช ํํ
- Together/TogetherJoinMember๋ก ์ฐธ์ฌ ์ํ์ ์ด๋ ฅ ๋ถ๋ฆฌ
- STOMP ๊ธฐ๋ฐ ์ฑํ ๋ฉ์์ง ๋ฐํ/๊ตฌ๋
- ๋ฐฉ์ฅ ์ฌ์ ์ ์ด/์์ ์ด๋ ์ด๋ฒคํธ ๋ธ๋ก๋์บ์คํธ
- ์ ์์ ์ ์ถ์ ๋ฐ ์ ์ฅ ์๋ฆผ
- STOMP ๋ฉ์์ง ๋ฐํ/๊ตฌ๋ ๊ฒฝ๋ก ๋ฐ ์ด๋ฒคํธ ํ๋ฆ ์ ๋ฆฌ
- ๋ฐฉ์ฅ ์ ์ด ์ด๋ฒคํธ์ ์ผ๋ฐ ์ฑํ ์ด๋ฒคํธ์ ๋ถ๋ฆฌ ๊ตฌ์กฐ ๊ฐ์กฐ
sequenceDiagram
participant Client
participant Gateway
participant Auth
participant WS as WebSocket(STOMP)
participant TogetherSvc as TogetherService
participant Room as TogetherRoom
Client->>Gateway: 1. ๋ฐฉ ์
์ฅ ์์ฒญ (HTTP)
Gateway->>Auth: 2. JWT ๊ฒ์ฆ
Auth-->>Gateway: 3. ์ธ์ฆ ๊ฒฐ๊ณผ
Gateway-->>Client: 4. ์
์ฅ ์๋ต
Client->>WS: 5. STOMP CONNECT/SUBSCRIBE (/topic/together/{id})
WS->>TogetherSvc: 6. ๊ตฌ๋
์ด๋ฒคํธ ์ฒ๋ฆฌ
TogetherSvc->>Room: 7. ์
์ฅ ์ฒ๋ฆฌ + ์ธ์ ์
๋ฐ์ดํธ
TogetherSvc-->>WS: 8. ์
์ฅ ์๋ฆผ ๋ธ๋ก๋์บ์คํธ
WS-->>Client: 9. ์
์ฅ ์๋ฆผ ์์
Client->>WS: 10. ์ฑํ
๋ฉ์์ง ๋ฐํ (/app/together/{id})
WS->>TogetherSvc: 11. ๋ฉ์์ง ์ฒ๋ฆฌ
TogetherSvc-->>WS: 12. ์ฑํ
๋ธ๋ก๋์บ์คํธ
WS-->>Client: 13. ์ฑํ
์์
Client->>WS: 14. ๋ฐฉ์ฅ ์ ์ด ๋ฐํ (/app/master/control/together/{id})
WS->>TogetherSvc: 15. ๋ฐฉ์ฅ ๊ถํ ๊ฒ์ฆ
TogetherSvc-->>WS: 16. ์ ์ด ์ด๋ฒคํธ ๋ธ๋ก๋์บ์คํธ
WS-->>Client: 17. ์ฌ์ ์ ์ด ์์
- ๋ก๊ทธ์ธ ์ฑ๊ณต ์ Access/Refresh ์ฟ ํค ๋ฐ๊ธ
- Access ๋ง๋ฃ ์ Refresh๋ก ์ฌ๋ฐ๊ธ ํ ์ฌ์์ฒญ
sequenceDiagram
participant Client
participant API
participant Auth as JwtAuthFilter
Client->>API: 1. ๋ก๊ทธ์ธ ์์ฒญ
API-->>Client: 2. Access/Refresh ์ฟ ํค ๋ฐ๊ธ
Client->>API: 3. ์ธ์ฆ ํ์ ์์ฒญ
API->>Auth: 4. Access ๊ฒ์ฆ
alt Access ์ ํจ
Auth-->>API: ์ธ์ฆ ์ฑ๊ณต
API-->>Client: 5. ์ ์ ์๋ต
else Access ๋ง๋ฃ
Auth->>Auth: Refresh ๊ฒ์ฆ
alt Refresh ์ ํจ
Auth-->>Client: 6. ์ Access/Refresh ์ฟ ํค ๋ฐ๊ธ
else Refresh ๋ง๋ฃ
Auth-->>Client: 7. ์ฌ๋ก๊ทธ์ธ ์๊ตฌ
end
end







