ToyProjects๐Ÿงธ/Dalmuriโญ

ํ”„๋กœ์ ํŠธ Dalmuri ๊ธฐํš ๋ฐ ์„ค๊ณ„

JanuDev 2025. 8. 16. 17:01

์‚ฌ์‹ค ์ด๊ฑธ ์ด ์นดํ…Œ๊ณ ๋ฆฌ์—์„œ ์ œ์ผ ์ฒ˜์Œ ๋จผ์ € ์จ์•ผํ•˜๋Š”๊ฑฐ ์•„๋‹Œ๊ฐ€? ๋ผ๊ณ  ๋งํ•œ๋‹ค๋ฉด

์‰ฟ

์กฐ์šฉํžˆ ํ•ด๋ผ..


๊ฐœ๋ฐœ์ž๋กœ์„œ ํšŒ์‚ฌ๋ฅผ ๋‹ค๋‹Œ์ง€ ๊ฒจ์šฐ 10๊ฐœ์›” ์ •๋„ ์ง€๋‚ฌ์ง€๋งŒ ๊ทธ๋™์•ˆ ๊ฐ€์žฅ ํฌ๊ฒŒ ๋А๋‚€ ๊ฒƒ์€

"๊ฐœ๋ฐœ๋„ ์ค‘์š”ํ•˜์ง€๋งŒ ๊ธฐํš, ์„ค๊ณ„๋„ ๋งค์šฐ๋งค์šฐ ์ค‘์š”!!!!!!"

๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

์ƒ๊ธ‰์ž์—๊ฒŒ ๊ธฐํš์„œ๋ฅผ ๋ฐ›์•„์„œ ๊ทธ๊ฑธ ๊ทธ๋Œ€๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ์ž…์žฅ์—์„ , ์ƒ๊ธ‰์ž์˜ ๊ธฐํš์ž‘์„ฑ ๋Šฅ๋ ฅ์— ๋”ฐ๋ผ ๊ฐœ๋ฐœ ์ธ์ƒ์ด ํŽธํ•ด์ง€๊ฑฐ๋‚˜ ํ—ฌ๊ฒŒ์ดํŠธ๊ฐ€ ์—ด๋ฆฌ๊ฑฐ๋‚˜ ๋‘˜ ์ค‘ ํ•˜๋‚œ๋ฐ, ํ˜„์žฌ์˜ ์ƒ๊ธ‰์ž๊ฐ€ ์ค€ ํ™”๋ฉด์ •์˜์„œ๋Š”

 

1. ํ”ผ๊ทธ๋งˆ๋กœ ๊ทธ๋ฆฐ ํ™”๋ฉด ๋ณด์—ฌ์คŒ.

2. ๋!

 

์ด๋‹ค. ใ„นใ…‡๋กœ ์ด๊ฒŒ ๋‹ค๋‹ค. ํ™”๋ฉด์— ๋ณด์ด์ง€ ์•Š๋Š” ๋ฐฑ์—”๋“œ ์„ค๊ณ„์„œ๋Š” ์•„์˜ˆ ์—†๋‹ค! ๋‚ด๊ฐ€ ๋‹ค ๊ณ„ํšํ•ด์„œ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค!!!!!! ์ด๊ฑธ ๋‚ด๊ฐ€ ์™ธ๋ถ€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋ณด์—ฌ์ค„ ์ˆ˜ ์—†๋Š”๊ฒŒ ํ†ตํƒ„ํ•˜์ง€ ๊ทธ์ง€์—†๋‹ค. 

์ง€ํ”ผํ‹ฐ ์™ˆ, ์ผ๋ฐ˜์ ์ธ ํšŒ์‚ฌ์—์„  ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ๊ฐ€ ๋”ฐ๋กœ ๋…ธ๋Š” ๊ฒƒ์ด ์•„๋‹Œ ํ•˜๋‚˜์˜ ํ๋ฆ„์œผ๋กœ ์ด์–ด์ง„ ๊ธฐํš•์„ค๊ณ„๋ฅผ ์ค€๋‹ค๊ณ  ํ•˜๋Š”๋ฐ, ์šฐ๋ฆฐ ๊ทธ๋”ด๊ฑฐ ์—†๋‹ค. 

 

์—‰๋ง์ธ ํ™”๋ฉด์ •์˜์„œ๋ฅผ ๋ฐ›๊ณ  ๊ฐœ๋ฐœ์„ ํ•˜๋Š”๊ฒƒ๋„ ์‰ฝ์ง€ ์•Š์ง€๋งŒ, ๋ƒ…๋‹ค ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•ด์„œ ๊ฐœ๋ฐœ๋งŒ ํ•˜๋Š”๊ฒƒ๋„ ์ƒ๊ฐ๋ณด๋‹ค ํž˜๋“  ์ผ์ด์—ˆ๋‹ค.

