Skip to content
@ureca9

Mung9

๐Ÿพ ๊ฐ•์•„์ง€ ๋™๋ฐ˜ ์‹œ์„ค ๊ณต์œ  ํ”Œ๋žซํผ, ๋ฉํ‹ฐ๋น„ํ‹ฐ

ํ”„๋กœ์ ํŠธ ํ™”๋ฉด (2)



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

LG U+ ์œ ๋ ˆ์นด 1๊ธฐ ์ตœ์ข… ์œตํ•ฉ ํ”„๋กœ์ ํŠธ ์šฐ์ˆ˜์ƒ ์ˆ˜์ƒ

๋ฉํ‹ฐ๋น„ํ‹ฐ(๋ฐ˜๋ ค๊ฒฝ ๋™๋ฐ˜ ๊ฐ€๋Šฅ ์‹œ์„ค ํ”Œ๋žซํผ)

ํ˜„๋Œ€ ์‚ฌํšŒ์—์„œ ๋ฐ˜๋ ค๋™๋ฌผ์€ ๊ฐ€์กฑ์˜ ์ผ์›์œผ๋กœ ์ž๋ฆฌ ์žก๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋”ฐ๋ผ ๋ฐ˜๋ ค๊ฒฌ๊ณผ ํ•จ๊ป˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์— ๋Œ€ํ•œ ์ˆ˜์š”๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋ฐ˜๋ ค๊ฒฌ๊ณผ ํ•จ๊ป˜ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ์„ค์— ๋Œ€ํ•œ ์ •๋ณด ๋˜ํ•œ ์ค‘์š”ํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ๋ณธ ํ”„๋กœ์ ํŠธ๋Š” ๋ฐ˜๋ ค๊ฒฌ ๋™๋ฐ˜ ๊ฐ€๋Šฅ ์‹œ์„ค์„ ์ฐพ๊ณ ์ž ํ•˜๋Š” ๋ฐ˜๋ ค์ธ๊ณผ ์ด๋Ÿฌํ•œ ์‹œ์„ค์„ ์ œ๊ณตํ•˜๋Š” ์‚ฌ์—…์ž๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ํ”Œ๋žซํผ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐํฌ ์ฃผ์†Œ : https://mungtivity.vercel.app/
ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„ : 2024.11.12 ~ 2024.12.19


๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป ํŒ€์›

๊ณ ์ฐฝ์ค€ ๊ธˆ์„ธํ˜„ ๊น€๋ณ‘์˜ฅ ๊น€์˜๋™ ์ด์‹ ์ง€ ์ด์€์„ ์žฅํ˜„ํฌ ์ฑ„ํฌ์›
FE BE BE FE BE FE BE FE

R&R

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

๐Ÿ”Ž ์„œ๋น„์Šค ๊ฐœ๋ฐœ ๋™๊ธฐ ๋ฐ ๋ชฉ์ 

๋ฐ˜๋ ค๋™๋ฌผ์„ ์–‘์œกํ•˜๊ณ  ์žˆ๋Š” ๊ฐ€๊ตฌ๋Š” 23๋…„ ๊ธฐ์ค€ 28.2%๋กœ ์ ์  ์ฆ๊ฐ€ํ•˜๋Š” ์ถ”์„ธ์ด๊ณ , ๊ทธ ์ค‘์—์„œ๋„ ๊ฐ•์•„์ง€๋ฅผ ํ‚ค์šฐ๋Š” ๋น„์œจ์ด ๋†’์€ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค ํ•˜์ง€๋งŒ ๋ฐ˜๋ ค๋™๋ฌผ ์ถœ์ž… ๊ฐ€๋Šฅ ์žฅ์†Œ๋Š” ์ œํ•œ๋˜์–ด ์žˆ๊ณ , ์ด์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ธฐ์กด ์ง€๋„์—์„œ ์‰ฝ๊ฒŒ ์ฐพ๊ธฐ๊ฐ€ ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ €ํฌ ์„œ๋น„์Šค๋Š” ์‚ฌ์šฉ์ž๊ฐ€ '๋ฐ˜๋ ค๋™๋ฌผ ๋™๋ฐ˜ ๊ฐ€๋Šฅ ์‹œ์„ค์„ ์†์‰ฝ๊ฒŒ ์กฐํšŒํ•˜๋Š” ๊ฒƒ'๊ณผ '๋ฐ˜๋ ค๋™๋ฌผ๊ณผ์˜ ์ถ”์–ต ๊ธฐ๋ก'์„ ๋ชฉํ‘œ๋กœ ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๐ŸŽฏ ๋ฌธ์ œ ์ •์˜์™€ ์†”๋ฃจ์…˜

