026

๐Ÿ˜‰ ํ—ท๊ฐˆ๋ ธ๋˜ & ๋ชฐ๋ž๋˜ ๋ถ€๋ถ„๋“ค๋งŒ ์ •๋ฆฌํ•˜๋Š” ๋‚˜๋งŒ์˜ TIL
๐Ÿ˜ฏ ๋ชจ๋“  ๊ฐ•์˜ ๋‚ด์šฉ์€ ์ ์ง€ ์•Š์•„์š”!

์˜ค๋Š˜์˜ ์†Œ๊ฐ์€?
๊ณต๋ถ€๋Ÿ‰์ด ์–ด์ œ๋ณด๋‹ค 5๋ฐฐ๋Š” ๋Š˜์—ˆ์Šต๋‹ˆ๋‹ค.
๋ชจ๋ฅด๋Š” ๋‚ด์šฉ ํŒŒํ‹ฐ๋ผ์„œ ๊ณ„์† ๋ฐ˜๋ณต ์žฌ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.. (์•„๋ จ..
๊ทผ๋ฐ ๋„ˆ๋ฌด ์žฌ๋ฐŒ์–ด์š” ํ”„๋ก ํŠธ ์ตœ๊ณ ์•ผ..์—ด์‹ฌํžˆ ํ•ด์•ผ์ง€!

๊ธฐ์กด์— ๊ณต๋ถ€ํ–ˆ๋˜ CS ๋„คํŠธ์›Œํฌ ๋ถ„์•ผ๋ž‘ ๊ฒน์น˜๋Š” ๋ถ€๋ถ„์ด ๋งŽ์•„์„œ ์ดˆ๋ฐ˜์—๋Š” ์ˆ˜์›”ํ–ˆ๋Š”๋ฐ
๋’ค๋กœ ๊ฐˆ์ˆ˜๋กœ ๋จธ๋ฆฌ ์‹ธ๋งค๊ณ  ์žˆ๋Š” ์ €๋ฅผ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค..

์™•์™• ๊ธด ์ •๋ฆฌ ๊ธ€์ด์ง€๋งŒ, ์ฝ๊ณ  ์ž˜๋ชป๋œ ๋ถ€๋ถ„์ด ์žˆ์„ ์‹œ (๋˜๋Š” ์˜คํƒ€๊ฐ€ ์žˆ์„ ์‹œ)
๋Œ“๊ธ€๋กœ ๋งˆ๊ตฌ๋งˆ๊ตฌ ์•Œ๋ ค์ฃผ์„ธ์š” ๐Ÿ˜ซ




[1] ๋„คํŠธ์›Œํฌ ๊ธฐ์ดˆ

๋ธŒ๋ผ์šฐ์ €์— URL์„ ์ž…๋ ฅํ•˜๋ฉด?

  1. URL์„ ํ•ด์„ํ•ฉ๋‹ˆ๋‹ค.
  2. DNS(Domain Name System) ์กฐํšŒ๋กœ ๋„๋ฉ”์ธ โ†’ IP์ฃผ์†Œ ๋ณ€ํ™˜
    1. www.jiyoung.do ์—์„œ ๋„๋ฉ”์ธ์€ jiyoung.do
  3. ์ฐพ์€ IP๊ฐ€ ํ• ๋‹น๋œ ์„œ๋ฒ„๊ฐ€ ์กด์žฌํ•˜๋Š” ๋Œ€์—ญ์œผ๋กœ ์ด๋™
  4. ARP(Address Resolution Protocol)๋ฅผ ์ด์šฉํ•˜์—ฌ IP(๋…ผ๋ฆฌ ์ฃผ์†Œ) โ†’ MAC ์ฃผ์†Œ(๋ฌผ๋ฆฌ ์ฃผ์†Œ) ๋ณ€ํ™˜
    1. ํ•ด๋‹น IP๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ธฐ๊ธฐ๊ฐ€ ๊ณ ์œ ํ•œ MAC ์ฃผ์†Œ ๋ฐ˜ํ™˜
    2. MAC ์ฃผ์†Œ๋กœ ๊ธฐ๊ธฐ๊ฐ€ ์‹ค์ œ๋กœ ์œ„์น˜ํ•œ ๊ณณ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  5. TCP ํ†ต์‹ ์„ ์œ„ํ•ด Socket ์—ด๊ธฐ
    1. 3 Way handshake๋กœ ์—ฐ๊ฒฐ ์š”์ฒญ
  6. HTTP ํ”„๋กœํ† ์ฝœ๋กœ ๋“ค์–ด์˜จ ํŒจํ‚ท ์ฝ๊ณ  ์ฒ˜๋ฆฌ โ†’ ์„œ๋ฒ„์—์„œ ์ ์ ˆํ•œ ์‘๋‹ต ๋ฐ˜ํ™˜
  7. ๋ฐ›์€ HTML ๋ Œ๋”๋ง
    1. HTML ์ฝ์–ด DOM Tree โ†’ Render Tree โ†’ Paint ๊ณผ์ •

๐Ÿ˜Š ์ด์ „ ์ •๋ฆฌ ๊ธ€ โ†“

TCP ํ”„๋กœํ† ์ฝœ์ด๋ž€?
https://jungjjeong.github.io/cs/network/Network04/
๋ธŒ๋ผ์šฐ์ €์˜ ์ž‘๋™ ์›๋ฆฌ https://jungjjeong.github.io/cs/web/frontend/Browser/


[1-1] http ? https?

http(HyperText Transfer Protocol)๋Š” ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด์˜ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฃผ๊ณ ๋ฐ›๋Š” ํ”„๋กœํ† ์ฝœ๋กœ,
ํ”ํžˆ ์›น ๋ธŒ๋ผ์šฐ์ € ์ฃผ์†Œ์ฐฝ์— ์ž…๋ ฅํ•˜๋Š” ์›น ์ฃผ์†Œ์ธ URL์„ ํ†ตํ•ด ์š”์ฒญ๊ณผ ์‘๋‹ต์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด https๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?

์šฐ์„  https์™€ http๋Š” ๋‘˜ ๋‹ค ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด์˜ ์š”์ฒญ, ์‘๋‹ต์„ ์ฃผ๊ณ ๋ฐ›๋Š” ํ”„๋กœํ† ์ฝœ์ด๋ผ๋Š” ๊ฒƒ์€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ, http๋Š” ์•”ํ˜ธํ™”๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ์ œ3์ž๊ฐ€ ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊น๋‹ˆ๋‹ค.

์ด๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ ๊ฒƒ์ด ๋ฐ”๋กœ https์ž…๋‹ˆ๋‹ค!


https(HyperText Transfer Protocol Secure)๋ž€ ๊ธฐ์กด์˜ http์— ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™”๊ฐ€ ์ถ”๊ฐ€๋œ ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค.

80๋ฒˆ ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” http์™€ ๋‹ค๋ฅด๊ฒŒ, https๋Š” 443๋ฒˆ ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์•”ํ˜ธํ™”๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์•”ํ˜ธํ™” ๋ฐฉ์‹์—๋Š” ๋Œ€์นญํ‚ค ์•”ํ˜ธํ™”, ๋น„๋Œ€์นญํ‚ค ์•”ํ˜ธํ™”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

โ†’ ๋‚˜์ค‘์— https์— ๋”ฐ๋กœ ์ž์„ธํžˆ ๊ณต๋ถ€ํ•ด์„œ ๊ฒŒ์‹œ๊ธ€์„ ์˜ฌ๋ ค๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜Š

๐Ÿ˜Š ์ด์ „ ์ •๋ฆฌ ๊ธ€ โ†“

HTTP ํ”„๋กœํ† ์ฝœ https://jungjjeong.github.io/cs/network/Network02/




[2] ์ปดํ“จํ„ฐ ์‹œ๊ฐ„ ์›๋ฆฌ

  • ์ปดํ“จํ„ฐ ์‹œ๊ฐ„ ํ‘œํ˜„์„ ์œ„ํ•ด ํ•˜๋“œ์›จ์–ด์˜ ์‹œ์Šคํ…œ ํด๋Ÿญ ์ด์šฉ
    • RTC(Real Time Clock) ๋ชจ๋“ˆ ์‚ฌ์šฉ
  • ์‹œ์Šคํ…œ ์‹œ๊ฐ„์„ ๊ฐ’์œผ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์€ Timestamp

ํฌ์ธํŠธ๋Š” ์‹œ๊ฐ„์„ ์–ด๋–ค ๊ธฐ์ค€์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ• ์ง€ ์ž˜ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ!

์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์‹œ๊ฐ„์„ ์šฉ๋„๋ณ„๋กœ ๋งž์ถฐ์„œ ๊ธฐ๋กํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.




[3] ์•”ํ˜ธํ™”

ํ‰๋ฌธ์„ ์•”ํ˜ธ๋ฌธ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ

๋‹จ๋ฐฉํ–ฅ ์•”ํ˜ธํ™”

  1. ๋ณตํ˜ธํ™”๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์•”ํ˜ธํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•
  2. Rainbow Table์„ ํ†ตํ•ด ์›๋ฌธ์„ ์•Œ์•„๋‚ผ ์ˆ˜๋„ ์žˆ์œผ๋‹ˆ Salt, Key stretching๋“ฑ์œผ๋กœ ์กฐ์น˜๋ฅผ ์ทจํ•œ๋‹ค.

Salt : ํ‰๋ฌธ์— ์ž„์˜์˜ ๋ฌธ์ž์—ด ์ถ”๊ฐ€ํ•˜์—ฌ ์•”ํ˜ธํ™”
Key stretching : ํ•ด์‹œ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜๋ณตํ•˜์—ฌ ์•Œ๊ธฐ ํž˜๋“ค๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•

์–‘๋ฐฉํ–ฅ ์•”ํ˜ธํ™”

  1. ํ‰๋ฌธ์„ ๋ณตํ˜ธํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋Œ€์นญํ‚ค/๋น„๋Œ€์นญํ‚ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์•”ํ˜ธํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•

๋Œ€์นญํ‚ค ์•”ํ˜ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ : ๊ฐ™์€ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•”ํ˜ธํ™”, ๋ณตํ˜ธํ™” ๊ฐ€๋Šฅ (ex. AES)
๋น„๋Œ€์นญํ‚ค ์•”ํ˜ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ : ๊ณต๊ฐœํ‚ค์™€ ๊ฐœ์ธํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•”ํ˜ธํ™”, ๋ณตํ˜ธํ™” (ex. RSA)




[4] ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

ํ•จ์ˆ˜ํ˜• ํŒจ๋Ÿฌ๋‹ค์ž„์—๋Š” ํ•จ์ˆ˜๊ฐ€ ์ตœ์†Œ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค!

ํ•จ์ˆ˜ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด์ง€๋ฉด, ์žฌ์‚ฌ์šฉ์„ฑ์ด ๊ต‰์žฅํžˆ ๋†’๊ฒ ์ฃ 


Q. โ€œ12345โ€๋ฅผ ํ•ฉํ•ด์„œ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ

function sum(str) {
  console.log(
    str
      .split("")
      .map((x) => parseInt(x))
      .reduce((x, y) => {
        return x + y;
      }, 0)
  );
}

sum("12345"); // 15

๐Ÿ˜ฃ ์ด๊ฒŒ ๋ญ” ์ฝ”๋“œ๋žŒ

์ €๋Š” ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ์ต์ˆ™ํ•ด์„œ ๋‚ด๋ถ€ ๋กœ์ง์€ ๋น„์Šทํ•˜๊ฒŒ ์ง  ๊ฒƒ ๊ฐ™์ง€๋งŒ, ๋œฌ๊ธˆ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ผ..
๋ณด์™„ํ•ด์•ผ ํ•  ๋ถ€๋ถ„์ด ๋„ˆ๋ฌด ๋งŽ๋‹ค๋Š” ๊ฒƒ์ด ๋ณด์ž…๋‹ˆ๋‹ค.


[4-1] ํŠน์ง•

  • ์ƒํƒœ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ๊ฐ€ ์งง๊ณ  ๊ฐ„๊ฒฐํ•ฉ๋‹ˆ๋‹ค.


[4-2] ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

์„ค๊ณ„์— ๋Œ€ํ•œ ํŒจ๋Ÿฌ๋‹ค์ž„๋ณด๋‹ค๋Š” ์‚ฌ๊ณ ์— ๋Œ€ํ•œ ํŒจ๋Ÿฌ๋‹ค์ž„์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค.

โ†’ ๋ฌด์—‡์„ ํ•ด๊ฒฐํ•ด์•ผ ํ• ์ง€์— ์ง‘์ค‘ํ•ฉ๋‹ˆ๋‹ค.

์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๋น›์„ ๋ฐœํ•ฉ๋‹ˆ๋‹ค!

โ†’ ๋ฐ์ดํ„ฐ์˜ ์ œ์–ด ์—†์ด ํ•„์š”ํ•œ ํ•จ์ˆ˜๋งŒ ์กฐํ•ฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.




[5] ๊ฐ์ฒด์ง€ํ–ฅ๊ณผ ํ”„๋กœํ† ํƒ€์ž…

[5-1] ๊ฐ์ฒด ์ง€ํ–ฅ

๊ฐ์ฒด ์ง€ํ–ฅ์˜ โ€˜๊ฐ์ฒดโ€™๋ž€ ํ˜„์‹ค์— ์žˆ๋Š” ๊ฒƒ์„ ์ถ”์ƒํ™” ํ•œ ๊ฒƒ์ด๋ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โ€˜์ถ”์ƒโ€™์ด๋ž€ ์‚ฌ๋ฌผ์ด ์ง€๋‹ˆ๊ณ  ์žˆ๋Š” ์—ฌ๋Ÿฌ ์ธก๋ฉด ์ค‘ ํŠน์ •ํ•œ ๋ถ€๋ถ„๋งŒ ๋ณด๋Š” ๊ฒƒ์ด๋ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๊ทธ๋ ‡๋‹ค๋ฉด ๊ฐ์ฒด ์ง€ํ–ฅ์ด๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

๊ฐ์ฒด ์ง€ํ–ฅ์ด๋ž€ ๊ฐ์ฒด ์œ„์ฃผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋Š” ํŒจ๋Ÿฌ๋‹ค์ž„์ž…๋‹ˆ๋‹ค. ์ตœ์†Œ ๋‹จ์œ„๋Š” ๊ฐ์ฒด๊ฐ€ ๋˜๊ฒ ์ฃ .

JS๋Š” ํ”„๋กœํ† ํƒ€์ž…์„ ํ†ตํ•ด ๊ฐ์ฒด ์ง€ํ–ฅ์„ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.


[5-2] ํ”„๋กœํ† ํƒ€์ž…

JS์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ 3๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด
  2. Object ์ƒ์„ฑ์ž ํ•จ์ˆ˜
  3. ์ƒ์„ฑ์ž ํ•จ์ˆ˜


EX) JS์˜ ๊ฐ์ฒด๋งŒ์œผ๋กœ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์งœ๋ด…์‹œ๋‹ค.

