๊ฐœ๋ฐœ ๊ณต๋ถ€/๋ฐ๋ธŒ์ฝ”์Šค TIL

[ํด๋ผ์šฐ๋”ฉ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์—”์ง€๋‹ˆ์–ด๋ง TIL] 240111 - JS ์‹ค์Šต

๊ฐ€์šค์ด 2024. 1. 11. 22:32

Intro


์˜ค๋Š˜์€ ์ง์ ‘ ํ”„๋กœ์ ํŠธ ์„ธํŒ…ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ํ•™์Šตํ–ˆ๋‹ค.

json-server๋ฅผ ์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ๋˜์—ˆ๊ณ  json-server๋กœ ์•ž์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ REST API ํ†ต์‹ ์„ ๊ตฌํ˜„ํ•œ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด ๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

๊ทธ๋ฆฌ๊ณ  sass๋Š” ํ•œ๋ฒˆ๋„ ์‚ฌ์šฉํ•ด ๋ณธ ์ ์ด ์—†๋Š”๋ฐ ์•ž์œผ๋กœ ์‹ค์Šตํ•˜๋ฉฐ ์จ๋ณผ ์ˆ˜ ์žˆ์–ด ๊ธฐ๋Œ€๊ฐ€ ๋œ๋‹ค.

 

 

 

์˜ค๋Š˜ ํ•™์Šตํ•œ ๋‚ด์šฉ

: Teck Flow, ํ”„๋กœ์ ํŠธ ์„ธํŒ…


Tech Flow

์–ด์ œ ๊ณต๋ถ€ํ•œ User Flow์™€ ์ƒ์„ธ Flow์— ์ด์–ด Teck Flow์— ๋Œ€ํ•ด ํ•™์Šตํ–ˆ๋‹ค.

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

  1. ์„œ๋น„์Šค์— ์ ‘๊ทผํ•œ๋‹ค.
  2. ์œ ์ €๊ฐ€ ์•ก์…˜์„ ํ•˜๋ฉด, ์„œ๋น„์Šค๋Š” ์•ก์…˜์„ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค.
  3. ์ž…๋ ฅ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„์— ์ €์žฅํ•œ๋‹ค.
  4. ํ˜„์žฌ ์ž์‚ฐ์„ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์˜จ๋‹ค.
  5. ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์ž์‚ฐ ๋ฐ์ดํ„ฐ๋ฅผ ํ™”๋ฉด์— ๋ณด์—ฌ์ค€๋‹ค.

