webserv
๐Ÿ™ˆ

webserv

Created
Jan 17, 2024 03:30 AM
Last edited time
Last updated March 15, 2024
Tags
42
Language
C++
URL

์„œ๋ฒ„(Server)๋ž€??

์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ์—์„œ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์— ๋Œ€ํ•ด ์ž์‹ ์ด ๊ฐ–๊ณ  ์žˆ๋Š” ๊ธฐ๋Šฅ์ด๋‚˜ ์„œ๋น„์Šค, ๋ฐ์ดํ„ฐ ๋“ฑ์„ ์ œ๊ณตํ•˜๋Š” ์ปดํ“จํ„ฐ ๋˜๋Š” ๊ทธ์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ์†Œํ”„ํŠธ์›จ์–ด ๋ผ๊ณ  ํ•œ๋‹ค. ex) Apache Server && Nginx, IIS(Windows ์ „์šฉ Web ์„œ๋ฒ„) ๋“ฑ

webserver ๋ž€??

ํ•˜๋“œ์›จ์–ด ์ธก๋ฉด

  • ์›น์‚ฌ์ดํŠธ์˜ ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ๋“ค์„ ์ €์žฅํ•˜๋Š” ์ปดํ“จํ„ฐ
  • ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ โ†’ HTML, Images, CSS, JavaScriptโ€ฆ
  • ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ์„ ์ธํ„ฐ๋„ท์„ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌ

์†Œํ”„ํŠธ์›จ์–ด ์ธก๋ฉด

  • ์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋–ป๊ฒŒ ํ˜ธ์ŠคํŠธ ํŒŒ์ผ๋“ค์— ์ ‘๊ทผํ•˜๋Š”์ง€ ๊ด€๋ฆฌ
  • ์›น ์„œ๋ฒ„๋Š” ์ฃผ์†Œ HTTP ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌ ๋ฐ ์‘๋‹ต
notion image
ย 
๐Ÿ’ก
๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์›น ์„œ๋ฒ„์—์„œ ๋ถˆ๋ ค์ง„ ํŒŒ์ผ์„ ํ•„์š”๋กœ ํ• ๋•Œ, HTTP๋ฅผ ํ†ตํ•ด ํŒŒ์ผ์„ ์š”์ฒญํ•˜๊ณ , ์š”์ฒญ์ด ์˜ฌ๋ฐ”๋ฅธ ์›น ์„œ๋ฒ„(ํ•˜๋“œ์›จ์–ด)์— ๋„๋‹ฌํ–ˆ์„๋•Œ, HTTP์„œ๋ฒ„(software)๋Š” ์š”์ฒญ ๋ฌธ์„œ๋ฅผ HTTP๋ฅผ ์ด์šฉํ•ด ๋ณด๋‚ด์ค€๋‹ค.
ย 

์ •์  ์›น ์„œ๋ฒ„

HTTP ์„œ๋ฒ„(์†Œํ”„ํŠธ์›จ์–ด)๊ฐ€ ์žˆ๋Š” ์ปดํ“จํ„ฐ(ํ•˜๋“œ์›จ์–ด)๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค. ์„œ๋ฒ„๊ฐ€ ๋ถˆ๋ ค์ง„ ํŒŒ์ผ์„ ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €)์—๊ฒŒ ์ „์†กํ•œ๋‹ค.
ย 

๋™์  ์›น ์„œ๋ฒ„

์ •์  ์›น ์„œ๋ฒ„์™€ ์ถ”๊ฐ€์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด(์ผ๋ฐ˜์ ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค)๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๊ฐ€ HTTP ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €)์—๊ฒŒ ๋ถˆ๋ ค์ง„ ํŒŒ์ผ๋“ค์„ ์ „์†กํ•˜๊ธฐ ์ „์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๊ฐ€ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.
WAS(Web Application Server) ๋ฅผ ํ†ตํ•ด ๊ฒฐ๊ณผ๊ฐ€ ์ด๋ฃจ์–ด์ง„๋‹ค. ์ถ”ํ›„ WAS์— ๋Œ€ํ•ด ๋”ฐ๋กœ ์ž์„ธํžˆ ๊ณต๋ถ€ํ•ด๋ณด์ž.
ย 

์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ

๊ธฐ์ˆ ์ ์œผ๋กœ, ์ปดํ“จํ„ฐ์— ์žˆ๋Š” ํŒŒ์ผ๋“ค์„ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ๊ฒƒ๋“ค์„ ์ „๋‹ดํ•˜๋Š” ์›น ์„œ๋ฒ„์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ๋” ํŽธ๋ฆฌํ•˜๋‹ค.
ย 