๋ฌธ์ œ ์ •์˜

1. ์ •๋ณด ๋ถ€์กฑ

  • ๋ฐ˜๋ ค๋™๋ฌผ๊ณผ ํ•จ๊ป˜ํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ์„ค ์ •๋ณด๊ฐ€ ์ œํ•œ์ ์ด๋ฉฐ, ์—ฌ๋Ÿฌ ํ”Œ๋žซํผ์— ํฉ์–ด์ ธ ์žˆ์–ด ์›ํ•˜๋Š” ์ •๋ณด๋ฅผ ์‰ฝ๊ฒŒ ์ฐพ๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

2. ๊ฒ€์ƒ‰์˜ ๋ถˆํŽธํ•จ

  • ๋ฐ˜๋ ค๋™๋ฌผ ๋™๋ฐ˜ ๊ฐ€๋Šฅ ์‹œ์„ค์ด๋ผ๋„ ๊ฐ•์•„์ง€์˜ ์ข…์ด๋‚˜ ์ฒด์ค‘์— ๋”ฐ๋ผ ์ž…์žฅ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๊ฐ€ ๋‹ฌ๋ผ์ง€์ง€๋งŒ, ๊ธฐ์กด ํ”Œ๋žซํผ์—์„œ๋Š” ์ด๋ฅผ ์„ธ๋ถ€์ ์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

์†”๋ฃจ์…˜

1. ์‚ฌ์šฉ์ž ํŽธ์˜์„ฑ ๊ฐœ์„ 

  • ๋ฐ˜๋ ค๋™๋ฌผ ๋™๋ฐ˜ ๊ฐ€๋Šฅ ์‹œ์„ค ๊ณต์œ  ํ”Œ๋žซํผ์„ ํ†ตํ•ด ๋™๋ฐ˜ ๊ฐ€๋Šฅํ•œ ์žฅ์†Œ๋ฅผ ํ•œ๋ˆˆ์— ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‚ฌ์šฉ์ž์˜ ๋ฐ˜๋ ค๋™๋ฌผ ํŠน์„ฑ์— ๋งž๋Š” ๋งž์ถคํ˜• ์‹œ์„ค์„ ์ถ”์ฒœ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. ๊ตฌ์ฒด์ ์ธ ๊ฒ€์ƒ‰ ํ•„ํ„ฐ ์ œ๊ณต

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

๐Ÿ‘ฉโ€๐Ÿ’ป ์„œ๋น„์Šค ์†Œ๊ฐœ

๊ฐœ์š”

์ฃผ์š” ๊ธฐ๋Šฅ

1. ์†Œ์…œ ๋กœ๊ทธ์ธ

  • ์นด์นด์˜ค ์†Œ์…œ ๋กœ๊ทธ์ธ

2. ๋งˆ์ดํŽ˜์ด์ง€

  • ํšŒ์› ์ •๋ณด CRUD, ๋‚ด ๋ฐ˜๋ ค๊ฒฌ ๋ชฉ๋ก ์กฐํšŒ ๋ฐ ๋“ฑ๋ก ๊ฐ€๋Šฅ

  • ์„ ํ˜ธ ์‹œ์„ค๊ณผ ์„ ํ˜ธ ์ง€์—ญ ์ •๋ณด ์ˆ˜์ • ๊ฐ€๋Šฅ


3. ๋ฐ˜๋ ค๋™๋ฌผ ์ •๋ณด ๊ด€๋ฆฌ

  • ๋ฐ˜๋ ค๋™๋ฌผ ํ”„๋กœํ•„ ๊ด€๋ฆฌ (CRUD)