์ผ๋‹จ ๊ฐœ๋ฐœ์„ ์–ด๋–ป๊ฒŒ ์ง„ํ–‰ํ•  ์ง€ ๊ณ„ํš์„œ๊ฐ€ ์—†์œผ๋‹ˆ, ๋‚ด๊ฐ€ "์ด ๋ถ€๋ถ„์€ ~~~์ด๋ ‡๊ฒŒ ์ง„ํ–‰ํ•ด์•ผ์ง€!"๋ผ๊ณ  ๋‹ค์งํ•ด๋„ ๋‹ค์Œ์— ๊ฐœ๋ฐœํ•˜๋ฉด ๊นŒ๋จน๊ฑฐ๋‚˜ ๋‚ด ๊ฐœ๋ฐœ ์˜๋„๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ด์„œ ์•„์ด๋””์–ด๋ฅผ ๋‚ ๋ ค๋จน๋Š” ์ผ์ด ๋น„์ผ๋น„์žฌํ–ˆ๋‹ค. ์ฑ„ํŒ…์ด์•ผ ์‹ค๋ฌด์—์„œ websocket์„ ํ•  ์˜ˆ์ •์ด๋‹ˆ ์—ฐ์Šต ์‚ผ์•„ ๋งŒ๋“ค์—ˆ๋‹ค๊ณ  ๋ณ€๋ช…์ด๋ผ๋„ ํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ, ๋‚˜๋จธ์ง€ ์˜์—ญ(๋Œ€์‹œ๋ณด๋“œ, ์ปค๋ฎค๋‹ˆํ‹ฐ ๋“ฑ)์€ ๋šœ๋ ทํ•œ ๊ณ„ํš ์—†์œผ๋‹ˆ ๊ทธ๋ƒฅ ๋ฌด๋ฐฉ๋น„๋กœ ๋ฐฉ์น˜ํ•˜๊ณ  ์žˆ๋‹ค. ์ฒ˜์Œ์—” ๋‚˜๋ฆ„์˜ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์–ด์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ทธ๋ ‡๊ฒŒ ๊ตฌ์„ฑํ–ˆ์ง€๋งŒ ์ด์ œ์™€์„œ ๋ณด๋‹ˆ ์›๋ž˜ ๊ณ„ํš๋„ ๊ธฐ์–ต์ด ๋‚˜์งˆ ์•Š๋Š” ๋ถˆ์ƒ์‚ฌ๊ฐ€ ์ผ์–ด๋‚ฌ๋‹ค....

๊ทธ๋ ‡๊ฒŒ ์—ฌ๋Ÿฌ๊ฐ€์ง€์˜ ์‚ฌ๊ฑด์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ์˜ ๊ธฐํš + ์„ค๊ณ„์˜ ์ค‘์š”์„ฑ์„ ๊นจ๋‹ซ๊ฒŒ ๋˜์—ˆ๋‹ค...


๊ธฐํš์€ “๋ฌด์—‡์„ ๋งŒ๋“ค๊นŒ”๋ฅผ ์ •์˜ํ•˜๋Š” ๊ณผ์ •, ์„ค๊ณ„๋Š” “์–ด๋–ป๊ฒŒ ๋งŒ๋“ค๊นŒ”๋ฅผ ๊ตฌ์กฐํ™”ํ•˜๋Š” ๊ณผ์ •์ด๋ผ๊ณ  ํ•œ๋‹ค.

ํ”„๋กœ์ ํŠธ์˜ ๊ธฐํš ๋‹จ๊ณ„๋Š” ๊ฐœ์š”→๋ชฉํ‘œ →๋ฒ”์œ„ → ํƒ€๊ฒŸ ์‚ฌ์šฉ์ž → ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์ •์˜ → ์š”๊ตฌ์‚ฌํ•ญ → ์•„ํ‚คํ…์ณ & ๊ธฐ์ˆ  ์Šคํƒ → ์„ฑ๊ณผ ์ง€ํ‘œ → ๋ฆฌ์Šคํฌ ๋ฐ ํ•œ๊ณ„ ๋ฅผ ์ˆœ์„œ๋กœ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค๊ณ  ํ•œ๋‹ค.

๊ทธ๋Ÿผ ๋จผ์ € ํ”„๋กœ์ ํŠธ ์ •์˜์„œ ์–‘์‹์„ ์ž‘์„ฑํ•œ๋‹ค.


๊ฐœ์š”(Overview)

์ฃผ์ œ : ์นœ๊ตฌ • ์ง€์ธ๊ณผ์˜ ์นœ๋ชฉ SNS ์‹œ์Šคํ…œ

๊ธฐํš ์˜๋„

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

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

ํด๋ผ์ด์–ธํŠธ ์š”๊ตฌ์‚ฌํ•ญ ๋ถ„์„ -> ์‚ฌ์šฉ์ž ์ •์˜

: ๊ฐ€์ƒ์˜ ์‚ฌ์šฉ์ž ํŽ˜๋ฅด์†Œ๋‚˜ 1~2๋ช…์„ ๋งŒ๋“ค์–ด์„œ ์„ค๋ช…ํ•œ๋‹ค. 

ex) ์นœ๊ตฌ a๋Š” ์‚ฌ์ง„ ์œ„์ฃผ์˜ ์†Œํ†ต์„ ํ•˜๊ณ  ์‹ถ์–ดํ•œ๋‹ค.