์ „๋‹ดํ•˜๋Š” ์›น์„œ๋ฒ„

  • ํ•ญ์ƒ ์‹คํ–‰ ์ค‘
  • ํ•ญ์ƒ ์ธํ„ฐ๋„ท์— ์—ฐ๊ฒฐ ๋˜์–ด์žˆ๋‹ค.
  • ํ•ญ์ƒ ๊ฐ™์€ IP๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • ์ œ 3์ž์— ์˜ํ•ด ์œ ์ง€๋ณด์ˆ˜ ๋œ๋‹ค.
ย 

๊ณผ์ œ ์ง„ํ–‰

๐Ÿ™Š ์—์ฝ” ์„œ๋ฒ„ ๊ตฌํ˜„

Nginx Configuration

์˜ˆ์‹œ ํŒŒ์ผ
user www www; ## Default: nobody worker_processes 5; ## Default: 1 error_log logs/error.log; pid logs/nginx.pid; worker_rlimit_nofile 8192; events { worker_connections 4096; ## Default: 1024 } http { include conf/mime.types; include /etc/nginx/proxy.conf; include /etc/nginx/fastcgi.conf; index index.html index.htm index.php; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] $status ' '"$request" $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main; sendfile on; tcp_nopush on; server_names_hash_bucket_size 128; # this seems to be required for some vhosts server { # php/fastcgi listen 80; server_name domain1.com www.domain1.com; access_log logs/domain1.access.log main; root html; location ~ \.php$ { fastcgi_pass 127.0.0.1:1025; } } }
ย 

๊ธฐ๋ฐ˜ ๋ชจ๋“ˆ

์—”์ง„์—‘์Šค์˜ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ์ง€์‹œ์–ด๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
  • ํ•ต์‹ฌ ๋ชจ๋“ˆ (core module): ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ๋‚˜ ๋ณด์•ˆ ๊ฐ™์€ ํ•„์ˆ˜ ๊ธฐ๋Šฅ ๋ฐ ์ง€์‹œ์–ด๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.
  • ์ด๋ฒคํŠธ ๋ชจ๋“ˆ(event module): ๋„คํŠธ์›Œํ‚น ๊ธฐ๋Šฅ์˜ ๋‚ด๋ถ€ ๋™์ž‘ ๋ฐฉ์‹์„ ๊ตฌ์„ฑํ•œ๋‹ค.
  • ๊ตฌ์„ฑ ๋ชจ๋“ˆ(configuration module): ๊ตฌ์„ฑ์„ ์™ธ๋ถ€ ํŒŒ์ผ์—์„œ ๊ฐ€์ ธ์™€ ํฌํ•จ์‹œํ‚จ๋‹ค.(include)
ย 

ํ•ต์‹ฌ ๋ชจ๋“ˆ ์ง€์‹œ์–ด

์ง€์‹œ์–ด
์„ค๋ช…
user
user username groupname; user username; ๊ธฐ๋ณธ๊ฐ’: ์ปดํŒŒ์ผ ํ•  ๋•Œ ๊ฒฐ์ • ์ž‘์—…์ž ํ”„๋กœ์„ธ์Šค (worker process)๋ฅผ ์‹œ์ž‘์‹œํ‚ค๋Š” ์‚ฌ์šฉ์ž ๊ณ„์ •๊ณผ ๊ทธ๋ฃน์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. groupname ์ƒ๋žต ์‹œ user๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค. user root root; ๋Š” ๋ณด์•ˆ์ƒ ์œ„ํ—˜ํ•˜๋‹ค.
worker_process
๊ธฐ๋ณธ๊ฐ’: 1 ์ž‘์—…์ž ํ”„๋กœ์„ธ์Šค(worker_process)์˜ ์ˆ˜๋ฅผ ์ •์˜ํ•œ๋‹ค. ๋ณดํ†ต CPU์˜ ์ฝ”์–ด ์ˆ˜๋งŒํผ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์ด ์ข‹์œผ๋ฉฐ, ํ™•์‹คํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ auto๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์ž๋™ ๊ฐ์ง€๋ฅผ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ๋‹ค. Nginx๋Š” ํ•˜๋‚˜์˜ mater process์™€ n๊ฐœ์˜ worker process๋กœ ๊ตฌ์„ฑ๋˜์–ด ์‹คํ–‰๋œ๋‹ค. master process๋Š” ์„ค์ • ํŒŒ์ผ์„ ์ฝ๊ณ , ํ”„๋กœ์„ธ์Šค๋ฅผ ์œ ์ง€ ๋ฐ ๊ด€๋ฆฌํ•œ๋‹ค.๋ชจ๋“  ์š”์ฒญ์€ worker process์—์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค. master์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ๋„ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค.
error_log (main, http, mail, stream, server, location ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)
error_log /file/path level; ๊ธฐ๋ณธ๊ฐ’: logs/err.log error level : debug, info, notice, warn, error, crit, alert, emerg ์˜ค๋ฅ˜ ๋กœ๊ทธ๋ฅผ ๋„๋ ค๋ฉด ๊ตฌ์„ฑํŒŒ์ผ ์ตœ์ƒ๋‹จ์— error_log /dev/null crit; ๋กœ ์ง€์ •ํ•œ๋‹ค. ํŒŒ์ผ ๊ฒฝ๋กœ ๋Œ€์‹  syslog, memory, stderr ๋“ฑ์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
ย 

