Skip to content
ย 
ย 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

405 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Dabom(FlowBox)

ํ”„๋กœ์ ํŠธ๋ช… '๋‹ค๋ด„' ์€ '๋‹ค' ๊ฐ™์ด '๋ณธ๋‹ค' ๋Š” ๋™์‹œ ์‹œ์ฒญ์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ๊ณผ ์ƒˆ๋กœ์šด ๋””์ง€ํ„ธ ๊ณต๋™์ฒด ๋ฌธํ™”๊ฐ€ '๋ด„' ์ฒ˜๋Ÿผ ์ƒˆ๋กญ๊ฒŒ ์‹œ์ž‘๋œ๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ๋™์‹œ์— ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿซ‚ ํŒ€์› ์†Œ๊ฐœ


ํŒ€์›: ์ตœ๋ฏผ์„ฑ


ํŒ€์›: ์–‘ํ˜•๋ชจ


ํŒ€์› : ๊น€์„ฑ์ธ


ํŒ€์› : ๊น€๋ฅœํ™˜


ํŒ€์› : ๊ฐ•๋ณ‘์šฑ


๐ŸŽฌ Streaming Service

๐ŸŽฏ ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

"ํ˜ผ์ž ๋ณด๋Š” ์˜์ƒ์—์„œ ํ•จ๊ป˜ํ•˜๋Š” ๊ฒฝํ—˜์œผ๋กœ"

๋น„๋Œ€๋ฉด ์†Œํ†ต์ด ์ผ์ƒํ™”๋œ ์‹œ๋Œ€์—, ๋‹จ์ˆœํ•œ ์˜์ƒ ์‹œ์ฒญ์„ ๋„˜์–ด ์‹ค์‹œ๊ฐ„ ๊ณต์œ ์™€ ์†Œํ†ต์ด ๊ฐ€๋Šฅํ•œ ์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ์˜์ƒ ์ฝ˜ํ…์ธ ์™€ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…, ๋™์‹œ ์‹œ์ฒญ ๊ธฐ๋Šฅ์„ ๊ฒฐํ•ฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ํ˜•ํƒœ์˜ ๋””์ง€ํ„ธ ๊ณต๋™์ฒด ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์ €ํฌ์˜ ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค.


๐Ÿ’š Front-end

ํ”„๋ก ํŠธ ์ฃผ์†Œ

๐Ÿ“œ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜

์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ณ

๐Ÿ”ง์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

์‹œ์Šคํ…œ ์•„ํ‚คํ…์ณ

๐Ÿ“ ๊ธฐ๋Šฅ ๋ช…์„ธ์„œ

๊ธฐ๋Šฅ ๋ช…์„ธ์„œ - Swagger-ui

๐Ÿ’ก ์„ฑ๋Šฅ ๊ฐœ์„ 

ํ…Œ์ŠคํŠธ ๋ฐ ์„ฑ๋Šฅ ๊ฐœ์„ 


ํ•ต์‹ฌ ๊ธฐ์—ฌ (๋‹ด๋‹น ๋„๋ฉ”์ธ ์ค‘์‹ฌ)

์ธ์ฆ/์ธ๊ฐ€ (Member)

  • JWT + Refresh Token ๊ตฌ์กฐ๋กœ ์ „ํ™˜ํ•ด ์„ธ์…˜ ์ €์žฅ์†Œ ์˜์กด๋„๋ฅผ ์ œ๊ฑฐ
  • HTTP-Only Cookie ์ €์žฅ ๋ฐฉ์‹์œผ๋กœ ๋ณด์•ˆ ๊ฐ•ํ™”
  • Access/Refresh๊ฐ€ ํ•จ๊ป˜ ์ „๋‹ฌ๋˜๋Š” ํŠน์„ฑ์„ ํ™œ์šฉํ•ด ์žฌ๋ฐœ๊ธ‰ ํ†ต์‹  ๋‹จ์ถ•

Dabom Login GIF

์‹ค์‹œ๊ฐ„ ๊ฐ™์ด๋ณด๊ธฐ (Together)

  • STOMP ๊ธฐ๋ฐ˜ WebSocket์—์„œ ์ฑ„ํŒ…/์ œ์–ด ์ด๋ฒคํŠธ๋ฅผ ๋ถ„๋ฆฌ ๊ตฌ๋…ํ•˜๋„๋ก ์„ค๊ณ„
  • ๋ฐฉ์žฅ ์ œ์–ด ์ด๋ฒคํŠธ๊ฐ€ ๋ชจ๋“  ์‹œ์ฒญ์ž์—๊ฒŒ ๋™๊ธฐํ™”๋˜๋„๋ก ์ฒ˜๋ฆฌ

Dabom Together GIF

์„ฑ๊ณผ

  • ์ธ์ฆ/์ธ๊ฐ€ ํ”Œ๋กœ์šฐ๋ฅผ ๋‹จ์ˆœํ™”ํ•ด ๋ณด์•ˆ์„ฑ๊ณผ ํšจ์œจ์„ฑ ๋™์‹œ ํ™•๋ณด
  • N+1 ๊ฐœ์„  ๋ฐ ๋ฐ˜์ •๊ทœํ™”๋กœ ์‘๋‹ต ์‹œ๊ฐ„ ์•ฝ 20% ๊ฐ์†Œ
  • ๊ตฌ๋… ๋ถ„๋ฆฌ๋กœ ์‹ค์‹œ๊ฐ„ ์„œ๋น„์Šค ์•ˆ์ •์„ฑ ๊ฐ•ํ™”

