Yoong-D / FluffyTime

2024 FluffyTime SNS ํ”„๋กœ์ ํŠธ
0 stars 0 forks source link

๏ปฟ



๐Ÿถ FluffyTime (๋ฐ˜๋ ค๋™๋ฌผ ์ „์šฉ SNS)



๐Ÿ”— ํ”„๋กœ์ ํŠธ ๋งํฌ

https://fluffytime.o-r.kr/


๐Ÿ—“๏ธ ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„

2024.07.23 ~ 2024.09.06


๐Ÿ™Œ๐Ÿป ํ”„๋กœ์ ํŠธ ์„ค๋ช…


๐Ÿ–ผ๏ธ ๊ธฐํš ๋ฐฐ๊ฒฝ


๐ŸŽฏ ํ”„๋กœ์ ํŠธ ๋ชฉ์ 


๐Ÿ“œ ์ฃผ์š” ๊ธฐ๋Šฅ ์„ค๋ช…

ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ ๋ฐ ๋กœ๊ทธ์•„์›ƒ

ํ™ˆ ํ™”๋ฉด (์‚ฌ์ด๋“œ๋ฐ”, ๋ฌดํ•œ ์Šคํฌ๋กค)

๋งˆ์ดํŽ˜์ด์ง€, ์œ ์ €ํŽ˜์ด์ง€ ๊ธฐ๋Šฅ

ํ”„๋กœํ•„

๊ฒ€์ƒ‰

๊ฒ€์ƒ‰ํ•œ ๊ฒฐ๊ณผ ํด๋ฆญ ์‹œ ์œ ์ € ํŽ˜์ด์ง€ ์ด๋™ ๊ธฐ๋Šฅ

๊ฒŒ์‹œ๊ธ€ ํƒ์ƒ‰

๋ฆด์Šค ๊ธฐ๋Šฅ

๊ฒŒ์‹œ๊ธ€/๋Œ“๊ธ€/๋‹ต๊ธ€ CRUD + ๋ฉ˜์…˜ + ์ข‹์•„์š” + ๋ถ๋งˆํฌ ๊ธฐ๋Šฅ

ํŒ”๋กœ์šฐ/ํŒ”๋กœ์ž‰ ๊ธฐ๋Šฅ

์•Œ๋ฆผ

DM


๐ŸŒณ ํ”„๋กœ์ ํŠธ ํด๋” ๊ตฌ์กฐ

๐Ÿ“ฆ main
 โ”ฃ ๐Ÿ“‚ java
 โ”ƒ โ”— ๐Ÿ“‚ com
 โ”ƒ โ”ƒ โ”— ๐Ÿ“‚ fluffytime
 โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚ domain
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“ admin
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“ board
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“ chat
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“ notification
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“ search
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“ user
 โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚ global
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“ auth
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“ oauth2
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“ common
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“ config
 โ”— ๐Ÿ“‚ resources
 โ”ƒ โ”ฃ ๐Ÿ“‚ static
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“ css
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“ image
 โ”ƒ โ”ƒ โ”— ๐Ÿ“ js
 โ”ƒ โ”ฃ ๐Ÿ“‚ templates
 โ”— ๐Ÿ“œ application.yml

โš’๏ธ ํ”„๋กœ์ ํŠธ ์•„ํ‚คํ…์ณ




๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ ๊ฐœ๋ฐœ ํŒ€์› ๋ฐ ์—ญํ• 

ํŒ€๋ช… : I1lI1I1l (As ๋ฐ”์ฝ”๋“œ)

ํŒ€์žฅ : ๊ถŒ๊ฑดํ˜•

ํŒ€์› : ๊น€์œ ์ง„, ๊น€์ฐฌ์šฐ, ์œค์œ ๊ฒฝ, ์ง€์œ ๋นˆ

์ด๋ฆ„ ์—ญํ• 
๊ถŒ๊ฑดํ˜• ๋กœ๊ทธ์ธ ๋ฐ ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ, ๊ด€๋ฆฌ์ž ํŒจ์ด์ง€ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ, ํƒœ๊ทธ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ
๊น€์œ ์ง„ ๋งˆ์ดํŽ˜์ด์ง€ ๋ฐ ํ”„๋กœํ•„ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ, ์œ ์ €ํŽ˜์ด์ง€ ๋ฐ ์œ ์ € ์ฐจ๋‹จ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ, DM ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ
๊น€์ฐฌ์šฐ ๊ฒ€์ƒ‰ ๋ฐ ํƒ์ƒ‰ ํŽ˜์ด์ง€ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ, ํŒ”๋กœ์šฐ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ
์œค์œ ๊ฒฝ ๊ฒŒ์‹œ๋ฌผ ๋ฐ ์ž„์‹œ ๊ฒŒ์‹œ๋ฌผ CRUD ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ, ๋ถ๋งˆํฌ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ, ๋ฆด์Šค ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ
์ง€์œ ๋นˆ ๋Œ“๊ธ€ ๋ฐ ๋‹ต๊ธ€ CRUD ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ, ์ข‹์•„์š” ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ, ์•Œ๋ฆผ ๋ฐ ๋ฉ˜์…˜ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ

๐ŸŒ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

โš’๏ธ ๊ฐœ๋ฐœ ๋„๊ตฌ

๊ฐœ๋ฐœ ์–ธ์–ด

๐Ÿ‘จโ€๐ŸŽจ ํ”„๋ก ํŠธ ์—”๋“œ

๐Ÿ–ฅ๏ธ ๋ฐฑ์—”๋“œ

๐Ÿ” ์ธ์ฆ ๋ฐ ๋ณด์•ˆ

๐Ÿ’พ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

๐Ÿ—‚๏ธ ๋ฒ„์ „๊ด€๋ฆฌ

๐Ÿ“œ ๋ฌธ์„œ๊ด€๋ฆฌ

๐ŸŒ DevOps

๊ธฐ์ˆ  ์ ์šฉ ์ด์œ 
JWT ๐Ÿ’ก SNS๋Š” ๋งŽ์€ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์„œ๋ฒ„ ๋ถ€ํ•˜๊ฐ€ ํฐ๋ฐ, JWT๋Š” ์„ธ์…˜์„ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์•„ ์„œ๋ฒ„ ๋ถ€ํ•˜๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ, ์„œ๋ช…๋œ ํ† ํฐ๊ณผ HTTPS๋กœ ๋ณด์•ˆ์„ฑ์„ ๊ฐ•ํ™”ํ•ด ์‚ฌ์šฉ์ž ์ •๋ณด์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•˜๋ฏ€๋กœ ์ธ์ฆ/์ธ๊ฐ€ ๋ถ€๋ถ„์—์„œ JWT๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
SSE(vs websocket) ๐Ÿ’ก SSE๋Š” ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ์˜ ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹ ์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์–ด, ์•Œ๋ฆผ์ด๋‚˜ ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆฌ๋ฐ๊ณผ ๊ฐ™์€ ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ์ „์†ก์— ์ ํ•ฉํ•˜๋ฉฐ, ์–‘๋ฐฉํ–ฅ์ธ ์›น์†Œ์ผ“๋ณด๋‹ค ๋” ๊ฐ„๋‹จํ•˜๊ณ  ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ, SSE๋Š” ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค๋ฅผ ์ ๊ฒŒ ์‚ฌ์šฉํ•˜์—ฌ ๋งŽ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— ์•Œ๋ฆผ์„ ๋ฐ›์„ ๋•Œ ๋” ํšจ์œจ์ ๋ผ๊ณ  ํŒ๋‹จํ•˜์—ฌ SSE๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
Redis Pub&Sub(vs kafka) ๐Ÿ’ก Kafka๋Š” ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์™€ ๋†’์€ ํ™•์žฅ์„ฑ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…์ฒ˜๋Ÿผ ๋น ๋ฅธ ์‘๋‹ต์ด ์ค‘์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜์˜ Redis๊ฐ€ ๋” ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ, Kafka๋Š” AWS์—์„œ MSK๋กœ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•ด์•ผ ํ•˜๊ณ , MSK๋Š” ํ”„๋ฆฌํ‹ฐ์–ด์— ํฌํ•จ๋˜์ง€ ์•Š์•„ ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ๋ฐ˜๋ฉด, Redis๋Š” AWS ํ”„๋ฆฌํ‹ฐ์–ด์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜์—ฌ ์ด๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.
MySQL ๐Ÿ’ก RDBMS ์ค‘์—์„œ MySQL์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋›ฐ์–ด๋‚œ ์ฝ๊ธฐ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉฐ, InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์„ ํ†ตํ•ด ACID ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜๋ฉด์„œ๋„ ๋น ๋ฅธ ์ฝ๊ธฐ ์„ฑ๋Šฅ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ ์บ์‹ฑ๊ณผ ์ธ๋ฑ์Šค ์ตœ์ ํ™”๋„ ์ž˜ ๋˜์–ด ์žˆ์–ด ์„ฑ๋Šฅ์ด ์šฐ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ SNS์— ์ ํ•ฉํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ MySQL์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
Redis ๐Ÿ’ก TTL์„ ์„ค์ •ํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ž„์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์–ด ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , Redis์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜ ์ €์žฅ ๋ฐฉ์‹ ๋•๋ถ„์— ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์†๋„๊ฐ€ ๋น ๋ฅด๋ฉฐ ์„ฑ๋Šฅ ์š”๊ตฌ์‚ฌํ•ญ์„ ํšจ๊ณผ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด Redis๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
Mongo ๐Ÿ’ก ์ฑ„ํŒ…๋ฐฉ ๋‚ด์—ญ ์ €์žฅ์„ ์œ„ํ•ด MongoDB๋ฅผ ์‚ฌ์šฉํ•œ ์ด์œ ๋Š” ๋น„์ •ํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ , ์Šคํ‚ค๋งˆ๋ฅผ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋น ๋ฅธ ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. MongoDB๋Š” ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ˜๋ฉด, MySQL์€ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์™€ ๋นˆ๋ฒˆํ•œ ์ž‘์—…์—์„œ MongoDB๋ณด๋‹ค ์„ฑ๋Šฅ์ด ๋‚ฎ์„ ์ˆ˜ ์žˆ๊ธฐ์— MongoDB๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“‹ ERD ์„ค๊ณ„