์นœ๊ตฌ b๋Š” ์ฑ„ํŒ… ๊ธฐ๋Šฅ์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

์œ ์Šค์ผ€์ด์Šค ์„ค๊ณ„๋„ -> ์œ ์ € ์‹œ๋‚˜๋ฆฌ์˜ค(User Flow)

: ๋‹ค์ด์–ด๊ทธ๋žจ ์™ธ์—๋„ ํ…์ŠคํŠธ๋กœ "์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋–ค ๊ฒฝ๋กœ๋กœ ์–ด๋–ค ๊ฒฝํ—˜์„ ํ•˜๋Š”์ง€" ์„œ์ˆ .

ex) ์‚ฌ์šฉ์ž๋Š” ๋กœ๊ทธ์ธ ํ›„ ๋Œ€์‹œ๋ณด๋“œ์—์„œ ๊ธ€์„ ์“ฐ๊ณ , ์•Œ๋ฆผ์„ ํ†ตํ•ด ๋Œ“๊ธ€ ๋ฐ˜์‘์„ ํ™•์ธํ•œ๋‹ค.

์‚ฌ์šฉ ๊ฐ€๋Šฅ ์‚ฌ์ดํŠธ : https://app.diagrams.net/?src=about

์‚ฌ์ดํŠธ๋งต

ํ˜„์žฌ ์ƒ๊ฐํ•˜๊ณ  ์žˆ๋Š” ๊ธฐ๋Šฅ๋“ค 

[๋Œ€์‹œ๋ณด๋“œ] : ์œ„์ ฏ(ํ™˜์œจ, ๊ฐ์ • ์ผ๊ธฐ ๊ธฐ๋ก) ๋“ฑ

[๊ธฐ๋กํ•˜๊ธฐ] : ๊ฐ์ •์ผ๊ธฐ, ๋ฏธ๋‹ˆ๊ฒŒ์ž„ ๋“ฑ

[์†Œํ†ตํ•˜๊ธฐ] : ์˜ค๋Š˜์˜ ํ•œ๋งˆ๋””(๋žœ๋ค ์ฃผ์ œ ๋˜์ง€๊ธฐ), ๊ฐ์ •์ผ๊ธฐ๊ณต์œ , ํƒ€์ž„์บก์А๊ฒŒ์‹œํŒ

[์ฑ„ํŒ…] : ์ฑ„ํŒ…

[์ถ”์–ตํ•˜๊ธฐ]: ํƒ€์ž„์บก์А, ํƒ€์ž„๋ผ์ธ ํšŒ๊ณ (์˜ค๋Š˜๋กœ๋ถ€ํ„ฐ 1๋…„์ „ or ํ•œ๋‹ฌ ์ „ ๊ฒŒ์‹œ๊ธ€ ๋ณด์—ฌ์ฃผ๊ธฐ), ์ข‹์•„์š” ์•„์นด์ด๋ธŒ

 

์‚ฌ์ดํŠธ๋งต์€ Canva ๋“ฑ์œผ๋กœ ๊ทธ๋ฆด

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„๋„ + API ์„ค๊ณ„ ์ดˆ์•ˆ

: DB ์˜†์— ๊ฐ„๋‹จํ•œ API ์—”๋“œํฌ์ธํŠธ ์˜ˆ์‹œ๋ฅผ ์ ์–ด๋‘”๋‹ค. ํ˜น์€ Swagger ์ด์šฉ.

๊ฐœ๋ฐœ ํ™˜๊ฒฝ 

: ex) React : ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ํ™”๋ฉฐ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ, ๋˜ํ•œ React ๊ณต๋ถ€๋ฅผ ์œ„ํ•ด ์„ ํƒ

: PostegreSQL : ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๊ด€๋ฆฌ์— ์œ ๋ฆฌ, ๋ฌด๋ฃŒ์—ฌ์„œ ๋ถ€๋‹ด ์—†์ด ์‚ฌ์šฉ

๋””์ž์ธ(Figma)

ํ”ผ๊ทธ๋งˆ๋กœ ๊ทธ๋ ค์„œ ์˜ฌ๋ฆด ๊ฒƒ 

์„ฑ๊ณผ์ง€ํ‘œ, ๋ฆฌ์Šคํฌ ๋ฐ ํ•œ๊ณ„

: ex) ์„ฑ๊ณผ : ์นœ๊ตฌ(์‚ฌ์šฉ์ž) 3๋ช… ์ด์ƒ์ด ์‹ค์ œ๋กœ ๊ธ€์„ ์“ฐ๊ณ  ๋Œ“๊ธ€์„ ๋‹ฌ๋ฉฐ ์ฑ„ํŒ…์„ ํ•œ๋‹ค. ๊ธฐ์กด SNS๋ณด๋‹ค ๊ธฐ๋Šฅ์ด ๋งŽ์ด 


๊ธฐ๋Šฅ ๊ตฌ์ฒดํ™” 