๊ฐ„๋‹จํ•œ ๊ณ„์‚ฐ๊ธฐ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•„์š”ํ•œ ๋‹จ๊ณ„๋ฅผ ์ƒ๊ฐํ•ด๋ณด๊ณ , ๊ฐ๊ฐ์˜ ๋‹จ๊ณ„์—์„œ ๊ตฌํ˜„ ๋ชฉํ‘œ์™€ ๊ทธ์— ๋”ฐ๋ฅธ ํ•„์š” ์‚ฌํ•ญ๋“ค์„ ์ƒ๊ฐํ•ด์„œ tech flow๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค๋ฉด,

  1. ์„œ๋น„์Šค์— ์ ‘๊ทผํ•œ๋‹ค.
    • ๊ตฌํ˜„ ๋ชฉํ‘œ: ์œ ์ €๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ™”๋ฉด์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
    • ํ•„์š”: ์œ ์ €๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์— ์ ‘๊ทผํ•œ๋‹ค โžก๏ธ ์œ ์ €๊ฐ€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ํ™”๋ฉด์ด ๊ทธ๋ ค์ง„๋‹ค.
    • Tech Flow: ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์‚ฌ์šฉํ•ด ์„œ๋น„์Šค URL ์ ‘์† โžก๏ธ ์„œ๋น„์Šค์— ํ•„์š”ํ•œ ํŒŒ์ผ์„ ๋กœ๋“œ โžก๏ธ ๋กœ๋“œํ•œ ํŒŒ์ผ๋“ค์„ ํ™œ์šฉํ•˜์—ฌ ํ™”๋ฉด์„ ๊ทธ๋ฆฐ๋‹ค.
  2. ์œ ์ €๊ฐ€ ์•ก์…˜์„ ํ•˜๋ฉด, ์„œ๋น„์Šค๋Š” ์•ก์…˜์„ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค.
    • ๊ตฌํ˜„ ๋ชฉํ‘œ: ์œ ์ €์˜ ์•ก์…˜์„ ์„œ๋น„์Šค์— ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.
    • ํ•„์š”: ์œ ์ €๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” UI โžก๏ธ ์œ ์ €๊ฐ€ ์•ก์…˜์„ ์ž…๋ ฅ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ์ค€๋น„ํ•ด์•ผ ํ•จ
    • Tech Flow: Input UI์— ํ‚ค๋ณด๋“œ๋กœ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•œ๋‹ค. โžก๏ธ input์— ๋“ฑ๋ก๋œ ์ด๋ฒคํŠธ๊ฐ€ ์‹คํ–‰๋จ โžก๏ธ ์ž…๋ ฅ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  3. ์ž…๋ ฅ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„์— ์ €์žฅํ•œ๋‹ค.
    • ๊ตฌํ˜„ ๋ชฉํ‘œ: ์œ ์ €์—๊ฒŒ ์ž…๋ ฅ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„์— ์ €์žฅํ•œ๋‹ค.
    • ํ•„์š”: ์„œ๋ฒ„, ์„œ๋ฒ„์™€ ๋ธŒ๋ผ์šฐ์ € ๊ฐ„์˜ ํ†ต์‹  (API)
    • Tech Flow: ์œ ์ €๊ฐ€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด โžก๏ธ ๋ฒ„ํŠผ์— ๋“ฑ๋ก๋œ ์„œ๋ฒ„ ์ „์†ก ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒ โžก๏ธ API๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ ์ €์žฅ ์š”์ฒญ โžก๏ธ ์„œ๋ฒ„๋Š” ์š”์ฒญ์ด ์™„๋ฃŒ๋˜๋ฉด ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ์•Œ๋ ค์คŒ
  4. ํ˜„์žฌ ์ž์‚ฐ์„ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์˜จ๋‹ค.
    • ๊ตฌํ˜„ ๋ชฉํ‘œ: ํ˜„์žฌ ์ž์‚ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์˜จ๋‹ค.
    • ํ•„์š”: ์„œ๋ฒ„, ์„œ๋ฒ„์™€ ๋ธŒ๋ผ์šฐ์ € ๊ฐ„์˜ ํ†ต์‹  (API)
    • Tech Flow: API๋ฅผ ํ†ตํ—ค ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ ์กฐํšŒ ์š”์ฒญ โžก๏ธ ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ ์‘๋‹ต
  5. ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์ž์‚ฐ ๋ฐ์ดํ„ฐ๋ฅผ ํ™”๋ฉด์— ๋ณด์—ฌ์ค€๋‹ค
    • ๊ตฌํ˜„ ๋ชฉํ‘œ: ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ™”๋ฉด์— ๋ณด์—ฌ์ค€๋‹ค.
    • ํ•„์š”: ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต๋ฐ›์€ ๋ฐ์ดํ„ฐ โžก๏ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ €๊ฐ€ ๋ณด๊ธฐ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๋กœ์ง โžก๏ธ ์œ ์ €๊ฐ€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ํ™”๋ฉด ๊ทธ๋ฆฌ๊ธฐ
    • Tech Flow: ์‘๋‹ต ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ €๊ฐ€ ๋ณด๊ธฐ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•œ๋‹ค. โžก๏ธ ์ฒ˜๋ฆฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ™”๋ฉด์— ๋‹ค์‹œ ๋ณด์—ฌ์ค€๋‹ค.

 

์›น/์œ ์ €/์„œ๋ฒ„ ๊ฐ„ ์ธํ„ฐ๋ ‰์…˜

