U E D R , A S I H C RSS

Zero Page_200_OK/note


  • ๊ฐ•˜ …ธŠธŠ” ‚ งœ‚˜ š”ผ ณ„กœ ๊ตฌถ„•˜€ •Š๊ณ  ฐ ฃผ œณ„กœ ถ„ฆฌ•  ƒ๊ฐž…‹ˆ‹ค. ๊ทธ ‡๊ฒŒ •˜Š” Žธ ‚˜ค‘— ฐพ•„๊ธฐ— ข‹„๊ฒƒ ๊ฐ™Šต‹ˆ‹ค -•ˆ˜€
  •  €˜ ฃผ๊€ ธ €ถ„ งŽ “ค– ๊ฐˆˆ˜ žˆœผ€กœ €กฑ•˜‹ค ƒ๊ฐ˜Š” €ถ„€ ฑ„›Œฃผ„ธš”.
  • ๊ฐ•˜ …ธŠธŠ” ๊ฐ™ งŒ“ค– ‚˜๊ฐ€Š” ๊ฒƒ€กœ ‘“ค •จ๊˜ ฑ„›Œ‚˜๊ฐ‘‹œ‹ค.

1. HTTP

1.1. HTTP Method

1.1.1. POST

  • uploder—๊ฒŒ ฆฌ†ŒŠคฅผ ˜ฌ•Œ ‚ฌšฉ ฃผกœ ƒˆ๊ธ€„ “ธ•Œ งŽ ‚ฌšฉ•œ‹ค.

1.1.2. PUT

  • resource— ‚ฌšฉ ๊ทธ url— ”ฑ ˜ฌผ๊ฐˆ •Œ “‹ค. ฃผกœ ˆ˜ •— ‚ฌšฉœ‹ค ฏธ IDฅผ •Œ๊ณ  žˆœผ€กœ.

2. JavaScriptž€?


2.1. Prototype ๊ธฐฐ˜ –ธ–

  • prototype–ธ–?
    • oop˜ ฆ„€ class™€ prototypeœผกœ ‚˜Šฐ‹ค.
    • prototype€ ž˜Šค๊ฐ€ “ค๊ณ  žˆ–••˜Š” •ˆ˜“ค„ Šน • ธŠค„Šค๊ฐ€ “ค๊ณ  žˆ๊ฒŒ งŒ“œŠ” ๊ฒƒ‹ค.
    •  Šน • ธŠค„Šคฅผ prototypeผ €ฅธ‹ค.

2.2. •ˆ˜˜• –ธ–

  • •ˆ˜ฅผ ผ๊ธ‰๊ฐกœ ‹คฃจŠ” –ธ–
    • ผ๊ธ‰๊ฐž€?
      • €ˆ˜ •ˆ— ‹„ˆ˜ žˆ๊ณ ,
      • ŒŒผฏธ„ฐกœ  „‹ฌ• ˆ˜ žˆœผฉฐ,
      • ฐ˜™˜๊ฐ’„ ‚ฌšฉ• ˆ˜ žˆ๊ณ 
      • • ‹นœฆ„๊ณผ ๊€๊ณ„—† ๊ตฌถ„• ˆ˜ žˆ‹ค
  • •ˆ˜ฅผ งˆน˜ ผฐ˜ ธ ธŠค„Šคฒ˜Ÿผ ‹คฃจŠ” –ธ–

3. Javascript ฌธ•


3.1. กœ ธ

  • กœ ธ : ‚€˜ žˆŠ” ™€— žˆŠ” •ˆ˜˜ €—ญ €ˆ˜ฅผ “ธˆ˜ žˆŠ”๊ฒƒ. •Œฌธ— ˜„•˜€ •Š€ ๊ฒฐ๊ณผฅผ ๊ฐ€ ธ˜ฌˆ˜ žˆ‹ค.
    ˜ˆ‹œถ”๊ฐ€ฐ”žŒ