์ถ”ํ›„ ํด๋ผ์ด์–ธํŠธ ์š”๊ตฌ์‚ฌํ•ญ ๋ถ„์„์— ์ถ”๊ฐ€ํ•  ๊ฒƒ.

๋Œ€์‹œ๋ณด๋“œ Dashboard

1. ์œ„์ ฏ
ํ™˜์œจ: ์—ฌํ–‰๊ฐ€๊ณ ์‹ถ์€ ๋‚˜๋ผ ํ™˜์œจ(ex. ์ผ๋ณธ, ๋Œ€๋งŒ, ํ™์ฝฉ etc)
๊ฐ์ •์ผ๊ธฐ ๊ธฐ๋ก :  '์˜ค๋Š˜์˜ ๊ฐ์ •์„ ์จ๋ด~'๊ฐ™์€๊ฑฐ

๊ธฐ๋กํ•˜๊ธฐ Journalํƒญ

1. ๊ฐ์ • ์ผ๊ธฐ (๊ธฐ๋กํƒญ)
์˜ค๋Š˜ ํ•˜๋ฃจ๋ฅผ ํ‘œํ˜„ํ•ด์„œ ์นœ๊ตฌ๋“ค ๊ฐ์ • ๋งต์„ ๋งŒ๋“ค๊ธฐ


(1) ์˜ค๋Š˜ ํ•˜๋ฃจ ๊ฐ์ •์„ ์Šฌ๋ผ์ด๋”๋กœ ์„ ํƒ 
์Šฌ๋ผ์ด๋” ์›€์ง์ผ ๋•Œ ๋ฐ”๋กœ ์ƒ‰/๋‚ ์”จ/์˜จ๋„ ๋ฐ”๋€Œ๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜ (์Šฌ๋ผ์ด๋”: ์ฆ๊ฑฐ์›€(Valence) / ์—๋„ˆ์ง€(Arousal) <- input value range๋กœ) 

๋”๋ณด๊ธฐ

์Šค์ผ€์ผ
valence(์ฆ๊ฑฐ์›€): -1 ~ +1
arousal(์—๋„ˆ์ง€): 0 ~ 1
์ƒ‰(HSL)
Hue: ํŒŒ๋ž‘(220°)↔์ดˆ๋ก(140°)↔๋…ธ๋ž‘(60°)์œผ๋กœ ๊ฐˆ์ˆ˜๋ก ์ฆ๊ฑฐ์›€ ์ฆ๊ฐ€
hue = 220 - 160 * ((valence + 1) / 2)
Saturation: ์—๋„ˆ์ง€ ๋†’์„์ˆ˜๋ก ์ฑ„๋„↑
sat = 35 + 45 * arousal
Lightness: ์ค‘๊ฐ„ 60% ๊ณ ์ •(ํ…Œ๋งˆ์— ๋งž์ถฐ ์กฐ์ •)
๋‚ ์”จ ์•„์ด์ฝ˜
(valence≥0.4 & arousal≥0.6) → โ˜€๏ธ๋ง‘์Œ/๋ฒˆ์ฉ
(valence≥0.2 & arousal<0.4) → ๐ŸŒค๏ธ๊ตฌ๋ฆ„ ์กฐ๊ธˆ
(valence<-0.3 & arousal≥0.6) → โ›ˆ๏ธ๋ฒˆ๊ฐœ(๋ถˆ์•ˆ/๋ถ„๋…ธ)
(valence<-0.3 & arousal<0.4) → ๐ŸŒง๏ธ๋น„(์šฐ์šธ)
(|valence|<0.2 & arousal<0.3) → ๐ŸŒซ๏ธ์•ˆ๊ฐœ(๋ฉ/ํ”ผ๊ณค)
๊ธฐ๋ณธ → โ˜๏ธํ๋ฆผ
์ฒด๊ฐ ์˜จ๋„(0~100) : temp = clamp( 50 + 35*valence + 15*(arousal - 0.5), 0, 100 )
์˜ˆ) ์ฆ๊ฑฐ์›€↑์ด๋ฉด ๋”ฐ๋œป, ์šฐ์šธ/์ €์—๋„ˆ์ง€๋ฉด ์„œ๋Š˜.

(2) ๊ฐ์ • ์Šคํ‹ฐ์ปค ์„ ํƒ 
์นดํ…Œ๊ณ ๋ฆฌ: ์œ„๋กœ(๐Ÿค—), ์‘์›(๐Ÿ’ช), ํœด์‹(โ˜•), ์ง‘์ค‘(โšก), ์ถ•ํ•˜(๐ŸŽ‰), ์†์ƒ(๐Ÿ’”), ๋น„๋ฐ€(๐Ÿ”’)
์Šคํ‹ฐ์ปค๋Š” 1๊ฐœ ์ด์ƒ ์„ ํƒ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋ณ€๊ฒฝ (์ตœ๋Œ€ 3๊ฐœ ์ •๋„ ์ถ”์ฒœ)

(3) ๋ฏธ๋‹ˆ ์ผ๊ธฐ(์ตœ๋Œ€ 1000์ž) ์ž‘์„ฑ ํ›„ ์ €์žฅ