4. ๊ฒ€์ƒ‰

  • ๊ฒ€์ƒ‰์–ด๋กœ ๊ฒ€์ƒ‰

  • ์ง€์—ญ, ๋‚ ์งœ, ๊ฐ™์ด ๊ฐˆ ๋ฐ˜๋ ค๋™๋ฌผ ์„ ํƒ ํ›„ ํ•ด๋‹น ์ •๋ณด๋ฅผ ๋ฐ˜์˜ํ•˜์—ฌ ์žฅ์†Œ ๊ฒ€์ƒ‰

  • JooQ๋ฅผ ๋„์ž…ํ•˜์—ฌ ๋กœ๊ทธ์ธ ์—ฌ๋ถ€์— ๋”ฐ๋ฅธ ์ข‹์•„์š” ๊ฒ€์ƒ‰, ํŽ˜์ด์ง• ์—ฌ๋ถ€์— ๋”ฐ๋ฅธ ๊ฒ€์ƒ‰ ๋“ฑ ๋™์ ์œผ๋กœ ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅ

  • ๊ธฐ์ƒ์ฒญ ๋‹จ๊ธฐ ์˜ˆ๋ณด ์กฐํšŒ API์™€ ์ค‘๊ธฐ ์˜ˆ๋ณด ์กฐํšŒ API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์—ญ ์„ ํƒ ์‹œ ๋‹น์ผ๋ถ€ํ„ฐ 10์ผ ํ›„๊นŒ์ง€์˜ ๋‚ ์”จ ์ •๋ณด ์ œ๊ณต


5. ์ฆ๊ฒจ์ฐพ๊ธฐ

  • ์žฅ์†Œ์— ์ฆ๊ฒจ์ฐพ๊ธฐ๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ณ , ์ฆ๊ฒจ์ฐพ๊ธฐ ํ•œ ์žฅ์†Œ๋ฅผ ๋ชจ์•„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.


6. ํ›„๊ธฐ

  • ์žฅ์†Œ์— ์‚ฌ์ง„, ์˜์ƒ์„ ํฌํ•จํ•œ ํ›„๊ธฐ๋ฅผ ๋‚จ๊ธธ ์ˆ˜ ์žˆ๊ณ , ๋‚ด๊ฐ€ ์“ด ํ›„๊ธฐ๋ฅผ ๋ชจ์•„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.


7. ์ง€๋„

  • ์ฆ๊ฒจ์ฐพ๊ธฐ ํ•œ ์žฅ์†Œ์˜ ์ •๋ณด๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

  • ์ฆ๊ฒจ์ฐพ๊ธฐ ํ•œ ์žฅ์†Œ์˜ ์œ„์น˜๋ฅผ ํ•€์„ ํ†ตํ•ด ์•Œ ์ˆ˜ ์žˆ๋‹ค.

  • ์ง€๋„์—์„œ ์žฅ์†Œ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค.


8. ๊ธธ์ฐพ๊ธฐ

  • ํ˜„์žฌ ์œ„์น˜์—์„œ ํŠน์ • ์žฅ์†Œ๊นŒ์ง€ ๊ฐ€๋Š” ๊ธธ์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

9. ์ถ”์ฒœ

  • ๊ฐœ์ธ ๋ณ„ ํŽœ์…˜ ์ถ”์ฒœ๊ณผ ํŽœ์…˜ ์—ฐ๊ด€ ์‹œ์„ค ์ถ”์ฒœ

  • ์ฝ˜ํ…์ธ  ๊ธฐ๋ฐ˜ ํ•„ํ„ฐ๋ง๊ณผ ํ˜‘์—… ํ•„ํ„ฐ๋ง์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณด๋‹ค ์ •ํ™•ํ•œ ์ถ”์ฒœ

  • ํ˜‘์—… ํ•„ํ„ฐ๋ง์—์„œ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์™€ ๊ธฐ๊ณ„ ํ•™์Šต ๊ธฐ๋ฐ˜ ์ถ”์ฒœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ Mahout์„ ์‚ฌ์šฉ

  • ์‚ฌ์šฉ์ž์˜ ๋ฆฌ๋ทฐ ๋ฐ์ดํ„ฐ์™€ ์„ ํ˜ธ ์ง€์—ญ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ์ธ ๋ณ„ ๋งž์ถค ํŽœ์…˜ ์ถ”์ฒœ ์ œ๊ณต

  • ์‚ฌ์šฉ์ž์˜ ๋ฆฌ๋ทฐ ๋ฐ์ดํ„ฐ์™€ ๊ฑฐ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํŽœ์…˜ ์—ฐ๊ด€ ์‹œ์„ค ์ถ”์ฒœ ์ œ๊ณต