์ด๋ฒคํŠธ ๋ชจ๋“ˆ ์ง€์‹œ์–ด

์ง€์‹œ์–ด
์„ค๋ช…
use
use kqueue; ๊ธฐ๋ณธ๊ฐ’: ์—†์Œ ์–ด๋–ค ์ด๋ฒคํŠธ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ• ์ง€ ๊ฒฐ์ •ํ•œ๋‹ค. (nginx๋Š” ์ž๋™์œผ๋กœ ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๋ชจ๋ธ์„ ์„ ํƒํ•œ๋‹ค)
ย 

HTTP ํ•ต์‹ฌ ๋ชจ๋“ˆ

๐Ÿ’ก
http ์„œ๋ฒ„์˜ ๋ชจ๋“  ๊ธฐ๋ฐ˜ ๋ธ”๋ก, ์ง€์‹œ์–ด, ๋ณ€์ˆ˜๋ฅผ ํฌํ•จํ•˜๋Š” ๊ตฌ์„ฑ ์š”์†Œ, ์ฃผ ๋ธ”๋ก์€ http, server, location์ด๋‹ค.
ย 

Flow

์˜ˆ์ƒ ๋กœ์ง ํ”Œ๋กœ์šฐ์ด๋‹ค.
notion image

Request ํŒŒ์‹ฑ

ย 
๐Ÿ’ก
key: [value] // value ๋Š” LWS ๋กœ ๊ตฌ๋ถ„๋˜์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.
ย 
์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์— Base64 ์ธ์ฝ”๋”ฉ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๊ฐ€ ์ž‘์€ ๊ฒฝ์šฐ
  • ์ „์†ก ํšจ์œจ์„ฑ๋ณด๋‹ค ํ˜ธํ™˜์„ฑ์ด ์ค‘์š”ํ•œ ๊ฒฝ์šฐ
๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์— Chunked encoding์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๊ฐ€ ํฐ ๊ฒฝ์šฐ
  • ์ „์†ก ํšจ์œจ์„ฑ์ด ์ค‘์š”ํ•œ ๊ฒฝ์šฐ
ย 
GET
๐Ÿ’ก
์ผ๋ฐ˜์ ์œผ๋กœ content-type ์€ ๋”ฐ๋กœ ๋„ฃ์ง€ ์•Š๋Š”๋‹ค.
POST
  • image/png
    • ์ผ๋ฐ˜์ ์ด์ง€๋Š” ์•Š์Œ
  • application/octet-stream
    • ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ ์ „์†ก
  • multipart/form-data
      1. ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ: ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ๋•Œ๋Š” ์ฃผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ Content-Type์ด ์‚ฌ์šฉ
          • text/plain: ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ํ‰๋ฌธ์œผ๋กœ ์ „์†กํ•  ๋•Œ ์‚ฌ์šฉ
          • text/html: HTML ํ˜•์‹์˜ ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ๋•Œ ์‚ฌ์šฉ
      1. ํŒŒ์ผ ๋ฐ์ดํ„ฐ: ํŒŒ์ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ๋•Œ๋Š” ์ฃผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ Content-Type์ด ์‚ฌ์šฉ
          • application/octet-stream: ์ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ๋•Œ ์‚ฌ์šฉ
          • image/png: ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ์ „์†กํ•  ๋•Œ ์‚ฌ์šฉ
DELETE
  • ์ผ๋ฐ˜์ ์œผ๋กœ body ๋‚ด์šฉ ๋ฌด์‹œ
ย 

ํ—ค๋” ์˜ˆ์‹œ

1. text/plain

ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋ณ„๋„์˜ ํƒœ๊ทธ ์—†์ด ์ˆœ์ˆ˜ํ•œ ํ…์ŠคํŠธ๋กœ๋งŒ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
Content-Type: text/plain;charset=utf-8

2. text/html

HTML ๋ฌธ์„œ๋ฅผ ์ „์†กํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์›น ํŽ˜์ด์ง€์˜ ๋‚ด์šฉ์„ ์ „์†กํ•˜๋Š” ๋ฐ ์ฃผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
Content-Type: text/html;charset=utf-8