๐ŸŒฑ ์ œ๊ฐ€ ๋‹ด๋‹นํ•œ ํ•ต์‹ฌ ๊ฐœ๋ฐœ ์˜์—ญ (Backend)

1๏ธโƒฃ Member ๋„๋ฉ”์ธ

  • ํšŒ์›๊ฐ€์ž…/๋กœ๊ทธ์ธ/๋กœ๊ทธ์•„์›ƒ, ์ด๋ฉ”์ผยท์ฑ„๋„๋ช… ์ค‘๋ณต ์ฒดํฌ
  • JWT Access/Refresh ์ฟ ํ‚ค ๊ธฐ๋ฐ˜ ์ธ์ฆ ๋ฐ ์žฌ๋ฐœ๊ธ‰ ํ”Œ๋กœ์šฐ
  • ์ฑ„๋„ ์ •๋ณด ์กฐํšŒ/์ˆ˜์ •, ์†Œํ”„ํŠธ ์‚ญ์ œ ์ฒ˜๋ฆฌ
  • ํ”„๋กœํ•„/๋ฐฐ๋„ˆ ์ด๋ฏธ์ง€ S3 URL ์—ฐ๋™

โœ” ํ•ด๊ฒฐํ•œ ๋ฌธ์ œ

  • ์ธ์ฆ ์ƒํƒœ ์œ ์ง€๋ฅผ ์œ„ํ•ด Stateless JWT + ์ฟ ํ‚ค ์ €์žฅ ๋ฐฉ์‹ ๋„์ž…
  • ์ฑ„๋„๋ช… ์ค‘๋ณต ๋ฐฉ์ง€ ๋ฐ ์†Œํ”„ํŠธ ์‚ญ์ œ ํšŒ์›์˜ ์žฌ๊ฐ€์ž… ์ฒ˜๋ฆฌ

2๏ธโƒฃ Together(๊ฐ™์ด๋ณด๊ธฐ) ๋„๋ฉ”์ธ

  • ๋ฐฉ ์ƒ์„ฑ/๊ฒ€์ƒ‰/์ฐธ์—ฌ/์‚ญ์ œ, ๊ณต๊ฐœ/๋น„๊ณต๊ฐœ + ์ฐธ์—ฌ ์ฝ”๋“œ(UUID) ๊ธฐ๋ฐ˜ ์ž…์žฅ
  • ๋ฐฉ์žฅ ๊ถŒํ•œ ์ œ์–ด (์ œ๋ชฉ/์˜์ƒ/์ธ์›/๊ณต๊ฐœ ์—ฌ๋ถ€ ๋ณ€๊ฒฝ)
  • ์ฐธ์—ฌ์ž ๊ด€๋ฆฌ (์ž…์žฅ/ํ‡ด์žฅ/๊ฐ•ํ‡ด, ์ธ์› ์ˆ˜ ๋™๊ธฐํ™”)

โœ” ํ•ด๊ฒฐํ•œ ๋ฌธ์ œ

  • ๋ฐฉ์žฅ ๊ถŒํ•œ์— ๋”ฐ๋ฅธ ๋ณ€๊ฒฝ/๊ฐ•ํ‡ด ๋กœ์ง ๋ถ„๋ฆฌ๋กœ ๊ถŒํ•œ ๊ฒ€์ฆ ํ๋ฆ„ ๋ช…ํ™•ํ™”
  • Together/TogetherJoinMember๋กœ ์ฐธ์—ฌ ์ƒํƒœ์™€ ์ด๋ ฅ ๋ถ„๋ฆฌ

3๏ธโƒฃ WebSocket ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…/๋™๊ธฐํ™”

  • STOMP ๊ธฐ๋ฐ˜ ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€ ๋ฐœํ–‰/๊ตฌ๋…
  • ๋ฐฉ์žฅ ์žฌ์ƒ ์ œ์–ด/์˜์ƒ ์ด๋™ ์ด๋ฒคํŠธ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ
  • ์ ‘์†์ž ์ˆ˜ ์ถ”์  ๋ฐ ์ž…์žฅ ์•Œ๋ฆผ

๐Ÿงฉ Together ์‹ค์‹œ๊ฐ„ ํ๋ฆ„ (์‹œํ€€์Šค/์•„ํ‚คํ…์ฒ˜)

  • 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. ์žฌ์ƒ ์ œ์–ด ์ˆ˜์‹ 
Loading

๐Ÿ” Member ์ธ์ฆ ํ”Œ๋กœ์šฐ (๋กœ๊ทธ์ธ/JWT ์žฌ๋ฐœ๊ธ‰)

  • ๋กœ๊ทธ์ธ ์„ฑ๊ณต ์‹œ 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
Loading

๐Ÿ›  ๊ธฐ์ˆ  ์Šคํƒ

โœ”๏ธ Back-end

Java Spring Boot Spring Security Swagger Gradle JWT QueryDSL Lombok Google OAuth

โœ”๏ธ DB

MariaDB

โœ”๏ธ Infra

AWS S3 AWS Lambda AWS EC2 AWS API GateWay AWS RDS


๐Ÿ‘‹ ๋ฌธ์˜ ๋˜๋Š” ์ฝ”๋“œ ๋ฆฌ๋ทฐ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค!

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages