Skip to content

๐ŸŽฌ ์˜ํ™” ๋ฆฌ๋ทฐยท์˜ˆ๋งค ํ”Œ๋žซํผ | MOVIE.ZIP

Notifications You must be signed in to change notification settings

MinCodeHub/moviezip-server

ย 
ย 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

758 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐ŸŽฌ ์˜ํ™” ๋ฆฌ๋ทฐยท์˜ˆ๋งค ํ”Œ๋žซํผ | MOVIE.ZIP (2024.03 ~ 2024.06)

๋ณธ ์ €์žฅ์†Œ๋Š” ์›๋ณธ Moviezip ํ”„๋กœ์ ํŠธ์—์„œ ์ œ๊ฐ€ ์ง์ ‘ ๊ธฐ์—ฌํ•œ ํ•ต์‹ฌ ์˜์—ญ(JWT ์ธ์ฆ / ์บ์‹œ ์„ฑ๋Šฅ ๊ฐœ์„  / ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… / ERD ๊ตฌ์กฐ ๋ฆฌํŒฉํ† ๋ง) ์ค‘์‹ฌ์œผ๋กœ ์ •๋ฆฌํ•œ ํฌํฌ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.

๐Ÿงฉ Spring Security ๊ธฐ๋ฐ˜ ์„ธ์…˜ ์ธ์ฆ์„ JWT ๊ตฌ์กฐ๋กœ ์ „ํ™˜ํ•˜๊ณ , Redis ์บ์‹œ๋ฅผ ํ™œ์šฉํ•œ API ์‘๋‹ต ์†๋„ ๊ฐœ์„ , WebSocket์„ ์ด์šฉํ•œ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๊ธฐ๋Šฅ ๋ฐ DB ๊ตฌ์กฐ ๊ฐœ์„ (ERD ๋ฆฌ๋””์ž์ธ) ์„ ์ฃผ๋„ํ•œ ๋ฐฑ์—”๋“œ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.



ํšŒ์›๊ฐ€์ž… ๋กœ๊ทธ์ธ ์ทจํ–ฅ ์„ ํƒ
ํšŒ์›๊ฐ€์ž… ๋กœ๊ทธ์ธ ์ทจํ–ฅ์„ ํƒ
๋ฉ”์ธํ™”๋ฉด ์ตœ์‹ ์˜ํ™” ๋ฉ”์ธํ™”๋ฉด ์ถ”์ฒœ์˜ํ™” ์˜ํ™” ๊ฒ€์ƒ‰
์ตœ์‹ ์˜ํ™” ์ถ”์ฒœ์˜ํ™” ์˜ํ™”๊ฒ€์ƒ‰
์˜ํ™” ์ƒ์„ธ์กฐํšŒ ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์˜ํ™” ์Šคํฌ๋žฉ
์˜ํ™”์ƒ์„ธ๋ณด๊ธฐ ๋ฆฌ๋ทฐ์ž‘์„ฑ ์˜ํ™”์Šคํฌ๋žฉ
๋‚ด๊ฐ€ ์ข‹์•„ํ•œ ์˜ํ™” ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ๋ฆฌ๋ทฐ ๋ฆฌ๋ทฐ ์ˆ˜์ • ๋ฐ ์‚ญ์ œ
๋‚ด๊ฐ€์ข‹์•„ํ•œ์˜ํ™” ๋ฆฌ๋ทฐ๋ฆฌ์ŠคํŠธ ๋ฆฌ๋ทฐ ์ˆ˜์ •
์˜ํ™”๊ด€ ์„ ํƒ ํ™”๋ฉด ์˜ํ™” ์ขŒ์„ ์˜ˆ๋งค ํ™”๋ฉด ๊ฒฐ์ œํ™”๋ฉด
์˜ํ™”๊ด€์„ ํƒํ™”๋ฉด ์˜ํ™”์ขŒ์„์˜ˆ๋งคํ™”๋ฉด ๊ฒฐ์ œํ™”๋ฉด
๋งˆ์ดํŽ˜์ด์ง€ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ ์•„์ด๋”” ์ฐพ๊ธฐ
๋งˆ์ดํŽ˜์ด์ง€ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ ์•„์ด๋””์ฐพ๊ธฐ
์ฑ„ํŒ…๋ฐฉ ๋ฆฌ์ŠคํŠธ ์ฑ„ํŒ… ํ™”๋ฉด ๋กœ๊ทธ์•„์›ƒ
์ฑ„ํŒ…๋ฐฉ๋ฆฌ์ŠคํŠธ ์ฑ„ํŒ…ํ™”๋ฉด ๋กœ๊ทธ์•„์›ƒ

