2020-11-12(Thu)

  1. ํ•™์Šต ๋‚ ์งœ // 2020-11-12(๋ชฉ)

  2. ํ•™์Šต์‹œ๊ฐ„ // 9:00~22:00

  3. ํ•™์Šต ๋ฒ”์œ„ ๋ฐ ์ฃผ์ œ // error fix

  4. ๋™๋ฃŒ ํ•™์Šต ๋ฐฉ๋ฒ• // sanam, yohai๋‹˜๊ณผ ํ˜‘์—…ํ•จ

  5. ํ•™์Šต ๋ชฉํ‘œ // jpg ํŒŒ์ผ์„ ๋ณด๋‚ผ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ๋ฅผ ์žก์ž.

  6. ์ƒ์„ธ ํ•™์Šต ๋‚ด์šฉ

image-20201114232448426
image-20201114232503913
image

BACKLOG์—์„œ TODO๋กœ ๋ถ€์ƒ์‹œํ‚จ ์นด๋“œ ์ค‘ FIX: send jpg ๋Š” ๋ฌธ์ œ๋ฅผ ์–ด์„œ ํ™•์ธํ•˜๊ณ  ํ•ด๊ฒฐํ•ด๋ณด๊ณ  ์‹ถ๋‹ค๊ณ  ๋ฒผ๋ฅด๊ณ  ์žˆ์—ˆ๋˜ ๊ฒƒ์ด์—ˆ๋‹ค. ๊ทธ๋ƒฅ ๋จธ๋ฆฟ์†์œผ๋กœ ๊ฒ€์ฆํ–ˆ์„ ๋•Œ๋Š” ๋ถ„๋ช… ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜๊ฐ€ ์—†๋Š”๋ฐ ์™œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋‚˜ ์‹ถ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋‹คํ–‰ํžˆ ๋””๋ฒ„๊ทธ ๋กœ๊ทธ๋ฅผ ์ž˜ ์‹ฌ์–ด๋†“์•˜๋‹ค๋ณด๋‹ˆ ์ƒ๊ฐ๋ณด๋‹ค ๋ฌธ์ œ ๋ฐœ์ƒ์ง€์ ์„ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋ฐ”๋กœ jpg ํŒŒ์ผ์„ readํ•˜๊ณ  buffer์— ์ €์žฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ Response _body๋กœ ์ €์žฅํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ์ชผ๊ฐœ๋ณด๋ฉด ์•„๋ž˜ ๋‘ ๊ฐ€์ง€ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.

  1. read์‹œ์— buffer์— ์ž˜๋ชป๋œ ๊ฐ’์ด ์ €์žฅ๋œ๋‹ค.

  2. buffer์—์„œ Response _body๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ ์ž˜๋ชป๋œ ๊ฐ’์ด ์ €์žฅ๋œ๋‹ค.

1๋ฒˆ์€ read ์‹œ์— binary ๋ชจ๋“œ์™€ ๊ทธ๋ ‡์ง€ ์•Š์€ ๋ชจ๋“œ๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์—ฌ ๊นŠ๊ฒŒ ์กฐ์‚ฌํ•ด๋ณด์•˜์œผ๋‚˜ ๋‘ ๋ชจ๋“œ๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” window OS ํ™˜๊ฒฝ์—์„œ์˜ ์ ‘๊ทผ๋ฐฉ๋ฒ•์œผ๋กœ ๋ณด์˜€๋‹ค. ๊ทธ๋Ÿผ ์œ ๋‹‰์Šค์—์„œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•˜๋Š”๊ฐ€? ์ธํ„ฐ๋„ท์— ๋งŽ์€ ์˜ˆ์ œ๋“ค์€ ์šฐ๋ฆฌ์—๊ฒŒ ํ—ˆ์šฉ๋œ read ํ•จ์ˆ˜ ์™ธ์— fstream์„ ํ™œ์šฉํ•˜๋Š” ์‹์ด๋ผ ์ฐธ๊ณ ํ•  ์ˆ˜ ์—†์—ˆ๋‹ค. ์˜ค์ž‰ ๊ทธ๋Ÿฐ๋ฐ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€๋ฅผ readํ•˜๋Š” ๊นƒํ—™๋“ค์„ ํ™•์ธํ•ด๋ณธ ๊ฒฐ๊ณผ ๊ทธ๋ƒฅ read๋ฅผ ํ•œ๋‹ค. 2๋ฒˆ์„ ์ œ๋Œ€๋กœ ๊ฒ€์ฆํ•ด๋ณด์ž.