์œ„์˜ ๋‚ด์šฉ ๊ตฌํ˜„์„ ์œ„ํ•ด ์›น/์œ ์ €/์„œ๋ฒ„๋Š” ์„œ๋กœ ์ƒํ˜ธ์ž‘์šฉ์„ ํ•œ๋‹ค.

  • ์›น โžก๏ธ ์œ ์ €: ํ™”๋ฉด์„ ๋ณด์—ฌ์ค€๋‹ค. (๋ Œ๋”๋ง)
  • ์›น โฌ…๏ธ ์œ ์ €: ์•ก์…˜ ์ž…๋ ฅ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก
  • ์›น โžก๏ธ ์„œ๋ฒ„: ๋ฐ์ดํ„ฐ ์กฐํšŒ/์ €์žฅ/์ˆ˜์ • ์š”์ฒญ
  • ์›น โฌ…๏ธ ์„œ๋ฒ„: ์š”์ฒญ์‚ฌํ•ญ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ๋ฐ›์Œ

 

๋ Œ๋”๋ง

๋ Œ๋”๋ง์—๋Š” HTML ๋ฌธ์„œ๋ฅผ ๋‚ด๋ ค ๋ฐ›์•„ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML์„ ์ฝ์–ด ํ™”๋ฉด์— ๊ทธ๋ฆฌ๋Š” ๊ธฐ๋ณธ ๋ Œ๋”๋ง๊ณผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์กฐ์ž‘์œผ๋กœ ๋‹ค์‹œ ๋ Œ๋”๋งํ•˜๋Š” ์œ ํ˜•์ด ์žˆ๋‹ค.

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

 

  1. html์„ ํ†ตํ•œ ๋ Œ๋”๋ง
    • HTML: Hyper Text Markup Language
      • ์›น ํŽ˜์ด์ง€์™€ ์›น ์‚ฌ์ดํŠธ์˜ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์ฝ”๋“œ
      • ์›น์„ ๋กœ๋“œํ•  ๋•Œ ์ฒ˜์Œ์— ๋กœ๋“œํ•˜๋Š” ํŒŒ์ผ
    • CSS: Cascading Style Sheet
      • ๋งˆํฌ์—… ์–ธ์–ด๊ฐ€ ์‹ค์ œ๋กœ ํ‘œ์‹œ๋˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ธฐ์ˆ ํ•˜๋Š” ์Šคํƒ€์ผ ์–ธ์–ด
    • DOM: Document Object Model
      • HTML๋ฌธ์„œ์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค (JS๋กœ DOM์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ)
      • node์™€ Object๋กœ ๋ฌธ์„œ๋ฅผ ํ‘œํ˜„
      • ๋ถ€๋ชจ/์ž์‹ ๊ตฌ์กฐ์˜ ํŠธ๋ฆฌ๊ตฌ์กฐ
    • ๋ Œ๋”๋ง ๊ณผ์ •
      1. html ๋งˆํฌ์—… ํŒŒ์‹ฑ - DOM ํŠธ๋ฆฌ ๊ตฌ์ถ•
      2. CSS ๋งˆํฌ์—… ํŒŒ์‹ฑ - CSSOM ํŠธ๋ฆฌ ๋นŒ๋“œ
      3. DOM๊ณผ CSSOM์„ ๊ฒฐํ•ฉํ•ด ๋ Œ๋”๋ง ํŠธ๋ฆฌ ํ˜•์„ฑ
      4. ๋ Œ๋”ํŠธ๋ฆฌ ๋ฐฐ์น˜
      5. ๋ Œ๋”ํŠธ๋ฆฌ ํŽ˜์ธํŒ…
  2. ๋Ÿฐํƒ€์ž„ ๋•Œ ๋ Œ๋”๋ง ์กฐ์ž‘
    • Triggering์ด ์žˆ์„ ๋•Œ UI๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ์ผ€์ด์Šค
    • ๋Ÿฐํƒ€์ž„ ๋•Œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ DOM์„ ์กฐ์ž‘ํ•˜์—ฌ ๋ Œ๋”๋งํ•œ๋‹ค. (document.querySelector, document.createElement, Node.appendChild(Node), ...)
    • ๋ฆฌ๋ Œ๋”๋ง - ๋ฆฌํŽ˜์ธํŒ…, ์žฌ๋ฐฐ์น˜ ๋ฐœ์ƒ

 

 