3.2. Excuteion Context

  • this
    • p.do() —„œ p๊ฐ€ ‹ค–‰ฌธงฅ‹ค. ๊ทธŸฌ‚˜  •ˆ˜ฅผ€ˆ˜กœ ฐ›œผ var f = p.do; f(); Ÿฐ‹œผกœ ๊ทธŸฌ fŠ” ‹ค–‰ฌธงฅ —†๊ธฐ •Œฌธ—  „—ญ๊ฐ๊ฐ€ ‹ค–‰ฌธงฅœผกœ ๊ฐ„ฃผœ‹ค.
  • ๊ฒฐก  œผกœ •ˆ˜ •ž งˆ€ง‰ . •ž— žˆŠ” ๊ฒƒ ค‘š”•˜‹ค.
  • func.apply(ec, arguments) ‚˜ func.call(ec, arg1, arg2, ... )œผกœ func•ˆ—„œ˜ ‹ค–‰ฌธงฅ(this)ฅผ …‹œ œผกœ €๊ฒฝ• ˆ˜ žˆ‹ค.

3.3. new˜ ™ž‘

  • new Person();
    • 1. create instance
    • 2. instance.proto = Person.prototype;
      • •Œ˜ protoŠ” ”„กœ† ƒ€ž… ธผ • ˆ˜žˆ‹ค.(—”ง„ณ„กœ ‹คฅผˆ˜ žˆ‹ค.)
    • 3. ‹ค–‰ฌธงฅ„ instanceกœ •œ ƒ„ฑžฅผ ˜ธถœ•œ‹ค.

3.4. prototype


3.4.1. Class vs Prototype

  • Class : •ˆ˜™€ ฒ„ €ˆ˜๊ฐ€ ๊ฐ๊ฐ class™€ ธŠค„Šค— ‚˜ˆ„–  ธžˆŠ”๊ฒƒ.
  • prototype : •ˆ˜™€ ฒ„ €ˆ˜ ‘ ธŠค„Šค—  €žฅ˜žˆŠ”๊ฒƒ
    • ‹จ€ •ˆ˜Š” ‹คฅธ ธŠค„Šค— žฌ•œ‹ค.
    • ๊ทธ ‹คฅธ ธŠค„ŠคŠ” prototypeผ €ฅธ‹ค.
      class <-----------------> prototype
      VTable <-----------------> prototype chain (proto)

3.4.2. dispatch

  • ‹ค œ ˜ธถœ•••˜Š” •ˆ˜ฅผ ฐพŠ” ๊ณผ •
  • javascript—„œŠ” ‹ค–‰‹œ๊ฐ„— ”„กœ† ƒ€ž… ธ— ˜• ‹ค–‰•œ‹ค.
    • instance˜ proto—„œ ฐพ๊ณ  —†œผ ๊ทธœ„— proto—„œ ฐพ๊ณ ...
  • ฝ”“œกœ ‚˜ƒ€‚..

for (var _proto = a; _proto; _proto = _proto.__proto__)
{
    if (("f" in _proto) && typeof _proto["f"] === "function")
        _proto["f"].apply(a, arguments]);
}
  • žฐ”ŠคฌฆฝŠธŠ” •ˆ˜™€ ผฐ˜ €ˆ˜™€˜ ๊ตฌถ„ —†๊ธฐ•Œฌธ— €ˆ˜ ˜•œ dispatch๊ฐ€ œ‹ค.

3.4.3. ƒ†

  • ƒ†„ œ„•„œŠ” prototype chain— “ฑก•˜ œ‹ค.

function People(){};
function Man(){};
Man.prototype = new People();
m = new Man();