10. ์กฐํšŒ ์ˆ˜ ๊ธฐ๋ฐ˜ ํ•ซํ•œ ์žฅ์†Œ

  • ์กฐํšŒ ์ˆ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ซํ•œ ์žฅ์†Œ๋ฅผ ์นดํ…Œ๊ณ ๋ฆฌ ๋ณ„๋กœ ์กฐํšŒ ๊ฐ€๋Šฅ
  • Redis์˜ Sorted Set ์ž๋ฃŒ๊ตฌ์กฐ ์‚ฌ์šฉ (Score ๊ธฐ์ค€์œผ๋กœ ์กฐํšŒ์ˆ˜ ์ž๋™ ์ •๋ ฌ์— ์šฉ์ดํ•  ๊ฒƒ์ด๋ผ ํŒ๋‹จ)
  • ๋กœ๊ทธ์„ฑ ํ…Œ์ด๋ธ”๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค ํ…Œ์ด๋ธ” ๋ถ„๋ฆฌ

11. ์ตœ๊ทผ ๋ณธ ์žฅ์†Œ

  • Local Storage๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ตœ๊ทผ ๋ณธ ์žฅ์†Œ ๋ชฉ๋ก ์กฐํšŒ ๊ฐ€๋Šฅ

12. ๋ฉ์ƒ๋„ค์ปท

  • ํ”„๋ ˆ์ž„๊ณผ ์ด๋ฏธ์ง€ 4์žฅ์„ ๊ณจ๋ผ ๋ฉ์ƒ๋„ค์ปท ์ƒ์„ฑ
  • ์ด๋ฏธ์ง€๋Š” ๋‹ค์šด๋กœ๋“œ ๋ฐ ๊ณต์œ  ๊ฐ€๋Šฅ
  • ๋‚˜์˜ ๋ฉ์ƒ๋„ค์ปท ๋ชฉ๋ก๊ณผ ์ „์ฒด ๋ฉ์ƒ๋„ค์ปท ๋ชฉ๋ก ์กฐํšŒ




ํ”„๋ก ํŠธ์—”๋“œ ๊ธฐ์ˆ  ๊ณ ๋ฏผ!

  1. ์ด๋ฏธ์ง€๊ฐ€ ๋งŽ์•„์„œ ํ™”๋ฉด ๋กœ๋”ฉ์ด ๋А๋ ค์ง€๋Š” ํ˜„์ƒ

    • Intersection Observer๋ฅผ ํ™œ์šฉํ•œ ๋ฌดํ•œ ์Šคํฌ๋กค์„ ๊ตฌํ˜„ํ•˜์—ฌ ํ•„์š”ํ•œ ๋งŒํผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์™€ ์ด๋ฏธ์ง€ ๋กœ๋”ฉ ์†๋„ ์ตœ์ ํ™”
  2. ๊ณ ํ™”์งˆ ์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œ ํ•˜๋Š”๋ฐ 5์ดˆ ๋„˜๊ฒŒ ๊ฑธ๋ฆฌ๋Š” ํ˜„์ƒ

    • Canvas API ๋ฐ OffscreenCanvas๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ JPEG ๋˜๋Š” WebP ํ˜•์‹์œผ๋กœ ์••์ถ• ํ›„ ๋ฐฑ์—”๋“œ๋กœ ์ „์†ก
    • ์ด๋ฅผ ํ†ตํ•ด ์—…๋กœ๋“œ ์‹œ๊ฐ„ 5์ดˆ์—์„œ 123ms๋กœ ๋Œ€ํญ ๊ฐœ์„ 
  3. ๋ฉ์ƒ๋„ค์ปท ์ƒ์„ฑ ์‹œ ์ด๋ฏธ์ง€๊ฐ€ ์ค„์–ด๋“œ๋Š” ํ˜„์ƒ

    • hmtl2canvas ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ HTML ํƒœ๊ทธ๋ฅผ ์บก์ณํ•  ๋•Œ ๋Œ€๋ถ€๋ถ„์˜ CSS ์Šคํƒ€์ผ์„ ์ง€์›ํ•˜์ง€๋งŒ object-fit: cover ์†์„ฑ์„ ์ œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•จ.
    • ๊ธฐ์กด์—๋Š” ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ํ›„ css๋กœ ์ด๋ฏธ์ง€๊ฐ€ ๊ฝ‰ ์ฐจ๋„๋ก ํ•˜์—ฌ ํ”„๋ ˆ์ž„์— ๋งž๊ฒŒ ๋น„์œจ์„ ์กฐ์ ˆํ•˜์˜€์œผ๋‚˜, html2canvas๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „ JavaScript๋กœ ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ๋‚˜ ๋น„์œจ์„ ์กฐ์ •ํ•œ ํ›„ ์บก์ฒ˜ํ•˜์—ฌ ํ•ด๊ฒฐ