์ด๋ฒคํŠธ

์œ ์ €๊ฐ€ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ณ  ์‹ถ๋‹ค๋ฉด?
โžก๏ธ ์‚ฌ์‹ค์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ catchํ•ด์•ผ ํ•จ == ์ด๋ฒคํŠธ catch๊ฐ€ ํ•„์š”

โœ… ์œ ์ €๊ฐ€ ํ–‰๋™ํ•˜๊ธฐ ์ „์— ์ˆ˜์‹ ๊ธฐ ๋“ฑ๋ก์ด ํ•„์š” โœ…

  • EventTarget ๊ฐ์ฒด
    • ์ด๋ฒคํŠธ์˜ ๋Œ€์ƒ์ด ๋˜๋Š” ๊ฐ์ฒด๊ฐ€ EventTarget ๊ฐ์ฒด ๊ตฌํ˜„
    • ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜์‹ ๊ธฐ
  • ์ด๋ฒคํŠธ ์œ ํ˜•
    • ์œ ์ €์™€์˜ ์ƒํ˜ธ์ž‘์šฉ, ๊ธฐ๋ณธ ํ™˜๊ฒฝ ์ƒํƒœ์˜ ๋ณ€ํ™”
    • click, focus, blur, ...

 

 

์„œ๋ฒ„๊ฐ„ ํ†ต์‹ 

๋ฐ์ดํ„ฐ ์กฐ์ž‘์„ ์œ„ํ•ด ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์™€์˜ ํ†ต์‹ ์ด ํ•„์š”ํ•˜๋‹ค. 

์„œ๋ฒ„์™€์˜ ํ†ต์‹ ์—๋Š” ๋ฌผ๋ฆฌ์ ์ธ ์‹œ๊ฐ„ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์š”์ฒญ๊ณผ ๋™์‹œ์— ๋ฐ”๋กœ ์ฒ˜๋ฆฌํ•  ์ˆœ ์—†๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ, ์š”์ฒญ ์ดํ›„ ์‘๋‹ต์ด ์˜ค๊ธฐ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ์‘๋‹ต ์‹ ํ˜ธ๋ฅผ ๋ฐ›์•„์•ผ ํ•œ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ,

  • ์ฝœ๋ฐฑ ํŒจํ„ด
  • Promise ๊ฐ์ฒด (ES6)
  • async - await

์„ ์‚ฌ์šฉํ•ด ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ์‘๋‹ต ์‹ ํ˜ธ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

 

Promise

  • ๋Œ€๊ธฐ Pending: ์ˆ˜ํ–‰ ์ค‘
  • ์ดํ–‰ fulfilled: ์ˆ˜ํ–‰ ์„ฑ๊ณต โžก๏ธ then
  • ๊ฑฐ๋ถ€ rejected: ์ˆ˜ํ–‰ ์‹คํŒจ โžก๏ธ catch

Promise๋Š” ์œ„์˜ ์ƒํƒœ ์ค‘ ํ•˜๋‚˜์˜ ์ƒํƒœ๋ฅผ ๊ฐ–๋Š”๋‹ค.

 

๋™๊ธฐ์™€ ๋น„๋™๊ธฐ

  • ๋™๊ธฐ (Synchronous)
    • ์ง๋ ฌ์ ์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹
    • ์š”์ฒญ ์ดํ›„, ์‘๋‹ต์„ ๋ฐ›์•„์•ผ์ง€ ๋‹ค์Œ ๋™์ž‘์ด ์ด๋ค„์ง€๋Š” ๋ฐฉ์‹
  • ๋น„๋™๊ธฐ (Asynchronous)
    • ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹
    • ์š”์ฒญ ์ดํ›„, ์‘๋‹ต ์ˆ˜๋ฝ ์—ฌ๋ถ€์™€ ์ƒ๊ด€์—†์ด ๋‹ค์Œ ์ž‘์—…์ด ๋™์ž‘ํ•˜๋Š” ๋ฐฉ์‹

 