function Jiyoung(name, phone) {
  this.name = name;
  this.phone = phone;
  this.getName = function () {
    return this.name;
  };
  this.setName = function (name) {
    this.name = name;
  };
}

const info = new Jiyoung("์ •์ง€์˜", "0101234");
const info2 = new Jiyoung("ํ•ด์œฐ", "0109876");

console.log(info);
console.log(info2);

Untitled

๋‘ ๊ฐ์ฒด ๋ชจ๋‘ ๋‹ค ๋ฉ”์†Œ๋“œ๊ฐ€ ๊ฐ๊ฐ ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

โ†’ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ์ผ์–ด๋‚˜๊ฒŒ ๋˜์ฃ .


๋”ฐ๋ผ์„œ ๊ธฐ์กด์˜ ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹์ธ โ€˜ํ”„๋กœํ† ํƒ€์ž…โ€™์„ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.

function Jiyoung(name, phone) {
  this.name = name;
  this.phone = phone;

  Jiyoung.prototype.getName = function () {
    return this.name;
  };
  Jiyoung.prototype.setName = function (name) {
    this.name = name;
  };
}

const info = new Jiyoung("์ •์ง€์˜", "0101234");
const info2 = new Jiyoung("ํ•ด์œฐ", "0109876");

console.log(info);
console.log(info2);
console.log(Jiyoung.constructor);
console.log(Jiyoung.__proto__);
console.log(info.constructor);
console.log(info.__proto__);

Untitled 1

๊ฐ์ฒด๋“ค์€ ๊ฐ๊ฐ ํ”„๋กœํ† ๋ผ๋Š” ๋‚ด๋ถ€์ ์ธ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜๊ณ , ๋‚ด๋ถ€์—์„œ ์ƒ์œ„ ๊ฐ์ฒด๋ฅผ ๋งํฌํ•ฉ๋‹ˆ๋‹ค.

์ด์™€ ๊ฐ™์ด ํ”„๋กœํ† ํƒ€์ž…์€ ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๋ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โ†’ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ์ผ์–ด๋‚˜์ง€ ์•Š๊ฒ ์ฃ .


[5-3] ํšจ์œจ์ ์ธ ํ”„๋กœํ† ํƒ€์ž… ์‚ฌ์šฉ

  • ์ƒ์† ํ‰๋‚ด๋‚ด๊ธฐ (1)

๋ถ€๋ชจ ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ ํ”„๋กœํ† ํƒ€์ž… ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

function Person(name) {
  this.name = name;
}

Person.prototype.getName = function () {
  return this.name || "Jiyoung";
};

function JYCompany(name) {}
JYCompany.prototype = new Person();

const jy1 = new Person("Jung Jiyoung");
const jy2 = new JYCompany("Lee Jiyoung");

console.log(jy1.getName());
console.log(jy2.getName());

Untitled 2

์ƒ์œ„ ๊ฐ์ฒด์˜ ํ•จ์ˆ˜(getName)๊ฐ€ ๋งํฌ๋˜์–ด ํ•˜์œ„ ๊ฐ์ฒด์—์„œ ์ด์šฉํ•˜๋Š” ๋ชจ์Šต์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


  • ์ƒ์† ํ‰๋‚ด๋‚ด๊ธฐ (2)

๋‚ด๋ถ€์ ์œผ๋กœ ์ƒ์„ฑ๋œ ํ”„๋กœํ† ํƒ€์ž… ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

apply ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋ถ€๋ชจ ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

function Person(name) {
  this.name = name;
}

Person.prototype.getName = function () {
  return this.name || "Jiyoung";
};

function JYCompany(name) {
  Person.apply(this, arguments);
  // this๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜์—ฌ arguments(๋ฐฐ์—ด ๊ฐ์ฒด) ํ˜•ํƒœ๋กœ ํ˜ธ์ถœ๋œ ๊ฐ์ฒด์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
}

JYCompany.prototype = new Person();
JYCompany.prototype.setName = function (name) {
  this.name = name;
};

const jy1 = new Person("Jung Jiyoung");
const jy2 = new JYCompany("Lee Jiyoung");

console.log(jy1.getName());
console.log(jy2.getName());

