Home TIL 2์ผ์ฐจ
Post
Cancel

TIL 2์ผ์ฐจ

๐ŸŽจํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

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

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„

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

๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š”์ง€ ์ปดํ“จํ„ฐ์—๊ฒŒ ๋ช…๋ น์„ ๋‚ด๋ฆฌ๋Š” ๋ฐฉ๋ฒ•

์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๋ฌด์—‡์„ ํ•ด๊ฒฐํ•ด์•ผ ํ• ์ง€์— ์ง‘์ค‘ํ•˜๊ณ  ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์€ ์ปดํ“จํ„ฐ์—๊ฒŒ ์œ„์ž„ํ•˜๋Š” ๋ฐฉ๋ฒ• (

ํ•จ์ˆ˜ํ˜• ํŒจ๋Ÿฌ๋‹ค์ž„

  • ๊ฐ์ฒด์ง€ํ–ฅ์€ ์ถ”์ƒํ™”์˜ ์ตœ์†Œ ๋‹จ์œ„๊ฐ€ ๊ฐ์ฒด์ธ ๊ฒƒ์ฒ˜๋Ÿผ ํ•จ์ˆ˜ํ˜•์€ ํ•จ์ˆ˜๊ฐ€ ์ตœ์†Œ ๋‹จ์œ„์ด๋‹ค. ๊ฐ์ฒด์ง€ํ–ฅ๋ณด๋‹ค ๋” ์ž‘์€ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ ์ง€๋ฏ€๋กœ ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’๋‹ค.
  • ๋ฐ์ดํ„ฐ์˜ ๋ถˆ๋ณ€์„ฑ์„ ์ง€ํ–ฅํ•˜๊ธฐ์— ๋™์ž‘์„ ์˜ˆ์ธกํ•˜๊ธฐ ์‰ฝ๊ณ  ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค. ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์“ฐ๋ ˆ๋“œ ๋“ฑ์„ ํ†ตํ•œ ๋™์‹œ์„ฑ ๋ฌธ์ œ๋„ ํ•ด๊ฒฐ๋œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.
  • ๊ฐ์ฒด์ง€ํ–ฅ์€ ์ œ์–ด ํ๋ฆ„(์ˆœ์ฐจ, ๋ถ„๊ธฐ, ๋ฐ˜๋ณต, ์ฐธ์กฐ) ์ „ํ™˜์„ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ๊ฐ„์ ‘์œผ๋กœ ํ†ต์ œํ•˜๊ณ  ํ•จ์ˆ˜ํ˜•์€ ๋ณ€์ˆ˜ ํ• ๋‹น์„ ํ†ต์ œํ•˜์—ฌ 4๊ฐ€์ง€ ์ œ์–ด ํ๋ฆ„์„ ํ†ต์ œํ•œ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

์žฅ์ 

  1. ์ƒํƒœ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๊ฐ€ ์—†๋‹ค.
  2. ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’๋‹ค.
  3. ์ฝ”๋“œ๊ฐ€ ์งง๊ณ  ๊ฐ„๊ฒฐํ•˜๋‹ค.

๋‹จ์ 

  1. ์ƒํƒœ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋– ํ•œ ํ˜„์ƒ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๋ณต์‚ฌํ•ด์„œ ์กฐ์ •ํ•ด์•ผ ๋  ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ ๋ฉ”๋ชจ๋ฆฌ๋„ ๋Š˜์–ด๋‚  ์ˆ˜ ์žˆ๋‹ค.
  2. ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’๋‹ค๋ฉด ์ž‘์€ ๋‹จ์œ„๋กœ ๋‚˜๋‰˜๊ฒŒ ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ์ž‘์€ ๋‹จ์œ„๊ฐ€ ๋งŽ์•„์ง€๋ฉด ์˜คํžˆ๋ ค ๋” ๋ณต์žกํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  3. ์ฝ”๋“œ๊ฐ€ ์งง๊ณ  ๊ฐ„๊ฒฐํ•ด์ง€๋ ค๋ฉด ๋งŽ์€ ์ˆ™๋ จ๋„๋ฅผ ์š”๊ตฌํ•œ๋‹ค.

๊ฐ•์ 

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ƒํƒœ๊ฐ€ ์—†๊ณ  ์žฌ๊ท€๋‚˜ ํŒŒ์ดํ”„๋ฅผ ํ†ตํ•ด ํ˜๋Ÿฌ๊ฐ€๋Š” Data Flow์—์„œ ๋ฐ์ดํ„ฐ์˜ ์ œ์–ด์—†์ด ํ•„์š”ํ•œ ํ•จ์ˆ˜๋งŒ ๊ฐ€์ง€๊ณ  ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•œ ๊ฐ•์ ์ด ์žˆ๋‹ค.

๋ฉ€ํ‹ฐ ํŒจ๋Ÿฌ๋‹ค์ž„

Javascript๋Š” ๋ฉ€ํ‹ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ตณ์ด ๊ฐ์ฒด์ง€ํ–ฅ๊ณผ ํ•จ์ˆ˜ํ˜•์œผ๋กœ ๋‚˜๋ˆŒ ํ•„์š”์—†์ด ๋‘˜ ๋‹ค ์“ฐ์ž!!


๐ŸŽ๊ฐ์ฒด์ง€ํ–ฅ๊ณผ ํ”„๋กœํ† ํƒ€์ž…

๊ฐ์ฒด๋ž€?

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

๊ฐ์ฒด ์ง€ํ–ฅ์ด๋ž€?

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

๊ฐ์ฒด์ง€ํ–ฅ์˜ ์–ธ์–ด์™€ ํŒจ๋Ÿฌ๋‹ค์ž„์— ๋Œ€ํ•œ ์˜คํ•ด

  • ๊ฐ์ฒด์ง€ํ–ฅ์€ ํŒจ๋Ÿฌ๋‹ค์ž„์ผ ๋ฟ ์–ธ์–ด์™€๋Š” ๊ด€๊ณ„๊ฐ€ ์—†๋‹ค. ํŒจ๋Ÿฌ๋‹ค์ž„โ‰ ์–ธ์–ด
  • ์–ธ์–ด๋Š” ์ง€ํ–ฅํ•˜๋Š” ๊ฒƒ์„ ์กฐ๊ธˆ ๋” ํŽธํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค„ ๋ฟ์ด๋‹ค.
  • ๋”ฐ๋ผ์„œ ํด๋ž˜์Šค๊ฐ€ ์—†๋Š” javascript, go, c ์–ธ์–ด๋กœ๋„ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํ”„๋กœํ† ํƒ€์ž…์„ ํ†ตํ•ด ๊ฐ์ฒด์ง€ํ–ฅ์„ ํ‘œํ˜„ํ•œ๋‹ค.

๊ฐ์ฒด์ง€ํ–ฅ์˜ ํŒจ๋Ÿฌ๋‹ค์ž„์— ์šฐ์œ„๊ฐ€ ์žˆ๋‹ค๋Š” ์˜คํ•ด

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

ํ”„๋กœํ†  ํƒ€์ž…(prototype)

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ฐ์ฒด๋Š” ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ์–ธ์–ด์ฒ˜๋Ÿผ ์†์„ฑ(Attribute)๊ณผ ํ–‰์œ„(Method)๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐฉ๋ฒ•์€ ๊ฐ์ฒด๋ฆฌํ„ฐ๋Ÿด, Object, ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ์„ธ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ฐ์ฒด๋กœ ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋Š” ์ด์™€ ๊ฐ™์ด ๋ฉ”๋ชจ๋ฆฌ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค.

ํ”„๋กœํ† ํƒ€์ž…

์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์†Œ๋“œ์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด prototype์„ ์‚ฌ์šฉํ•ด์„œ ํ•ด๊ฒฐํ•˜๋ฉด ๋œ๋‹ค.

ํ”„๋กœํ† ํƒ€์ž…

์ฒ˜์Œ console.log์— dog์™€ cat์—๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์‚ฌ๋ผ์ง€๊ฒŒ ๋˜๊ณ , prototype์œผ๋กœ ์„ ์–ธ๋˜์–ด Animal์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๋งํฌํ•˜๊ณ  ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

ํšจ์œจ์ ์œผ๋กœ ํ”„๋กœํ† ํƒ€์ž… ์„ค์ •ํ•˜๊ธฐ (์ƒ์† ํ‰๋‚ด ๋‚ด๊ธฐ)

  1. ๋ถ€๋ชจ ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ ํ”„๋กœํ† ํƒ€์ž… ํ•จ์ˆ˜ ์ •์˜ํ•˜๊ธฐ
  2. ๋ถ€๋ชจ์ƒ์„ฑ์ž๋ฅผ ๋นŒ๋ ค ์“ธ ์ˆ˜ ์žˆ๋‹ค.
  3. Object.create๋ฅผ ํ™œ์šฉํ•ด์„œ ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ์žฌํ™œ์šฉํ•œ๋‹ค.

๐Ÿงฐ๋ชจ๋“ˆ

์™œ ์ด๋ฆ„์ด ๋ชจ๋“ˆ์ผ๊นŒ?

JavaScript๋Š” ํŒŒ์ผ ํ•˜๋‚˜๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“ˆ์ด๋ผ ์ง€์—ˆ์„ ๊ฒƒ์ด๋ผ ์ถ”์ธก ์ œ๋Œ€๋กœ๋œ ๋ชจ๋“ˆ ์—ญํ• ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋””๋ ‰ํ† ๋ฆฌ ๋‹จ์œ„๋ฅผ ๋ชจ๋“ˆ ๊ฐœ๋…์— ๊ฐ€๊น๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

๋ชจ๋“ˆ vs ์ปดํฌ๋„ŒํŠธ

๋ชจ๋“ˆ์€ ์„ค๊ณ„ ์‹œ์ ์— ์˜๋ฏธ์žˆ๋Š” ์š”์†Œ, ์ปดํฌ๋„ŒํŠธ๋Š” ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ์˜๋ฏธ์žˆ๋Š” ์š”์†Œ

ํŠน์ง•

  1. ํ•ญ์ƒ use strict๋กœ ์‹คํ–‰๋œ๋‹ค.
  2. ๋ชจ๋“ˆ ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„๊ฐ€ ์žˆ๋‹ค.
  3. ๋‹จ ํ•œ๋ฒˆ๋งŒ ํ‰๊ฐ€ ๋œ๋‹ค. (ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰๋œ๋‹ค. ๋‹ค์‹œ ์‹คํ–‰ํ•œ๋‹ค๋ฉด ๋ฏธ๋ฆฌ ์„ ์–ธ๋œ ๊ฒƒ์„ ๊ฐ€์ ธ์˜ด)
  4. ์ผ๋ฐ˜ ์Šคํฌ๋ฆฝํŠธ๋Š” bodyํƒœ๊ทธ์— ๋„ฃ์„ ๊ฒฝ์šฐ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋˜์ง€๋งŒ ๋ชจ๋“ˆ์Šคํฌ๋ฆฝํŠธ๋Š” differ์˜ต์…˜์„ ๋„ฃ์ง€ ์•Š์•„๋„ ์ž๋™ ์ง€์—ฐ ์‹คํ–‰๋œ๋‹ค.

๐Ÿ“Ÿ์ด๋ฒคํŠธ ๋ฃจํ”„

Javascript๋Š” Single Thread๋กœ ๋™์ž‘ํ•œ๋‹ค. (Call Stack์€ ํ•˜๋‚˜๋งŒ ์กด์žฌ) ๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š”๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ? ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ๋‹ต์€ ๋ธŒ๋ผ์šฐ์ €์˜ ์ด๋ฒคํŠธ ๋ฃจํ”„ ๋•๋ถ„์ด๋‹ค. ์ด๋ฒคํŠธ๋ฃจํ”„๋Š” Javascript ์—”์ง„์— ํฌํ•จ๋˜์–ด์žˆ์ง€ ์•Š๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” Web APIs, Task Queue๊ฐ€ ์žˆ๊ณ , Javascript ์—”์ง„๊ณผ ํ•จ๊ป˜ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๋กœ ์ง„ํ–‰๋˜๋Š”๊ฒƒ์„ ์•Œ์ˆ˜์žˆ๋‹ค.


๐Ÿƒ์œ ๋‹ˆ์ฝ”๋“œ

  • ์œ ๋‹ˆ์ฝ”๋“œ๊ฐ€ ์—†์„ ๋•Œ๋„ ๊ฐ ๋‚˜๋ผ๋“ค์€ ์•Œ์•„์„œ ์ž๊ตญ ๋ฌธ์ž๋ฅผ ์ž˜ ํ‘œํ˜„ํ–ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ๋‹ค์–‘ํ•œ ๋‚˜๋ผ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ํ˜ธํ™˜์„ฑ ๋ฐ ํ™•์žฅ์„ฑ์— ๋ฌธ์ œ๋ฅผ ์ผ์œผ์ผฐ๋‹ค. ์‹ฌ์ง€์–ด ๊ฐ™์€ ๋ฌธ์ž์—ฌ๋„ ๊นจ์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.
  • ๊ฒฐ๊ตญ ์ „ ์„ธ๊ณ„ ๋ฌธ์ž๋ฅผ ์ปดํ“จํ„ฐ์—์„œ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“  ํ‘œ์ค€ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค์—ˆ๋‹ค.
  • ๋Œ€๋ถ€๋ถ„์˜ ๋ฌธ์ž๋ฅผ ํฌํ•จํ•˜์—ฌ ์ด๋ชจํ‹ฐ์ฝ˜๋„ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.
  • ์ฝ”๋“œ ํฌ์ธํŠธ ๋ฒ”์œ„ - 0x0 ~ 0X10FFFF(1114112๊ฐœ ๋ฌธ์ž)
  • Surrogate Pair ๋ฐฉ๋ฒ•์„ ์ด์šฉํ•ด 2๋ฐ”์ดํŠธ๋ณด๋‹ค ํฌ๊ฒŒ ์ง€์ •
  • ์œ ๋‹ˆ์ฝ”๋“œ CES - Code Point๊ฐ€ ์–ด๋–ค ๋‹จ์œ„๋กœ ์กฐํ•ฉ๋˜์–ด ์ธ์ฝ”๋”ฉ๋˜๋Š” ์ง€ ์ •์˜ํ•œ๊ฒƒ

๐Ÿ’พ์ฟ ํ‚ค์™€ ์„ธ์…˜, ์›น ์Šคํ† ๋ฆฌ์ง€

Http ํ†ต์‹ 

  • HTTP Request๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒํƒœ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Œ ๋”ฐ๋ผ์„œ ์„œ๋ฒ„๋Š” ์–ด๋–ค ๋ถ€๋ผ์šฐ์ €์—์„œ ์š”์ฒญ์ด ์˜จ ๊ฒƒ์ธ์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค.
  • ์ด๋•Œ ํ—ค๋”์— ์ฟ ํ‚ค๋ฅผ ๋‹ด์œผ๋ฉด ์„œ๋ฒ„๊ฐ€ ์ฟ ํ‚ค๋ฅผ ์ฝ์–ด ์–ด๋””์„œ ์˜จ ๊ฒƒ์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ์—์„œ ์ €์žฅ, ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋“ค. ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ซ์•„๋„ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. ์„œ๋ฒ„์—์„œ Set-Cookie๋ฅผ ์‘๋‹ต ํ—ค๋”๋กœ ๋‚ด๋ ค์ฃผ๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฐ›์•„์„œ ์ €์žฅํ•œ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ์—์„œ ์ž์ฒด์ ์œผ๋กœ ์กฐ์ž‘ ๊ฐ€๋Šฅ, ๊ฐ ์ƒํƒœ์— ์ˆ˜๋ช…์„ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ‚ค: ๊ฐ’ ์˜ต์…˜
  • ์‘๋‹ตํ—ค๋”์— ๋‹ด์œผ๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•Œ์•„์„œ ์ €์žฅํ•œ๋‹ค.
  • ๊ฐ ๋ฐ์ดํ„ฐ์—” ์—ฌ๋Ÿฌ ์˜ต์…˜์ด ์กด์žฌ Expires: ์ฟ ํ‚ค ๋งŒ๋ฃŒ ๋‚ ์งœ๋ฅผ ์ง€์ •ํ•œ๋‹ค. Secure: HTTPS์—์„œ๋งŒ ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•œ๋‹ค. HTTPOnly: ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ฟ ํ‚ค์— ์ ‘๊ทผ ๋ชปํ•˜๋„๋ก ๋ง‰๋Š”๋‹ค. Max-Age: ์ฟ ํ‚ค ์ˆ˜๋ช…์„ ์ •ํ•œ๋‹ค. ์ด๋•Œ Expires๋Š” ๋ฌด์‹œ๋œ๋‹ค.

์ฟ ํ‚ค์˜ ์ทจ์•ฝ์ 

  • XSS๊ณต๊ฒฉ์„ ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.
  • javascript๋ฅผ ์ด์šฉํ•ด ์•…์˜์ ์ธ ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ ์ฟ ํ‚ค๊ฐ’์„ ํƒˆ์ทจ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ฟ ํ‚ค๋ฅผ ์•”ํ˜ธํ™”ํ•˜์ง€ ์•Š๊ณ  ๋ณด๋‚ด๋ฉด ์ฟ ํ‚ค๊ฐ’์„ ์ค‘๊ฐ„์— ํƒˆ์ทจ ๋‹นํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด HTTPS๊ฐ€ ์žˆ์Œ

ํ•˜์ง€๋งŒ ์„œ๋ฒ„๋Š” ์•„๋ฌด๋ฆฌ ์˜ฌ๋ฐ”๋ฅธ ์ฟ ํ‚ค๊ฐ’์„ ๋ณด๋‚ด๋„ ์ •ํ™•ํ•œ ์‚ฌ์šฉ์ž๋ฅผ ๋ชจ๋ฆ„ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ๊ฒƒ์€ Session

Session

  • HTTP Session id๋ฅผ ์‹๋ณ„์ž๋กœ ์‚ฌ์šฉ์ž๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๋Š” HTTP Session Id๋ฅผ ์ฟ ํ‚คํ˜•ํƒœ๋กœ ์ €์žฅํ•œ๋‹ค.
  • ์„œ๋ฒ„ ์ž์ฒด์ ์œผ๋กœ ๊ธฐ๋กํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค.
  • ์„ธ์…˜์˜ ๋ฌธ์ œ์  ์„ธ์…˜์€ ์„œ๋ฒ„์— ํŒŒ์ผ๋กœ ์ €์žฅ๋œ๋‹ค. ๋งŒ์•ฝ ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์•„์ง„๋‹ค๋ฉด? ์„œ๋ฒ„ํ„ฐ์ง ๋งŒ์•ฝ ์„œ๋ฒ„๊ฐ€ 2๊ฐœ๋ผ๋ฉด ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•ด์•ผ๋ ๊นŒ..?

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

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

  • ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฉด ๋ฐ˜์˜๊ตฌ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ๋‹ค.
  • ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ข…๋ฃŒํ•ด๋„ ๊ณ„์†ํ•ด์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚จ๋Š”๋‹ค.
  • ์ €์žฅํ–ˆ๋˜ ๋„๋ฉ”์ธ๊ณผ ์ด์šฉํ•˜๋Š” ๋„๋ฉ”์ธ์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—” ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.
  • ์ฟ ํ‚ค์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Key-Value ํ˜•ํƒœ๋กœ ์ €์žฅํ•œ๋‹ค.

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

  • ์ƒˆ ์ฐฝ์„ ์ƒ์„ฑํ•  ๋•Œ๋งˆ๋‹ค ๊ฐœ๋ณ„์ ์œผ๋กœ ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.
  • ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ซ๋Š” ์ˆœ๊ฐ„ ์‚ฌ๋ผ์ง„๋‹ค.
  • ๊ฐ™์€ ๋„๋ฉ”์ธ์ด์–ด๋„ ์„ธ์…˜์ด ๋‹ค๋ฅด๋ฉด ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.
  • ์ฟ ํ‚ค์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Key-Value ํ˜•ํƒœ๋กœ ์ €์žฅํ•œ๋‹ค.

๐Ÿš‘๊นจ๋‹ฌ์€ ์ 

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋ฐฐ์šฐ๊ธฐ ์ „์— ํŒจ๋Ÿฌ๋‹ค์ž„์— ๋Œ€ํ•ด ์•Œ๊ฒŒ ๋˜๊ณ , ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ( ์ ˆ์ฐจํ˜•, ๊ฐ์ฒด์ง€ํ–ฅํ˜•) ๋Œ€ํ•ด ๋‹ค๋ฅธ ์ ์€ ๋ฌด์—‡์ธ์ง€ ์ƒ๊ฐํ•˜๊ฒŒ ๋๋‹ค. ์ถ”ํ›„ ํ•จ์ˆ˜ํ˜•, ์ ˆ์ฐจํ˜•, ๊ฐ์ฒด์ง€ํ–ฅํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•œ ๋น„๊ต๋ฅผ ํฌ์ŠคํŒ…ํ•˜๊ณ  ์‹ถ์–ด์กŒ๋‹ค.

MDN์ด๋‚˜ ์ฝ”๋”ฉ์„ ํ•˜๋ฉด์„œ ๊ฐ์ฒด๋ฅผ console.log๋ฅผ ์ฐ์–ด๋ณด๋ฉด ๋‚˜์˜ค๋˜ prototype์— ๋Œ€ํ•ด ๊ณต๋ถ€๋ฅผ ํ•˜๊ฒŒ ๋˜์–ด ๊ฒ์ด ๋‚ฌ์—ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ํ•ญ์ƒ ๋ชจ๋ฅด๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฒˆ์—๋„ ๋ชจ๋ฅผ ๊ฒƒ์ด๋ผ๋Š” ๋‘๋ ค์›€์ด ๋” ์ปธ์ง€๋งŒ ๊ฐ•์‚ฌ๋‹˜๊ณผ ํ•จ๊ป˜ ์ฐจ๊ทผ์ฐจ๊ทผ ๊ณต๋ถ€ํ•˜๊ฒŒ ๋๊ณ  prototype์˜ ์ „๋ฐ˜์ ์ธ ์ดํ•ด์™€ ์™œ ํ•„์š”ํ•œ์ง€๋ฅผ ์•Œ์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ๋„ ๊นŠ์ด ๊ณต๋ถ€ํ•˜๊ณ  ์‹ถ์–ด์กŒ๋‹ค.

๋ชจ๋“ˆ์€ node js๋ฅผ ํ™œ์šฉํ•˜๋ฉด์„œ ๋งŽ์ด ์ ‘ํ–ˆ์ง€๋งŒ ์ง€์—ฐ ์‹คํ–‰ ๋œ๋‹ค๋Š” ์ ๊ณผ ๋””๋ ‰ํ† ๋ฆฌ ๋‹จ์œ„๋กœ ๋ฌถ๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์–ด ์ƒˆ๋กœ์šด ๊ฒฝํ—˜์„ ํ•˜๊ฒŒ ๋๋‹ค.

์ด๋ฒคํŠธ๋ฃจํ”„์— ๋Œ€ํ•ด์„œ๋Š” ๋‚˜์ค‘์— ํฌ์ŠคํŒ… ํ•˜๋Š”๊ฑธ๋กœ..๐Ÿ’ซ

์œ ๋‹ˆ์ฝ”๋“œ์— ๋Œ€ํ•ด ๋งŽ์ด๋Š” ๋“ค์–ด๋ดค์ง€๋งŒ ์ด๋ ‡๊ฒŒ ํ•˜๋‚˜ํ•˜๋‚˜ ์ชผ๊ฐœ์„œ ๊ฐ•์˜๋ฅผ ๋“ค์–ด๋ณธ ๊ฑฐ๋Š” ์ฒ˜์Œ..! ๊ทธ๋ž˜์„œ ์ต์ˆ™์น˜ ์•Š์•˜์ง€๋งŒ ๋„“์€ ๊ด€์ ์—์„œ๋Š” ์•Œ์•„๋“ค์„ ์ˆ˜ ์žˆ๊ฒŒ ์ดํ•ดํ•˜๊ฒŒ ๋๋‹ค.

์›น๋ธŒ๋ผ์šฐ์ €์— ๋Œ€ํ•ด ์ „๋ฐ˜์ ์ธ ์ €์žฅ์†Œ๋ฅผ ์•Œ๊ฒŒ ๋๊ณ , ํ•„์š”ํ•œ ์ด์œ ์™€ ์ทจ์•ฝ์ ๊ณผ ํ•ด๊ฒฐ๋ฒ•์„ ์•Œ๊ฒŒ ๋๋‹ค.

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ: https://mangkyu.tistory.com/111

-- Missing configuration options! --

TIL 1์ผ์ฐจ

TIL 3์ผ์ฐจ