2๋ฒˆ์ด ๋‹ต์ด์—ˆ๋‹ค. jpg ํŒŒ์ผ์—๋Š” '\0' ๋ฌธ์ž๋กœ ๋๋‚˜๋Š” ๊ฒƒ์ด ๋ณด์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰ '\0' ๋ฌธ์ž๊ฐ€ ์ค‘๊ฐ„ ์ค‘๊ฐ„ ์žˆ์„ ์ˆ˜๋„, ์•„๋‹ˆ๋ฉด ํŒŒ์ผ์˜ ๋๊นŒ์ง€ ์ฝ์–ด๋„ '\0' ๋ฌธ์ž๊ฐ€ ์—†์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ buffer์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ Response ๊ฐ์ฒด ์•ˆ์˜ std::string _body ๋กœ ์ €์žฅํ•  ๋•Œ std::stirng(buf) ์ƒ์„ฑ์ž๋กœ ์ €์žฅํ•ด์™”๋˜ ๊ฒƒ์ด ํ™”๊ทผ์ด์—ˆ๋‹ค. ์ด๋Ÿฐ์‹์œผ๋กœ ๊ฐ’์„ ์ €์žฅํ•˜๋ฉด buf ์•ˆ์— ์žˆ๋Š” '\0' ๋ฌธ์ž๊นŒ์ง€์˜ ๋ฐ์ดํ„ฐ๋งŒ string ๊ฐ์ฒด์— ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

std::string(buf, bytes) ๋กœ ์ˆ˜์ •ํ•˜์—ฌ, '\0'๊นŒ์ง€๋งŒ์ด ์•„๋‹ˆ๋ผ bytes ๊ธธ์ด๋งŒํผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋„๋ก ํ•˜์—ฌ ํ•ด๊ฒฐํ•˜์˜€๋‹ค.

  1. ํ•™์Šต ๋‚ด์šฉ์— ๋Œ€ํ•œ ๊ฐœ์ธ์ ์ธ ์ดํ‰

์–ด๋–ค ๋ฌธ์ œ๋“ , ๋กœ๊ทธ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์ฐจ๋ถ„ํžˆ ์ถ”๋ก ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋“œ๋Ÿฌ๋‚˜๋Š” ๊ฒƒ์„ ์‹ค๊ฐํ•ฉ๋‹ˆ๋‹ค.