jy2.setName("Park Jiyoung");
console.log(jy2.getName());

Untitled 3

๋ณ€์ˆ˜๋„ ๊ทธ๋Œ€๋กœ ๋‹ด๊ธฐ๊ฒŒ ๋˜๋Š” ๋ชจ์Šต์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


  • Object.create

๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ์žฌํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

const jy1 = {
  name: "Jung Jiyoung",
  getName: function () {
    return this.name;
  },
};

const jy2 = Object.create(jy1);
// jy1์„ ๋ณต์ œํ•ด์„œ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค -> jy2์˜ ์ƒ์œ„ ๊ฐ์ฒด๋Š” jy1 !!
jy2.name = "Park Jiyoung";

console.log(jy1.getName());
console.log(jy2.getName());
console.log(jy1.__proto__);
console.log(jy2.__proto__);

Untitled 4




[6] ์ด๋ฒคํŠธ ๋ฃจํ”„

JS์˜ Call Stack์€ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค (์›์‹œ ํƒ€์ž…์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค๊ณ  ์ €๋ฒˆ ์‹œ๊ฐ„์— ๋ฐฐ์› ๋˜ ์˜์—ญ์ด์ฃ )

โ†’ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰ ๋™์‹œ์— ํ•˜๋‚˜์˜ ์ž‘์—…๋งŒ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค,

Call Stack
์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋  ๋•Œ ์Œ“์ด๋Š” ๊ณณ, Stack ํ˜•ํƒœ๋กœ ์Œ“์ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์Šคํฌ๋ฆฝํŠธ๋Š” ์–ด๋–ป๊ฒŒ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋™์ž‘ํ• ๊นŒ์š”?

์ด๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. (๐Ÿ˜ฒ ๋ธŒ๋ผ์šฐ์ €์˜ ํž˜์„ ๋นŒ๋ ค์š”!)

๋ธŒ๋ผ์šฐ์ €๋Š” ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„๋™๊ธฐ์  ์ž‘์—…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


[6-1] ๋™์ž‘ ์›๋ฆฌ (Task Queue)

  1. ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜๋ฉด Global Scope์—์„œ ์‹คํ–‰
  2. ์ฝ”๋“œ๊ฐ€ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰
  3. Call stack์— ์Œ“์ž„๊ณผ ๋™์‹œ์— Web API ์‹คํ–‰ (์ฝœ๋ฐฑ ํ•จ์ˆ˜)
    1. ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด Call stack์—์„œ ๋‚˜๊ฐ€๊ณ , ๋‹ค์Œ ํ•จ์ˆ˜๊ฐ€ ์Œ“์ž…๋‹ˆ๋‹ค.
  4. Web API์—์„œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ Task Queue์— ๋ฐ€์–ด๋„ฃ๊ณ ,
    Call stack์ด ๋น„์–ด์žˆ์œผ๋ฉด Task Queue์—์„œ ๋‚˜์™€ ํ•ด๋‹น ํ•จ์ˆ˜๋“ค์ด ์Œ“์ž…๋‹ˆ๋‹ค. (Tick : ํ‹ฑ)
  5. ๋‹ค์‹œ Call stack์ด ๋น„๋ฉด ๋‹ค์Œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ Call stack์— ์Œ“์ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Web API : ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ œ๊ณตํ•˜๋Š” API / ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ Queue์— ๋„ฃ์–ด์ฃผ๋Š” ์—ญํ• 
Task Queue : ๋น„๋™๊ธฐ๋กœ ์‹คํ–‰๋œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ๋ณด๊ด€๋˜๋Š” ์˜์—ญ


[6-2] ๋™์ž‘ ์›๋ฆฌ (Microtask Queue)

์ด๋ฒคํŠธ ๋ฃจํ”„๊ฐ€ Task Queue๋ณด๋‹ค ์šฐ์„ ์œผ๋กœ ํ™•์ธํ•˜๋Š” ๊ณณ์ด Microtask Queue์ž…๋‹ˆ๋‹ค.


๋งŒ์•ฝ Microtask Queue์— ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค๋ฉด, ์ด๋ฅผ ๋จผ์ € Call Stack์— ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.

๋” ์ด์ƒ Microtask Queue์— ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ์—†๋‹ค๋ฉด, Task Queue๋ฅผ ํ™•์ธํ•˜๊ณ  ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋Œ€ํ‘œ์ ์œผ๋กœ Promise์˜ then()์˜ ์ฝœ๋ฐฑ(ํ”„๋กœ๋ฏธ์Šค์˜ ๋น„๋™๊ธฐ ํ˜ธ์ถœ)์€ Task Queue๊ฐ€ ์•„๋‹Œ Microtask Queue์— ๋‹ด๊ธฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


[6-3] ๋™์ž‘ ์›๋ฆฌ (Animation Queue)

