Skip to content

Latest commit

ย 

History

History
116 lines (99 loc) ยท 5.75 KB

JavaScript-full-stack08.md

File metadata and controls

116 lines (99 loc) ยท 5.75 KB

{ํ’€์Šคํƒ} JavaScript 8๊ฐ• - Strict mode/ESLint/Prettier/Built-in/SQL Injection/Faas/HTTP/UTF-8/Fragment

Strict mode

  • ์˜คํ•ด์˜ ์†Œ์ง€๊ฐ€ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋จ
  • ์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜ ์†์˜ this๋Š” ์ „์—ญ ๊ฐ์ฒด => ํ•จ์ˆ˜ ์†์—์„œ this ์‚ฌ์šฉ์‹œ error ๋ฐœ์ƒ (strict mode์—์„œ)
  • x = 1 ๋Š” ์ „์—ญ์œผ๋กœ ์žกํž˜ => ํ˜ธ์ด์ŠคํŒ… error ๋ฐœ์ƒ
    (๋ณ€์ˆ˜ ์•ž์— let/const ํ‚ค์›Œ๋“œ ๋ฌด์กฐ๊ฑด ์‚ฌ์šฉํ•˜์—ฌ์•ผ ํ•จ)
  • use strict;
  • ๊ฐ€๋” npm ๋˜๋Š” ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉํ•˜๋Š”๋ฐ strict mode ๊ฑธ์—ˆ๋”๋‹ˆ ์—๋Ÿฌ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
    • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋งŒ๋“  ํšŒ์‚ฌ๋กœ ์ด๋ฉ”์ผ ๋ณด๋‚ด์„œ ์ˆ˜์ • ์š”์ฒญ
  • ๋ฐ–์€ strict mode๊ฐ€ ์•„๋‹Œ๋ฐ ํ•จ์ˆ˜ ๋‚ด๋ถ€๋งŒ strict mode๋งŒ ์“ฐ๋ฉด ์•ˆ๋จ
    • ํ—ท๊ฐˆ๋ฆผ (์˜คํ•ด์˜ ์†Œ์ง€ ์žˆ์Œ)
  • ๋ฆฌ์•กํŠธ => App.jsx (์ œ์ผ ๋ฐ”๊นฅ ์ปดํฌ๋„ŒํŠธ์— React Strict Mode ๊ฑธ์Œ)
  • ์ตœ๊ทผ์€ Strict mode ์˜๋ฏธ๊ฐ€ ๋งŽ์ด ์—†์–ด์ง
    • ESLint, Prettier (VS Code extension)
      • ESLint; ๊ตฌ๋ฌธ ์˜ค๋ฅ˜, ์˜คํ•ด ์†Œ์ง€ ๋‹ค ์žก์•„์คŒ
      • Prettier; code format ๋ณด๊ธฐ ํŽธํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์คŒ