FluffyTime ERD ์ƒ์„ธํŽ˜์ด์ง€ ์ด๋™


๐Ÿ“š API ๋ช…์„ธ์„œ

API ๋ช…์„ธ์„œ ํŽ˜์ด์ง€ ์ด๋™


๐Ÿ—‚๏ธ Git

FluffyTime GitHub Repository ์ด๋™


๐ŸŒต๋ธŒ๋žœ์น˜ ๊ตฌ์„ฑ

main - dev - feature

๋ธŒ๋žœ์น˜ ์šฉ๋„
main ํ”„๋กœ์ ํŠธ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ๋ธŒ๋žœ์น˜
dev ํ”„๋กœ์ ํŠธ develop ์ „์šฉ ๋ธŒ๋žœ์น˜
feature ๊ตฌํ˜„ ๊ธฐ๋Šฅ ๋‹จ์œ„ ๋ธŒ๋žœ์น˜

๐Ÿ–ฅ๏ธ ํ”„๋กœ์ ํŠธ ์ฃผ์š” ํŽ˜์ด์ง€

FluffyTime ๋กœ๊ทธ์ธ ํ™”๋ฉด FluffyTime ํšŒ์›๊ฐ€์ž… ํ™”๋ฉด
image image
FluffyTime ์ด๋ฉ”์ผ ์ฐพ๊ธฐ ํ™”๋ฉด FluffyTime ๋น„๋ฐ€๋ฒˆํ˜ธ ์ฐพ๊ธฐ ํ™”๋ฉด
image image
FluffyTime ํ™ˆ ํ™”๋ฉด - ์œ ์ € FluffyTime ํ™ˆ ํ™”๋ฉด - ๊ด€๋ฆฌ์ž
image image
FluffyTime ๋งˆ์ดํŽ˜์ด์ง€ ํ™”๋ฉด FluffyTime ์œ ์ €ํŽ˜์ด์ง€ ํ™”๋ฉด
image image
FluffyTime ํ”„๋กœํ•„ ํ™”๋ฉด FluffyTime ์•Œ๋ฆผ ํ™”๋ฉด
image image
FluffyTime ๊ฒ€์ƒ‰ ํ™”๋ฉด FluffyTime ํƒ์ƒ‰ ํ™”๋ฉด
image image
FluffyTime ๊ฒŒ์‹œ๋ฌผ ๋“ฑ๋ก ํ™”๋ฉด FluffyTime ๊ฒŒ์‹œ๋ฌผ ์ƒ์„ธ ํ™”๋ฉด
image image
FluffyTime ๊ฒŒ์‹œ๋ฌผ ์ˆ˜์ • ํ™”๋ฉด FluffyTime ์ž„์‹œ์ €์žฅ ๋ชฉ๋ก ํ™”๋ฉด
image image
FluffyTime ๋ฆด์Šค ์ˆ˜์ • ํ™”๋ฉด FluffyTime DM ์ƒ์„ธ ํ™”๋ฉด
image image
FluffyTime ์ข‹์•„์š” ๋ชฉ๋ก ํ™”๋ฉด FluffyTime ํŒ”๋กœ์›Œ ๋ชฉ๋ก ํ™”๋ฉด
image image
FluffyTime ๊ด€๋ฆฌ์ž(ํ†ต๊ณ„) ํ™”๋ฉด
image