Skip to content

๐Ÿ—‚ ๊ธฐ์ˆ  ์Šคํƒ

Seung-hyun Kim edited this page Dec 15, 2022 · 1 revision

image

๋ชฉ์ฐจ

๊ณตํ†ต ๊ธฐ์ˆ ์Šคํƒ

JavaScript, TypeScript

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

ํ”„๋ก ํŠธ์—”๋“œ ๊ธฐ์ˆ ์Šคํƒ

React

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

Vite

  • CRA ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐœ๋ฐœํ–ˆ์„ ๋•Œ ๋ฐฐํฌ ์‹œ ๋นŒ๋“œ ์†๋„๊ฐ€ ๋„ˆ๋ฌด ๋Š๋ ธ๋˜ ๊ฒฝํ—˜์ด ์žˆ์–ด์„œ ์ด๋ฅผ ๊ฐœ์„ ํ•˜๊ณ ์ž ๊ณ ๋ฏผํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Vite ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ dev ํ™˜๊ฒฝ์—์„œ๋Š” ES Build ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งค์šฐ ๋น ๋ฅธ ๋ฒˆ๋“ค๋ง ์†๋„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋˜ํ•œ production ํ™˜๊ฒฝ์—์„œ๋Š” RollUp ์„ ์‚ฌ์šฉํ•˜์—ฌ ์›นํŒฉ๋ณด๋‹ค ๋น ๋ฅธ ๋ฒˆ๋“ค๋ง ์†๋„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • Vite ๊ฐ€ SSR์— ์•ฝ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ, ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” CSR์„ ๊ธฐํšํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ด€๋ จ ๋ฌธ์„œ : Vite: CRA vs Vite

React Query

  • ํ”„๋กœ์ ํŠธ ๊ธฐํš ๋‹จ๊ณ„์—์„œ ํฌ์ŠคํŠธ ์ •๋ณด, ๋ฆฌ๋ทฐ ์ •๋ณด, ์ข‹์•„์š”/๋ถ๋งˆํฌ/ํŒ”๋กœ์šฐ... ์—ฌ๋ถ€ ๋“ฑ ํด๋ผ์ด์–ธํŠธ๋ณด๋‹ค ์„œ๋ฒ„์—์„œ ๋ฐ›์•„์™€๋Š” ์ƒํƒœ๊ฐ€ ๋งŽ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ๋กœ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋˜๋ฉด ์„œ๋ฒ„ ์š”์ฒญ์„ ์œ„ํ•œ ์ฝ”๋“œ, ๋™๊ธฐํ™”, ์บ์‹ฑ ๋“ฑ์„ ์œ„ํ•œ ์ฝ”๋“œ ๋“ฑ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ๊ฐ€ ๋งŽ์•„์งˆ ๊ฒƒ์ด๋ผ๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ž˜์„œ ์„œ๋ฒ„ ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋„์ž…์„ ์‹œ๋„ํ–ˆ๊ณ , React Query ์™€ SWR ์ค‘ ์‚ฌ์šฉ ๊ฒฝํ—˜์ด ์žˆ๊ณ , ๊ณต์‹์ ์œผ๋กœ DevTools ๋ฅผ ์ง€์›ํ•˜๋Š” React Query ๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ด€๋ จ ๋ฌธ์„œ : React Query: ์„œ๋ฒ„ ์ƒํƒœ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

Zustand

  • ํด๋ผ์ด์–ธํŠธ์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ์ƒํƒœ๊ฐ€ ๋งŽ๊ณ  ์ปดํฌ๋„ŒํŠธ์˜ depth๊ฐ€ ๊นŠ์–ด์ ธ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ๊ฐ€ ์ ๊ณ  ํ•ต์‹ฌ ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ์˜ค์ง 42์ค„์ด๊ธฐ ๋•Œ๋ฌธ์— ๋Ÿฌ๋‹์ปค๋ธŒ๊ฐ€ ์ ์–ด ๋น ๋ฅธ ์‹œ๊ฐ„ ๋‚ด์— ํ•™์Šตํ•˜์—ฌ ์ ์šฉํ•˜๊ธฐ์— ์šฉ์ดํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋˜ํ•œ Provider๋กœ ๊ฐ์‹ธ์ง€ ์•Š๊ณ ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋”์šฑ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
  • Redux Devtools๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ๋””๋ฒ„๊น…์ด ์šฉ์ดํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ด€๋ จ ๋ฌธ์„œ : Zustand: ์ „์—ญ ์ƒํƒœ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

SASS

  • Nesting ์„ ์ด์šฉํ•˜์—ฌ BEM ๋ฐฉ๋ฒ•๋ก ์„ ์ ์šฉํ–ˆ์„๋•Œ์˜ ์‚ฌ์šฉ์„ฑ์„ ๋†’์—ฌ์ค๋‹ˆ๋‹ค.
  • CSS-IN-JS ์— ๋น„ํ•ด ๋†’์€ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
  • mixin ์„ ์ด์šฉํ•˜์—ฌ css์˜ ์ค‘๋ณต์„ ์ค„์—ฌ์ค๋‹ˆ๋‹ค.
  • CSS ๋ฌธ๋ฒ•๊ณผ ์™„๋ฒฝํ•˜๊ฒŒ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.

