JaydenLee1116 / fe--amazon

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

๐Ÿชด Jayden's Week-01

  • 23.03.06(Mon) ~ 23.03.10(Fri)

๐ŸŒต Jayden's Keywords

  • HTML
    • flex, grid
  • CSS
    • BEM
  • HTML, CSS ๋””๋ฒ„๊น…
  • branch, commit ์˜ฌ๋ฐ”๋ฅธ ๋ถ„๋ฆฌ
  • ์ฝ”๋”ฉ ์ปจ๋ฐด์…˜

๐ŸŒด Jayden's Rules

  • ์šฉ๋„์— ๋งž๋Š” ์˜ฌ๋ฐ”๋ฅธ semantic ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.(div, span ํƒœ๊ทธ๋ฅผ ๋‚จ๋ฐœํ•˜์ง€ ์•Š๋Š”๋‹ค.)
  • ๋ˆˆ์œผ๋กœ ๋ณด๊ธฐ์—๋งŒ ๊ฐ€์ง€๋Ÿฐํ•œ ๊ฒŒ ์•„๋‹Œ, html/css ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ํ™•์‹คํ•˜๊ฒŒ ์ผ์ •ํ•œ ๊ฐ„๊ฒฉ์„ ๊ฐ–๊ฒŒ ํ•œ๋‹ค.
  • DOM api๋ฅผ ๋ช…ํ™•ํžˆ ์•Œ๊ณ  ์‚ฌ์šฉํ•œ๋‹ค.

๐ŸŒฒ Jayden's Check List

  • readme ์ž‘์„ฑํ•˜๊ธฐ
  • html ๋ ˆ์ด์•„์›ƒ ๋งŒ๋“ค๊ธฐ
    • ์ƒ๋‹จ header ์˜์—ญ
    • 70rem(1120px) ๊ธฐ์ค€ width ๋ฐ˜์‘ํ˜•
    • ์ขŒ์ธก ์‚ฌ์ด๋“œ ๋ฉ”๋‰ด
  • ๋ชจ๋‹ฌ
    • ์šฐ์ธก ์ƒ๋‹จ: ๊ตญ๊ฐ€, ๊ณ„์ • ๋ฐ ๋ชฉ๋ก

๐ŸŒณ Jayden's Organization

draft Pull Request

  • ์•„์ง ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์™„๋ฃŒ๋˜์ง€ ์•Š์•˜๊ณ  ๋ฆฌ๋ทฐ ๋ฐ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๊ธธ ์›ํ•  ๋•Œ ์„ค์ •ํ•œ๋‹ค.
  • ์ž‘์—…์„ ๊ณต์œ ํ•˜๊ณ  ๋‹ค๋ฅธ ๊ธฐ์—ฌ์ž๋“ค๋กœ๋ถ€ํ„ฐ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์™„๋ฃŒ๋˜๊ธฐ ์ „์— ๊ฒ€ํ† ํ•˜์—ฌ, ํ”„๋กœ์„ธ์Šค ์ดˆ๊ธฐ์— ์ž ์žฌ์ ์ธ ๋ฌธ์ œ๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์•„์ง ๋ณ‘ํ•ฉํ•˜๋ฉด ์•ˆ๋˜๋Š” PR์ž„์„ ๊ฐ€์‹œ์ ์œผ๋กœ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์ฝ”๋”ฉ ์ปจ๋ฒค์…˜

  • ์ฝ๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋”ฉ ์Šคํƒ€์ผ ์•ฝ์†
  • ํŠนํžˆ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋‹ค๋ฅธ ์–ธ์–ด์— ๋น„ํ•ด ์œ ์—ฐํ•œ ๋ฌธ๋ฒ•๊ตฌ์กฐ๋ฅผ ๊ฐ–๊ณ  ์žˆ๊ธฐ์— ๋”์šฑ๋” ์ค‘์š”ํ•˜๋‹ค.
  • ๋ณดํ†ต ESLint์™€ ๊ฐ™์€ ๋ฆฐํ„ฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฐ€์ •ํ•˜์— ๋ฆฐํ„ฐ๋กœ ๊ฒ€์ถœํ•  ์ˆ˜ ์—†๋Š” ๋ชจํ˜ธํ•œ ๋ถ€๋ถ„์„ ๊ฐ€์ด๋“œ๋กœ ์ž‘์„ฑํ•œ๋‹ค.
  • ์ฐธ๊ณ : Toast UI ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜

upstream์—์„œ fork ํ›„ local๋กœ cloneํ•  ๋•Œ, main ๋ธŒ๋žœ์น˜ ์—†์ด clone์ด ๊ฐ€๋Šฅํ•œ๊ฐ€?

  • clone ํ›„์— main ๋ธŒ๋žœ์น˜๋ฅผ ์‚ญ์ œํ•˜๋ฉด ๋œ๋‹ค.(ํ˜น์‹œ ๋ชจ๋ฅด๋‹ˆ ์ผ๋‹จ์€ ๋‘๊ธฐ๋กœ)

feature1 ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—… ํ›„, pr์„ ๋‚ ๋ฆฐ ์ƒํƒœ์—์„œ feature1์„ ๊ธฐ๋ฐ˜์œผ๋กœ feature2๋ฅผ ์ž‘์—…ํ•ด์•ผํ•œ๋‹ค. ์ด ๋•Œ, ์•„์ง feature1์ด ๋จธ์ง€๊ฐ€ ์•ˆ๋˜์—ˆ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ• ๊นŒ?

  • feature1์—์„œ feature2 ๋ธŒ๋žœ์น˜๋ฅผ ๋”ฐ์„œ ์ž‘์—…ํ•œ๋‹ค. ์ดํ›„ feature1์ด main์— ๋จธ์ง€๋˜๋ฉด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ feature2๋„ main์—์„œ ๋”ฐ์˜จ ๊ฒƒ์ฒ˜๋Ÿผ ๋œ๋‹ค.

