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.0111 sec