(4) ๋‹ฌ๋ ฅ์œผ๋กœ ๋‚ด๊ฐ€ ์„ ํƒํ•œ ์ด๋ชจ์ง€๋ฅผ ์ „์ฒด ์กฐํšŒํ•ด์„œ ๋ณผ ์ˆ˜ ์žˆ์Œ.
๋‹ฌ๋ ฅ์— ๊ฐ์ • ๋Œ€ํ‘œ ์ปฌ๋Ÿฌ & ์„ ํƒํ•œ ์Šคํ‹ฐ์ปค ์•„์ด์ฝ˜ ํ‘œ์‹œ
๊ฐ ๋‚ ์งœ ํด๋ฆญ ์‹œ ๊ฐ์ • ์ผ๊ธฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํŒ์—…

(5) ๊ณต์œ  ๋ฒ”์œ„ ์„ ํƒ : ์ „์ฒด, ๋‚˜๋งŒ๋ณด๊ธฐ

 

์‚ฌ์šฉ ๊ธฐ์ˆ 

์Šฌ๋ผ์ด๋” ๊ธฐ๋ฐ˜ ์‹ค์‹œ๊ฐ„ ๋ณ€ํ™” ์• ๋‹ˆ๋ฉ”์ด์…˜ : react-spring

๊ฐ์ • ์Šคํ‹ฐ์ปค ์„ ํƒ ๊ด€๋ จ ๋กœ์ง : React ์ƒํƒœ๊ด€๋ฆฌ(useState, useReducer, Context API), ์‹ค์‹œ๊ฐ„ ๋ฐ”์‘ํ˜• ๋กœ์ง ๊ตฌํ˜„

๋‹ฌ๋ ฅ ๊ฐ์ • ์กฐํšŒ: FullCalendar React์ด์šฉ, ์„œ๋ฒ„์—์„œ ๋‹ฌ๋ ฅ์šฉ ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง(๋‚ ์งœ๋ณ„, ๊ณต์œ  ๋ฒ”์œ„๋ณ„)

๊ณต์œ  ๋ฒ”์œ„ ์„ค์ • : JWT, Role ๊ธฐ๋ฐ˜ ์ ‘๊ทผ ์ œ์–ด ๊ตฌํ˜„. ํด๋ผ์ด์–ธํŠธ์—์„œ ๊ถŒํ•œ ํ•„ํ„ฐ๋ง, ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ ๊ถŒํ•œ ๊ฒ€์ฆ

 

2. ๋ฏธ๋‹ˆ๊ฒŒ์ž„ 
(1) 8Ball API : Question์„ ๋ณด๋‚ด๋ฉด ๋žœ๋คํ•œ ๋‹ต๋ณ€์ด ๋‚˜์˜จ๋‹ค(๊ฐ์ŠคํŠธ ์ฑ…๋‹˜ ๋А๋‚Œ)
(2) ๋กœ๋˜ ๋ฒˆํ˜ธ ์ถ”์ฒœ
(3) ๋žœ๋ค ๋ฝ‘๊ธฐ๋ฅ˜(์‚ฌ๋‹ค๋ฆฌ ํƒ€๊ธฐ, ์ œ๋น„ ๋ฝ‘๊ธฐ, ๋ฃฐ๋ › ๋Œ๋ฆฌ๊ธฐ)

 

์‚ฌ์šฉ ๊ธฐ์ˆ 

api ๊ธฐ๋ฐ˜ ๊ฒŒ์ž„: axios + useEffet, useQuery(React Query)๋กœ APIํ˜ธ์ถœ. ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ + api ํ†ต์‹ 

๋žœ๋ค ๋ฝ‘๊ธฐ, ๋ฃฐ๋ › : Canvasl ํ˜น์€ SVG + react spring ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ฐ ์ˆ˜ํ•™์  ๋กœ์ง์œผ๋กœ ๋žœ๋คํ™” ๊ตฌํ˜„

 

3. ๋‚˜์˜ ๊ฒŒ์‹œ๊ธ€

(1) ์นดํ…Œ๊ณ ๋ฆฌ > ๊ฒŒ์‹œ๊ธ€ ๊ตฌ์กฐ๋กœ ๋งŒ๋“ค์–ด์„œ ์ž‘์„ฑ

(2) ๋“œ๋ž˜๊ทธ & ๋“œ๋กญ์œผ๋กœ ํŠธ๋ฆฌ ๊ตฌ์กฐ ๋ณ€๊ฒฝ 

 

์‚ฌ์šฉ ๊ธฐ์ˆ 

CRUD๊ตฌ์กฐ : React Query, axios๋กœ ์„œ๋ฒ„ ํ†ต์‹ , ์บ์‹œ ๊ด€๋ฆฌ, ํ’€์Šคํƒ CRUD

์นดํ…Œ๊ณ ๋ฆฌ ๊ตฌํ˜„ : ํƒ€์ž… ์•ˆ์ •์„ฑ๊ณผ ์žฌ๊ท€์  ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์„ค๊ณ„, ํŠธ๋ฆฌ๋ณ€ํ™˜, react-beautiful-dnd

