2020-11-18(Wed)

  1. ํ•™์Šต ๋‚ ์งœ // 2020-11-18(์ˆ˜)

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

  3. ํ•™์Šต ๋ฒ”์œ„ ๋ฐ ์ฃผ์ œ // webserv ์˜ค๋ฅ˜

  4. ๋™๋ฃŒ ํ•™์Šต ๋ฐฉ๋ฒ• // yohai๋‹˜๊ณผ ํŽ˜์–ดํ”„๋กœ๊ทธ๋ž˜๋ฐ, sanam๋‹˜๊ณผ ํ† ์˜

  5. ํ•™์Šต ๋ชฉํ‘œ // CGI ํ†ต์‹ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜์˜ ์›์ธ์„ ํ™•์ธํ•˜์—ฌ ์ œ๊ฑฐํ•œ๋‹ค.

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

![image](https://user-images.githubusercontent.com/54612343/99902794-be8d1180-2d03-11eb-90e5-5c90548be584.png![image](https://user-images.githubusercontent.com/54612343/99903531-5f7dcb80-2d08-11eb-815a-e09f31931e61.png)

image-20201122212039023
image-20201122212109307
image-20201122212131480

๋ฌธ์ œ) CGI pipe์— write ํ•  ๋•Œ pipe_broken error๋Š” ์™œ ๋ฐœ์ƒํ•˜๋Š”๊ฑธ๊นŒ, ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ป๊ฒŒ ๋Œ€์ฒ˜ํ•˜๋Š”๊ฐ€?

ํ•ด๋‹ต) ์ •ํ™•ํ•œ ์›์ธ์€ ํ™•์ธ ๋ชปํ–ˆ์œผ๋‚˜ CGI๊ฐ€ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•  ์†๋„๋กœ writeํ•ด์ฃผ๋ฉด CGI ์‹คํ–‰ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜๋Š” ๋“ฏํ•˜๋‹ค. usleep์œผ๋กœ ํ…Œ์Šคํ„ฐ CGI์— writeํ•˜๋Š” ์†๋„๋ฅผ ์กฐ์ ˆํ•ด์ฃผ์ž ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค.

๋ฌผ๋ก  write ๋Œ€์ƒ fd๊ฐ€ ๋‹ซํžŒ ์ƒํƒœ์ธ๋ฐ ๋ถˆ๊ตฌํ•˜๊ณ  writeํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ž„์„ ์•Œ์ง€๋งŒ, CGI pipe๋Š” ๋‹ซ์€ ์ ์ด ์—†๋‹ค. ๊ทธ๋Ÿผ ๋„๋Œ€์ฒด ์™œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ฑธ๊นŒ??

์†”์งํžˆ ๋งํ•˜๋ฉด ์™„๋ฒฝํ•˜๊ฒŒ ์›์ธ์„ ์•Œ์•„๋‚ธ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ถ”์ •์€ ํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

  1. writeํ•˜๋Š” ์ค‘์— ๋ฐœ์ƒํ•˜๋Š” broken_pipe ๋Š” write ๋Œ€์ƒ fd๊ฐ€ ๋‹ซํ˜”์„ ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•œ๋‹ค.

  2. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” pipe์˜ side_in์„ ๋‹ซ์€ ์ ์ด ์—†๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด?

  3. ์•„๋งˆ ์ž์‹ํ”„๋กœ์„ธ์Šค, ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ CGI ์‹คํ–‰ํ”„๋กœ์„ธ์Šค์—์„œ ํŒŒ์ดํ”„๋ฅผ ๋‹ซ์•˜๊ฑฐ๋‚˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜์–ด exit๊ฐ€ ์‹คํ–‰๋˜์–ด ์ž์›์ด ๋ฐ˜ํ™˜๋˜์—ˆ์„ ๊ฒƒ์ด๋‹ค.