css์—์„œ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ

  • ์•„๋ž˜์™€ ๊ฐ™์ด :root ์— ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ด์ค€๋‹ค.
  • ์„ค์ •ํ•œ ๋ณ€์ˆ˜๋ฅผ var(๋ณ€์ˆ˜๋ช…)ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
/* Global */

:root {
  /* Color */
  --color-white: #ffffff;
  --color-gray-100: #eff2f2;
  --color-gray-200: #e5e9e9;
  --color-gray-300: #dce0e0;
  --color-gray-400: #d5d5d5;
  --color-gray-500: #c1c1c1;
  --color-gray-600: #878787;
  --color-gray-700: #535353;
  --color-gray-800: #2a3648;
  --color-gray-900: #1b232f;
  --color-black: #10141a;
  --color-black-tr40: rgba(16, 20, 26, 0.4);

  --color-yellow-100: #fed15f;
  --color-yellow-200: #febe30;
  --color-yellow-300: #de9408;
  --color-orange-100: #fcb057;
  --color-orange-200: #ff9900;

  --color-purple: #941387;
  --color-navy: #074099;
  --color-green: #0c5e72;

  /* Font size */
  --font-large: 48px;
  --font-medium: 28px;
  --font-regular: 18px;
  --font-small: 16px;
  --font-micro: 14px;
}

div {
  color: var(--color-orange-100);
}

box-sizing ์„ค์ •

  • ๊ธฐ๋ณธ์ ์œผ๋กœ content-box๋กœ ์„ค์ •๋˜์–ด์žˆ๋‹ค.
    • content-box: width, height๊ฐ€ padding ๋‚ด๋ถ€์˜ content๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค.
    • border-box: width, height๊ฐ€ content, padding, border๋ฅผ ํฌํ•จํ•œ ๊ฒƒ์„ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค.

reset css vs normalize css

  • reset css: ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๋‚ด์žฅ ์Šคํƒ€์ผ์„ ๋ชจ๋‘ ์ดˆ๊ธฐํ™”
    • ์ตœ๊ทผ์—๋Š” new css reset์ด ์ž์ฃผ ์‚ฌ์šฉ๋œ๋‹ค.
  • normalize css: ๊ฐ€๋Šฅํ•œ ๋ธŒ๋ผ์šฐ์ €๋“ค์˜ ๋‚ด์žฅ ์Šคํƒ€์ผ์„ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๋Š” ์„ ์—์„œ ๋ธŒ๋ผ์šฐ์ €๋“ค ๊ฐ„์˜ ์ฐจ์ด์ ์„ ํ†ต์ผ
    • ๊ฐ™์€ h1 ํƒœ๊ทธ๋ผ๋„ ๋ธŒ๋ผ์šฐ์ €๋งˆ๋‹ค ์—ฌ๋ฐฑ์˜ ํฌ๊ธฐ๊ฐ€ ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ๋ถ€๋ถ„์„ ๋™์ผํ•˜๊ฒŒ ํ†ต์ผํ•ด์ค€๋‹ค.

css ์ƒ์†(inheritance)๊ณผ ์ ์šฉ ์šฐ์„  ์ˆœ์œ„(cascading)

  • ์ƒ์†: ์ƒ์œ„(๋ถ€๋ชจ) ํƒœ๊ทธ์— ์ ์šฉ๋œ ์Šคํƒ€์ผ์ด ํ•˜์œ„(์ž์‹) ํƒœ๊ทธ์—๋„ ์ƒ์†๋˜์–ด ์ ์šฉ๋˜๋Š” ๊ฒƒ
    • ๋ช‡๋ช‡ ์ƒ์†์ด ์•ˆ๋˜๋Š” ์Šคํƒ€์ผ์ด ์žˆ๋Š”๋ฐ, ์ฃผ๋กœ box-model๊ณผ ๊ด€๋ จ๋œ ์Šคํƒ€์ผ์ด๋‹ค. ex) padding
  • ์ ์šฉ ์šฐ์„  ์ˆœ์œ„: css๋Š” ์–ด๋–ป๊ฒŒ ์Šคํƒ€์ผ์„ ์ ์šฉํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ ๊ทธ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‹ค๋ฅด๋‹ค.
    • ์šฐ์„ ์ˆœ์œ„๋กœ๋Š” ์‚ฌ์šฉ์ž ์„ค์ • - inline style - internal stylesheet - external stylesheet - browser default๋กœ ์ ์  ๋‚ฎ์•„์ง„๋‹ค.
    • ๋˜ํ•œ, css์˜ specificity์— ๋”ฐ๋ผ class๋ณด๋‹ค id๊ฐ€ ์Šคํƒ€์ผ์— ๋Œ€ํ•œ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ–๋Š”๋‹ค.(๋”์šฑ ์ž์„ธํ•œ ์„ ํƒ์ž์ผ์ˆ˜๋ก ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ–๋Š”๋‹ค.)
  • (์ฃผ์˜) css์˜ ์ƒ์†๊ณผ ์บ์Šค์ผ€์ด๋”ฉ์€ ์—„๋ฐ€ํžˆ ๋‹ค๋ฅธ ๊ฐœ๋…!!!

display: flex์—์„œ flex-grow ์†์„ฑ์ด๋ž€?

  • display๊ฐ€ flex๋กœ ์„ค์ •๋œ ํƒœ๊ทธ์˜ ์ž์‹ ํƒœ๊ทธ๋“ค์— ์‚ฌ์šฉํ•˜๋ฉฐ, ๊ฐ ์ž์‹ ํƒœ๊ทธ๋“ค์€ ๊ธฐ๋ณธ์ ์œผ๋กœ flex-grow: 0;์ด๋‹ค.
  • ๋” ๋†’์€ ์ˆซ์ž๋ฅผ ์„ค์ •ํ•˜๊ฒŒ ๋˜ ๋‹ค๋ฅธ ํƒœ๊ทธ๋“ค๊ณผ์˜ ์‚ฌ์ด์—์„œ ํ•ด๋‹น ์ˆซ์ž์˜ ํฌ๊ธฐ ๋น„์œจ์„ ๊ฐ–๋Š”๋‹ค.