3.5. same origin policy

  • žฐ” ŠคฌฆฝŠธ—„œŠ” XSSฅผ ง‰๊ธฐ(?)œ„• ™ผ•œ „ฉ”ธ •„‹ˆ javascriptฌธงฅ—  ‘๊ทผ• ˆ˜ —†‹ค.
  • iframe‚˜ XHRš”ฒญ€ ๊ฒƒ˜  šฉ„ ฐ›Š”‹ค.
  • document.domain „ กฐ ••œผกœจ ™ผ•œ „ฉ”ธ˜ ฒ”œ„ฅผ ฐ”๊ฟ€ˆ˜ žˆ‹ค.
    • wiki.zeropage.org ™€ www.zeropage.org ฅผ ™ผ•œ „ฉ”ธœผกœ ทจ๊ธ‰•˜๊ธฐ œ„• document.domain„ zeropage.orgกœ „ค •• ˆ˜ žˆ‹ค.
    • ‹จ, ๊ฒƒ„ •˜œ„ „ฉ”ธ. •ž—„œ €„ฐงŒ งœฅผˆ˜ žˆœผฉฐ ™Š” ๊ฒƒ€ —ˆšฉ˜€ •ŠŠ”‹ค.

3.5.1. Same Origin Policyฅผ ๊ทนณต•˜๊ธฐ œ„•œ ฐฉ•

  • proxy
    • ‹คฅธ „ฉ”ธ—  ‘๊ทผ•˜๊ธฐ œ„• ™ผ „ฉ”ธ „œฒ„— ‹คฅธ Ž˜€˜ ๊ฒฐ๊ณผฅผ ๊ทธŒ€กœ ฝ–™€ ‚ คฃผŠ” proxyฅผ „คน˜•œ‹ค.
    • €•˜๊ฐ€ งŽ ๊ฑธฆฌ๊ณ (š”ฒญงˆ‹ค „œฒ„— š”ฒญ„ ‚๊ณ  ๊ทธ๊ฑธ ‹ค‹œ ‚ คฃผ€กœ „คŠธ›Œฌ น„šฉฐ ๊ธฐƒ€ น„šฉ ฆ๊ฐ€)
    • ธฆ ฌธ œ๊ฐ€ ๊ฑธ๊ฒฝšฐ •ˆ •™” ˆ˜ žˆ‹ค.
  • Image
    • ›ž˜ same origin policyฅผ  šฉฐ›€ •ŠŒœผกœ ๊ทนณต• ˆ˜ žˆœผ‚˜ ฐ”„ˆฆฌ€กœ • ‹œ‹นˆ šฐฆฌ๊ฐ€ “ธˆ˜ —†‹ค.
  • Ifreame
    • ‚€—„œ ‹คฅธ žฐ”ŠคฌฆฝŠธ ฝ”“œ๊ฐ€ ž‘™• ˆ˜ žˆœผ‚˜ ‹คฅธ „ฉ”ธผ  ‘๊ทผ ถˆ๊ฐ€•˜‹ค.
    • ”Œž˜‰ฌกœ ๊ทนณต• ˆ˜ žˆœผ‚˜ ผ–ธŠธ— €•˜๊ฐ€ žˆ๊ณ  žฐ”ŠคฌฆฝŠธ ๊ณ œ •œ ฐฉ‹œผกœ •๊ฒฐ•˜Š”๊ฒƒ •„‹ˆผ„œ ข‹€•Š‹ค.
  • Script tag
    • Same origin policyฅผ  šฉฐ›€ •Š๊ณ  žฐ”ŠคฌฆฝŠธฅผ ถˆŸฌ˜ฌˆ˜ žˆœผ‚˜ ฐ”กœ ‹ค–‰ ˜€กœ ‹คฅธ ฐฉ‹„ จ••œ‹ค.
    • script tagฅผ ฝ– กœ”ฉ ‚˜ ฐ”กœ ‹ค–‰ •˜๊ธฐ •Œฌธ— —ฌŸฌ๊ฐœฅผ ™‹œ— ถˆŸฌ˜ฌ๊ฒฝšฐ  „—ญ€ˆ˜ฅผ šฉ•œ ฐฉ‹€ ถˆ๊ฐ€.
    • ”ฐผ„œ callback•ˆ˜กœ •๊ฒฐ•œ‹ค.
    • •Œ ‚ คค„ ‘‹ต€ JSON๊ณผŠ” กฐ๊ธˆ ‹ค‹ค.