3. multipart/form-data

ํŒŒ์ผ ์—…๋กœ๋“œ๋‚˜ ํผ ๋ฐ์ดํ„ฐ๊ฐ€ ํŒŒ์ผ๊ณผ ํ…์ŠคํŠธ ํ•„๋“œ๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ถ€๋ถ„์€ ๊ณ ์œ ํ•œ ๊ฒฝ๊ณ„ ๋ฌธ์ž์—ด(boundary)๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค.
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
์ด ๊ฒฝ๊ณ„ ๋ฌธ์ž์—ด์€ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์—์„œ ๊ฐ ๋ถ€๋ถ„์„ ๊ตฌ๋ถ„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, ์‹ค์ œ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๊ณ ์œ ํ•œ ๊ฐ’์ด ์ƒ์„ฑ๋˜์–ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

4. application/octet-stream

์ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ ๋“ฑ์— ์‚ฌ์šฉ๋˜๋ฉฐ, ํŠน์ • ํŒŒ์ผ ํ˜•์‹์„ ์ง€์ •ํ•˜์ง€ ์•Š๋Š” ์ผ๋ฐ˜์ ์ธ ์ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
Content-Type: application/octet-stream

5. image/png

PNG ํ˜•์‹์˜ ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ์ „์†กํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
Content-Type: image/png
Content-Type ํ—ค๋”๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ตํ™˜์—์„œ ๋งค์šฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•˜๋ฉฐ, ์˜ฌ๋ฐ”๋ฅธ Content-Type์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ•ด์„๋˜๊ณ  ์ฒ˜๋ฆฌ๋˜๋„๋ก ํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.
ย 
ย 

๊ฐ method ๋ณ„ ์ฒ˜๋ฆฌ

GET
  1. url ํ™•์ธ
  1. ๋””๋ ‰ํ† ๋ฆฌ์ธ๊ฐ€ ?
    1. YES: ์—๋Ÿฌ
      NO: ํ•ด๋‹น ๋ฆฌ์†Œ์Šค ์žˆ๋Š”์ง€ ํ™•์ธ
  1. ๋ฐ˜ํ™˜
POST
ย 
DELETE
  1. url ํ™•์ธ
  1. ์ด์ƒ ์—†๋‹ค๋ฉด ์‚ญ์ œ ํ›„ 200 OK
ย 

Response

์˜ˆ์‹œ
HTTP/1.1 200 OK\r\n//status line Date: Mon, 27 Jul 2009 12:28:53 GMT\r\n// header line Server: Apache/2.2.14 (Win32)\r\n Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT\r\n Content-Length: 88\r\n Content-Type: text/html\r\n Connection: Closed\r\n \r\n// crlf <html>// body <body> <h1>Hello, World!</h1> </body> </html>
ย 
HTTP Chunked Message๋ฅผ ์•Œ์•„๋ณด์ž
# if 0 ๋‘๋‹ฌ๊ฐ„์˜ ๋…ธ์˜ˆ ์ผ์ƒ์„ ์ด์ œ์•ผ ๋๋‚˜๊ณ ,, ๋„ˆ๋ฌด ์˜ค๋žœ๋งŒ์— ๋“ค์—ฌ๋‹ค๋ณธ ๋ธ”๋กœ๊ทธ,, ๊ฐœ๋ฐœ์ž๋กœ ์ง€๋‚ด๊ณ  ์žˆ์ง€๋งŒ,, ์ผํ•˜๊ณ  ์‹ถ์ง€๋Š” ์•Š์€ ๊ทธ๋Ÿฐ ์‚ถ,, ๊ฐ‘์ž‘์Šค๋Ÿฝ๊ฒŒ HTTP ํ”„๋กœํ† ์ฝœ์„ ๊ตฌํ˜„ํ•ด์•ผํ•  ์ผ์ด ์ƒ๊ฒจ์„œ, ๊ทœ๊ฒฉ ์ฐธ๊ณ ํ•˜๊ณ  ๊ตฌ๊ธ€๋ง ํ•˜๋ฉฐ ๊ณต๋ถ€ํ•œ ์ฃผ์ œ๋กœ ์˜ค๋Š˜์€,, ํ•ด๋ณผ๊นŒ ํ•ฉ๋‹ˆ๋‹ค,, #endif HTTP ๋ผ๋Š” ๋‹จ์–ด๋Š” ๋งŽ์ด ๋“ค์–ด๋ณด์…จ์„๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค ๊ทธ ์ค‘์—์„œ, Chunked ๋ผ๋Š” ๋‹จ์–ด๋Š” ์กฐ๊ธˆ ์ƒ์†Œํ•  ์ˆ˜๋„ ์žˆ๋Š”๋ฐ ๊ทœ๊ฒฉ๋Œ€๋กœ๋งŒ ์ƒ๊ฐํ•œ๋‹ค๋ฉด ๊ทธ๋ฆฌ ์–ด๋ ต์ง€ ์•Š์€ (๊ตฌํ˜„์€ ๊นŒ๋‹ค๋กœ์šธ ๊ฒ๋‹ˆ๋‹ค..) HTTP Chunked Message๋ฅผ ์•Œ์•„๋ณด๋„๋ก ํ• ๊ฒ๋‹ˆ๋‹ค,, - ์•„์ฃผ์•„์ฃผ ๊ฐ„๋‹จํ•œ HTTP Protocol ์„ค๋ช… - HTTP Header์™€ Body๋ฅผ ์ฝ๋Š” ๋ฐฉ๋ฒ• - HTTP Chunked Message๋ž€ ๋ฌด์—‡์ธ๊ฐ€ 1. HTTP(HyperTex..
HTTP Chunked Message๋ฅผ ์•Œ์•„๋ณด์ž