css ์ƒ๋Œ€ ๋‹จ์œ„ 2๋Œ€์žฅ: em vs rem

  • em: ์œ„์น˜ํ•œ ๊ณณ์„ ๊ธฐ์ค€์œผ๋กœ font-size์— ๋Œ€ํ•œ ๋ฐฐ์œจ(ํ•ด๋‹น ์š”์†Œ์— font-size ์—†์œผ๋ฉด ๋ถ€๋ชจ ์š”์†Œ, ์—†์œผ๋ฉด ๋˜ ๋ถ€๋ชจ ์š”์†Œ)
  • rem: ์œ„์น˜ํ•œ ๊ณณ๊ณผ ์ƒ๊ด€์—†์ด ๊ฐ€์žฅ ์ตœ์ƒ์œ„ ์š”์†Œ(root; html ํƒœ๊ทธ)์˜ font-size์— ๋Œ€ํ•œ ๋ฐฐ์œจ
  • (์ฃผ์˜) em์€ ๋„ˆ๋ฌด ์ƒ๋Œ€์ ์ธ ๋Š๋‚Œ์ด๊ณ  rem์€ ๊ทธ๋‚˜๋งˆ ์ ˆ๋Œ€์ ์ธ root๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•˜๊ธฐ์—, rem ์‚ฌ์šฉ์„ ์ข€๋” ์ถ”์ฒœํ•œ๋‹ค.
  • (๋‚˜๋งŒ์˜ ํŒ) ์ „์ฒด์ ์ธ ๋ ˆ์ด์•„์›ƒ์€ %๋กœ ๋งž์ถ”๋˜, ๊ทธ ์•ˆ์— ๋””ํ…Œ์ผํ•œ ๋ฐ•์Šค ํฌ๊ธฐ๋Š” rem์œผ๋กœ ํ•ด์ฃผ๋ฉด ํŽธํ•œ ๊ฒƒ ๊ฐ™๋‹ค!

์›น ์ ‘๊ทผ์„ฑ(์˜ˆ์ •)

์›น ์‚ฌ์ดํŠธ ์ ‘์† ์‹œ ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ๊ณผ์ •(์˜ˆ์ •)

๐Ÿชต Reference

๐Ÿชด Jayden's Week-02

  • 23.03.13(Mon) ~ 23.03.17(Fri)

๐ŸŒต Jayden's Keyword

  • CSS
    • SCSS, ๊ทธ ์™ธ ๋‹ค๋ฅธ CSS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • DOM api
  • Vite ๋ฒˆ๋“ค๋Ÿฌ
  • component
  • vanilla extract

๐ŸŒด Jayden's Rule

  • DOM api๋ฅผ ๋ช…ํ™•ํžˆ ์•Œ๊ณ  ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ตœ๋Œ€ํ•œ DOM ์กฐ์ž‘์—์„œ ์•ˆ์ „ํ•œ js ์ฝ”๋“œ๋ฅผ ์ง ๋‹ค.
  • ๋ฆฌํŒฉํ† ๋ง์— ๋งŽ์€ ๊ณต์„ ๋“ค์—ฌ๋ณด์ž!!!

๐ŸŒพ Jayden's Learning Plan

  • Mon: DOM api ๋ฐ Event delegation ํ•™์Šต(์ฝ”๋“œ์Šค์ฟผ๋“œ ์ž๋ฃŒ)
  • Tue: ๋ฆฌํŒฉํ† ๋ง ์ง„ํ–‰ ๋ฐ vanilla extract ํ•™์Šต
  • Wed: ๋ฆฌํŒฉํ† ๋ง ์™„์ „ ์ง‘์ค‘!!! ์ž‘๊ฒŒ๋ผ๋„ component ์—ด์‹ฌํžˆ ๋‚˜๋ˆ„๊ธฐ!!!
  • Thu: ๋ฆฌํŒฉํ† ๋ง ๋ฐ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ž‘์—…
  • Fri: ๊ฐœ๋… ๋ณต์Šต ๋ฐ ๊ตฌํ˜„ ๋””ํ…Œ์ผ ์‚ด๋ฆฌ๊ธฐ

๐ŸŒฒ Jayden's Check List

  • readme ์ž‘์„ฑํ•˜๊ธฐ
  • sidebar
    • ํ•ญ๋ชฉ ์ ‘๊ธฐ/ํŽผ์น˜๊ธฐ
    • ํ•˜์œ„ ๋ฉ”๋‰ด ์˜์—ญ ๋…ธ์ถœ
  • ๋ฆฌํŒฉํ† ๋ง(๋ณ€์ˆ˜๋ช…, ํ•จ์ˆ˜ ๋ถ„๋ฆฌ ๋“ฑ)
    • css ํŒŒ์ผ ๋ถ„๋ฆฌ
    • class component
    • vanilla extract ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

๐ŸŒณ Jayden's Record

DOM api๊ฐ€ ์กด์žฌํ•˜๋Š” ์ด์œ 

  • DOM Tree๋ฅผ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด JS๋กœ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•˜๋ฉด ๋„ˆ๋ฌด ํž˜๊ณ  ๋ฒˆ๊ฑฐ๋กญ๋‹ค.
  • ํ•ด์„œ ๋ธŒ๋ผ์šฐ์ €์—์„œ DOM Tree๋ฅผ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ DOM api๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

textNode vs elementNode

  • DOM์˜ ๋…ธ๋“œ๋“ค์€ ๋Œ€๋ถ€๋ถ„ text ๋…ธ๋“œ์™€ element ๋…ธ๋“œ๋กœ ๋‚˜๋ˆ„์–ด์ง„๋‹ค.
  • firstChild, nextSibling ๋“ฑ์€ ํƒœ๊ทธ ์‚ฌ์ด์˜ ๊ณต๋ฐฑ์ธ textNode๊นŒ์ง€ ์ธ์‹ํ•œ๋‹ค.
  • firstElementChild, firstElementChild ๋“ฑ์€ textNode๋ฅผ ์ œ์™ธํ•œ elementNode๋งŒ ์ธ์‹ํ•œ๋‹ค.
  • ์šฐ๋ฆฌ๋Š” ์ฃผ๋กœ textNode๋ฅผ ์ด์šฉํ•  ์ผ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—, ์ฃผ๋กœ element๊ฐ€ ๋“ค์–ด๊ฐ„ api๋ฅผ ์ด์šฉํ•œ๋‹ค.