__callback({ "json" : "data"});
  • œ„™€ ๊ฐ™€ ˜•‹œผกœ ‚ คค„๊ฒฝšฐ ผ–ธŠธ(š”ฒญ•œ ฝ)—„œ _callback•ˆ˜งŒ  •˜•‘ กœ”ฉ ‚จ๊ณผ ™‹œ— ถˆฆฌ๊ฒŒ œ‹ค.
  •  ‘‹ต€ งˆน˜ JSON— •ˆ˜งŒ ๊ฐ‹ผ˜•‹๊ธฐ –„ฌธ— JSON with Padding, JSONPผ €ฅธ‹ค.

4. server


4.1. ข…ฅ˜

  • Apache http server (httpd)
    • „ฆฌ “ฐ๊ณ  žˆŠ” „œฒ„๊ณ  ๊ฐ€žฅ •ˆ „„ฑ ›ฐ–‚˜‹ค.
  • IIS
    • windows —„œ “ฐ๊ณ  —ญ‹œ •ˆ •„ฑ ›ฐ–‚˜๊ณ  GUI๊€ฆฌ๊ฐ€ ๊ฐ€Šฅ•˜‹ค.
  • lighttpd
    • event driven ฐฉ‹˜ „œฒ„
  • nginx
    • evnet driven ฐฉ‹ฉฐ nodejs •Œฌธ— œ …•กŒ‹ค.

4.2. ˆ๊ธฐ˜ ›น„œฒ„

  • static •œ ŒŒผ„ ‚ ค€‹ค.
  • ™•žฅžฅผ ŒŒ•…•„œ ˜Š” ŒŒผ˜ —ค”ฅผ ฝ– งžŠ” MIME TYPEฅผ —ค”—  –€‹ค.
  • static •œ ŒŒผ„ —…กœ“œ ฐ›Š”‹ค.

4.3. กฐ๊ธˆ ‚˜€ ›น„œฒ„

  • ญ”๊ฐ€ ‹ค‚˜ฏน•˜๊ฒŒ งŒ“ค–ž.

4.3.1. Unix File

  • Unix—„œ Fileผ•€ ‹คŒ„ ‘ ˜ฏธ•œ‹ค.
    • šฐฆฌ๊ฐ€ •Œ๊ณ  žˆŠ” ๊ทธ ŒŒผ (Process - Disk)
    • ”„กœ„ธŠค๊ฐ„ †ต‹ — ‚ฌšฉ˜Š” Pipe
    • ›๊ฒฉ จธ‹ — žฌ•˜Š” ”„กœ„ธŠค™€ †ต‹ •˜Š” Socket
    • ๊ธฐ๊ณ„žฅน˜™€ †ต‹ •˜Š” “œผฒ„
  • UnixŠ” Cž„—„ ถˆ๊ตฌ•˜๊ณ  ๊ฐ• ฅ•œ ถ”ƒ™”ฅผ †ต• ญ”๊ฐ€ฅผ ฝ๊ณ  “ฐŠ” ๊ฒƒœผกœ File„ งŒ“ค—ˆ‹ค.
  • งˆน˜ ‹คŒ๊ณผ ๊ฐ™€ А‚Œ‹ค.

FILE f = new Pipe();

4.3.2. CGI

  • Common Gateway Interface
  • Unix—„œŠ” Pipe„ File€กœ static•œ file Œ€‹  Pipeฅผ “ฐ ญ”๊ฐ€ ‹ค‚˜ฏน•œ๊ฒŒ ˜€•Š„๊นŒ?
  • ›น„œฒ„Š” ‘๊ณ  ๊ฑฐ๊ธฐ— ‹คฅธ ”„กœ„ธŠคฅผ ‹ค–‰•„œ ๊ทธ ‹ค–‰ ๊ฒฐ๊ณผฅผ ฝ–“คž.
  • •Œ˜ ๊ทœ•„ CGIผ €ฅธ‹ค.
    • standard Input—Š” request body„ €‹ค.
    • standard Output—Š” response bodyฅผ „˜๊ธ‹ค.
    • ๊ทธ™— ๊ธฐƒ€ “ฑ“ฑ˜  •Š” ™˜๊ฒฝ€ˆ˜กœ „˜๊ธ‹ค.
  • ‘œ€€ RFC3875ฉฐ IETF—„œ ๊€ฆฌ•œ‹ค.
  • งค ‹ค–‰‹œงˆ‹ค ƒˆกœš ”„กœ„ธŠคฅผ ƒ„ฑ•˜๊ธฐ•Œฌธ— ฉ”ฆฌ †Œจ๊ฐ€ ‹ฌ•˜๊ณ  disk ‘๊ทผ งŽ‹ค.