RFC

10.2.7 206 Partial Content(๋ถ€๋ถ„์  ๋‚ด์šฉ).
๐Ÿ’ก
์„œ๋ฒ„๊ฐ€ ์ž์›์— ๋Œ€ํ•œ ๋ถ€๋ถ„์  GET ์š”๊ตฌ๋ฅผ ์™„๋ฃŒํ•˜์˜€๋‹ค. ์ด ์š”๊ตฌ๋Š” ๋ฐ˜๋“œ์‹œ ์›ํ•˜๋Š” ์˜์—ญ์„ ํ‘œ์‹œํ•˜๋Š” Range ํ—ค๋” ํ•„๋“œ(14.36 ์ ˆ)๋ฅผ ํฌํ•จํ•ด์•ผ ํ•œ๋‹ค. ์‘๋‹ต์€ ์ด ์‘๋‹ต์— ํฌํ•จ๋œ ์˜์—ญ์„ ํ‘œ์‹œํ•˜๋Š” Content-Range ํ—ค๋” ํ•„๋“œ(14.17 ์ ˆ)๋‚˜ ๊ฐ ํŒŒํŠธ์˜ Content-Range ํ•„๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” multipart/byteranges Content-Type์„ ํฌํ•จํ•ด์•ผ ํ•œ๋‹ค. multipart/byteranges ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์œผ๋ฉด ์‘๋‹ต์˜ Content-Length ํ—ค๋” ํ•„๋“œ๋Š” Message-Body ๋กœ ์ „์†ก๋œ OCTET ์˜ ์‹ค์ œ ์ˆซ์ž์™€ ์ •ํ™•ํ•˜๊ฒŒ ์ผ์น˜ํ•ด์•ผ ํ•œ๋‹ค. Range ๋ฐContent-Range ํ—ค๋”๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์บ์‹œ๋Š” 206(Partial Content) ์‘๋‹ต์„ ์บ์‹œํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค.
ย 
ย 

๊ถ๊ธˆ์ฆ