Event(์ด๋ฒคํŠธ)

  • ์ฃผ๋กœ ์œ ์ €์— ํ–‰๋™์— ์˜ํ•ด ๋ฐœ์ƒํ•˜๋Š” ์‚ฌ๊ฑด
  • ex) click, scroll, mouseover, mouseenter ๋“ฑ

Event Listener(์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ)

  • addEventListener์˜ ์ธ์ž๋กœ ์ „๋‹ฌ๋œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜
  • ๋ง ๊ทธ๋Œ€๋กœ ์–ด๋–ค ์ด๋ฒคํŠธ๋ฅผ ๋“ฃ๊ฒŒ ๋˜์—ˆ์„ ๋•Œ, ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • Event Handler(์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ)๋ผ๊ณ ๋„ ํ•œ๋‹ค.

์ด๋ฒคํŠธ ์œ„์ž„

  • ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ๋ฆฌ์Šค๋„ˆ๋ฅผ ๋ฒ„๋ธ”๋ง(ํ˜น์€ ์บก์ณ๋ง)์„ ์ด์šฉํ•ด์„œ ์ƒ์œ„ ํƒœ๊ทธ์— ๋‹ฌ์•„์„œ ์ด๋ฒคํŠธ์— ๋”ฐ๋ฅธ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•
    • ๋ฒ„๋ธ”๋ง: ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์š”์†Œ์—์„œ ์ƒ์œ„ ์š”์†Œ๋กœ ๊ฐ€๋Š” ๋‹จ๊ณ„
    • ์บก์ณ๋ง: ์ƒ์œ„ ์š”์†Œ์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์š”์†Œ๋กœ ๊ฐ€๋Š” ๋‹จ๊ณ„
    • ์บก์ณ๋ง์€ ์‚ฌ์šฉํ•  ์ผ์ด ๊ฑฐ์˜ ์—†๊ณ , ์ฃผ๋กœ ๋ฒ„๋ธ”๋ง์„ ํ†ตํ•œ ์ด๋ฒคํŠธ ์œ„์ž„์„ ์‚ฌ์šฉํ•œ๋‹ค.

stopPropagation vs preventDefault

  • stopPropagation: ํŠน์ • ํƒœ๊ทธ์—์„œ ์ด๋ฒคํŠธ์˜ ์ „๋‹ฌ์„ ๋ง‰๋Š” api
  • preventDefault: ํ•ด๋‹น ํƒœ๊ทธ๊ฐ€ ๊ฐ€์ง„ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ์„ ๋ง‰๋Š” api

git stash

  • a ๋ธŒ๋žœ์น˜์—์„œ b ๋ธŒ๋žœ์น˜๋ฅผ ๋”ฐ๊ณ  ๋กœ์ปฌ์—์„œ๋งŒ b ๋ธŒ๋žœ์น˜์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ฐœ์ƒํ•˜๋ฉด a ๋ธŒ๋žœ์น˜๋กœ ์Šค์œ„์น˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ์ด์œ : commit์„ ๊ธฐ์ค€์œผ๋กœ๋Š” ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜์ง€ ์•Š์•˜๊ณ , ๋กœ์ปฌ์—์„œ ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ์—์„œ๋งŒ ๋ณ€๊ฒฝ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— b์—์„œ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ด a๋กœ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ๊ฐ€์ง„๋‹ค.
    • ์ด ๋•Œ! stash ํ˜น์€ commit์„ ํ•ด์„œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์†”์งํžˆ ์ปค๋ฐ‹์€ ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ธฐ์— ํ•จ๋ถ€๋กœ commit์„ ํ•˜๊ธฐ ์• ๋งคํ•˜๋‹ค.
    • ์ด ๋•Œ stash๋ฅผ ํ†ตํ•ด ์ตœ๊ทผ ์ปค๋ฐ‹ ๊ธฐ์ค€ ๋‹ค์Œ ๋ณ€๊ฒฝ์‚ฌํ•ญ๋“ค์„ ๋”ฐ๋กœ ๋นผ๋‘๋Š” ๊ฒƒ์ด๋‹ค.
    • ๊ทธ๋ ‡๋‹ค๋ฉด ์–ธ์ œ ๋ธŒ๋žœ์น˜๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์ „์— commit ํ˜น์€ stash๋ฅผ ํ•˜๋ผ๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ• ๊นŒ?
    • a ๋ธŒ๋žœ์น˜์—์„œ b ๋ธŒ๋žœ์น˜๋ฅผ ๋”ฐ๊ณ  b ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—…์„ ํ•œ ๋’ค ์ปค๋ฐ‹์„ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๊ณ  ๋‚˜์„œ ๋˜๋‹ค์‹œ ๋กœ์ปฌ(์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ)์—์„œ ์ž‘์—…์„ ํ•˜๊ณ  a๋กœ ์˜ฎ๊ธฐ๋ ค๊ณ  ํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
    • ์ด ๋•Œ, stash๋กœ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ž ๊น ๋นผ๋‘๋“ ๊ฐ€ ์•„๋‹ˆ๋ฉด ๋˜๋‹ค์‹œ ์ปค๋ฐ‹์„ ํ•ด์„œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•˜๊ณ  ์˜ฎ๊ธฐ๋ฉด ๋œ๋‹ค.

el.firstChild๊ฐ€ ๋•Œ๋กœ๋Š” textNode๋กœ ๋œจ์ง€ ์•Š์„ ๋•Œ!(feat. ๋ธŒ๋ผ์šฐ์ €)

  • ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” html ํŒŒ์ผ๋“ค์˜ ์š”์†Œ๋“ค์ด ์ตœ์ ํ™”๋˜์–ด ๊ณต๋ฐฑ์—†์ด(textNode๊ฐ€ ์—†์ด) ์ •๋ฆฌ๋œ๋‹ค.
  • ํ•ด์„œ firstChild๋กœ textNode๊ฐ€ ์•ˆ์ฐํžˆ๊ธฐ๋„ ํ•œ๋‹ค!

