H2o: ๋กœ๊น… ํ•ธ๋“ค๋Ÿฌ

์— ๋งŒ๋“  2017๋…„ 12์›” 16์ผ  ยท  7์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: h2o/h2o

์•ก์„ธ์Šค ๋กœ๊ทธ ํ˜•์‹ํ™”/์ œ์–ด๋ฅผ ์œ„ํ•ด mruby ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ h2o conf์˜ ๋ชจ๋“  ๊ฒฝ๋กœ์— mruby-handler-file ์ง€์‹œ๋ฌธ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋กœ๊ทธ ์ง€์‹œ๋ฌธ์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•ด ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ํ•ด๋‹น ๋ฒ”์œ„ ๋‚ด์—์„œ ๋ชจ๋“  ์š”์ฒญ/์‘๋‹ต์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์‚ฌ๋ก€:

  • ๋ชจ๋“  ์š”์ฒญ ํ—ค๋”๋ฅผ accesslog์— ์ถ”๊ฐ€
  • ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํ†ตํ•ด ๊ฐ’์„ json/ltsv ๋“ฑ์œผ๋กœ ํ˜•์‹ ์ง€์ •
  • ํ•ธ๋“ค๋Ÿฌ์—์„œ ๋กœ๊ทธ ํŒŒ์ผ ๋ผ์šฐํŒ…/ํšŒ์ „

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@Jxck ์™€ ์ด์•ผ๊ธฐํ•˜๊ณ  ๋ชจ๋“  ์š”์ฒญ ํ—ค๋”( \n ์™€ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅ) ๋˜๋Š” ์‘๋‹ต ํ—ค๋”๋ฅผ ๊ธฐ๋กํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋กœ๊น… ์ง€์‹œ๋ฌธ์„ ๊ฐ–๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  7 ๋Œ“๊ธ€

์•ˆ๋…•ํ•˜์„ธ์š” @Jxck
์–ธ๊ธ‰ํ•œ ๋Œ€๋ถ€๋ถ„์˜ ์ž‘์—…์€ ์ด๋ฏธ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฌธ์„œํ™”๊ฐ€ ์•ฝ๊ฐ„ ๋ถ€์กฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋กœ๊ทธ ํŒŒ์ผ ํšŒ์ „์€ ํŒŒ์ดํ”„๋ฅผ ํ†ตํ•ด ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ตœ๊ทผ์— ์—ฌ๊ธฐ์—์„œ ๋ฌธ์„œ๋ฅผ ์•ฝ๊ฐ„ ๊ฐœ์„ ํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.
https://github.com/h2o/h2o/pull/1528

json์„ ํ†ตํ•œ ๋กœ๊ทธ ํ˜•์‹ํ™”๋Š” ์ด๋ฏธ escape: json ๋ฅผ ํ†ตํ•ด ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ™•์‹คํžˆ ๋ชจ๋“  ํ—ค๋”๋ฅผ ๋กœ๊น…ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ด์•ผ ํ•˜์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. iirc ํ•œ ๋ฒˆ ํ‹ฐ์ผ“์„ ์—ด์—ˆ์ง€๋งŒ ์ง€๊ธˆ์€ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๋‚˜๋Š” mruby์—์„œ์ด ํ•ดํ‚น์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

headers = JSON.dump(env.find_all{|k,v| k.start_with?("HTTP_")})
[200, {  "x-fallthru-set-MRB_HEADERS" => headers }, [result]]

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹ค์Œ์„ ํ†ตํ•ด ๋กœ๊ทธ์ธํ•˜์‹ญ์‹œ์˜ค.

access-log: 
  path: /dev/stdout
  format: '{ "requestHeaders": %{MRB_HEADERS}e }'
  escape: json

๋‚˜๋Š” ๋‹จ์ง€ ๋กœ๊ทธ๋ฅผ ์กฐ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ํ˜ธ์ถœ์— ๋Œ€ํ•ด mruby ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๋Š” ๋‹น์‹ ์˜ ์ƒ๊ฐ์ด ๋ง์ด ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋„ˆ๋ฌด ๋น„์Œ€ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚ด ๋ฌธ์ œ์˜ ํ•ต์‹ฌ์€ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๋ผ ๊ฒฝ๋กœ์— ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
๋‚ด๊ฐ€ ์“ด ๊ฒƒ์ฒ˜๋Ÿผ

ํ•˜์ง€๋งŒ h2o conf์˜ ๋ชจ๋“  ๊ฒฝ๋กœ์— mruby-handler-file ์ง€์‹œ๋ฌธ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ 

๋„ˆ๋ฌด ๋น„์Œ€ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ์œ ์Šค ์ผ€์ด์Šค์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.
access-log๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด ๋กœ๊ฑฐ๊ฐ€ ์ด๋ฏธ ์„œ๋ฒ„์— ๋Œ€ํ•œ req/res์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

@Jxck ๋ฌธ์ œ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋‚˜์—๊ฒŒ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๊ณ  ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์ƒ˜ํ”Œ ๊ตฌ์„ฑ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@Jxck ์™€ ์ด์•ผ๊ธฐํ•˜๊ณ  ๋ชจ๋“  ์š”์ฒญ ํ—ค๋”( \n ์™€ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅ) ๋˜๋Š” ์‘๋‹ต ํ—ค๋”๋ฅผ ๊ธฐ๋กํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋กœ๊น… ์ง€์‹œ๋ฌธ์„ ๊ฐ–๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

@kazuho ๊ทธ๋“ค์˜ ๋ชจ์Šต์ด ๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค!

@kazuho
๊ฐ์ฒด ๋˜๋Š” ๋ฐฐ์—ด ๋ฐฐ์—ด๋กœ json ๋ชจ๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋„ ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋‚˜๋Š” ๋˜ํ•œ ํ˜„์žฌ mruby๋ฅผ ํ†ตํ•ด ๊ธฐ๋กํ•˜๊ณ  ์žˆ์ง€๋งŒ ์›๋ž˜ ํ˜•์‹์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ถ”์•…ํ•ฉ๋‹ˆ๋‹ค.

์–ด๋–ค ์—…๋ฐ์ดํŠธ?

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰

๊ด€๋ จ ๋ฌธ์ œ

voiddeveloper picture voiddeveloper  ยท  6์ฝ”๋ฉ˜ํŠธ

Ys88 picture Ys88  ยท  5์ฝ”๋ฉ˜ํŠธ

concatime picture concatime  ยท  3์ฝ”๋ฉ˜ํŠธ

utrenkner picture utrenkner  ยท  7์ฝ”๋ฉ˜ํŠธ

basbebe picture basbebe  ยท  3์ฝ”๋ฉ˜ํŠธ