๋ชฉ๋ก
๐Ÿ’ก
์›น ์„œ๋ฒ„์—์„œ ์ž์›์„ ์ œ๊ณตํ•œ๋‹คํ•˜๋Š”๋ฐ ๊ทธ๋Ÿผ ์›น ์„œ๋ฒ„(ํ•˜๋“œ์›จ์–ด)์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜์–ด์žˆ๋Š”๊ฑด๊ฐ€?? db์— ์ €์žฅํ•˜๋Š”๊ฒƒ์ฒ˜๋Ÿผ???
์›น ์„œ๋ฒ„์—์„œ ์ •์ ์ธ ๋ฐ์ดํ„ฐ๋“ค์„ ํ•˜๋“œ์›จ์–ด์— ์ €์žฅํ•ด ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ฐ€ ์š”์ฒญํ•˜๋ฉด ๋ณด๋‚ด์ฃผ๋Š” ํ˜•์‹์ด ๋งž๋Š”๊ฒƒ ๊ฐ™๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ •์ ์ธ ์›น ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ ๋‹ค๋ฉด ํ•ด๋‹น ์›น ์„œ๋ฒ„์— HTML ํŒŒ์ผ๊ณผ ๊ฐ™์€ ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•˜๋ฉด ๊ทธ๋•Œ ์›น ์„œ๋ฒ„์—์„œ ์ œ๊ณตํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
ย 
๐Ÿ’ก
์›น์„œ๋ฒ„๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•œ๋‹ค๋ฉด config ํŒŒ์ผ์„ ํŒŒ์‹ฑํ•ด์„œ ๊ฒ€์ฆํ•ด์•ผํ•˜๋‚˜??
๊ทธ๋ ‡๋‹ค. ์–ด๋””๊นŒ์ง€ config ๋ฅผ ์œ ํšจ ์ธ์ž๋กœ ๋ฐ›์„์ง€๋Š” ๋ณธ์ธ ํŒ๋‹จ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค.
ย 
๐Ÿ’ก
๋ฉ€ํ‹ฐํ”Œ๋ ‰์‹ฑ์˜ ๋‹จ์ผ ์Šค๋ ˆ๋“œ ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๊ฐ€ ๋Œ์•„๊ฐ€๋Š”๋ฐ ์™œ fcntl๋กœ non-blocking์„ ํ•ด์ฃผ์—ˆ๋Š”์ง€??
์‹œ์Šคํ…œ ์ฝœ๋กœ ํ•ด๋‹น ์†Œ์ผ“์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ถ€๋ถ„์„ non-blocking์œผ๋กœ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ด๋‹ค. ์‹œ์Šคํ…œ ์ฝœ์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€๋ฅผ ํ•ด๋ณด๋ฉด ์ดํ•ด๊ฐ€ ๊ฐ„๋‹ค.
ย 
๐Ÿ’ก
์›น ๋ธŒ๋ผ์šฐ์ €๋กœ ์š”์ฒญ์„ ๋ณด๋‚ผ ์ •์  ํŽ˜์ด์ง€๋‚˜ ์—๋ŸฌํŽ˜์ด์ง€๋ฅผ ๋”ฐ๋กœ html๋กœ ๋งŒ๋“ค์–ด์•ผํ•˜๋Š”๊ฐ€?
๊ทธ๋ ‡๋‹ค.
ย 
๐Ÿ’ก
ํด๋ผ์ด์–ธํŠธ๊ฐ€ http ๋ฉ”์„œ๋“œ๋ฅผ ๋ณด๋‚ผ ๋•Œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•Œ์•„์„œ ํ•ด์ฃผ๋‚˜?
์›น๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•Œ์•„์„œ ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์„ฑํ•ด์„œ ๋ณด๋‚ด์ฃผ๊ฑฐ๋‚˜, html form ํ˜•์‹์— ๋”ฐ๋ผ ๋งž์ถฐ์„œ ํ•ด์ค€๋‹ค.
๐Ÿ’ก
kqueue๊ฐ€ ์ด๋ฒคํŠธ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฐ์ง€ํ•˜๋Š”์ง€? ํŒŒ์ผ์ด ๋ณ€ํ™”ํ•˜๋Š” ๊ฑฐ์— ๋”ฐ๋ผ read, write flag๊ฐ€ ๋™์ž‘ํ•˜๋Š”์ง€?
ํŒŒ์ผ์˜ ๋ณ€ํ™”๋กœ ์ด๋ฒคํŠธ๊ฐ€ ํŠธ๋ฆฌ๊ฑฐ ๋  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ EV_SET์˜ ์ธ์ž๋กœ ๋“ค์–ด๊ฐ€๋Š” flags ์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ํ•ด๋‹น ์†Œ์ผ“์ด ๋น„ํ™œ์„ฑํ™” ๋˜์–ด์žˆ์„ ์ˆ˜ ๋„ ์žˆ๋‹ค๋Š” ์ ์„ ์ƒ๊ฐํ•˜์ž.
ย 
๐Ÿ’ก
CRLF ๋ฅผ ์•Œ์•„์„œ ์ž˜ ์ฝ๋‚˜??
์•Œ์•„์„œ ๊ฐœํ–‰์œผ๋กœ ์ž˜์ฝ์œผ๋‹ˆ ํ…Œ์ŠคํŠธ ํ• ๋•Œ๋Š” ํ•ด๋‹น ํŒŒ์ผ์„ CRLF ๋กœ๋งŒ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋œ๋‹ค.(๋งฅ์€ ๊ธฐ๋ณธ์ด LF)
ย 
๐Ÿ’ก
multpart-form ์ด๋‚˜ chunked ์™€ ๊ฐ™์€ encode-64 ๋ฐฉ์‹์œผ๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์„ http ๋ฐ”๋””๋กœ ์ž…๋ ฅ๋ฐ›์„๋•Œ ๋„์ด ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋‚˜??
๊ทธ๋ ‡๋‹ค๊ณ  ํ•œ๋‹ค.
ย 
๐Ÿ’ก
HTTP ๋ฐ”๋”” ๋ฉ”์„ธ์ง€์˜ ๋์€ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์„๊นŒ?
HTTP ๋ฉ”์‹œ์ง€์—์„œ ๋ฐ”๋””์˜ ๋์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ์‹์€ '\0' ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. HTTP ํ”„๋กœํ† ์ฝœ์€ ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ํ”„๋กœํ† ์ฝœ์ด๋ฉฐ, HTTP ๋ฉ”์‹œ์ง€์˜ ๊ตฌ์กฐ๋Š” ์‹œ์ž‘ ์ค„(start line), ํ—ค๋”(headers), ๊ทธ๋ฆฌ๊ณ  ๋ฉ”์‹œ์ง€ ๋ฐ”๋””(body)๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ๊ฐ ๋ถ€๋ถ„์€ ํŠน์ • ๋ฐฉ์‹์œผ๋กœ ๊ตฌ๋ถ„๋˜๋ฉฐ, ๋ฐ”๋””์˜ ๋์€ '\0' ๋ฌธ์ž๋กœ ๋ช…์‹œ์ ์œผ๋กœ ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š”๋‹ค.
HTTP ๋ฉ”์‹œ์ง€ ๋ฐ”๋””์˜ ๋์€ ๋‹ค์Œ ๋ฐฉ์‹์œผ๋กœ ๊ฒฐ์ •๋œ๋‹ค:
  1. Content-Length ํ—ค๋”: ์ด ํ—ค๋”๋Š” ๋ฉ”์‹œ์ง€ ๋ฐ”๋””์˜ ๊ธธ์ด๋ฅผ ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ๋ช…์‹œํ•œ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋‚˜ ์„œ๋ฒ„๋Š” ์ด ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์‹œ์ง€ ๋ฐ”๋””์˜ ๋์„ ํŒ๋‹จํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Content-Length: 1234๋ผ๋ฉด, ํ—ค๋” ์ดํ›„์— ์˜ค๋Š” 1234๋ฐ”์ดํŠธ๊ฐ€ ๋ฉ”์‹œ์ง€ ๋ฐ”๋””๋กœ ํ•ด์„๋œ๋‹ค.
  1. Chunked Transfer Encoding: Transfer-Encoding: chunked ํ—ค๋”๊ฐ€ ์‚ฌ์šฉ๋  ๋•Œ, ๋ฉ”์‹œ์ง€ ๋ฐ”๋””๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ฒญํฌ๋กœ ๋‚˜๋ˆ„์–ด ์ „์†ก๋œ๋‹ค. ๊ฐ ์ฒญํฌ๋Š” ๊ธธ์ด ๊ฐ’์œผ๋กœ ์‹œ์ž‘ํ•˜๋ฉฐ, ๋งˆ์ง€๋ง‰ ์ฒญํฌ๋Š” 0\r\n\r\n์œผ๋กœ ํ‘œ์‹œ๋œ๋‹ค. ๋”ฐ๋ผ์„œ, ์ฒญํฌ ์ธ์ฝ”๋”ฉ์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋งˆ์ง€๋ง‰ ์ฒญํฌ์˜ ๊ธธ์ด๊ฐ€ 0์ด๋ผ๋Š” ์ ์„ ํ†ตํ•ด ๋ฐ”๋””์˜ ๋์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  1. ๋ฉ€ํ‹ฐํŒŒํŠธ ๋ฐ”๋””: Content-Type: multipart/form-data์™€ ๊ฐ™์ด ๋ฉ€ํ‹ฐํŒŒํŠธ ๋ฉ”์‹œ์ง€๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ๊ฐ ๋ถ€๋ถ„์€ ๊ฒฝ๊ณ„ ๋ฌธ์ž์—ด(boundary string)์— ์˜ํ•ด ๊ตฌ๋ถ„๋˜๋ฉฐ, ๋งˆ์ง€๋ง‰ ๊ฒฝ๊ณ„ ๋ฌธ์ž์—ด ๋’ค์— -๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ๋ฉ”์‹œ์ง€์˜ ๋์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