ํ…œํ”Œ๋ฆฟ ์—”์ง„์ด๋ž€?

  • ํ…œํ”Œ๋ฆฟ ์–‘์‹๊ณผ ํŠน์ • ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์— ๋”ฐ๋ฅธ ์ž…๋ ฅ ์ž๋ฃŒ๋ฅผ ํ•ฉ์„ฑํ•˜์—ฌ ๊ฒฐ๊ณผ ๋ฌธ์„œ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด(๋˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์ปดํฌ๋„ŒํŠธ). ๊ทธ๋ƒฅ ํ…œํ”Œ๋ฆฟ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
  • ์ง€์ •๋œ ํ…œํ”Œ๋ฆฟ ์–‘์‹์— ๋ฐ์ดํ„ฐ๊ฐ€ ํ•ฉ์ณ์ ธ์„œ html ๋ฌธ์„œ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์ฆ‰, ํ™”๋ฉด์„ ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์ง€ ๋„์™€์ฃผ๋Š” ์–‘์‹์ด๋‹ค.
  • ๊ทธ์ € ์ด๋ฆ„์„ ํ…œํ”Œ๋ฆฟ ์—”์ง„์ด๋ผ๊ณ  ๋ถ™์—ฌ์„œ ์กฐ๊ธˆ ํ—ท๊ฐˆ๋ฆฐ๋‹ค.
  • Handlebars, Mustache ๋“ฑ์ด ์žˆ๋‹ค.(๋„“๊ฒŒ ๋ณด๋ฉด react, vue ๋“ฑ๋„ ํ…œํ”Œ๋ฆฟ ์—”์ง„์ด๋‹ค.)

๐Ÿชต Reference

๐Ÿชด Jayden's Week-03

  • 23.03.20(Mon) ~ 23.03.24(Fri)

๐ŸŒต Jayden's Keyword

  • ์• ๋‹ˆ๋ฉ”์ด์…˜ ์›๋ฆฌ
  • ๋ ˆ์ด์•„์›ƒ, ํŽ˜์ธํŠธ, ์ปดํฌ์ง€ํŠธ
  • Sass
  • ์บ๋กœ์…€(๋ฌดํ•œ ์Šฌ๋ผ์ด๋“œ)
  • OOP

๐ŸŒด Jayden's Rule

  • CSS ์ „์ฒ˜๋ฆฌ๊ธฐ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ํ™•์‹คํžˆ ๊ณต๋ถ€ํ•˜์ž
  • Sass, Scss์— ๋Œ€ํ•ด์„œ ๊นŠ์ด ์žˆ๊ฒŒ ๊ณต๋ถ€ํ•˜๊ณ  ๋ฌด์กฐ๊ฑด ์“ฐ๋Š” ๊ฒŒ ์ข‹์€๊ฑด์ง€ ์˜๋ฌธ์„ ๊ฐ–์ž
  • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ html, css, js๋ฅผ ์ฝ๊ณ  ํŽ˜์ด์ง€๋ฅผ ๊ทธ๋ฆฌ๊ธฐ๊นŒ์ง€์˜ ๊ณผ์ •์„ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์„ ์ •๋„๋กœ ๊นŠ๊ฒŒ ์•Œ๊ธฐ
  • ํ”„๋ก ํŠธ์—”๋“œ์—๊ฒŒ ์žˆ์–ด OOP๋Š” ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ๋ ์ง€ ๊ณ ๋ฏผํ•ด๋ณด๊ธฐ
  • ๋ฌดํ•œ ์Šฌ๋ผ์ด๋“œ๊ฐ€ ๋˜๋Š” ์บ๋กœ์…€ ๊ตฌํ˜„ํ•˜๊ธฐ

๐ŸŒพ Jayden's Learning Plan

  • Mon: ํ•™์Šต ๊ณ„ํš ์ž‘์„ฑ ๋ฐ ๊ฐœ๋… ๊ณต๋ถ€ ์ •๋ฆฌ, ์ €๋ฒˆ์ฃผ ๋ชปํ•œ ๋ถ€๋ถ„ ์ตœ๋Œ€ํ•œ ๋งˆ๋ฌด๋ฆฌ
  • Tue: ์ตœ๋Œ€ํ•œ ๋ฆฌํŽ™ํ† ๋งํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ ๋ฆฌํŽ™ํ† ๋งํ•ด๋ณด์ž
  • Wed: ์บ๋กœ์…€์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๊ณ  ์ผ๋‹จ ์œ ํ•œํ•œ ์บ๋กœ์…€ ๊ตฌํ˜„ํ•˜๊ธฐ
  • Thu: ๋ฌดํ•œ ์Šฌ๋ผ์ด๋“œ๋กœ ์บ๋กœ์…€ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ
  • Fri: ๊ฐœ๋… ๋ณต์Šต ๋ฐ ๋ชป๋‹คํ•œ ๊ตฌํ˜„, ์ฝ”๋“œ ์ •๋ฆฌ