์žฌ๋ฐŒ๋Š”๊ฒŒ ์ด๋Š” ์šฐ๋ฆฌ๊ฐ€ CGI์— write ํ•ด์ฃผ๋Š” ์†๋„๋ฅผ usleep์œผ๋กœ ์™„๊ธ‰์กฐ์ ˆํ•ด์ฃผ๋ฉด ์–ผ์ถ” ํ•ด๊ฒฐ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์˜ˆ์ƒ์ปจ๋ฐ CGI๊ฐ€ pipe buffer๋กœ๋ถ€ํ„ฐ readํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์„œ๋ฒ„๊ฐ€ pipe buffer์— writeํ•˜๋Š” ์†๋„๊ฐ€ ํ›จ์”ฌ ๋น ๋ฅด๋ฉด ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ฒƒ ์•„๋‹๊นŒ ์‹ถ๋‹ค. ํ…Œ์Šคํ„ฐ๋กœ ์ฃผ์–ด์ง„ CGI๊ฐ€ read๋ฅผ ํ•ด์˜ค๋Š” ์†๋„๊ฐ€ ์ข€ ๋А๋ฆฐ ํƒ“์— ๋ฒ„ํผ๊ฐ€ ํ„ฐ์ง€๋Š”๊ฑด ์•„๋‹๊นŒ? pipe buffer๊ฐ€ ๊ฐ€๋“์ฐผ๋‹ค๋ฉด writeํ•  ๋•Œ blocking ๋˜์ง€๋งŒ, ์šฐ๋ฆฌ๋Š” non-blocking ๋˜๊ณ  ์žˆ์œผ๋‹ˆ.. ์ด ๋ถ€๋ถ„์€ send์— MSG_DONTWAIT ์˜ต์…˜์„ ๋‘๋ฉด errno๋กœ ๊ด€์ธก ๊ฐ€๋Šฅํ•œ๋ฐ, subject์—์„œ errno ๊ด€์ธก์„ ๊ธˆํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋Œ€์•ˆ์ด ๋˜์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™๋‹ค. (์—„๋ฐ€ํžˆ ๋งํ•˜๋ฉด read/write ์ค‘ errno ๊ด€์ธก๋งŒ ๊ธˆํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™๊ธฐ๋„ ํ•œ๋ฐ.. subject๊ฐ€ ์ฐธ ๋ชจํ˜ธํ•˜๋‹ค;)

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

ํ›„ usleep์“ฐ๋Š” ๊ฒƒ์€ ๋ญ”๊ฐ€ ์šฐ์•„ํ•˜์ง€ ์•Š์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋А๊ปด์ง€๋Š”๋ฐ ์“ฐ๊ณ  ๋ง์•˜์Šต๋‹ˆ๋‹ค. write์™€ read์˜ ์†๋„๊ฐ€ ๋‹ค๋ฅด๋‹ค๋Š” ์ ์€ ์•Œ๊ณ  ์žˆ์—ˆ์ง€๋งŒ buffer์— ๋Œ€ํ•œ ์ง€์‹์ด ๋ถ€์กฑํ•œ ๊ฒƒ์„ ๋А๊ผˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ non-blocking์ƒํ™ฉ์—์„œ ๊ณ„์† write๋ฅผ ํ•˜๊ฑฐ๋‚˜ read๋ฅผ ํ•˜๋ฉด ์–ด๋–ค ํ˜„์ƒ์ด ์ผ์–ด๋‚˜๋Š”์ง€๋Š” ๋ช…ํ™•ํžˆ ๋ชจ๋ฅด๋„ค์š”, ์„œ์นญ๋Šฅ๋ ฅ์ด ๋ถ€์กฑํ•œ์ง€ errno๊ฐ€ ๋˜์ ธ์ง€๋Š” ๊ฒƒ ์™ธ์— broken_pipe ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ• ๋งŒํ•œ ์ผ์€ ์ฒ ์ €ํžˆ ์ถ”์ธกํ•ด์„œ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์Šคํ„ฐ๋กœ ์ฃผ์–ด์ง„ cgi tester๊ฐ€ ์–ด๋–ค ์ฝ”๋“œ๋กœ ๊ตฌํ˜„๋˜์–ด์žˆ๋Š”์ง€ ์•ˆ๋‹ค๋ฉด ๋„์›€์ด ๋ ํ…๋ฐ, ๋ฆฌ๋ฒ„์Šค ์—”์ง€๋‹ˆ์–ด๋ง์ด๋ผ๋„ ํ•ด๋ด์•ผํ•˜๋‚˜?! ์‹ถ์—ˆ์Šต๋‹ˆ๋‹คใ…Žใ…Ž ๋ฌผ๋ก  ์•Œ๋งŒํ•œ ๋ถ„ํ•œํ…Œ ๋ฌผ์–ด๋ณด๋Š”๊ฑธ ๋จผ์ € ํ•ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค.

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

  • CGI ํ†ต์‹ 

Last updated

Was this helpful?