๋ฐฑ์—”๋“œ ๊ธฐ์ˆ  ๊ณ ๋ฏผ!

  1. ์ด๋ฏธ์ง€๋ฅผ ๋„ฃ์œผ๋ ค ํ•˜๋Š”๋ฐ S3๊ฐ€ ์‘๋‹ต์„ ์•ˆํ•œ๋‹ค๋ฉด?

    • temp_file ํ…Œ์ด๋ธ”์— url, ๋ฉค๋ฒ„ ์ •๋ณด์™€ ํ•จ๊ป˜ Blob ํ˜•์‹์œผ๋กœ ์ด๋ฏธ์ง€ ์ž„์‹œ ์ €์žฅ ํ›„ ์„œ๋น„์Šค๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋œ๋‹ค๋ฉด temp_file์„ S3์— ์—…๋กœ๋“œ ํ•œ ๋’ค ์ž„์‹œ ์ด๋ฏธ์ง€ ์‚ญ์ œ
  2. S3 ์—…๋กœ๋“œ๊ฐ€ ์„ฑ๊ณตํ–ˆ๋Š”๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—… ์ค‘ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๋ฉด?

    • S3์— ์—…๋กœ๋“œ ๋œ ํŒŒ์ผ์ด ๋‚จ์•„์žˆ๋Š” ์ƒํ™ฉ์„ ๊ณ ๋ คํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—… ์ค‘ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์—…๋กœ๋“œ ๋œ ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๋Š” ๋กœ์ง ์ถ”๊ฐ€

๐Ÿ–ฅ๏ธ Software Arichtecture

์Šคํฌ๋ฆฐ์ƒท 2024-12-19 135045

๐Ÿ’ก Information Arichtecture

IA (1)

๐Ÿ“œ ERD

๋ฉ๋ฉ99

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

๐Ÿ“˜ [Fronte-End]


React

  • ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ†ตํ•ด ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.

Tailwind CSS

  • ์œ ํ‹ธ๋ฆฌํ‹ฐ ํผ์ŠคํŠธ CSS ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๋ฏธ๋ฆฌ ์ •์˜๋œ ํด๋ž˜์Šค๋ช…์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์œผ๋กœ ์Šคํƒ€์ผ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์ด ์šฉ์ดํ•˜์—ฌ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

Zustand

  • ๊ฒฝ๋Ÿ‰ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ API์™€ ํ›…์„ ์ œ๊ณตํ•˜์—ฌ ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.

Yarn

  • JavaScript ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋กœ, ํŒจํ‚ค์ง€ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์„ค์น˜ ์†๋„๋ฅผ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค. npm๋ณด๋‹ค ๋น ๋ฅด๊ณ , ์•ˆ์ •์ ์ธ ์„ค์น˜๋ฅผ ์ง€์›ํ•˜์—ฌ ํŒ€์› ๊ฐ„์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

MSW (Mock Service Worker)

  • API ์š”์ฒญ์„ ๊ฐ€๋กœ์ฑ„๊ณ  ๋ชจ์˜ ์‘๋‹ต์„ ์ œ๊ณตํ•˜์—ฌ, ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์‹ค์‹œ๊ฐ„์œผ๋กœ API๋ฅผ ๋ชจํ‚นํ•  ์ˆ˜ ์žˆ์–ด ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

Axios

  • Promise ๊ธฐ๋ฐ˜์˜ HTTP ํด๋ผ์ด์–ธํŠธ๋กœ, API์™€์˜ ํ†ต์‹ ์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค๋‹ˆ๋‹ค. ์š”์ฒญ ๋ฐ ์‘๋‹ต์„ ์‰ฝ๊ฒŒ ๋ณ€ํ™˜ํ•˜๊ณ , ๋‹ค์–‘ํ•œ ์„ค์ •์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