์†Œํ†ตํ•˜๊ธฐ community ํƒญ
1. ๋žœ๋ค ์ฃผ์ œ ๋˜์ง€๊ธฐ - "์˜ค๋Š˜์˜ ํ•œ๋งˆ๋””"
์˜ค๋Š˜์˜ ํ•˜์ด๋ผ์ดํŠธ๋Š”? ๋‚ด ์ฑ…์ƒ ์‚ฌ์ง„ ๋ณด์—ฌ์ฃผ๊ธฐ, ์–ด์ œ ์›ƒ๊ธด ์ผ ๋“ฑ์˜ ์ฃผ์ œ๋ฅผ ๊ฐ€์ ธ์™€์„œ ์งง์€ ๋Œ“๊ธ€ ์ž‘์„ฑํ•˜๊ธฐ. ๊ธธ๊ณ  ๋ถ€๋‹ด์Šค๋Ÿฌ์šด ๊ธ€ ๋Œ€์‹  ์งง๊ณ  ์œ„ํŠธ ์žˆ๋Š” ๋ฐ˜์‘์„ ์œ„์ฃผ๋กœ ์ฐธ์—ฌ ์œ ๋„.
(1) ์ž์ •์— ์ƒˆ๋กœ์šด ์ฃผ์ œ๊ฐ€ ์—ด๋ฆผ, ๊ฐ™์€ ๋‚  ๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ ๋™์ผํ•œ ์ฃผ์ œ ๋…ธ์ถœ
(2) ๋Œ“๊ธ€์€ ์ตœ๋Œ€ 100์ž, ๋ฏธ๋””์–ด ์—…๋กœ๋“œ x, ์ž‘์„ฑ ํ›„ ์ˆ˜์ • ๋ถˆ๊ฐ€
(3) ํ”ผ๋“œ ์ •๋ ฌ : ์นœ๊ตฌ๋“ค์˜ ๋‹ต๋ณ€์ด ๋žœ๋ค์œผ๋กœ ์ •๋ ฌ๋˜์–ด ํ‘œ์‹œ๋จ

 

์‚ฌ์šฉ ๊ธฐ์ˆ 

๋žœ๋ค ์ฃผ์ œ ๋˜์ง€๊ธฐ : ๋งค์ผ 00:00์— ์ƒˆ๋กœ์šด ์ฃผ์ œ ์ƒ์„ฑ&DB์ €์žฅ : Node.js์˜node-cron, springboot์˜ @Scheduled ์ด์šฉ

2. ๊ฐ์ •์ผ๊ธฐ(์†Œํ†ต ํƒญ)

(1) ์˜ค๋Š˜์˜ ๊ฐ์ •๋“ค์ด ์›์ฐจํŠธ(๊ฐ์ •์Šคํ‹ฐ์ปค ๊ธฐ์ค€)๋กœ ์‹ค์‹œ๊ฐ„ ์ง‘๊ณ„, ๊ณต๊ฐ/์‘์› ์Šคํ‹ฐ์ปค๋กœ ์ƒํ˜ธ์ž‘์šฉ, ์ฃผ๊ฐ„ ๋ฌด๋“œ ๋ฆฌ์™€์ธ๋“œ
(2) “์˜ค๋Š˜์˜ ๊ฐ์ • ์Œ๋‘ฅ์ด” ์ž๋™ ๋งค์นญ(๊ฐ์ • ์œ ํ˜•(Valence/Arousal ๊ทผ์ ‘๋„)๋กœ ๊ณ„์‚ฐ.)
(3) ๋‚ด ์นœ๊ตฌ๋“ค์ด ์ž‘์„ฑํ•œ ๊ฐ์ • ์ผ๊ธฐ ๋ณด๊ธฐ, ๋Œ“๊ธ€ +  ์ด๋ชจํ‹ฐ์ฝ˜. ์นœ๊ตฌ๋“ค์€ ์ต๋ช…์œผ๋กœ ๋ณด์ž„
(4) ๊ฐ์ • ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™” ์ €์žฅ(ํŠนํžˆ ์ผ๊ธฐ ํ…์ŠคํŠธ)

 

์‚ฌ์šฉ ๊ธฐ์ˆ 

๊ฐ์ •์Œ๋‘ฅ์ด ๋งค์นญ: ์„œ๋ฒ„์—์„œ Valence/Arousal ๊ธฐ๋ฐ˜ ์œ ์‚ฌ๋„ ๊ณ„์‚ฐ(์•Œ๊ณ ๋ฆฌ์ฆ˜)์„ ํ†ตํ•œ ์ถ”์ฒœ ์•Œ๊ณ ๋ฆผ์ฆ˜ ๊ตฌํ˜„, ๋ฐ์ดํ„ฐ ๋ถ„์„์  ์ ‘๊ทผ