4.4. €œฐฎ€ ›น „œฒ„

  • ƒˆกœš ”„กœ„ธŠคฅผ งŒ“œŠ” น„šฉ„ ค„—ฌž.
  • ๊ณตšฉผธŒŸฌฆฌŠ” ”„กœ„ธŠค๊ฐ€ ‹ค–‰ •Œ •œฒˆงŒ ถˆŸฌ™€ง„‹ค.
    • ISAPI(ISS) : DLLšฉ)
    • mod (apache : sošฉ)
  • ˜„žฌ ๊ฐ€žฅ งŽ ‚ฌšฉ˜Š” ฐฉ‹
  • process per request ฐฉ‹–„œ fork น„šฉ€ —ฌ „žˆ žฌ•˜๊ณ  š”ฒญงˆ‹ค ฉ”ฆฌฅผ งŽ จนŠ”‹ค.
  • •˜€งŒ “ˆ„ š”ฒญงˆ‹ค ””Šคฌ—„œ ฝ€ •Š๊ธฐ •Œฌธ— กฐ๊ธˆ€ ‚˜•„กŒ‹ค.

4.5. งŽœฐฎ€ ›น„œฒ„

  • forkน„šฉ„ —†• ž
  • ‹ต€ Thread

4.5.1. MPM

  • fork•˜Š” €ถ„„ moduleกœ งŒ“ค– —ฌŸฌ ฐฉ‹„ „ ƒ• ˆ˜ žˆ‹ค.
  • fork Œ€‹  Threadฅผ “ธˆ˜„ žˆ๊ณ  š˜ œณ„กœ ‹คฅธ ฐฉ‹„ “ธˆ˜„ žˆ๊ณ  forkฅผ ๊ทธŒ€กœ “ธˆ˜„ žˆ‹ค.
  • ๊ธฐ— •˜˜ ฐฉ‹€ pre-forkฐฉ‹
  • mpm-worker ฐฉ‹€ ”„กœ„ธŠค Œ€‹ — “ฐ ˆ“œฅผ “ฐŠ” ฐฉ‹‹ค.
    • •˜‚˜˜ ”„กœ„ธŠค— —ฌŸฌ๊ฐœ˜ “ฐ ˆ“œฅผ งŒ“ค– Œ€๊ธฐ•˜‹ค๊ฐ€ š”ฒญ ˜ค •˜‚˜”ฉ Œ€‘•˜Š” ฐฉ‹
    • thread per request ฐฉ‹
    • ‹คงŒ “ˆ Thread•ˆ „•••œ‹ค.
  • —ฌ „žˆ CPU ž›„ งŽ “‹ค.
  • Servlet„ ๊ฐ™€ ฐฉ‹‹ค.
  • context switch๊ฐ€ งŽ ผ–‚˜„œ šจœจ € •Š๊ณ  ‰๊ท  ‘‹ต‹œ๊ฐ„ ๊ธธ–ง„‹ค.

4.5.2. MPM + Queue

  • ฅผ งŒ“ค–„œ context switchน„šฉ„ ค„—ฌ ค๊ณ  …ธ ฅ–ˆ‹ค.
  • connection„ — Œ“•„‘๊ณ  worker๊ฐ€ •˜‚˜”ฉ ๊บผ‚– ฒ˜ฆฌ
  • ๊ธฐ—„ •˜๊ณ  žˆŠ” ฐฉ‹๊ธ •˜‚˜ —ฌ „žˆ context switchŠ” ผ–‚œ‹ค.

