๐Ÿ’ป PROJECT/[Spring Boot, React] ๋…์„œ ์Šต๊ด€ ๊ด€๋ฆฌ ์„œ๋น„์Šค

[์„ค๊ณ„์˜์‚ฌ๊ฒฐ์ •] ์‹œ๋ฆฌ์ฆˆ ๋ชฉ๋ก

devCloud 2026. 5. 21. 22:05
728x90
ARCHITECTURE

[์„ค๊ณ„ ์˜์‚ฌ๊ฒฐ์ •] ์‹œ๋ฆฌ์ฆˆ ๋ชฉ๋ก

๋‹จ์ˆœํžˆ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ์ค‘์š”ํ–ˆ๋˜ ๊ฑด “์™œ ์ด ๋ฐฉ์‹์„ ์„ ํƒํ–ˆ๋Š”๊ฐ€?”์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์ด์—ˆ๋‹ค.

์ด ์‹œ๋ฆฌ์ฆˆ๋Š” Booktine ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ์‹ค์ œ๋กœ ๊ณ ๋ฏผํ–ˆ๋˜ ์„ค๊ณ„ ์„ ํƒ ๊ณผ์ •๋“ค์„ ์ •๋ฆฌํ•œ ๊ธ€์ด๋‹ค. ๋‹จ์ˆœ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•๋ณด๋‹ค๋Š” “์™œ ์ด ๊ตฌ์กฐ๋ฅผ ์„ ํƒํ–ˆ๋Š”๊ฐ€”๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๊ธฐ๋กํ–ˆ๋‹ค.
01
์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ์ •์ฑ… ๊ฒฐ์ • ๊ณผ์ •
Booktine์—๋Š” ์ฑ… ํ‘œ์ง€ ์ด๋ฏธ์ง€์™€ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ๋‘ ๊ฐ€์ง€ ์ด๋ฏธ์ง€๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์™ธ๋ถ€ URL ์ง์ ‘ ์ €์žฅ, ์„œ๋ฒ„์—์„œ S3 ์žฌ์—…๋กœ๋“œ, Presigned URL์„ ํ†ตํ•œ ํด๋ผ์ด์–ธํŠธ ์ง์ ‘ ์—…๋กœ๋“œ ์„ธ ๊ฐ€์ง€๋ฅผ ๋น„๊ตํ–ˆ๋‹ค.
์ด๋ฏธ์ง€ ์ข…๋ฅ˜๋ณ„๋กœ ํŠน์„ฑ์ด ๋‹ฌ๋ผ ๊ฐ๊ฐ ๋‹ค๋ฅธ ๋ฐฉ์‹์„ ์„ ํƒํ•˜๊ฒŒ ๋œ ๊ณผ์ •์„ ์ •๋ฆฌํ–ˆ๋‹ค.
→ ์ž์„ธํžˆ ๋ณด๊ธฐ
02
ํŽ˜์ด์ง€๋„ค์ด์…˜ ๋ฐฉ์‹ ์„ ํƒ ๊ณผ์ •
๊ฒŒ์‹œ๋ฌผ, ๋ฉ”๋ชจ, ์ถ”์ฒœ ๋„์„œ ๋ชฉ๋ก ๋“ฑ ๋ชฉ๋ก ์กฐํšŒ๊ฐ€ ๋งŽ์€ ์„œ๋น„์Šค ํŠน์„ฑ์ƒ ํŽ˜์ด์ง€๋„ค์ด์…˜ ๋„์ž…์ด ํ•„์š”ํ–ˆ๋‹ค.
์˜คํ”„์…‹ ๊ธฐ๋ฐ˜๊ณผ ์ปค์„œ ๊ธฐ๋ฐ˜์„ ๋น„๊ตํ–ˆ๊ณ , Spring Data์˜ Page<T>์™€ Slice<T> ์ค‘ ์–ด๋–ค ๋ฐฉ์‹์ด Booktine์— ์ ํ•ฉํ•œ์ง€ ์„ ํƒํ•œ ๊ณผ์ •์„ ์ •๋ฆฌํ–ˆ๋‹ค.
→ ์ž์„ธํžˆ ๋ณด๊ธฐ
03
๋…์„œ ๋ฆฌ๋งˆ์ธ๋” ์•Œ๋ฆผ ๊ตฌํ˜„ ๋ฐฉ์‹ ์„ ํƒ ๊ณผ์ •
์‚ฌ์šฉ์ž๊ฐ€ ์„ค์ •ํ•œ ์‹œ๊ฐ„์— ๋งž์ถฐ ์„œ๋ฒ„๊ฐ€ ์•Œ๋ฆผ์„ ์ „๋‹ฌํ•˜๋Š” ๋ฆฌ๋งˆ์ธ๋” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋ฉด์„œ @Scheduled + SSE, ์ด๋ฉ”์ผ, WebSocket, FCM ๋“ฑ ์—ฌ๋Ÿฌ ๋ฐฉ์‹์„ ๋น„๊ตํ–ˆ๋‹ค.
๋‹จ๋ฐฉํ–ฅ ์•Œ๋ฆผ ์ „๋‹ฌ์ด๋ผ๋Š” ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž๋Š” ๋ฐฉ์‹์„ ์„ ํƒํ•œ ๊ณผ์ •์„ ์ •๋ฆฌํ–ˆ๋‹ค.
→ ์ž์„ธํžˆ ๋ณด๊ธฐ
04
๊ตญ๋‚ด ๋„์„œ ๊ฒ€์ƒ‰ API ์„ ํƒ ๊ณผ์ •
๋„์„œ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์œ„ํ•ด ์•Œ๋ผ๋”˜, ์นด์นด์˜ค, ๋„ค์ด๋ฒ„, ๊ตญ๋ฆฝ์ค‘์•™๋„์„œ๊ด€, ๋„์„œ๊ด€ ์ •๋ณด๋‚˜๋ฃจ API๋ฅผ ๋น„๊ตํ–ˆ๋‹ค.
ํ‘œ์ง€ ์ด๋ฏธ์ง€ ์ œ๊ณต ์—ฌ๋ถ€, ์‹ ๊ฐ„/๋ฒ ์ŠคํŠธ์…€๋Ÿฌ ๋ฐ์ดํ„ฐ, JSON ์‘๋‹ต ์ง€์› ๋“ฑ์„ ๊ธฐ์ค€์œผ๋กœ ๊ฒ€ํ† ํ•˜๊ณ  ์ตœ์ข… API๋ฅผ ์„ ํƒํ•œ ๊ณผ์ •์„ ์ •๋ฆฌํ–ˆ๋‹ค.
→ ์ž์„ธํžˆ ๋ณด๊ธฐ
05
JWT + Redis ์ธ์ฆ ์„ค๊ณ„
Booktine์˜ ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋Šฅ์ด ์ธ์ฆ์„ ์ „์ œ๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ธ์ฆ ๋ฐฉ์‹ ์„ ํƒ์ด ์ค‘์š”ํ•œ ์„ค๊ณ„ ๊ฒฐ์ •์ด์—ˆ๋‹ค.
์„ธ์…˜ ๋ฐฉ์‹๊ณผ JWT๋ฅผ ๋น„๊ตํ•˜๊ณ , Refresh Token ๊ฐ•์ œ ๋ฌดํšจํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Redis๋ฅผ ๋„์ž…ํ•œ ๊ณผ์ •์„ ์ •๋ฆฌํ–ˆ๋‹ค.
→ ์ž์„ธํžˆ ๋ณด๊ธฐ
728x90