Built-in

  • ํ‘œ์ค€ ๋นŒํŠธ์ธ ๊ฐ์ฒด (์Šคํƒ ๋‹ค๋“œ ๋นŒํŠธ์ธ)
    • ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋†“์€ ๊ฒƒ
    • ECMAScript ์—์„œ ๋ฏธ๋ฆฌ ์ •์˜ํ•ด ๋†“์€ ๋ช…์„ธ
    • ๋ชจ๋“  JS์—์„œ ๋‹ค ๊ตฌ๋™๋จ
    • window, self, Infinity, NaN, isNaN, parseInt(), String, Number, Boolean ...
  • ํ˜ธ์ŠคํŠธ ๋นŒํŠธ์ธ ๊ฐ์ฒด (๋ธŒ๋ผ์šฐ์ € ๋นŒํŠธ์ธ)
    • DOM; element, style, document, ...
    • BOM (Browser Object Model); location, history, bookmark, ...
  • ์ปค์Šคํ…€ ๋นŒํŠธ์ธ ๊ฐ์ฒด (๋‚ด๊ฐ€ ๋งŒ๋“  ๋นŒํŠธ์ธ)
    • ex) JArray ์˜ swap ๋ฉ”์„œ๋“œ
  • eval('str')
    • ex) eval('const a = 1; console.log(a + 1);')
    • ;์€ ๋ฌธ์žฅ ๊ตฌ๋ถ„
    • node ํ™˜๊ฒฝ์—์„œ fs (file system) ์ ‘๊ทผ ๊ฐ€๋Šฅ, ํŠน์ • ๊ฒฝ๋กœ remove๋„ ๊ฐ€๋Šฅ
    • eval์€ ์œ„ํ—˜ํ•จ, ์–ด๋–ค ๋ฉด์—์„œ๋Š” ์‚ฌ์šฉ์„ฑ์ด ์ข‹์„ ์ˆ˜๋„ ์žˆ๊ธด ํ•จ
      • FaaS; cloud ํ™˜๊ฒฝ์—์„œ text area์— js ์ฝ”๋“œ ๋„ฃ์œผ๋ฉด API๋กœ ๋งŒ๋“ค์–ด์ง (ex. AWS Lambda)
      • eval๋กœ ์‹คํ–‰์‹œ์ผœ ๋†“์œผ๋ฉด ํ•จ์ˆ˜๊ฐ€ ์ƒ๊น€
        • ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์— ์กด์žฌํ•ด์„œ ํ˜ธ์ถœ ๊ฐ€๋Šฅ
      • eval ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ string์ด ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ๋˜๋ฒ„๋ฆผ
      • rule ๊ธฐ๋ฐ˜์œผ๋กœ ํ•จ์ˆ˜ ๋งŒ๋“ค์–ด์„œ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ์ธ์Šคํ„ด์Šค๋กœ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋‹ค ๋“ฑ ์ƒ๊ฐ ๊ฐ€๋Šฅ...
      • ์ฐธ๊ณ ) JAVA - ๋ฆฌํ”Œ๋ ‰์…˜
    • eval ์Šค์ฝ”ํ”„
      • strict mode์—์„œ๋Š” ์ € string ์œผ๋กœ ๋“ค์–ด๊ฐ€๋Š” ๋ถ€๋ถ„๋งŒ ๋”ฐ๋กœ ์žก์Œ (๋ณ„๋„์˜ ์Šค์ฝ”ํ”„)
      • ํ•จ์ˆ˜ ์†์˜ ๋ณ„๋„ ์Šค์ฝ”ํ”„๋กœ ์ธ์‹๋จ

HTTP

  • HTTP ๋ฉ”์„œ๋“œ
    • GET; ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์— ์ฃผ์†Œ ์ƒ์œผ๋กœ๋งŒ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ex) ?a=1&b=2 // node ์—์„œ๋Š” request.params ์œผ๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ
      • ๊ฒ‰์— ์“ฐ๋Š” ๊ฒƒ (ํŽธ์ง€ ๋ด‰ํˆฌ)
      • 1024 (http 1.0) ~ 4096 ๋ฐ”์ดํŠธ ์ดˆ๊ณผํ•˜๋ฉด ์•ˆ๋จ
      • ex) board/delete?id=1 ๋กœ get ์ด์šฉํ•ด์„œ ๋งŒ๋“ค๋ฉด ์œ„ํ—˜ (์•„๋ฌด๋‚˜ ๋‹ค ๋ถ€๋ฅผ ์ˆ˜ ์žˆ์Œ)
    • POST; ํŽธ์ง€์ง€ ์†์— ์“ฐ๋Š” ๊ฒƒ
      • ๋งŽ์€ ๋ฐ์ดํ„ฐ๋Š” ๋ฌด์กฐ๊ฑด post ์ด์šฉ (ํŒŒ์ผ ์—…๋กœ๋“œ ํฌํ•จ)
    • DELETE; ex) ๊ฒŒ์‹œ๊ธ€ 100๋ฒˆ ์‚ญ์ œํ•ด์ค˜~
      • ์ž‘์„ฑ์ž๋งŒ ์ง€์šธ ์ˆ˜ ์žˆ๋„๋ก ๋กœ๊ทธ์ธ ๋“ฑ ์ฒดํฌ...
        (์ž‘์„ฑ์ž์˜ id์™€ ์ง€์šฐ๋ ค๊ณ  ํ•˜๋Š” ๊ฒŒ์‹œ๊ธ€์˜ ์‚ฌ์šฉ์ž cookie ์ผ์น˜ํ•˜๋Š”์ง€ ์ฒดํฌ)
    • PUT; ์ˆ˜์ •
    • PATCH; ์ˆ˜์ •
    • OPTIONS; ์„œ๋ฒ„์—์„œ ์–ด๋–ค ๋ฉ”์„œ๋“œ ์ง€์›ํ•˜๋Š”์ง€ ์•Œ๋ ค์คŒ