๐Ÿ“– ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

  • ์˜ํ™” ๋ฆฌ๋ทฐ, ์˜ˆ๋งค, ์ถ”์ฒœ, ์ฑ„ํŒ…๊นŒ์ง€ ํ†ตํ•ฉ๋œ ์˜ํ™” ํ”Œ๋žซํผ
  • ํŒ€ ๊ตฌ์„ฑ: ํ’€์Šคํƒ 5
  • ์—ญํ• : ์ถ”์ฒœ API ์„ฑ๋Šฅ ๊ฐœ์„ , ์ธ์ฆ ๊ตฌ์กฐ ์ „ํ™˜, ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๋ฌธ์˜ ๊ตฌํ˜„, DAO ๊ตฌํ˜„

โš’๏ธ ๊ธฐ์ˆ  ์Šคํƒ

๋ถ„์•ผ ๊ธฐ์ˆ 
Backend Java 17, Spring Boot, MyBatis, Spark, WebSocket
Frontend React
Database Oracle, MongoDB, Redis
Security Spring Security + JWT

๐Ÿงฑ ERD ๊ตฌ์กฐ

๐Ÿ“Š ์ดˆ๊ธฐ ERD (์ดˆ๊ธฐ ์„ค๊ณ„)

๋ฆฌ๋ทฐ/์Šคํฌ๋žฉ ํ…Œ์ด๋ธ”์ด ์ค‘๋ณต๋˜๊ณ , ์˜ˆ๋งค/์ฑ„ํŒ… ๊ธฐ๋Šฅ์ด ๋‹จ์ผ ํ…Œ์ด๋ธ”๋กœ ๋‹จ์ˆœํ™”๋˜์–ด ์žˆ์–ด ํ™•์žฅ์„ฑ์ด ์ œํ•œ๋œ ๊ตฌ์กฐ์˜€์Šต๋‹ˆ๋‹ค.

image

๐Ÿ“Š ์ตœ์ข… ERD โ€” ๋ฆฌ๋ทฐยท์Šคํฌ๋žฉ ํ†ตํ•ฉ + ์˜ˆ๋งคยท์ฑ„ํŒ… ๊ธฐ๋Šฅ ํ™•์žฅ ๊ตฌ์กฐ

๋ฆฌ๋ทฐ ํ…Œ์ด๋ธ”์„ ํ†ตํ•ฉํ•˜๊ณ , ์Šคํฌ๋žฉ ๊ธฐ๋Šฅ(์˜ํ™”/๋ฆฌ๋ทฐ)์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌ

์‹ค์ œ ์˜ˆ๋งค ํ”„๋กœ์„ธ์Šค(์ƒ์˜์ •๋ณด โ†’ ์ขŒ์„ โ†’ ๊ฒฐ์ œ)์™€ ์‹ค์‹œ๊ฐ„ ๋ฌธ์˜(1:1 ์ฑ„ํŒ…) ๊ธฐ๋Šฅ์„ ๋ฐ˜์˜ํ•œ ์ตœ์ข… ๊ตฌ์กฐ

Oracle ๊ธฐ๋ฐ˜์˜ ์ฃผ์š” ์—”ํ‹ฐํ‹ฐ์™€ MongoDB ๊ธฐ๋ฐ˜์˜ ์ฑ„ํŒ… ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฒฐํ•ฉ๋„ ์ตœ์†Œํ™”

image

๐Ÿš€ ์ฃผ์š” ๊ธฐ์—ฌ

๐Ÿงฉ 1. JWT ๊ธฐ๋ฐ˜ ์ธ์ฆ ๊ตฌ์กฐ ์ „ํ™˜

  • ๊ธฐ์กด ์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ์€ ์„œ๋ฒ„ ์ธก ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ํ™•์žฅ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์— ํ•œ๊ณ„ ์กด์žฌ
  • ๋ชจ๋ฐ”์ผยท์›น ํ†ตํ•ฉ ํ™˜๊ฒฝ์—์„œ ์„ธ์…˜ ๊ณต์œ  ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ โ†’ Statelessํ•œ JWT ๊ตฌ์กฐ๋กœ ์ „ํ™˜
  • Access / Refresh Token ๊ตฌ์กฐ๋กœ ํ† ํฐ ์žฌ๋ฐœ๊ธ‰ ๋กœ์ง์„ ๋ถ„๋ฆฌ, ๋ณด์•ˆ์„ฑ๊ณผ ์œ ํšจ์„ฑ ๊ด€๋ฆฌ ํ–ฅ์ƒ

โœ… ๊ฒฐ๊ณผ: ์„œ๋ฒ„ ์„ธ์…˜ ๋ถ€ํ•˜ ์ œ๊ฑฐ