async - await

๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜๋กœ ๊ฐ€๋…์„ฑ์ด ์ข‹์ง€ ์•Š์€ Promise์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•œ๋‹ค.

ํ•จ์ˆ˜์— async ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์—ฌ Promise ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•œ๋‹ค.

await๋ฅผ Promise ์ธ์Šคํ„ด์Šค ์•ž์— ์ถ”๊ฐ€ํ•ด ์„ฑ๊ณต ์ฒ˜๋ฆฌ ์ดํ›„์— ๋‹ค์Œ ํ•จ์ˆ˜ ๋ช…๋ น๋ฌธ์ด ์‹คํ–‰๋˜๋„๋ก ํ•œ๋‹ค.

 

 

์›น ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž์˜ ์ฑ…์ž„

ํ”„๋กœ์ ํŠธ์—์„œ ์›น ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐ€์ ธ์•ผํ•  ์ฑ…์ž„์— ๋Œ€ํ•ด ํ•™์Šตํ–ˆ๋‹ค.

  • ๊ตฌํ˜„์—์„ , ๋น ๋ฅด๊ณ  ์ƒ์‚ฐ์ ์œผ๋กœ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
    • ์ž๋™ํ™”: ๊ฐœ๋ฐœ ์†๋„๋ฅผ ๋‚ฎ์ถ˜๋‹ค๋ฉด ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž๋™ํ™” ๋ฐ ๊ฐœํŽธ ํ•„์š”
    • ์ฑ…์ž„ ๋ถ„๋‹ด: ๋‹ค๋ฅธ ๊ฐœ๋ฐœ ์†Œ์Šค ํ™œ์šฉ
    • ๊ตฌํ˜„์„ ๋„์™€์ฃผ๋Š” ๋„๊ตฌ๋กœ๋Š” npm, sass, prettier ๋“ฑ์ด ์žˆ๋‹ค.
  • ๋น ๋ฅด๊ฒŒ ์„œ๋น„์Šค์— ์ ์šฉํ•ด์•ผ ํ•œ๋‹ค.
    • ์ง€์†์  ํ†ตํ•ฉ ๋ฐฐํฌ: ๊ฐœ๋ฐœ๋‹จ๊ณ„ โžก๏ธ ๋ฐฐํฌ๋‹จ๊ณ„
      • ๊ฐœ๋ฐœ๋‹จ๊ณ„) ๊ฐœ๋ฐœ์„ ์ƒ์‚ฐ์ ์œผ๋กœ ๋น ๋ฅด๊ฒŒ ์ง„ํ–‰ํ•ด์•ผ ํ•จ
      • ๋ฐฐํฌ๋‹จ๊ณ„) ํŒŒ์ผ์„ ์„œ๋ฒ„์— ์—…๋กœ๋“œ
      • ์‚ฌ์ดํด์ด ๋ฐ˜๋ณต์ , ์ตœ์ ํ™”๋œ ์ƒํƒœ๋กœ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ๋„๋ก ์…‹ํŒ…์ด ํ•„์š”
      • ๋ฐฐํฌ๋ฅผ ๋„์™€์ฃผ๋Š” ๋„๊ตฌ๋กœ๋Š” babel, vite ๋“ฑ์ด ์žˆ๋‹ค.

 

NPM

NPM ๋…ธ๋“œ ํŒจํ‚ค์ง€ ๋ฉ”๋‹ˆ์ €์ด๋ฉฐ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋งŒ๋“  ์ฝ”๋“œ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ํ”„๋กœ์ ํŠธ ์ž‘์—…์˜ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํŒจํ‚ค์ง€๋“ค์„ ์„ค์น˜ํ•  ๊ฒฝ์šฐ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ๋ฐ NPM์ด ๋ฒ„์ „ ๊ด€๋ฆฌ, ์ฝ”๋“œ ์ข…์†์„ฑ ๊ด€๋ฆฌ ๋“ฑ์„ ๋‹ด๋‹นํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

 