subject์˜ ์กฐ๊ฑด์— ๋งž์ถฐ์„œ select ํ›„ ํ•œ๋ฒˆ์˜ read๋งŒ ํ•˜๋Š” ๊ฒƒ์„ ํ™•์‹คํžˆ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ๋Œ€๋Œ€์ ์ธ ํ๋ฆ„ ๊ฐœ์„ ์„ ์ง„ํ–‰ํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

  1. client๊ฐ€ BUFFER_SIZE ๋ณด๋‹ค ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด์™”์„ ๋•Œ ์—ฌ๋Ÿฌ๋ฒˆ์˜ select๋ฅผ ๊ฑฐ์ณ readํ•˜์—ฌ Request๋กœ ๊ฐ์ฒด๋กœ ๋ฐ›์•„๋‚ด๋Š” ๊ฒƒ

  2. Request body๊ฐ€ BUFFER_SIZE ๋ณด๋‹ค ํด ๋•Œ ์—ฌ๋Ÿฌ๋ฒˆ์˜ select๋ฅผ ๊ฑฐ์ณ writeํ•˜์—ฌ CGI์— body๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒƒ.

  3. CGI message๊ฐ€ BUFFER_SIZE ๋ณด๋‹ค ํด ๋•Œ ์—ฌ๋Ÿฌ๋ฒˆ์˜ select๋ฅผ ๊ฑฐ์ณ readํ•˜์—ฌ Response _body๋กœ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ฒƒ.

  4. Static resource ์šฉ๋Ÿ‰์ด BUFFER_SIZE๋ณด๋‹ค ํด ๋•Œ ์—ฌ๋Ÿฌ๋ฒˆ์˜ select๋ฅผ ๊ฑฐ์ณ readํ•˜์—ฌ Response _body๋กœ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ฒƒ.

  5. Response _body๊ฐ€ BUFFER_SIZE๋ณด๋‹ค ํด ๋•Œ ์—ฌ๋Ÿฌ๋ฒˆ์˜ select๋ฅผ ๊ฑฐ์ณ wrtieํ•˜์—ฌ Client์— sendํ•˜๋Š” ๊ฒƒ.

  6. chunked ํ†ต์‹ ์ด ์œ ์˜๋ฏธํ•˜๋„๋ก CGI๋กœ๋ถ€ํ„ฐ ๋ฉ”์„ธ์ง€๋ฅผ select๋ฅผ ๊ฑฐ์ณ readํ•˜๊ณ  readํ•œ ๋‚ด์šฉ์„ select๋ฅผ ๊ฑฐ์ณ chunked ์ธ์ฝ”๋”ฉํ•˜์—ฌ client์— sendํ•˜๊ณ , ๋‹ค์‹œ CGI๋กœ๋ถ€ํ„ฐ ๋ฉ”์„ธ์ง€๋ฅผ select๋ฅผ ๊ฑฐ์ณ readํ•˜๊ณ ... ํ•˜๋Š” ๊ณผ์ •์„ CGI๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ.

์‚ฌ์‹ค ์ง„์งœ ์ด ๋ชจ๋“  ์กฐ๊ฑด์„ ์™„๋ฒฝํžˆ ๋งŒ์กฑํ•œ ์›น์„œ๋ฒ„๋ฅผ ๊ตฌํ˜„ํ•˜์‹  ๋ถ„์€ ์ž˜ ์—†๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ, ํŒ€์›๋“ค๊ณผ '๋™๋ฃŒ์—๊ฒŒ ๋‹น๋‹นํ•˜๊ฒŒ ๋‚ด๋ณด์ผ ์ˆ˜ ์žˆ๋Š” ์›น์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค์ž๋Š” ์ƒ๊ฐ'์„ ๊ณต์œ ํ•˜๊ณ  ์žˆ์–ด์„œ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํŒ€์›๋“ค์ด ๊ณ ๋ง™๊ณ  ์ž๋ž‘์Šค๋Ÿฝ๋„ค์š”. ๋‹จ์ˆœํžˆ ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ต๊ณผํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“  ๊ฒƒ์€ ๊ทธ๋Ÿด ์ˆ˜ ์žˆ๋‹ค์ณ๋„, ๊ธฐ์ดˆ์ ์ธ subject ์š”๊ตฌ์‚ฌํ•ญ์„ ์ง€ํ‚ค์ง€์•Š๊ณ  ๋˜ ๊ธฐ์ดˆ์ ์ธ crash protect ์ฒ˜๋ฆฌ๋„ ์—†์ด ๊ณผ์ œ๋ฅผ ๊ตฌํ˜„ํ–ˆ๋Š”๋ฐ ๋ถˆ๊ตฌํ•˜๊ณ  ์ •๋‹นํ•œ ํ‰๊ฐ€๋ฅผ ์–ต์šธํ•˜๊ฒŒ ์ƒ๊ฐํ•˜๊ณ  ๋˜๋ ค ํ‰๊ฐ€์ž๋ฅผ ์ ๋Œ€ํ•˜๋Š”.. ์‹ ๋น„๋กœ์šด ํŒ€๊ณผ๋Š” ๋‹ค๋ฅธ ์ธ์„ฑ์ด๋ผ ๊ฐ์‚ฌํ•  ๋”ฐ๋ฆ„์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ํ•™์Šต ๊ณ„ํš

  • Transfer-Encoding ํ—ค๋” ๊ตฌํ˜„

Last updated

Was this helpful?