3. ์ต๋ช… ์งˆ๋ฌธํ•จ(+๋น„๋ฐ€ํŽธ์ง€) 
(1) ์นœ๊ตฌํ•œํ…Œ ์ต๋ช…์œผ๋กœ ์งˆ๋ฌธ์„ ํ•จ
(2) ์นœ๊ตฌ๋กœ๋ถ€ํ„ฐ ์˜จ ๋‹ต๋ณ€์€ ์œ„์ ฏ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์Œ 
(3) ๋‚˜์—๊ฒŒ ์˜จ ์ต๋ช… ์งˆ๋ฌธ : ์œ„์ ฏ ํด๋ฆญ์‹œ ๋ณด๊ณ  ๋‹ต๋ณ€ ๊ฐ€๋Šฅ

 

์‚ฌ์šฉ ๊ธฐ์ˆ 

์ต๋ช… ์งˆ๋ฌธ: ๋ณด์•ˆ/๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ ์ฒ˜๋ฆฌ


4. ์นœ๊ตฌ์™€์˜ ์ฑŒ๋ฆฐ์ง€
(1) ์ฑŒ๋ฆฐ์ง€ ์ƒ์„ฑํ•˜๊ธฐ : ์‹œ์ž‘์ผ, ์ข…๋ฃŒ์ผ ์ง€์ •, ์ฃผ์ œ ์„ ์ •ํ•˜๊ธฐ(ex. ์šด๋™, ๊ณต๋ถ€, ๋…์„œ,,,)
(2) ์ง„ํ–‰ ํ˜„ํ™ฉ : (์ฑŒ๋ฆฐ์ง€๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ) ๋Œ€์‹œ๋ณด๋“œ์— ์œ„์ ฏ์œผ๋กœ ์ง„ํ–‰๋ฅ  ํ‘œ์‹œ, chart๋กœ ์กฐํšŒ, ๋งค์ผ ์ž๋™ ์ฒดํฌ์ธ ์•Œ๋ฆผ(ํ‘ธ์‹œ/์•ฑ ๋‚ด ์•Œ๋ฆผ ๋“ฑ)
(3) ๊ธฐ๋ก ๋ฐฉ์‹, ์ƒํ˜ธ์ž‘์šฉ: ๋‹ฌ์„ฑ ์—ฌ๋ถ€์— ๋Œ€ํ•ด ์ฒดํฌ๋ฐ•์Šค, ์ƒ์„ฑํ•œ ์ฑŒ๋ฆฐ์ง€์— ๋Œ“๊ธ€, ์‘์› ์ด๋ชจํ‹ฐ์ฝ˜, ๊ฒฉ๋ ค ๋ฉ”์‹œ์ง€ ๋“ฑ ๊ฐ€๋Šฅ. ์ฑŒ๋ฆฐ์ง€ ์ข…๋ฃŒ ์‹œ ์ฑŒ๋ฆฐ์ง€ ๋ฆฌํฌํŠธ๋ฅผ ์ž๋™ ์ƒ์„ฑ(๋‹ฌ์„ฑ๋ฅ  ํ†ต๊ณ„)
(4) ๋‚ด๊ธฐ : ์ด๊ธธ ๋•Œ ๋ณด์ƒ, ์งˆ ๋•Œ์˜ ๋ฒŒ์น™์„ ์„ค์ •(์„ ํƒ) 

 

์‚ฌ์šฉ ๊ธฐ์ˆ 

์นœ๊ตฌ์™€์˜ ์ฑŒ๋ฆฐ์ง€ : Zustand, Redux๋“ฑ์œผ๋กœ ์ฑŒ๋ฆฐ์ง€๋ณ„ ์ง„ํ–‰์ƒํƒœ ๊ด€๋ฆฌ, Chart.js๋“ฑ์œผ๋กœ ํ†ต๊ณ„ ์‹œ๊ฐํ™”

 

์ฑ„ํŒ…ํ•˜๊ธฐ Chatํƒญ

1. ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…

 

์‚ฌ์šฉ๊ธฐ์ˆ 

์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… : WebSocket, ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ

 