์Šคํƒ€์ผ๋ง์šฉ pre-processor (์ „์ฒ˜๋ฆฌ๊ธฐ)

  • Sass: CSS ์ „์ฒ˜๋ฆฌ๊ธฐ๋กœ CSS ํ•œ๊ณ„์™€ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ์ „์ฒ˜๋ฆฌ๊ธฐ์ด๋‹ค. ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ  ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์— ์œ ๋ฆฌํ•œ CSS ํ™•์žฅ ์–ธ์–ด์ด๋‹ค.

 

๋ฒˆ๋“ค๋Ÿฌ

๋ฒˆ๋“ค๋Ÿฌ๋Š” ์˜์กด์„ฑ ์žˆ๋Š” ๋ชจ๋“ˆ ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋„๊ตฌ์ด๋‹ค.

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

์ด๋Ÿฌํ•œ ์ค‘๊ฐ„ ์ „์ฒ˜๋ฆฌ๊ธฐ๋กœ ๋ฒˆ๋“ค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“ˆ๋กœ ๋œ ์—ฌ๋Ÿฌ ํŒŒ์ผ๋“ค์„ ํ•ฉ์ณ์ค€๋‹ค.

๋ฒˆ๋“ค๋Ÿฌ๋ฅผ ์œ„ํ•œ ๋„๊ตฌ๋กœ๋Š” webpack, vite, percel ๋“ฑ์ด ์žˆ๋‹ค.

 

 

ํ˜‘์—…์„ ์œ„ํ•œ ์…‹ํŒ…

ํ”„๋กœ์ ํŠธ๋Š” ๋Œ€๋ถ€๋ถ„ ์—ฌ๋Ÿฌ๋ช…์ด์„œ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž‘์—…์˜ ์ƒ์‚ฐ์„ฑ์„ ์˜ฌ๋ฆฌ๊ธฐ ์œ„ํ•ด git๊ณผ ๊ฐ™์€ ๋ฒ„์ „๊ด€๋ฆฌ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•œ๋‹ค.

  • git
    • branch: ์œ ์ € ๊ฐ„์˜ ์ž‘์—…์ด ๋…๋ฆฝ์ ์œผ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ๋™์‹œ์— ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Œ
    • merge: ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ์ฝ”๋“œ๋ฅผ ๋ณ‘ํ•ฉํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”
    • ํŒŒ์ผ ์ˆ˜์ •์ด ์ด๋ฃจ์–ด์ง€๋ฉด, ํ•ด๋‹น ์‹œ์ ์˜ ์ˆ˜์ •์‚ฌํ•ญ๋“ค์„ ์Šค๋ƒ…์ƒทํ•˜์—ฌ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด (git add ํŒŒ์ผ๋ช…) ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ๋กœ๊ทธ๋ฅผ ๋‚จ๊ธด๋‹ค. (git commit -m "๋ฉ”์‹œ์ง€")
  • github (git ์ €์žฅ์†Œ ํ˜ธ์ŠคํŒ… ์›น์„œ๋น„์Šค)
    • ํŒŒ์ผ ๊ด€๋ฆฌ ํ™˜๊ฒฝ
      • ๋‚ด ์ปดํ“จํ„ฐ์—์„œ ๊ด€๋ฆฌ: local
      • ์›๊ฒฉ ์ €์žฅ์†Œ์—์„œ ๊ด€๋ฆฌ: remote
    • git์—์„œ ์ปท๋ฐ‹ํ•œ ๋‚ด์—ญ์„ ์›๊ฒฉ ์ €์žฅ์†Œ์— ์˜ฌ๋ ค ๊ด€๋ฆฌํ•œ๋‹ค.
      • git remote add {{ ์›๊ฒฉ ์ด๋ฆ„ }} {{ ์›๊ฒฉ ์ €์žฅ์†Œ url }}
      • git push {{ ์›๊ฒฉ ์ด๋ฆ„ }} ๋ธŒ๋žœ์น˜๋ช…