๐Ÿ’ก
EV_SET(&tmp_event, ident, filter, flags, fflags, data, udata) ์—์„œ data ๋ž‘ udata ์šฉ๋„?
EV_SET ๋งคํฌ๋กœ๋Š” BSD ๊ณ„์—ด ์šด์˜ ์ฒด์ œ์—์„œ ์ œ๊ณตํ•˜๋Š” kqueue ์ด๋ฒคํŠธ ์•Œ๋ฆผ ์‹œ์Šคํ…œ์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. kqueue๋Š” ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ์ด๋ฒคํŠธ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. ์ด ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋ฉด ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ, ํƒ€์ด๋จธ, ํ”„๋กœ์„ธ์Šค, ์‹ ํ˜ธ ๋“ฑ ๋‹ค์–‘ํ•œ ์ด๋ฒคํŠธ ์†Œ์Šค์— ๋Œ€ํ•œ ๋ณ€ํ™”๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. EV_SET ๋งคํฌ๋กœ๋ฅผ ํ†ตํ•ด ๊ฐœ๋ณ„ ์ด๋ฒคํŠธ๋ฅผ kevent ๊ตฌ์กฐ์ฒด์— ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋•Œ ์—ฌ๋Ÿฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
EV_SET์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ์ค‘ data์™€ udata์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค:
  • data: ์ด ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์šฉ๋„๋Š” ์ด๋ฒคํŠธ ํ•„ํ„ฐ(filter)์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋ฉฐ, ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, EVFILT_READ ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ data๋Š” ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ฐ”์ดํŠธ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, data ํ•„๋“œ๋Š” ์ด๋ฒคํŠธ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์˜๋ฏธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฒคํŠธ์˜ ํŠน์ • ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • udata: ์‚ฌ์šฉ์ž ์ •์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์œ„ํ•œ ํฌ์ธํ„ฐ์ž…๋‹ˆ๋‹ค. ์ด ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” kevent ๊ตฌ์กฐ์ฒด์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ์ •์˜ ์ปจํ…์ŠคํŠธ ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. udata๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋‚˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜์—์„œ ํ•ด๋‹น ์ด๋ฒคํŠธ๋ฅผ ๋” ์ž˜ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํŠน์ • ์ด๋ฒคํŠธ์™€ ๊ด€๋ จ๋œ ๊ฐ์ฒด์˜ ํฌ์ธํ„ฐ๋ฅผ udata์— ์ €์žฅํ•˜์—ฌ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‰ฝ๊ฒŒ ํ•ด๋‹น ๊ฐ์ฒด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