์ถ”์–ตํ•˜๊ธฐ Memories ํƒญ
1. ํƒ€์ž„์บก์А ๊ฒŒ์‹œํŒ
๋ฏธ๋ž˜์˜ ๋‚˜์™€ ์นœ๊ตฌ์—๊ฒŒ ๋ณด๋‚ด๋Š” ๋ฉ”์‹œ์ง€, ์ง€๊ธˆ์€ ๋ณผ ์ˆ˜ ์—†์ง€๋งŒ ์•ฝ์†๋œ ๋‚ ์— ์ž๋™์œผ๋กœ ๊ณต๊ฐœ. ๊ณต๊ฐœ ์ˆœ๊ฐ„ ์นœ๊ตฌ๋“ค๊ณผ ์‹ค์‹œ๊ฐ„ ๋ฐ˜์‘ ๋‚˜๋ˆ„๊ธฐ ๊ฐ€๋Šฅ
(1) ์ž‘์„ฑํ•˜๊ธฐ : ์‚ฌ์ง„, ๊ธ€, ์˜์ƒ, ์Œ์„ฑ ๋ชจ๋‘ ๊ฐ€๋Šฅ
(2) ๊ฐœ๋ด‰ ๋‚ ์งœ ์ง€์ • : ๋‹ฌ๋ ฅ์—์„œ ๋‚ ์งœ ์„ ํƒ, ์„ ํƒ ์‹œ ๋žœ๋ค์œผ๋กœ ๊ฐœ๋ด‰, ๊ฐœ๋ด‰ ์นด์šดํŠธ๋‹ค์šด(๋žœ๋ค ๊ฐœ๋ด‰์€ ์นด์šดํŠธ๋‹ค์šด  x)
(3) ์ž ๊ธˆ ์ƒํƒœ ํ‘œ์‹œ : ์ž‘์„ฑ์ž๋„ ๋ฏธ๋ฆฌ ๋ชป๋ด„
(4) ๊ณต๊ฐœ ๋ฒ”์œ„ ์„ ํƒ:  ๋‚˜๋งŒ ๋ณด๊ธฐ / ํŠน์ • ์นœ๊ตฌ ๋ณด๊ธฐ / ์ „์ฒด ์นœ๊ตฌ ๋ณด๊ธฐ
(5) ๊ฐœ๋ด‰ ์•Œ๋ฆผ : ๊ฐœ๋ด‰ ํ•˜๋ฃจ ์ „, ๊ฐœ๋ด‰ ๋‹น์ผ์— ํ‘ธ์‹œ๋‚˜ ์•Œ๋ฆผ์œผ๋กœ ์•Œ๋ ค์คŒ
(6) ๊ฐœ๋ด‰ ํ›„ ๋ฐ˜์‘ : ๋Œ“๊ธ€, ์ด๋ชจ์ง€ ๋“ฑ
ํ™œ์šฉ ์˜ˆ์‹œ : ๊ธฐ๋…์ผ ์บก์А, ์—ฌํ–‰๊ฐ€๋Š”๋‚ (์—ฌํ–‰ ๊ณ„ํš ๊ธ€ ๋“ฑ), ๊นœ์ง ์„ ๋ฌผ

 

์‚ฌ์šฉ ๊ธฐ์ˆ 

ํƒ€์ž„์บก์А ์˜ˆ์•ฝ, ์ž๋™ ๊ฐœ๋ด‰ : ์„œ๋ฒ„ ์Šค์ผ€์ค„๋ง(CronJob ๋˜๋Š” ํ) - ๋ฐฑ์—”๋“œ ์Šค์ผ€์ค„๋ง, ๋น„๋™๊ธฐ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ

๊ฐœ๋ด‰ ์•Œ๋ฆผ: Push Notification, ์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ ๋“ฑ์˜ ์˜ˆ์•ฝ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ

 

2. ์•„์นด์ด๋ธŒ
“๋‚ด๊ฐ€ ๋ˆ„๋ฅธ ์ข‹์•„์š””์™€ “๋‚ด๊ฐ€ ๋ฐ›์€ ์ข‹์•„์š””๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฉ”๋‰ด. ๋‚˜์˜ ๊ฒŒ์‹œ๊ธ€ ์ทจํ–ฅ ๋“ฑ์„ ์•Œ ์ˆ˜ ์žˆ์Œ
(1) ์ข‹์•„์š” ๊ธฐ๋ก ํ™•์ธ : “๋‚ด๊ฐ€ ๋ˆ„๋ฅธ ์ข‹์•„์š””๋ฅผ ์—ฐ๋„/์›”/์ฃผ ๋‹จ์œ„๋กœ ์กฐํšŒ,
(2) ๋ถ๋งˆํฌ: ์ข‹์•„์š” ์™ธ ๋ถ๋งˆํฌ ํ‘œ์‹œ, ๋‚˜์ค‘์— ๋น ๋ฅด๊ฒŒ ์กฐํšŒ ๊ฐ€๋Šฅ
(3) ์ข‹์•„์š” ๊ธฐ๋ฐ˜ ์ถ”์ฒœ: ๋‚ด๊ฐ€ ‘์ข‹์•„์š”’ํ•œ ๊ฒŒ์‹œ๋ฌผ ์œ ํ˜• ๋ถ„์„(chart์ด์šฉ), ๋น„์Šทํ•œ ๊ฒŒ์‹œ๋ฌผ ์ถ”์ฒœ.


์‚ฌ์šฉ ๊ธฐ์ˆ 

์•„์นด์ด๋ธŒ ‘์ข‹์•„์š”’ํ™•์ธ : ๋ฐ์ดํ„ฐ ์ง‘๊ณ„, api ์ตœ์ ํ™”
์•„์นด์ด๋ธŒ ‘๋ถ๋งˆํฌ’ํ™•์ธ: ์‚ฌ์šฉ์ž ๋งž์ถค ๊ธฐ๋Šฅ, CRUD ์ฒ˜๋ฆฌ
์ข‹์•„์š” ๊ธฐ๋ฐ˜์˜ ๋žœ๋ค ๊ฒŒ์‹œ๊ธ€ ์ถ”์ฒœ : ์ถ”์ฒœ ์•Œ๊ณ ๋ฆฌ์ฆ˜, ๋ฐ์ดํ„ฐ ๋ถ„์„