์๋ฒ(Server)๋??
์ปดํจํฐ ๋คํธ์ํฌ์์ ๋ค๋ฅธ ์ปดํจํฐ์ ๋ํด์์ ์ด ๊ฐ๊ณ ์๋ ๊ธฐ๋ฅ์ด๋ ์๋น์ค, ๋ฐ์ดํฐ ๋ฑ์ ์ ๊ณต
ํ๋ ์ปดํจํฐ ๋๋ ๊ทธ์ ๊ฐ์ ๊ธฐ๋ฅ์ ๊ฐ์ง ์ํํธ์จ์ด ๋ผ๊ณ ํ๋ค. ex) Apache Server && Nginx, IIS(Windows ์ ์ฉ Web ์๋ฒ) ๋ฑ
webserver ๋??
ํ๋์จ์ด ์ธก๋ฉด
- ์น์ฌ์ดํธ์ ์ปดํฌ๋ํธ ํ์ผ๋ค์ ์ ์ฅํ๋ ์ปดํจํฐ
- ์ปดํฌ๋ํธ ํ์ผ โ HTML, Images, CSS, JavaScriptโฆ
- ์ปดํฌ๋ํธ ํ์ผ์ ์ธํฐ๋ท์ ํตํด ํด๋ผ์ด์ธํธ์ ์ ๋ฌ
์ํํธ์จ์ด ์ธก๋ฉด
- ์ฌ์ฉ์๊ฐ ์ด๋ป๊ฒ ํธ์คํธ ํ์ผ๋ค์ ์ ๊ทผํ๋์ง ๊ด๋ฆฌ
- ์น ์๋ฒ๋ ์ฃผ์ HTTP ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌ ๋ฐ ์๋ต
ย
๋ธ๋ผ์ฐ์ ๊ฐ ์น ์๋ฒ์์ ๋ถ๋ ค์ง ํ์ผ์ ํ์๋ก ํ ๋, 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
์์ ๋ก์ง ํ๋ก์ฐ์ด๋ค.
Request ํ์ฑ
ย
key: [value] // value ๋ LWS ๋ก ๊ตฌ๋ถ๋์ด์ง ์ ์๋ค.
ย
์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ Base64 ์ธ์ฝ๋ฉ์ ์ฌ์ฉํฉ๋๋ค.
- ๋ฐ์ดํฐ ํฌ๊ธฐ๊ฐ ์์ ๊ฒฝ์ฐ
- ์ ์ก ํจ์จ์ฑ๋ณด๋ค ํธํ์ฑ์ด ์ค์ํ ๊ฒฝ์ฐ
๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ Chunked encoding์ ์ฌ์ฉํฉ๋๋ค.
- ๋ฐ์ดํฐ ํฌ๊ธฐ๊ฐ ํฐ ๊ฒฝ์ฐ
- ์ ์ก ํจ์จ์ฑ์ด ์ค์ํ ๊ฒฝ์ฐ
ย
GET
์ผ๋ฐ์ ์ผ๋ก content-type ์ ๋ฐ๋ก ๋ฃ์ง ์๋๋ค.
POST
image/png
- ์ผ๋ฐ์ ์ด์ง๋ ์์
application/octet-stream
- ๋ฐ์ด๋๋ฆฌ ํ์ผ ์ ์ก
multipart/form-data
- ํ ์คํธ ๋ฐ์ดํฐ: ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋๋ ์ฃผ๋ก ๋ค์๊ณผ ๊ฐ์ Content-Type์ด ์ฌ์ฉ
text/plain
: ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ํ๋ฌธ์ผ๋ก ์ ์กํ ๋ ์ฌ์ฉtext/html
: HTML ํ์์ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋ ์ฌ์ฉ- ํ์ผ ๋ฐ์ดํฐ: ํ์ผ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋๋ ์ฃผ๋ก ๋ค์๊ณผ ๊ฐ์ 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
- url ํ์ธ
- ๋๋ ํ ๋ฆฌ์ธ๊ฐ ?
YES: ์๋ฌ
NO: ํด๋น ๋ฆฌ์์ค ์๋์ง ํ์ธ
- ๋ฐํ
POST
ย
DELETE
- url ํ์ธ
- ์ด์ ์๋ค๋ฉด ์ญ์ ํ 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>
ย
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 ๋ฉ์์ง ๋ฐ๋์ ๋์ ๋ค์ ๋ฐฉ์์ผ๋ก ๊ฒฐ์ ๋๋ค:
- Content-Length ํค๋: ์ด ํค๋๋ ๋ฉ์์ง ๋ฐ๋์ ๊ธธ์ด๋ฅผ ๋ฐ์ดํธ ๋จ์๋ก ๋ช
์ํ๋ค. ํด๋ผ์ด์ธํธ๋ ์๋ฒ๋ ์ด ๊ฐ์ ์ฌ์ฉํ์ฌ ๋ฉ์์ง ๋ฐ๋์ ๋์ ํ๋จํ๋ค. ์๋ฅผ ๋ค์ด,
Content-Length: 1234
๋ผ๋ฉด, ํค๋ ์ดํ์ ์ค๋ 1234๋ฐ์ดํธ๊ฐ ๋ฉ์์ง ๋ฐ๋๋ก ํด์๋๋ค.
- Chunked Transfer Encoding:
Transfer-Encoding: chunked
ํค๋๊ฐ ์ฌ์ฉ๋ ๋, ๋ฉ์์ง ๋ฐ๋๋ ์ฌ๋ฌ ๊ฐ์ ์ฒญํฌ๋ก ๋๋์ด ์ ์ก๋๋ค. ๊ฐ ์ฒญํฌ๋ ๊ธธ์ด ๊ฐ์ผ๋ก ์์ํ๋ฉฐ, ๋ง์ง๋ง ์ฒญํฌ๋0\r\n\r\n
์ผ๋ก ํ์๋๋ค. ๋ฐ๋ผ์, ์ฒญํฌ ์ธ์ฝ๋ฉ์ ์ฌ์ฉํ ๋๋ ๋ง์ง๋ง ์ฒญํฌ์ ๊ธธ์ด๊ฐ 0์ด๋ผ๋ ์ ์ ํตํด ๋ฐ๋์ ๋์ ์ ์ ์๋ค.
- ๋ฉํฐํํธ ๋ฐ๋:
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
๋ ์ด๋ฌํ ์ค์ ์ค์์๋ ํนํ ์ด๋ฒคํธ ์ฒ๋ฆฌ์ ์ ์ฐ์ฑ๊ณผ ์ปจํ
์คํธ ๊ด๋ฆฌ ์ธก๋ฉด์์ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
Loading Comments...