Animation Queue (= Animation Frames)๋Š” requestAnimationFrame์— ์˜ํ•ด ๋“ฑ๋ก๋ฉ๋‹ˆ๋‹ค.

requestAnimationFrame(function () {
  console.log("animation");
});

Task Queue, Microtask Queue์™€ ๊ฐ™์€ ์—ญํ• ์ด๋ฉฐ, ์šฐ์„ ์ˆœ์œ„๋Š”

Microtask Queue > Animation Queue > Task Queue ์ˆœ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
(ํฌ๋กฌ ๊ธฐ์ค€, ๋•Œ๋กœ๋Š” Animation Queue๊ฐ€ Vsync์— ๋งž์ถฐ ํ˜ธ์ถœ๋˜๋Š๋ผ Task๋ณด๋‹ค ํ›„์— ํ˜ธ์ถœ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

๐Ÿ˜Š ์ •๋ฆฌ
JS๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ, Web API๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ Queue์— ๋“ฑ๋ก๋œ ์ž‘์—…๋“ค์„ ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ๊บผ๋‚ด์„œ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.




[7] ๋ชจ๋“ˆ

์Šคํฌ๋ฆฝํŠธ ๊ฐ„ ์˜์กด๋„๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๊ณ , ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ์‰ฝ๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์–ด ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“ˆ๊ณผ ์ปดํฌ๋„ŒํŠธ
๋ชจ๋“ˆ์€ ์„ค๊ณ„ ์‹œ์ ์— ์˜๋ฏธ ์žˆ๋Š” ์š”์†Œ์ด๋ฉฐ (์˜์‹์ ์œผ๋กœ ๋‚˜๋ˆ ๋†“์€ ์š”์†Œ)
์ปดํฌ๋„ŒํŠธ๋Š” ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ์˜๋ฏธ ์žˆ๋Š” ์š”์†Œ์ž…๋‹ˆ๋‹ค. (์‹คํ–‰๋˜๋Š” ์š”์†Œ)

โ†’ ํ•˜์ง€๋งŒ JS์˜ ๋ชจ๋“ˆ์€ ์ง์ ‘ ๋Ÿฐํƒ€์ž„์— ์‹คํ–‰์ด ๋ฉ๋‹ˆ๋‹ค ๐Ÿ˜ฎ
โ†’ ์šฉ์–ด์˜ ์˜๋ฏธ๋งŒ ์ •ํ™•ํžˆ ํŒŒ์•…ํ•ด ๋†“์œผ๋ฉด ๋  ๋“ฏ!


[7-1] JS์—์„œ์˜ ๋ชจ๋“ˆ

  1. use strict(์—„๊ฒฉ ๋ชจ๋“œ) ์‹คํ–‰
    1. ์ผ๋ฐ˜ script์—์„œ๋Š” let์ด๋‚˜ var์„ ์ œ์™ธํ•˜๊ณ  ๋ณ€์ˆ˜ ์„ ์–ธ ๊ฐ€๋Šฅ(Global Scope ์ €์žฅ)
    2. ํ•˜์ง€๋งŒ ๋ชจ๋“ˆ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์ด๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  2. ์ž์ฒด์ ์ธ ๋ชจ๋“ˆ ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„
    1. import, export ํ•˜์ง€ ์•Š๋Š” ํ•œ ์„œ๋กœ ์ฐธ์กฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  3. ๋‹จ ํ•œ๋ฒˆ๋งŒ ํ‰๊ฐ€
    1. ํ•œ ํŒŒ์ผ์—์„œ 2๋ฒˆ ์ด์ƒ import ๋˜๋”๋ผ๋„, ์‹คํ–‰์€ ํ•œ๋ฒˆ๋งŒ!
  4. ์ง€์—ฐ ์‹คํ–‰
    1. ๋ชจ๋“  DOM์ด ๋งŒ๋“ค์–ด ์ง„ ํ›„์— ์‹คํ–‰์ด ๋ฉ๋‹ˆ๋‹ค.




[8] ์œ ๋‹ˆ์ฝ”๋“œ

์œ ๋‹ˆ์ฝ”๋“œ๋Š” ์™œ ์ƒ๊ฒผ์„๊นŒ์š”?

โ†’ ๋‹ค์–‘ํ•œ ๋‚˜๋ผ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ, ํ˜ธํ™˜์„ฑ ๋ฐ ํ™•์žฅ์„ฑ์— ๋ฌธ์ œ๋ฅผ ์ผ์œผ์ผฐ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

โ†’ ๋”ฐ๋ผ์„œ ์ „ ์„ธ๊ณ„ ๋ฌธ์ž๋ฅผ ์ปดํ“จํ„ฐ์—์„œ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ํ‘œ์ค€ ์‹œ์Šคํ…œ(=์œ ๋‹ˆ์ฝ”๋“œ)์ด ๋‚˜์™”์Šต๋‹ˆ๋‹ค.




[9] ์ •๊ทœํ‘œํ˜„์‹

์ •๊ทœํ‘œํ˜„์‹์„ ์ด์šฉํ•˜๋ฉด ํŒจํ„ด์„ ์ด์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ๋ฌธ์ž๋ฅผ ๊ฒ€์ƒ‰/๋Œ€์ฒด/์ถ”์ถœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ฑ๋Šฅ์€ ๋งค์šฐ ๋Š๋ฆฌ์ง€๋งŒ, ๋„ˆ๋ฌด ํŽธํ•ฉ๋‹ˆ๋‹ค.

์ •๊ทœ ํ‘œํ˜„์‹ ์—๋””ํ„ฐ : https://rubular.com/

Untitled 5

๐Ÿ˜ฃ ์‹ค์Šตํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

๋Œ€๋žต์ ์ธ ๋ฌธ๋ฒ•๋งŒ ์•Œ์•„๋‘๋ฉด ํ•ด๋‹น ์—๋””ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์‰ฝ๊ฒŒ ์ •๊ทœ ํ‘œํ˜„์‹์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


JS์—์„œ๋Š” RegExp ๊ฐ์ฒด๋กœ ์ •๊ทœ ํ‘œํ˜„์‹ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • test : ์ž…๋ ฅ๋ฐ›์€ ๋ฌธ์ž์—ด์— ์ฐพ๋Š” ํŒจํ„ด์ด ์žˆ๋Š”์ง€ ํ™•์ธ ํ›„, ์žˆ๋‹ค๋ฉด true / ์—†๋‹ค๋ฉด false
  • exec : ์ž…๋ ฅ๋ฐ›์€ ๋ฌธ์ž์—ด์— ์ฐพ๋Š” ํŒจํ„ด์ด ์žˆ๋Š”์ง€ ํ™•์ธ ํ›„, ์žˆ๋‹ค๋ฉด ํŒจํ„ด ์ •๋ณด(๋ฌธ์ž์—ด) / ์—†๋‹ค๋ฉด null
  • match : String ๊ฐ์ฒด์—์„œ์˜ exec ํ•จ์ˆ˜ (matchAll๋„ ์žˆ์–ด์š”)
  • replace : String ๊ฐ์ฒด์—์„œ ํŒจํ„ด์„ ์ฐพ์€ ํ›„, ์ผ์น˜ํ•œ ํŒจํ„ด ์ •๋ณด๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜
  • search : String ๊ฐ์ฒด์—์„œ ํŒจํ„ด์„ ์ฐพ์„ ํ›„, ์ผ์น˜ํ•œ ํŒจํ„ด ์ •๋ณด์˜ ์œ„์น˜ ๋ฐ˜ํ™˜
  • capture : () ๋กœ ๊ฐ์‹ธ๋ฉฐ ์‚ฌ์šฉ / match ๋ฐ˜ํ™˜๊ฐ’์˜ ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ์บก์ณ ๊ฒฐ๊ณผ ํฌํ•จ


[9-1] ๊ฐœ๋ฏธ ์ˆ˜์—ด ํ’€์–ด๋ณด๊ธฐ

โ†’ ๐Ÿ˜ฃ ํ‘ธ๋Š”์ค‘ ์ถ”๊ฐ€ ์˜ˆ์ •




[10] ์ฟ ํ‚ค์™€ ์„ธ์…˜, ์›น ์Šคํ† ๋ฆฌ์ง€

HTTP ํ†ต์‹ ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒํƒœ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (๋‹จ๋ฐœ์„ฑ)

๋”ฐ๋ผ์„œ ์„œ๋ฒ„๋Š” ์š”์ฒญ์ด ์–ด๋–ค ๋ธŒ๋ผ์šฐ์ €์—์„œ ์˜จ ๊ฒƒ์ธ์ง€ ์•Œ ์ˆ˜ ์—†๊ฒ ์ฃ .

์ด๋•Œ ํ—ค๋”์— ์ฟ ํ‚ค๋ฅผ ๋‹ด์œผ๋ฉด ์„œ๋ฒ„๊ฐ€ ์ฟ ํ‚ค๋ฅผ ์–ด๋””์„œ ์ฝ์–ด ์˜จ ๊ฒƒ์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


[10-1] ์ฟ ํ‚ค

์ฟ ํ‚ค๋Š” ํ”„๋ก ํŠธ์—”๋“œ(ํด๋ผ์ด์–ธํŠธ)์—์„œ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.

์„œ๋ฒ„์—์„œ Set-Cookie๋ฅผ Response ํ—ค๋”๋กœ ๋‚ด๋ ค์ฃผ๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฐ›์€ ๊ฐ’(Key-Value ํ˜•ํƒœ)์„ ํŒŒ์‹ฑํ•˜์—ฌ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ˜ฎ ์ฟ ํ‚ค์˜ ์˜ต์…˜

  • Expires : ์ฟ ํ‚ค ๋งŒ๋ฃŒ ๋‚ ์งœ ์ง€์ •
  • Secure : HTTPS์—์„œ๋งŒ ์ฟ ํ‚ค ์ „์†ก
  • HttpOnly : JS์—์„œ ์ฟ ํ‚ค์— ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ๋ง‰์Šต๋‹ˆ๋‹ค.
  • Max-Age : ์ฟ ํ‚ค ์ˆ˜๋ช…์„ ์ •ํ•ฉ๋‹ˆ๋‹ค. (Expires ๋ฌด์‹œ)
  • Domain : ๋„๋ฉ”์ธ์ด ์ผ์น˜ํ•˜๋Š” ์š”์ฒญ๋งŒ ์ฟ ํ‚ค๊ฐ€ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.
  • Path : ๊ฒฝ๋กœ์™€ ์ผ์น˜ํ•˜๋Š” ์š”์ฒญ๋งŒ ์ฟ ํ‚ค๊ฐ€ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.


ํ•˜์ง€๋งŒ ์ฟ ํ‚ค์—๋Š” ์—ฌ๋Ÿฌ ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • XSS(Cross-Site Script) ๊ณต๊ฒฉ์„ ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฟ ํ‚ค๋ฅผ ์•”ํ˜ธํ™”ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ, ์ค‘๊ฐ„์— ํƒˆ์ทจ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„์—์„œ๋Š” ์–ด๋–ค ํด๋ผ์ด์–ธํŠธ์—์„œ ์ฟ ํ‚ค๋ฅผ ๋ณด๋ƒˆ๋Š”์ง€(์ฟ ํ‚ค ์ฃผ์ธ์„) ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

XSS
JS๋ฅผ ์ด์šฉํ•ด ์•…์˜์ ์ธ ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ ์ฟ ํ‚ค ๊ฐ’ ํƒˆ์ทจ


[10-2] ์„ธ์…˜

์ฟ ํ‚ค์— HTTP ์„ธ์…˜ ID๋ฅผ ์‹๋ณ„์ž๋กœ ๋‹ด์•„ ์‚ฌ์šฉ์ž๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์„ธ์…˜์—๋Š” ์น˜๋ช…์ ์ธ ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์„ธ์…˜์€ ์„œ๋ฒ„์— ํŒŒ์ผ๋กœ ์ €์žฅ๋˜์–ด ๊ณผ๋ถ€ํ•˜๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„์˜ ์ˆ˜๊ฐ€ ๋งŽ๋‹ค๋ฉด, ์„ธ์…˜ ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.


๋”ฐ๋ผ์„œ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„ ์ธ์ฆ์€ ๋ณ„๋„ ํ† ํฐ์„ ์‚ฌ์šฉํ•˜๋ฉฐ
์ฟ ํ‚ค๋Š” ํด๋ผ์ด์–ธํŠธ ์ž์ฒด์ ์ธ ์ง€์†์ ์ธ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ์šฉ๋„๋กœ ๋งŽ์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.


[10-3] ์›น ์Šคํ† ๋ฆฌ์ง€

์ฟ ํ‚ค ๋Œ€์‹  ํด๋ผ์ด์–ธํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ์ƒˆ๋กœ์šด ๋ฐฉ๋ฒ•์ธ ์›น ์Šคํ† ๋ฆฌ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์›น ์Šคํ† ๋ฆฌ์ง€์—๋Š” ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์™€ ์„ธ์…˜ ์Šคํ† ๋ฆฌ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฟ ํ‚ค์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Key-Value ํ˜•ํƒœ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.


  • ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€

๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๊ฒฝ์šฐ, ๋ฐ˜์˜๊ตฌ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

  • ์„ธ์…˜ ์Šคํ† ๋ฆฌ์ง€

์ƒˆ ์ฐฝ์„ ์ƒ์„ฑํ•  ๋•Œ๋งˆ๋‹ค ๊ฐœ๋ณ„์ ์œผ๋กœ ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์™€ ๋‹ค๋ฅด๊ฒŒ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ซ๋Š” ์ˆœ๊ฐ„ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. (ํœ˜๋ฐœ์„ฑ)


[10-4] IndexedDB

ํŠธ๋ Œ์ ์…˜์ด ๊ฐ€๋Šฅํ•œ ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ž…๋‹ˆ๋‹ค.

IndexedDB๋Š” ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์กฐํ™”ํ•ด์„œ ์ €์žฅํ•˜๋Š”๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ ์„ฑ๋Šฅ์œผ๋กœ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.





์ถœ์ฒ˜

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

https://resilient-923.tistory.com/308

https://velog.io/@thms200/Event-Loop-์ด๋ฒคํŠธ-๋ฃจํ”„

https://developer.mozilla.org/ko/docs/Web/API/IndexedDB_API

์นดํ…Œ๊ณ ๋ฆฌ: ,

์—…๋ฐ์ดํŠธ:

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