โšก 2. ์ถ”์ฒœ API ์บ์‹ฑ ์ตœ์ ํ™”

  • ๊ธฐ์กด Spark ALS ๊ธฐ๋ฐ˜ ์ถ”์ฒœ ๋กœ์ง์˜ ํ‰๊ท  ์‘๋‹ต ์‹œ๊ฐ„์ด ์•ฝ 18์ดˆ๋กœ ์ง€์—ฐ๋˜๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ
  • Redis Cache-aside ํŒจํ„ด ๋„์ž… ๋ฐ 24์‹œ๊ฐ„ TTL ์„ค์ •์„ ํ†ตํ•ด ์žฌ๊ณ„์‚ฐ ๋ถ€๋‹ด ์ตœ์†Œํ™”
  • ์ฒซ ์š”์ฒญ ์‹œ Spark ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹ฑํ•˜๊ณ , ์ดํ›„ ๋™์ผ ์‚ฌ์šฉ์ž ์š”์ฒญ์€ ์บ์‹œ์—์„œ ์ฆ‰์‹œ ์‘๋‹ต
  • Cache Key ๊ทœ์น™(recommend:{userId})์„ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉ์ž๋ณ„ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ์œ ์ง€ redis-cache-architecture

โœ… ๊ฒฐ๊ณผ: Redis ์บ์‹œ ์ ์šฉ์œผ๋กœ API ์‘๋‹ต ์†๋„๋ฅผ ์ˆ˜ ์ดˆ โ†’ ์ˆ˜ ms ์ˆ˜์ค€์œผ๋กœ ๊ฐœ์„ ํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•จ (Spark ALS ๊ธฐ๋ฐ˜ ์ถ”์ฒœ ๋กœ์ง์€ ํŒ€์› ๊ตฌํ˜„, ์บ์‹ฑ ๋กœ์ง ๋ฐ ์‘๋‹ต ๊ตฌ์กฐ ๊ฐœ์„ ์€ ์ง์ ‘ ๋‹ด๋‹น)


๐Ÿ’ฌ 3. WebSocket ๊ธฐ๋ฐ˜ ์‹ค์‹œ๊ฐ„ 1:1 ์ฑ„ํŒ… ๊ตฌํ˜„

  • ์‚ฌ์šฉ์ž โ†” ๊ด€๋ฆฌ์ž ๊ฐ„ ์‹ค์‹œ๊ฐ„ ๋ฌธ์˜ ๊ธฐ๋Šฅ์„ ์œ„ํ•ด Spring WebSocket ๊ธฐ๋ฐ˜ ์–‘๋ฐฉํ–ฅ ํ†ต์‹  ๊ตฌ์กฐ ์„ค๊ณ„
  • MongoDB๋ฅผ ๋ณ„๋„ ๋ฐ์ดํ„ฐ ์Šคํ† ์–ด๋กœ ๋ถ„๋ฆฌํ•ด ๋น„์ •ํ˜• ์ฑ„ํŒ… ๋ฐ์ดํ„ฐ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๊ด€๋ฆฌ
  • Oracle ๊ธฐ๋ฐ˜ ๋ฉ”์ธ ๋ฐ์ดํ„ฐ์™€ ๋ถ„๋ฆฌ ์„ค๊ณ„ํ•˜์—ฌ ์‹œ์Šคํ…œ ๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ์ตœ์†Œํ™”

๐Ÿ—‚ 4. ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต ์„ค๊ณ„ ๋ฐ SQL ๋งคํ•‘

  • MyBatis ๊ธฐ๋ฐ˜ DAO ๊ณ„์ธต์„ ์ง์ ‘ ์„ค๊ณ„ํ•˜์—ฌ ์„œ๋น„์Šค ๋กœ์ง๊ณผ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๋กœ์ง ๋ถ„๋ฆฌ
  • Mapper XML์—์„œ @Param๊ณผ resultMap์„ ํ™œ์šฉํ•ด DTO โ†” DB ๋งคํ•‘ ์ œ์–ด
  • ์‚ฌ์šฉ์ž ์ •๋ณด ๊ธฐ๋ฐ˜ ์‹๋ณ„(findUserIdByInfo) ๋“ฑ, ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ง์ ‘ ์ •์˜

๐Ÿง  ๊ธฐ์ˆ  ์„ ํƒ ์ด์œ 

๊ธฐ์ˆ  ์„ ํƒ ์ด์œ 
Redis Spark ์—ฐ์‚ฐ ์žฌ๊ณ„์‚ฐ ๋ฐฉ์ง€
JWT Stateless ์ธ์ฆ์œผ๋กœ ๋ชจ๋ฐ”์ผ/์›น ํ™•์žฅ์„ฑ ํ™•๋ณด
MongoDB ๋น„์ •ํ˜• ์ฑ„ํŒ… ๋ฐ์ดํ„ฐ ์œ ์—ฐ ์ €์žฅ

โœ๏ธ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ

๐Ÿ“ซ Contact

GitHub: @MinCodeHub
Email: gjalsdud1030@naver.com

About

๐ŸŽฌ ์˜ํ™” ๋ฆฌ๋ทฐยท์˜ˆ๋งค ํ”Œ๋žซํผ | MOVIE.ZIP

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 98.7%
  • Shell 1.2%
  • Dockerfile 0.1%