EV_SET์„ ์‚ฌ์šฉํ•˜์—ฌ kevent ๊ตฌ์กฐ์ฒด๋ฅผ ์„ค์ •ํ•  ๋•Œ, ident, filter, flags, fflags, data, udata ๋“ฑ์˜ ํ•„๋“œ๋ฅผ ์ ์ ˆํžˆ ์„ค์ •ํ•จ์œผ๋กœ์จ, ์›ํ•˜๋Š” ์ด๋ฒคํŠธ ๋ชจ๋‹ˆํ„ฐ๋ง ๋™์ž‘์„ ์ •๋ฐ€ํ•˜๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. data์™€ udata๋Š” ์ด๋Ÿฌํ•œ ์„ค์ • ์ค‘์—์„œ๋„ ํŠนํžˆ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ์˜ ์œ ์—ฐ์„ฑ๊ณผ ์ปจํ…์ŠคํŠธ ๊ด€๋ฆฌ ์ธก๋ฉด์—์„œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ์กฐ

[UNIX] I/O Multiplexing์„ ์œ„ํ•œ kqueue ์‚ฌ์šฉ๋ฒ•
kqueue๋Š” BSD ๊ณ„์—ด์—์„œ ์ง€์›ํ•˜๋Š” Event ๊ด€๋ฆฌ system call๋กœ, Linux ๊ณ„์—ด์—์„œ select๋ฅผ ๊ฐœ์„ ํ•œ epoll๊ณผ ๋น„์Šทํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๊ณ  ๋™์ž‘ํ•œ๋‹ค. ์—ฌ๋Ÿฌ fd๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ , fd์— ๋Œ€ํ•œ ๋™์ž‘(read, write)์ด ์ค€๋น„๋˜์—ˆ๋Š”์ง€ ์•Œ์•„๋‚ด๋Š”๋ฐ ์‚ฌ์šฉ๋˜์–ด I/O Multiplexing์„ ์ด์šฉํ•˜๋Š” ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. 0. Concept kqueue๋Š” ์ปค๋„์— ํ• ๋‹น๋œ ํด๋ง ๊ณต๊ฐ„(kernel event queue - kqueue)์— ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ด๋ฒคํŠธ๋ฅผ ๋“ฑ๋กํ•˜๊ณ , ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ๋ฅผ return๋ฐ›์•„ Multiple I/O Event๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค. ์ด๋ฒคํŠธ ๋“ฑ๋ก ๋ฐ ๋ฐ˜ํ™˜์€ kevent ๊ตฌ์กฐ์ฒด๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง€๋ฉฐ, ๊ตฌ์กฐ์ฒด ํ•„๋“œ๋กœ ์กด์žฌํ•˜๋Š” ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ํ•„ํ„ฐ, ํ”Œ๋ž˜๊ทธ ๋“ฑ์„ ์ด์šฉํ•ด ๋‹ค..
[UNIX] I/O Multiplexing์„ ์œ„ํ•œ kqueue ์‚ฌ์šฉ๋ฒ•

Loading Comments...