๐ŸŒฒ Jayden's Check List

  • readme ์ž‘์„ฑํ•˜๊ธฐ
  • ํ•™์Šต ๋‚ด์šฉ ์ •๋ฆฌ ๋ฐ ๊ฐœ๋… ๊ณต๋ถ€
    • Sass
    • ์• ๋‹ˆ๋ฉ”์ด์…˜
    • ์›น ํŽ˜์ด์ง€ ๋ Œ๋”๋ง ๊ณผ์ •
    • ํ”„๋ก ํŠธ์—”๋“œ์˜ OOP ๊ทธ๋ฆฌ๊ณ  prototype
    • ์บ๋กœ์…€ + ๋ฌดํ•œ ์Šฌ๋ผ์ด๋“œ
  • ์ง€๋‚œ๋ฒˆ ๋ชป๋‹คํ•œ ๋‚ด์šฉ
    • ์‚ฌ์ด๋“œ๋ฐ” ์™„์„ฑ
    • ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ฒ˜๋ฆฌ
    • ๊ตฌํ˜„ ์‹œ๊ฐ์ ์ธ ๋ถ€๋ถ„ ๋””ํ…Œ์ผ ์‚ด๋ฆฌ๊ธฐ
  • ์บ๋กœ์…€ ๊ตฌํ˜„
    • ์œ ํ•œ ์Šฌ๋ผ์ด๋“œ
    • ๋ฌดํ•œ ์Šฌ๋ผ์ด๋“œ

๐ŸŒณ Jayden's Record

CSS ์ „์ฒ˜๋ฆฌ๊ธฐ(CSS Preprocessor)

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

Sass/Scss

  • Sass์˜ ๋ฒ„์ „ 3๋ถ€ํ„ฐ CSS์™€ ์ข€๋” ๊ฐ€๊นŒ์šด ๋ฌธ๋ฒ•์ธ Scss๊ฐ€ ๋“ฑ์žฅ

Scss ๋ณ€์ˆ˜ ์„ ์–ธ ๋ฐฉ๋ฒ•

$jayden-color: #111111;

.button {
	background-color: $jayden-color;
}
// CSS
.container {
  margin-top: 10px;
}

.container .item {
  padding: 10px;
}

// Sass
.container {
  margin-top: 10px;

  .item {
    padding: 10px;
  }
}

@mixin

  • css์—์„œ์˜ ํ•จ์ˆ˜๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ๋ณ€์ˆ˜๋„ $๋กœ ๋งŒ๋“ค์–ด์„œ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.
@mixin jayden-styles($flexDirection: row, $backgroundColor: #000000) {
	display: flex;
	flex-direction: $flexDirection;
	justify-content: space-between;
	align-items: center;
	background-color: $backgroundColor;
} 