๋˜ํ•œ, ํ•จ๊ป˜ ์ž‘์—… ์‹œ ์ฝ”๋“œ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ดํ•ดํ•˜์—ฌ ์ •ํ™•ํžˆ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋…ธ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

  • ์ฝ”๋“œ ํฌ๋งทํŒ…, ๋„ค์ด๋ฐ ๊ทœ์น™ ๋“ฑ์„ ์ •ํ•ด ์ฝ”๋“œ๋ฅผ ํ†ต์ผํ™”ํ•˜์—ฌ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์„ ์˜ฌ๋ฆฐ๋‹ค.
  • ์ฝ๊ธฐ ์ข‹์€ ๋ฌธ์„œ ํ˜•ํƒœ๋กœ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค. โžก๏ธ testable module...
  • ์ฝ”๋“œ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•„์š”ํ•˜๋ฉด ์ฃผ์„์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

ํ”„๋กœ์ ํŠธ ์…‹ํŒ…

  • npm init โžก๏ธ package.json ์ƒ์„ฑ
  • vite ์„ค์น˜
 

Vite

Vite, ์ฐจ์„ธ๋Œ€ ํ”„๋ŸฐํŠธ์—”๋“œ ๊ฐœ๋ฐœ ํˆด

ko.vitejs.dev

  • vite์—์„œ CSS pre-processor ์‚ฌ์šฉ

https://ko.vitejs.dev/guide/features.html#css-pre-processors

 

Vite

Vite, ์ฐจ์„ธ๋Œ€ ํ”„๋ŸฐํŠธ์—”๋“œ ๊ฐœ๋ฐœ ํˆด

ko.vitejs.dev

  • JSON server: json ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ์œ„ํ•œ REST API Mock server๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋Š” ํˆด
npm i json-server

 

์ฐธ๊ณ ) ํ˜„์žฌ ์„ค์น˜ ์‹œ alpha๋ฒ„์ „์œผ๋กœ ์„ค์น˜๊ฐ€ ๋˜์–ด์„œ ๊ธฐ๋ณธ ๋ฒ„์ „์œผ๋กœ ์„ค์น˜ํ•˜๋ ค๋ฉด ์›ํ•˜๋Š” ๋ฒ„์ „ ๋ช…์„ ๋’ค์— ๋ถ™์—ฌ ์„ค์น˜ํ•ด์•ผ ํ•จ

npm i json-server@0.X.X

 

 

 

 

๋งˆ๋ฌด๋ฆฌ


์˜ค๋Š˜์€ ํ”„๋กœ์ ํŠธ ์ž‘์—…์„ ์œ„ํ•œ ํ”„๋กœ์ ํŠธ ์…‹ํŒ…์„ ๋งˆ๋ฌด๋ฆฌ ํ–ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์…‹ํŒ…๋„ ๊ฝค ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ  ์–ด๋ ค์šด ์ผ์ด๋‹ค.

ํŠนํžˆ, json server๊ฐ€ ์˜ˆ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์•„์„œ ํ—ค๋ฉ”๋‹ค๊ฐ€ ๋ฒ„์ „ ๋ฌธ์ œ์ธ ๊ฑธ ์•Œ์•„๋ƒˆ๋‹ค.

๋ฌธ์„œ์—์„œ โš ๏ธ์ด ๋ฒ„์ „์€ ์•ŒํŒŒ๋ฒ„์ „ ์ž…๋‹ˆ๋‹ค!๋ผ๊ณ  ๋งจ ์ฒจ๋ถ€ํ„ฐ ๊ฒฝ๊ณ ๋ฅผ ์คฌ๋Š”๋ฐ... ์˜์–ด ๋ฌธ์„œ๋ผ ๋ˆˆ์ด ์นจ์นจํ–ˆ๋‚˜๋ณด๋‹ค.

์ž‘์„ฑ๋œ ๋ฌธ์„œ๋ฅผ ์ž˜ ์ฝ๋Š” ์Šต๊ด€์„ ๋“ค์—ฌ์•ผ๊ฒ ๋‹ค.