UTF-8

  • URL ์ฃผ์†Œ์— ํ•œ๊ธ€ ์žˆ์œผ๋ฉด encoding ๋จ (๋ณต๋ถ™ํ–ˆ์„ ๋•Œ)
  • URL ์ฃผ์†Œ๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ํƒ€๊ณ  ๋‚ ๋ผ๊ฐ
  • ํ•œ๊ธ€์€ UTF-8๋กœ ์ธ์‹๋˜์„œ ํ•œ๊ธ€ 1๊ธ€์ž๋Š” 3๋ฐ”์ดํŠธ
    ์˜๋ฌธ, ์ˆซ์ž 1๋ฐ”์ดํŠธ, ํŠน์ˆ˜๋ฌธ์ž 2๋ฐ”์ดํŠธ, ์ผ๋ณธ์–ด 3๋ฐ”์ดํŠธ, ์ค‘๊ตญ์–ด 3๋ฐ”์ดํŠธ, ์ด๋ชจํ‹ฐ์ฝ˜ 3 or 4 ๋ฐ”์ดํŠธ
  • ์ธ์ฝ”๋”ฉ๋˜์„œ ์„œ๋ฒ„๋กœ ๋‚ ๋ผ๊ฐ€๋ฉด ์„œ๋ฒ„์—์„œ๋Š” ๋””์ฝ”๋”ฉํ•จ
    (express, flask ๋“ฑ ์„œ๋ฒ„ ํ”„๋ ˆ์ž„์›Œํฌ๋“ค์ด ๋””์ฝ”๋”ฉํ•ด์„œ ๋‚˜ํ•œํ…Œ ๋„˜๊ฒจ์คŒ)
  • https/http - ํ”„๋กœํ† ์ฝœ
  • www.naver.com - ๋„๋ฉ”์ธ
  • /board/ - path
  • :8080 - ํฌํŠธ
  • ?a=1 - ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง
  • URL ๋’ค์— # ๋ถ™์ผ ์ˆ˜ ์žˆ์Œ - ํ™”๋ฉด ์•ˆ ๋’ค์ง‘ํž˜ // ์‹ฑ๊ธ€ ํŽ˜์ด์ง€์—์„œ ๋ฐ”๋กœ ์Šคํฌ๋กค
    • ํ”„๋ž˜๊ทธ๋จผํŠธ

Fragment

  • ํ™”๋ฉด์ƒ์—์„œ ์Šคํฌ๋กค๋กœ ์ด๋™๋จ (a ํƒœ๊ทธ ๋งํฌ)
  • ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ๊ฐ€์ง€ ์•Š์Œ
  • ๋ฆฌ์•กํŠธ์—์„œ๋„ ํ”„๋ž˜๊ทธ๋จผํŠธ ์‚ฌ์šฉํ•จ, ํ•˜๋‚˜์˜ ์˜์—ญ (์œ„์น˜๋งŒ ์žก์•„์ฃผ๋Š” ๊ฒƒ)