Vite

  • ๋น ๋ฅธ ๋นŒ๋“œ ๋ฐ ๊ฐœ๋ฐœ ์„œ๋ฒ„๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ฐจ์„ธ๋Œ€ ํ”„๋ก ํŠธ์—”๋“œ ๋นŒ๋“œ ๋„๊ตฌ๋กœ, ํ•ซ ๋ชจ๋“ˆ ๊ต์ฒด(HMR)๊ฐ€ ์ง€์›๋˜์–ด ๊ฐœ๋ฐœ ์†๋„๋ฅผ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ES ๋ชจ๋“ˆ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์—ฌ ์ตœ์ ํ™”๋œ ๋ฒˆ๋“ค๋ง์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Storybook

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

Chromatic

  • Storybook๊ณผ ํ†ตํ•ฉ๋˜์–ด UI ์ปดํฌ๋„ŒํŠธ์˜ ์‹œ๊ฐ์  ๋ณ€ํ™”๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์„œ๋น„์Šค๋กœ, ์ž๋™ํ™”๋œ ์‹œ๊ฐ์  ํ…Œ์ŠคํŠธ์™€ ๋ฆฌ๋ทฐ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํŒ€์› ๊ฐ„์˜ ํ˜‘์—…์„ ๊ฐœ์„ ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค.

JavaScript

  • ์›น ๊ฐœ๋ฐœ์˜ ํ•ต์‹ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ, ํด๋ผ์ด์–ธํŠธ ์ธก ๋ฐ ์„œ๋ฒ„ ์ธก์—์„œ ๋™์ž‘ํ•˜๋ฉฐ, ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, DOM ์กฐ์ž‘, ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋“ฑ์„ ํ†ตํ•ด ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“— [Back-End]


Spring Security

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ธ์ฆ๊ณผ ๊ถŒํ•œ ๊ด€๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๋ณด์•ˆ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.

JWT (JSON Web Token)

  • ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

Spring Data JPA

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

Spring Data JDBC

  • Batch ์ฒ˜๋ฆฌ ๋“ฑ ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ์ž‘์—…์„ ๋น ๋ฅด๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Spring Batch

  • ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฐ์น˜ ํ”„๋กœ์„ธ์‹ฑ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.

JOOQ

  • ๋™์  ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ์œ ์—ฐํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

Mahout

  • ๊ธฐ๊ณ„ ํ•™์Šต ๊ธฐ๋ฐ˜์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ์ถ”์ฒœ ์‹œ์Šคํ…œ์—์„œ ํ˜‘์—… ํ•„ํ„ฐ๋ง์„ ๊ตฌํ˜„ํ•  ๋•Œ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค.

AWS EC2

  • ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•œ ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.

RDS (MySQL)

  • ์•ˆ์ •์ ์ธ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.

Redis

  • ์บ์‹ฑ์„ ํ†ตํ•ด ๋น ๋ฅธ ๋ฐ์ดํ„ฐ ์กฐํšŒ์™€ ๊ณ ์„ฑ๋Šฅ ์ฒ˜๋ฆฌ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

S3

  • ํŒŒ์ผ ์ €์žฅ ๋ฐ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ฐ์ฒด ์Šคํ† ๋ฆฌ์ง€ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.

ELB (Elastic Load Balancer)

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์˜ ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌํ•˜์—ฌ ๊ฐ€์šฉ์„ฑ๊ณผ ์•ˆ์ •์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.

๐Ÿ“• Co-Working-Tool


๐Ÿ—‚๏ธ Convention

Branch Architecture

master: ๋ฐฐํฌ๊ฐ€ ๋˜๋Š” ๋ธŒ๋žœ์น˜
develop: ๋ฐฐํฌ์ „ ์ž„์‹œ
KAN-[number]: Jira ์Šคํ† ๋ฆฌ ๋ฒˆํ˜ธ

์ƒ์„ฑ๋˜๋Š” jira branch ์ด๋ฆ„

Group 39659

Commit

Commit Format Type: content