MSW

  • ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ ์ดํ›„ ๋„์ž…๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„์˜ ๊ฐœ๋ฐœ ์†๋„ ์ฐจ์ด๋กœ ํด๋ผ์ด์–ธํŠธ์—์„œ API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธ ํ•จ์— ์–ด๋ ค์›€์„ ๊ฒช์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์†Œ์Šค์ฝ”๋“œ ๋ณ€๊ฒฝ ์—†์ด, ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์กฐ๊ฑด์„ ์ฃผ๋ฉด์„œ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋Š” MSW ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋„์ž…ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ด€๋ จ ๋ฌธ์„œ : ํด๋ผ์ด์–ธํŠธ์—์„œ API ํ…Œ์ŠคํŠธ๋ฅผ, MSW.js ๋„์ž…๊ธฐ

๋ฐฑ์—”๋“œ ๊ธฐ์ˆ ์Šคํƒ

NestJS

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

Jest

Jest vs Mocha

  • Jest์˜ ์ž๋ฃŒ๊ฐ€ ๋” ๋งŽ์•„ ํ•™์Šต์ด ์šฉ์ดํ•  ๊ฒƒ์œผ๋กœ ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Jest๊ฐ€ ์†๋„๊ฐ€ ๋” ๋Š๋ฆฌ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์ง€๋งŒ, ์‚ฌ์šฉ์ž๋“ค์˜ ์†๋„๋ฅผ ์ €ํ•ดํ•˜๋Š” ์š”์†Œ๋Š” ์•„๋‹ˆ๋ผ Jest๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

ElasticSearch

  • ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.
  • MySQL์—์„œ 70๋งŒ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ  ๊ฒ€์ƒ‰ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ, Full Text Search ์™ธ์—๋Š” ๋ฐฉ๋ฒ•์ด ์—†๋‹ค ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ง์ ‘ Full Text Query๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค ํ–ˆ์ง€๋งŒ, ํ•œ๊ตญ์–ด์˜ ํ˜•ํƒœ์†Œ ๋ถ„์„์„ ํ•˜๊ธฐ์—๋Š” ์‹œ๊ฐ„์ด ํ•œ์ •๋˜์–ด Elastic Search๋ฅผ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.

Logstash

๋ฐฐํฌ๊ฐ€ ์ง„ํ–‰๋˜์–ด ๊ฒŒ์‹œ๊ธ€์ด ์ž‘์„ฑ๋œ ์ดํ›„, ElasticSearch๋ฅผ ๋„์ž…ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ธฐ์กด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•  ํ•„์š”๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. MySQL์—์„œ Elastic Search๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด Logstash๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

MYSQL

  • ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ์œ„ํ•ด ์ต์ˆ™ํ•œ MySQL์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ ํƒ ์ด์œ 

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

Mongo DB

  • ๊ฒ€์ƒ‰ ์กฐ๊ฑด์ด ๋‹ค์–‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰์–ด๋ฅผ NoSQL์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒŒ ์ ์ ˆํ•˜๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.

TypeORM

  • TypeORM, Sequalize, Prisma ์ค‘ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ด€๊ณ„๋กœ ๊ถํ•ฉ์ด ์ข‹์€ TypeORM์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

ORM vs Native SQL

  • ORM์„ ์“ฐ๋ฉด ๊ฐœ๋ฐœํ•  ๋•Œ ํ…Œ์ด๋ธ”๋“ค์„ ๊ฐ์ฒด๋กœ ๋‹ค๋ฃจ๊ธฐ ๋•Œ๋ฌธ์— ์ง๊ด€์ ์œผ๋กœ ํ…Œ์ด๋ธ”๊ฐ„ ๊ด€๊ณ„๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.
  • ๋˜, SQL ๋ฌธ์žฅ์„ ๊ทธ๋Œ€๋กœ ์“ฐ๋ฉด ๊ฐœ๋ฐœ ํŽธ์˜์„ฑ์ด ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์ง€๋งŒ, ORM์—์„œ ์ง€์›ํ•˜๋Š” QueryBuilder๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.

WeView ๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ

๐Ÿ’พ ๊ฐœ๋ฐœ ๊ธฐ๋ก

2์ฃผ์ฐจ Tech Post
3์ฃผ์ฐจ Tech Post
4์ฃผ์ฐจ Tech Post
5์ฃผ์ฐจ Tech Post
6์ฃผ์ฐจ Tech Post

โ›น๐Ÿป ์ฃผ๊ฐ„ ์Šคํ”„๋ฆฐํŠธ

1์ฃผ์ฐจ ์Šคํ”„๋ฆฐํŠธ
2์ฃผ์ฐจ ์Šคํ”„๋ฆฐํŠธ
3์ฃผ์ฐจ ์Šคํ”„๋ฆฐํŠธ
4์ฃผ์ฐจ ์Šคํ”„๋ฆฐํŠธ
5์ฃผ์ฐจ ์Šคํ”„๋ฆฐํŠธ
6์ฃผ์ฐจ ์Šคํ”„๋ฆฐํŠธ

๐Ÿ“‘ ์ฃผ๊ฐ„ ํšŒ๊ณ 

๐Ÿ“ 1์ฃผ์ฐจ ์ฃผ๊ฐ„ ํšŒ๊ณ 
๐Ÿ“ 2์ฃผ์ฐจ ์ฃผ๊ฐ„ ํšŒ๊ณ 
๐Ÿ“ 3์ฃผ์ฐจ ์ฃผ๊ฐ„ ํšŒ๊ณ 
๐Ÿ“ 4์ฃผ์ฐจ ์ฃผ๊ฐ„ ํšŒ๊ณ 
๐Ÿ“ 5์ฃผ์ฐจ ์ฃผ๊ฐ„ ํšŒ๊ณ 
๐Ÿ“ 6์ฃผ์ฐจ ์ฃผ๊ฐ„ ํšŒ๊ณ 
Clone this wiki locally