[Note]

  • SQL Injection

    • ex) delete from User;
    • ์„œ๋ธŒ์ฟผ๋ฆฌ ์ฒ˜๋Ÿผ ์ฒ˜๋ฆฌ๋˜์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Œ
    • ํ˜„์žฌ๋Š” ๊ฐ’๋“ค์ด ๋‹ค ์ด์Šค์ผ€์ดํ”„ ์ฒ˜๋ฆฌ ๋˜์„œ ์ˆœ์ˆ˜ text๋กœ ์ธ์‹๋จ
  • OPTIONS ๋ฉ”์„œ๋“œ ์ฐธ๊ณ 

    • ํ˜„๋Œ€์นด๋“œ
    • PG ์‚ฌ (๊ฒฐ์ œ์‚ฌ) API ์„œ๋ฒ„ ์—ฐ๋™ํ•  ๋•Œ
      • ๋ธŒ๋ผ์šฐ์ € ๊ฒฐ์ œ์ฐฝ (ํŒ์—… - PG์‚ฌ์—์„œ ๋„์›Œ์คŒ, ๊ณ ๊ฐ์€ ์ƒ์  ID ๊ฐ€์ง€๊ณ  PG์‚ฌ์˜ ์ •ํ•ด์ง„ API๋งŒ ํ˜ธ์ถœํ–ˆ์„ ๋ฟ)
      • ์ƒ์  ID
      • ์™ธ๋ถ€์— ์žˆ๋Š” API ํ˜ธ์ถœํ•  ๋•Œ๋Š” api token, secret key, (server key <- for push to app) ํ•„์š”
      • server key๋Š” server๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ์Œ
      • token์€ ๊ธฐ๊ธฐ๋งˆ๋‹ค ์ •ํ•ด์ง
      • secret key๋Š” ์ƒ์  id ์•”ํ˜ธํ™”ํ•ด์„œ uniqueํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ
    • ์‚ฌ์šฉ์ž๊ฐ€ ์ธ์ฆ ๋‹คํ•˜๋ฉด ๊ทธ ๋ฐ์ดํ„ฐ๋Š” ์šฐ์„  PG์‚ฌ์˜ ์„œ๋ฒ„๊ฐ€ ๋ฐ›์Œ
      • ๋ธŒ๋ผ์šฐ์ € - PG์‚ฌ - ์ƒ์  ์„œ๋ฒ„ - PG์‚ฌ (์ƒ์  ์„œ๋ฒ„์—์„œ OK) - ์นด๋“œ์‚ฌ - PG์‚ฌ - ์ƒ์  ์„œ๋ฒ„ - ๊ณ ๊ฐ ๋ธŒ๋ผ์šฐ์ €๋กœ redirect
    • ๊ณ ๊ฐ PC ๋ธŒ๋ผ์šฐ์ € - PG ์‚ฌ์ด๋Š” HTTPS๊ฐ€ ์ง€์ผœ์คŒ (์•”ํ˜ธํ™”)
    • PG์‚ฌ๊ฐ€ ํ˜„๋Œ€์นด๋“œ๋กœ ๋ณด๋‚ด์„œ ํ˜„๋Œ€์นด๋“œ์—์„œ ์นด๋“œ ์Šน์ธ ๋‹ค ํ•˜๋ฉด (ํ˜„๋Œ€์‚ฌ์— ๋ณด์•ˆ๋ง ์žˆ์Œ)
    • PG์‚ฌ๊ฐ€ ๊ณ ๊ฐํ•œํ…Œ ์•Œ๋ ค์ค˜์•ผ ํ•˜๋Š”๋ฐ ๋ฐ”๋กœ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์Œ
    • ์ด๋ฏธ ์†Œ์Šค์ฝ”๋“œ ๋…ธ์ถœ๋œ ์ƒํƒœ์ž„ (๊ณ ๊ฐ - PG์‚ฌ)
    • ์Šน์ธ๋œ ๊ฒฐ๊ณผ๋Š” ์ƒ์  ์„œ๋ฒ„๋กœ ๋ณด๋ƒ„ (check api ์‚ฌ์ „ ๊ตฌํ˜„, ์Šน์ธ๋œ ๊ฒฐ๊ณผ db์— ์ €์žฅ ํ•„์š”, ๋ฌธ์ œ ์žˆ์œผ๋ฉด rejectํ•˜๊ณ  ๋ฐ˜๋ณต...)
    • ์ƒ์  ์„œ๋ฒ„์—์„œ๋Š” ๊ณ ๊ฐ ๋ธŒ๋ผ์šฐ์ €๋กœ redirect ํ•จ (๊ณ ๊ฐ ๋ธŒ๋ผ์šฐ์ €์™€ ์ƒ์  ์„œ๋ฒ„ ์‚ฌ์ด์— ์—ฐ๊ฒฐ ๊ณ ๋ฆฌ๊ฐ€ ์—†์Œ)
      • session ์•Œ๊ณ  ์žˆ์œผ๋ฉด ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Œ (๊ณ„์† ์„ธ์…˜ ๊ฐ€์ง€๊ณ  ๋‹ค๋‹˜)

Reference