feat: Seo ๊ธฐ๋Šฅ ์ถ”๊ฐ€

feat: Header ์Šคํƒ€์ผ ์ถ”๊ฐ€

git commit -m "feat: "

Commit Type

ํƒ€์ž… ์„ค๋ช… ์˜ˆ์‹œ
feat ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. feat: ๋กœ๊ทธ์ธ ํผ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์ถ”๊ฐ€
fix ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. fix: ๋กœ๊ทธ์ธ ๋ฒ„๊ทธ ์ˆ˜์ •
style ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๊ด€๋ จ ๋ณ€๊ฒฝ ์‚ฌํ•ญ. style: ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ” ๋””์ž์ธ ์ˆ˜์ •
refactor ๋ฒ„๊ทธ ์ˆ˜์ •์ด๋‚˜ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ์—†์ด ์ฝ”๋“œ ๊ตฌ์กฐ๋ฅผ ๊ฐœ์„ ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. refactor: ์ปดํฌ๋„ŒํŠธ ์ƒํƒœ ๊ด€๋ฆฌ ๋กœ์ง ๋‹จ์ˆœํ™”
perf ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๋Š” ์ฝ”๋“œ ๋ณ€๊ฒฝ. perf: ์ด๋ฏธ์ง€ ๋กœ๋”ฉ ์‹œ๊ฐ„ ์ตœ์ ํ™”
test ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. test: ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
docs ๋ฌธ์„œ๋งŒ ๋ณ€๊ฒฝํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. docs: ์„ค์น˜ ๋‹จ๊ณ„ README์— ์ถ”๊ฐ€
chore ์†Œ์Šค๋‚˜ ํ…Œ์ŠคํŠธ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜์ง€ ์•Š๋Š” ์ผ๋ฐ˜์ ์ธ ์ž‘์—…์ด๋‚˜ ์—…๋ฐ์ดํŠธ. chore: ์ข…์†์„ฑ ํŒจํ‚ค์ง€ ์—…๋ฐ์ดํŠธ
revert ์ด์ „ ์ปค๋ฐ‹์„ ๋˜๋Œ๋ฆด ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. revert: "๋กœ๊ทธ์ธ ํผ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์ถ”๊ฐ€" ์ปค๋ฐ‹ ๋˜๋Œ๋ฆผ
init ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ ์„ค์ • ์‹œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. init: React ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ ์„ค์ •
delete ์ฝ”๋“œ/ํŒŒ์ผ ์‚ญ์ œ. delete: ์•ˆ ์“ฐ๋Š” ๋กœ๊ทธ์ธ ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ
wip ์ž‘์—… ์ค‘์ด๊ฑฐ๋‚˜ ์‹คํ—˜์ ์ธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ. wip: ์ƒˆ๋กœ์šด ์ธ์ฆ ๋ฐฉ๋ฒ•์„ ์‹คํ—˜ ์ค‘

Pull Request

Description

## ์ž‘์—… ๋‚ด์šฉ

- ์ž‘์—… ๋‚ด์šฉ 1
- ์ž‘์—… ๋‚ด์šฉ 2

## ์ด์Šˆ
- ์–ด๋–ค ์ด์Šˆ๊ฐ€ ์žˆ๋Š”์ง€ ์ž‘์„ฑ

## ์ฐธ๊ณ 

- ๊ตฌํ˜„ํ•œ ํ™”๋ฉด์ด๋‚˜ ์˜์ƒ
- bug fix๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋Š”์ง€

Popular repositories Loading

  1. BE_MungGu BE_MungGu Public

    ๐Ÿต๏ธ LG U+ ์œ ๋ ˆ์นด 1๊ธฐ ์šฐ์ˆ˜์ƒ ์ˆ˜์ƒ ์ตœ์ข… ํ”„๋กœ์ ํŠธ

    Java 1 1

  2. FE_MungGu FE_MungGu Public

    ๐Ÿต๏ธ LG U+ ์œ ๋ ˆ์นด 1๊ธฐ ์šฐ์ˆ˜์ƒ ์ˆ˜์ƒ ์ตœ์ข… ํ”„๋กœ์ ํŠธ

    JavaScript 2

  3. .github .github Public

Repositories

Showing 3 of 3 repositories

Top languages

Loadingโ€ฆ

Most used topics

Loadingโ€ฆ