.jayden-box {
	@include jayden-styles(column, #ffffff);
}

@extend

  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ํด๋ž˜์Šค ์ƒ์†๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ. ๊ทธ๋Ÿฌ๋‚˜ css media-query ๋‚ด์—์„œ ์‹คํ–‰๋˜์ง€ ์•Š์œผ๋ฉฐ Sass ๊ฐ€์ด๋“œ๋ผ์ธ์—์„œ๋„ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
.a {
	padding: 1rem;
}

.b {
	@extend .a;
	background-color: tomato;
}

@import

  • ์™ธ๋ถ€์— ๋ชจ๋“ˆํ™”ํ•ด์„œ ๋ถ„๋ฆฌํ•ด ๋†“์€ Sass ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์™€ ๋ณ‘ํ•ฉํ•˜์—ฌ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.(js์˜ ๋ชจ๋“ˆ์ฒ˜๋Ÿผ)

CSS @import๋Š” ์‚ฌ์šฉํ•  ๋•Œ๋งˆ๋‹ค ๋งค๋ฒˆ http ํ˜ธ์ถœ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†๋„ ์ €ํ•˜๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Sass @import๋Š” CSS๋กœ ์ปดํŒŒ์ผํ•˜์—ฌ ๋ฐ”๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— http ํ˜ธ์ถœ์ด ํ•„์š”ํ•˜์ง€ ์•Š์•„ ์†๋„ ์ €ํ•˜ ๋ฌธ์ œ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.

@import ์‚ฌ์šฉ ํŒ

  1. ๋ณดํ†ต ๋ณ€์ˆ˜์™€ @mixin์€ ๋”ฐ๋กœ Sass ๋ชจ๋“ˆ ํŒŒ์ผ๋กœ ๋งŒ๋“ค๊ณ  @importํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ด ๋•Œ, ํŒŒ์ผ๋ช… ์•ž์— _๋ฅผ ๋ถ™์ด๋ฉด CSS๋กœ ์ปดํŒŒ์ผ ๋˜์ง€ ์•Š๋Š”๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด _mixin.scss, _header.scss ํŒŒ์ผ๋ช…์„ ๋งŒ๋“ค๊ณ , ์ฃผ ํŒŒ์ผ์—์„œ @import ํ•˜๋ฉด 2๊ฐœ(_mixin.scss, _header.scss)์˜ ํŒŒ์ผ ๋‚ด์šฉ์€ ์ฃผ ํŒŒ์ผ์— ์ ์šฉ๋˜์ง€๋งŒ _mixin.scss, _header.scss ํŒŒ์ผ์€ css๋กœ ์ปดํŒŒ์ผ ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ด€๋ฆฌํ•˜๊ธฐ๊ฐ€ ํŽธ๋ฆฌํ•ด์ง„๋‹ค.
  1. ํ•˜๋‚˜์˜ @import๋กœ ์—ฌ๋Ÿฌ ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
  • ์ด ๋•Œ, ํŒŒ์ผ๋ช…์œผ๋กœ๋งŒ @importํ•ด๋„ ์•Œ์•„์„œ ํ™•์žฅ์ž๋Š” .scss์ธ ๊ฒƒ์„ ์•Œ๊ธฐ ๋•Œ๋ฌธ์— ์•ˆ๋ถ™์—ฌ๋„ ๋œ๋‹ค.(์ฃผ์˜: css ํŒŒ์ผ์€ @import ์‹œ .css๋ฅผ ๋ถ™์—ฌ์ค˜์•ผ ํ•œ๋‹ค.)
@import '_aaa', '_bbb';

๐Ÿชต Reference

๐Ÿชด Jayden's Week-04

  • 23.03.27(Mon) ~ 23.04.01(Fri)

๐ŸŒต Jayden's Keyword

  • fetch
  • Promise
  • ๋น„๋™๊ธฐ ํ†ต์‹ 
  • ๋น„๋™๊ธฐ ๋„คํŠธ์›Œํฌ API
  • ๊ฒ€์ƒ‰์ฐฝ(๊ตฌํ˜„)

๐ŸŒด Jayden's Rule

  • ๋น„๋™๊ธฐ ํ†ต์‹ ์— ๋Œ€ํ•œ ๊ฐœ๋…์„ ํ™•์‹คํžˆ ์žก์ž
  • fetch api๋ฅผ ๊นŠ๊ฒŒ ๊ณต๋ถ€ํ•˜๊ณ  ํ™œ์šฉํ•ด๋ณด์ž
  • PromiseํŒจํ„ด์ด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๊ธฐ
  • mock server์™€์˜ ์—ฐ๋™
  • (๋” ๋‚˜์•„๊ฐ€๋ณด๊ธฐ) nodejs express๋กœ ๊ฐ„๋‹จํ•œ ์„œ๋ฒ„ ๋งŒ๋“ค์–ด๋ณด๊ธฐ(๊ณ ๋ฏผ)

๐ŸŒพ Jayden's Learning Plan

  • Mon: ํ•™์Šต ๊ณ„ํš ์ž‘์„ฑ ๋ฐ ๊ฐœ๋… ๊ณต๋ถ€ ์ •๋ฆฌ, ๋ฆฌํŒฉํ† ๋ง
  • Tue: ๊ฐœ๋… ๊ณต๋ถ€ ๋ฐ ๊ฒ€์ƒ‰์ฐฝ ๊ตฌํ˜„ ์‹œ์ž‘(์„ค๊ณ„)
  • Wed: Node.js(express) ์„œ๋ฒ„ ๊ณต๋ถ€(๋ณ€๊ฒฝ ๊ฐ€๋Šฅ)
  • Thu: ๊ฐ„๋‹จํ•œ ์„œ๋ฒ„ ๊ตฌํ˜„ ๋ฐ ๊ฒ€์ƒ‰์ฐฝ ๊ตฌํ˜„(๊ณ„์†)
  • Fri: ๊ฐœ๋… ๋ณต์Šต ๋ฐ ๋ชป๋‹คํ•œ ๊ตฌํ˜„, ์ฝ”๋“œ ์ •๋ฆฌ

๐ŸŒฒ Jayden's Check List

  • readme ์ž‘์„ฑํ•˜๊ธฐ
  • ํ•™์Šต ๋‚ด์šฉ ์ •๋ฆฌ ๋ฐ ๊ฐœ๋… ๊ณต๋ถ€
    • ๋น„๋™๊ธฐ ํ†ต์‹ 
      • fetch api(+ axios๋„ ๊ณต๋ถ€(์˜ˆ์ •))
    • HTTP ๊ณต๋ถ€ ๋ฐ ๋ณต์Šต
  • ์ง€๋‚œ๋ฒˆ ๋ชป๋‹คํ•œ ๋‚ด์šฉ
    • ๋ฆฌํŒฉํ† ๋ง(๊ฐ„๋‹จํ•œ ๋ถ€๋ถ„์€ ์™„๋ฃŒ, ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋” ๋‹ค๋“ฌ๊ธฐ)
    • ์‹œ๊ฐ์ ์ธ ๋ถ€๋ถ„ ๋””ํ…Œ์ผ
  • ๊ตฌํ˜„์‚ฌํ•ญ
    • ๊ฒ€์ƒ‰์ฐฝ ๊ตฌํ˜„
      • ์ถ”์ฒœ ๊ฒ€์ƒ‰์–ด ํ‘œ์ถœ
      • ์ตœ๊ทผ ๊ฒ€์ƒ‰์–ด ํ‘œ์ถœ
      • ๊ฒ€์ƒ‰์–ด ์ž…๋ ฅ ์‹œ ์ผ์น˜ํ•˜๋Š” ์ƒํ’ˆ ํ‘œ์ถœ
        • ๊ฒ€์ƒ‰์ฐฝ ์ž๋™์™„์„ฑ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„์™€ ์—ฐ๋™ํ•ด์„œ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ์‹ ํ™œ์šฉ
        • get ์š”์ฒญ(request) query๋ฅผ ๋ณด๋‚ด ์‘๋‹ต(response)์„ ๋ฐ›๋Š”๋‹ค.
      • ํ‚ค๋ณด๋“œ๋ฅผ ํ†ตํ•œ ๊ฒ€์ƒ‰์–ด ์„ ํƒ
    • nodejs express๋กœ ๊ฐ„๋‹จํ•œ ์„œ๋ฒ„ ๊ตฌํ˜„

๐ŸŒณ Jayden's Record

๋™๊ธฐ(synchronous)?

  • ๋™์‹œ์— ์ผ์–ด๋‚œ๋‹ค๋Š” ์˜๋ฏธ๋กœ, ์—ฌ๊ธฐ์„œ ๋™์‹œ์— ์ผ์–ด๋‚œ๋‹ค๋Š” ๊ฒƒ์€ ์š”์ฒญ๊ณผ ๊ฒฐ๊ณผ๊ฐ€ ๋™์‹œ์— ์ผ์–ด๋‚œ๋‹ค๋Š” ์˜๋ฏธ
  • ์•ž์˜ ์ฝ”๋“œ๊ฐ€ ์•„์ง ์‹คํ–‰ ์ค‘์ด๋ผ๋ฉด ๊ทธ ์‹คํ–‰์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผํ•œ๋‹ค.(๋ธ”๋กœํ‚น)
  • ์„ค๊ณ„๊ฐ€ ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ง์ด๋‹ค.

๋น„๋™๊ธฐ(asynchronous)?

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

setTimeout์˜ ๋™์ž‘์›๋ฆฌ?

setTimeout(() => console.log('๋น„๋™๊ธฐ์ž…๋‹ˆ๋‹ค.'), 10000);

setTimeout์€ ๋ธŒ๋ผ์šฐ์ €์˜ V8 ์—”์ง„ ์ž์ฒด์— ๋‚ด์žฅ๋˜์–ด์žˆ๋Š” ํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋‹ค. ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ œ๊ณตํ•˜๋Š” api์ธ WEB API ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ์‹คํ–‰๋˜๋ฉด 10000ms ์ฆ‰, 10์ดˆ ๋’ค์— cb(callback) ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•ด๋‹ฌ๋ผ๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋“ฑ๋ก๋˜๊ณ  10์ดˆ ๋’ค์— cb๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

์•„๋ž˜์˜ ๋ง์„ ์ดํ•ดํ•ด๋ณด๊ธฐ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์‹ฑ๊ธ€ ์“ฐ๋ ˆ๋“œ ๊ธฐ๋ฐ˜์ด๋ฉฐ ๋…ผ ๋ธ”๋กœํ‚น ๋ฐฉ์‹์˜ ๋น„๋™๊ธฐ์ ์ธ ๋™์‹œ์„ฑ ์–ธ์–ด์ด๋ฉฐ ์ฝœ ์Šคํƒ, ์ด๋ฒคํŠธ ๋ฃจํ”„์™€ ์ฝœ๋ฐฑ ํ ๊ทธ๋ฆฌ๊ณ  ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋‹ค๋ฅธ API๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์‹ฑ๊ธ€ ์“ฐ๋ ˆ๋“œ์ด์ง€๋งŒ, ์‹คํ–‰๋˜๋Š” ํ™˜๊ฒฝ(๋ธŒ๋ผ์šฐ์ €, nodejs ๋“ฑ)์—์„œ ์ œ๊ณตํ•˜๋Š” event loop, callback queue๋ฅผ ํ†ตํ•ด ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.

JSON(JavaScript Object Notation)

  • ์ด์ „์—๋Š” ์ฃผ๋กœ XML ํ˜•์‹์œผ๋กœ ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ดํ›„ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•ด์„œ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์ƒ๊ฒจ๋‚˜๋ฉด์„œ JSON ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.
  • ์‚ฌ์‹ค์ƒ XML์€ ์ด์ œ ๊ฑฐ์˜ ์ž˜ ์•ˆ์“ฐ์ด๊ณ  ์žˆ์œผ๋ฉฐ, JSON ํ˜•ํƒœ๋ฅผ ๊ฑฐ์˜ ํ‘œ์ค€์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ๋•Œ๋‚˜ ๋ฐ›์„ ๋•Œ ๋ชจ๋‘ JSON ํ˜•ํƒœ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

fetch api

  • ๊ธฐ์กด์—๋Š” XMLHTTPRequest ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ์ง„ํ–‰ํ•˜์˜€๋‹ค.
  • ์ ์  ๋น„๋™๊ธฐ ์š”์ฒญ์ด ๋” ๋ณต์žกํ•˜๊ณ  ์ฆ๊ฐ€๋˜๋ฉด์„œ, ๋น„๋™๊ธฐํ†ต์‹  ๋กœ์ง์— ๋ณด๊ธฐ ์ข‹์€ ํŒจํ„ด์ด ์ ์šฉ๋˜๊ณ  ์žˆ๋‹ค.
  • fetch api๋Š” ํ”„๋กœ๋ฏธ์Šค ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ ๋กœ์ง์„ ์ข€๋” ๋™๊ธฐ์ ์œผ๋กœ ๋ณด์ด๊ฒŒ๋” ํ•ด์ค€๋‹ค.(๊ฐ€๋…์„ฑ์„ ๋†’์—ฌ์ค€๋‹ค.)

Promise ํŒจํ„ด

  • Promise ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ๋™๊ธฐ์ ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์—ฌ์ฃผ๋Š” ํŒจํ„ด์ด๋‹ค.

Promise: all vs allSettled

  • Promise.all(): ๋ชจ๋“  Promise ๊ฐ์ฒด๊ฐ€ fulfilled๋˜๋ฉด resolveํ•œ ๊ฐ’๋“ค์˜ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜. ๋‹จ, ํ•˜๋‚˜๋ผ๋„ ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ์ฆ‰์‹œ rejectํ•œ ๊ฐ’ ๋ฐ˜ํ™˜.
  • Promise.allSettled(): fulfilled์™€ rejected ์ƒ๊ด€์—†์ด ๋ชจ๋“  Promise ๊ฐ์ฒด๊ฐ€ settled๊ฐ€ ๋˜๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.

Promise: race vs any

  • Promise.race(): fulfilled๋“  rejected๋“  ๊ทธ์ € ๊ฐ€์žฅ ๋จผ์ € settled๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • Promise.any(): ๋จผ์ € ์ฒ˜๋ฆฌ๋œ ์ƒํƒœ๋“ค ์ค‘์—์„œ fulfilled์ธ ์ƒํƒœ๋งŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค.(๋งŒ์•ฝ ๋ชจ๋“  Promise์—์„œ fulfilled๊ฐ€ ์—†๋‹ค๋ฉด AggregateError ๋ฐœ์ƒ)

Promise์˜ then

  • Promise๋ฅผ ํ†ตํ•ด resolve์™€ reject ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
  • ์ด ๋•Œ, ์–ด๋–ค ๊ฐ’์„ resolveํ•˜๊ฒŒ ๋˜๋ฉด ๊ทธ ๋•Œ ์šฐ๋ฆฌ๋Š” ๊ทธ ๊ฐ’์„ then์˜ ๋‚ด๋ถ€ ์ฝœ๋ฐฑํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์•„์„œ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ข€ ๋‹จ์ˆœํ•˜๊ฒŒ ์ƒ๊ฐํ•ด๋ณด์ž๋ฉด, then(cb)๋ฅผ ํ†ตํ•ด์„œ ์šฐ๋ฆฌ๋Š” resolve๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ(์ด๋ฒคํŠธ ๊ฐœ๋…), then์œผ๋กœ ์ „๋‹ฌํ•œ cb๋ฅผ resolve๋กœ ์ „๋‹ฌํ•œ ๊ฐ’๊ณผ ํ•จ๊ป˜ micro task queue์— ๋ณด๋‚ด๊ฒŒ ๋œ๋‹ค.

๐Ÿ› Jayden's Problem

๐Ÿชต Reference

About