4.6.  •ง ฏธน˜„ก ๊œฐฎ€ ›น„œฒ„

  • •œ „ฅ…˜ (=job)„ ž„ธžˆ ‚Ž•˜”‹ˆ...File I/O DB ‘๊ทผ “ฑ“ฑ Œ€๊ธฐงŒ •˜Š” ‹œ๊ฐ„ ๊ธธ”ผ.
  • ๊ทธŸผ I/O€ถ„งŒ น„™๊ธฐกœ ฒ˜ฆฌ•‹œ‹ค.
  • กœง ตœ†Œ ‹จœ„กœ ‚˜‰˜–€๊ณ  ‹œ๊ฐ„ ˜คž˜ ๊ฑธฆฌŠ” ž‘—…€ น„™๊ธฐ ฒ˜ฆฌ.
  • ˆœ„œŠ” žฌ•••˜๊ธฐ •Œฌธ— Event-driven˜ ƒ„ƒ.
  • ‹œ๊ฐ„ ˜คž˜๊ฑธฆฌŠ” ž‘—…€ น„™๊ธฐกœ ฒ˜ฆฌ•••˜๊ธฐ •Œฌธ— ‹œ๊ฐ„ ˜คž˜ ๊ฑธฆฌŠ” ž‘—…€ ‹คฅธ ”„กœ„ธŠคกœ „˜๊ธฐŠ”๊ฒƒ ‚ซ‹ค.
  • ๊ทธž˜„œ fork˜ •… ‹œž‘˜Š” ค„ •Œ•˜œผ‚˜.

4.6.1. fast CGI

  • ๊ทธ ”„กœ„ธŠคฅผ demonœผกœ งŒ“ญ‹œ‹ค!
  •  „—Š” CGI“ค„ ‹จ… ‹ค–‰ ๊ฐ€Šฅ–ˆ‹ค!
  • fast CGIŠ” ‹จ…‹ค–‰ Œ€‹  deamon(service)กœ ‹ค–‰œ‹ค.
  • •œฒˆ ‹ค–‰˜– Œ€๊ธฐ•˜๊ธฐ •Œฌธ— ”„กœ„ธŠคฅผ งค š”ฒญงˆ‹ค ‹ค‹œ ””Šคฌ—„œ ถˆŸฌ˜ค€ •Š•„„ œ‹ค.
  • †ต‹ ฐฉ‹€ socket
    • ”ฐผ„œ ”„กœ„ธŠค๊ฐ€ —‡˜ ๊ฐ„— †Œผ“งŒ งŒ“œ ˜€กœ ›น„œฒ„˜ “ˆ๊ฐฏˆ˜๊ฐ€ ™•—ฐžˆ ค„–“ ‹ค.
    • †Œผ“€กœ CGI๊ฐ€ ‹คฅธ „œฒ„— žฌ•„ œ‹ค.
    • กœ“œฐธŸฐ‹ฑ Žธ•ง„‹ค. (CGI๊ฐ€ ‹คฅธฐ žˆ–„ ˜‹ˆ๊นŒ.)
    • ๊ฐ CGI“ˆ ”ฐกœ ”ฐกœ žˆ–„ œ‹ค.
    • ๊ฑ —„—ฐžˆ ‹คฅธ ”„กœ„ธŠค€กœ “ˆ “ฐ ˆ“œ •ˆ „ •˜€ •Š•„„ œ‹ค!
  • ˜„•˜Š” ๊ฐ€žฅ น ฅธ ฐฉ‹.

event-driven ฐฉ‹˜ ›น„œฒ„™€ event-drivenฐฉ‹˜ WAS๊ฐ€ งŒ‚˜
nginx + nodejs
”ƒ˜ž„ธ•œ„ค…€ƒžต•œ‹ค.
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:28:33
Processing time 0.0388 sec