API Gateway ์ƒ์„ฑ ๊ฒฝํ—˜

์šฐ๋ฆฌ ๊ณ ๊ฐ์„ ํฌํ•จํ•œ ์ผ๋ถ€ ํšŒ์‚ฌ๋Š” ์ œํœด ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์ œํ’ˆ์„ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋Œ€ํ˜• ์˜จ๋ผ์ธ ์ƒ์ ์€ ๋ฐฐ์†ก ์„œ๋น„์Šค์™€ ํ†ตํ•ฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ œํ’ˆ์„ ์ฃผ๋ฌธํ•˜๋ฉด ๊ณง ์†Œํฌ ์ถ”์  ๋ฒˆํ˜ธ๋ฅผ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ ์˜ˆ๋Š” ํ•ญ๊ณต๊ถŒ๊ณผ ํ•จ๊ป˜ ๋ณดํ—˜์ด๋‚˜ Aeroexpress ํ•ญ๊ณต๊ถŒ์„ ๊ตฌ๋งคํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด API ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ํ†ตํ•ด ํŒŒํŠธ๋„ˆ์—๊ฒŒ ๋ฐœ๊ธ‰๋˜์–ด์•ผ ํ•˜๋Š” ํ•˜๋‚˜์˜ API๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ์‚ฌ์—์„œ๋Š” ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์•Œ๋ ค ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

์ฃผ์–ด์ง„ ๋‚ด์šฉ: ์‚ฌ์šฉ์ž๊ฐ€ ๋“ฑ๋กํ•˜๊ณ  ์ •๋ณด๋ฅผ ๋ฐ›๋Š” ๋“ฑ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ–์ถ˜ ์ƒํƒœ๊ณ„์™€ API ํฌํ„ธ ํŽธ๋ฆฌํ•˜๊ณ  ์•ˆ์ •์ ์ธ API ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ณผ์ •์—์„œ ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ์„ ๋ณด์žฅํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ๋“ฑ๋ก,
  • API ์—ฐ๊ฒฐ ์ œ์–ด,
  • ์‚ฌ์šฉ์ž๊ฐ€ ์ตœ์ข… ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ ,
  • ๋น„์ฆˆ๋‹ˆ์Šค ์ง€ํ‘œ ํšŒ๊ณ„.

API Gateway ์ƒ์„ฑ ๊ฒฝํ—˜

์ด ๊ธฐ์‚ฌ์—์„œ๋Š” API Gateway๋ฅผ ์ƒ์„ฑํ•˜๋ฉด์„œ ๋‹ค์Œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ ๊ฒฝํ—˜์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

  • ์‚ฌ์šฉ์ž ์ธ์ฆ,
  • ์‚ฌ์šฉ์ž ์ธ์ฆ,
  • ์›๋ž˜ ์š”์ฒญ์„ ์ˆ˜์ •ํ•˜๊ณ ,
  • ์š”์ฒญ์„ ํ”„๋ก์‹œํ•˜๊ณ ,
  • ์‘๋‹ต ํ›„์ฒ˜๋ฆฌ.


API ๊ด€๋ฆฌ์—๋Š” ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

1. ํ‘œ์ค€์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ฒฐํ•˜๊ธฐ ์ „์— ์‚ฌ์šฉ์ž๋Š” ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•œ ๋‹ค์Œ ๋น„์šฉ์„ ์ง€๋ถˆํ•˜๊ณ  ์›น์‚ฌ์ดํŠธ์— ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„ ์ค‘์†Œ๊ธฐ์—…์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

2. ๋Œ€๊ทœ๋ชจ B2B API ๊ด€๋ฆฌ๋Š” ํšŒ์‚ฌ๊ฐ€ ์ฒ˜์Œ ์—ฐ๊ฒฐํ•˜๊ธฐ๋กœ ์‚ฌ์—…์  ๊ฒฐ์ •์„ ๋‚ด๋ฆด ๋•Œ ๊ณ„์•ฝ์ƒ์˜ ์˜๋ฌด๋ฅผ ๊ฐ€์ง€๊ณ  ํšŒ์‚ฌ์˜ ํŒŒํŠธ๋„ˆ๊ฐ€ ๋œ ํ›„ API์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋“  ์ ˆ์ฐจ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ํšŒ์‚ฌ๋Š” ํ…Œ์ŠคํŠธ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ฐ›๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ๊ฑฐ์ณ ์ƒ์‚ฐ์— ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ๊ฒฝ์˜์ง„์˜ ๊ฒฐ์ • ์—†์ด๋Š” ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

API Gateway ์ƒ์„ฑ ๊ฒฝํ—˜

์šฐ๋ฆฌ์˜ ์†”๋ฃจ์…˜

์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” API Gateway ์ƒ์„ฑ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ƒ์„ฑ๋˜๋Š” API ๊ฒŒ์ดํŠธ์›จ์ด์˜ ์ตœ์ข… ์‚ฌ์šฉ์ž๋Š” ๊ณ ๊ฐ์˜ ํŒŒํŠธ๋„ˆ์ž…๋‹ˆ๋‹ค. ๊ฐ๊ฐ์— ๋Œ€ํ•ด ํ•„์š”ํ•œ ๊ณ„์•ฝ์ด ์ด๋ฏธ ์ €์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒŒ์ดํŠธ์›จ์ด์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜์—ฌ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ œ์–ด๋œ ์—ฐ๊ฒฐ ๋ฐ ๊ด€๋ฆฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ฌผ๋ก  API ๊ด€๋ฆฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ํŠนํžˆ API ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์„ฑ ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Azure API ๊ด€๋ฆฌ. ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ ์ด๋ฏธ API ํฌํ„ธ๊ณผ ์ด๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๊ตฌ์ถ•๋œ ๊ฑฐ๋Œ€ํ•œ ์ƒํƒœ๊ณ„๊ฐ€ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Š” ์šฐ๋ฆฌ์—๊ฒŒ ์ ํ•ฉํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์‚ฌ์šฉ์ž๋Š” ์ด๋ฏธ ๋“ฑ๋ก๋˜์–ด ์žˆ์œผ๋ฉฐ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์–ด๋””์„œ, ์–ด๋–ป๊ฒŒ ์–ป์„ ์ˆ˜ ์žˆ๋Š”์ง€ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ด๋ฏธ API ํฌํ„ธ์— ์กด์žฌํ•˜๋ฉฐ API ๊ฒŒ์ดํŠธ์›จ์ด๋งŒ ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ API ๊ฒŒ์ดํŠธ์›จ์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ์€ ์ผ์ข…์˜ ํ”„๋ก์‹œ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋„ ์„ ํƒ์˜ ์—ฌ์ง€๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ž์‹ ๋งŒ์˜ ํ”„๋ก์‹œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜๋„ ์žˆ๊ณ  ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์„ ์„ ํƒํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์šฐ๋ฆฌ๋Š” ๋‘ ๋ฒˆ์งธ ๊ฒฝ๋กœ๋ฅผ ์„ ํƒํ•˜๊ณ  nginx+Lua ์กฐํ•ฉ์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์™œ? ์šฐ๋ฆฌ๋Š” ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•˜๊ณ  ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ๊ฑฐ์นœ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ์ •ํ™•์„ฑ๊ณผ ๊ตฌํ˜„ ํ›„ ํ”„๋ก์‹œ์˜ ์˜ฌ๋ฐ”๋ฅธ ์ž‘๋™์„ ๋ชจ๋‘ ํ™•์ธํ•˜๊ณ  ์‹ถ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ์›น ์„œ๋ฒ„์—๋Š” ์š”์ฒญ ์ฒ˜๋ฆฌ ํŒŒ์ดํ”„๋ผ์ธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. nginx์˜ ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

API Gateway ์ƒ์„ฑ ๊ฒฝํ—˜

(๋‹ค์ด์–ด๊ทธ๋žจ GitHub ๋ฃจ์•„ Nginx)

์šฐ๋ฆฌ์˜ ๋ชฉํ‘œ๋Š” ์›๋ž˜ ์š”์ฒญ์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์ง€์ ์—์„œ ์ด ํŒŒ์ดํ”„๋ผ์ธ์— ์šฐ๋ฆฌ ์ž์‹ ์„ ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๊ธฐ๋Šฅ์ ์œผ๋กœ ์š”์ฒญ์ด ์˜จ ๊ฒƒ๊ณผ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋˜๋„๋ก ํˆฌ๋ช…ํ•œ ํ”„๋ก์‹œ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ตœ์ข… API์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋งŒ ์ œ์–ดํ•˜๊ณ  ์š”์ฒญ์ด API์— ๋„๋‹ฌํ•˜๋„๋ก ๋•์Šต๋‹ˆ๋‹ค. ์š”์ฒญ์ด ์ž˜๋ชป๋œ ๊ฒฝ์šฐ ์ตœ์ข… API์—๋Š” ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋˜์ง€๋งŒ ์šฐ๋ฆฌ์—๊ฒŒ๋Š” ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์š”์ฒญ์„ ๊ฑฐ๋ถ€ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ์ด์œ ๋Š” ํด๋ผ์ด์–ธํŠธ์— ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

nginx์—๋Š” ์ด๋ฏธ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ํ™•๋Œ€ ์— ๋ฃจ์•„. Lua๋Š” ์Šคํฌ๋ฆฝํŒ… ์–ธ์–ด๋กœ ๋งค์šฐ ๊ฐ€๋ณ๊ณ  ๋ฐฐ์šฐ๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” Lua๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ๋กœ์ง์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋Š” nginx ๊ตฌ์„ฑ(๋ผ์šฐํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์œ ์‚ฌ)์€ ๋งค์šฐ ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ฃผ๋ชฉํ•  ๋งŒํ•œ ๋งˆ์ง€๋ง‰ ์ง€์‹œ๋ฌธ์€ post_action์ž…๋‹ˆ๋‹ค.

location /middleware {
      more_clear_input_headers Accept-Encoding;
      lua_need_request_body on;
      rewrite_by_lua_file 'middleware/rewrite.lua';
      access_by_lua_file 'middleware/access.lua';
      proxy_pass https://someurl.com;
      body_filter_by_lua_file 'middleware/body_filter.lua';
      post_action /process_session;
}

์ด ๊ตฌ์„ฑ์—์„œ ์–ด๋–ค ์ผ์ด ๋ฐœ์ƒํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
more_clear_input_headers โ€” ์ง€์‹œ์–ด ๋’ค์— ์ง€์ •๋œ ํ—ค๋” ๊ฐ’์„ ์ง€์›๋‹ˆ๋‹ค.
lua_need_request_body - rewrite/access/access_by_lua ์ง€์‹œ๋ฌธ์„ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ์›๋ž˜ ์š”์ฒญ ๋ณธ๋ฌธ์„ ์ฝ์–ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ nginx๋Š” ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ๋ณธ๋ฌธ์„ ์ฝ์ง€ ์•Š์œผ๋ฉฐ, ์•ก์„ธ์Šคํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ด ์ง€์‹œ๋ฌธ์„ on์œผ๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
rewrite_by_lua_file โ€” ์š”์ฒญ ์ˆ˜์ • ๋…ผ๋ฆฌ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ ๊ฒฝ๋กœ
access_by_lua_file โ€” ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ํ™•์ธํ•˜๋Š” ๋…ผ๋ฆฌ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค.
ํ”„๋ก์‹œ ํŒจ์Šค โ€” ์š”์ฒญ์ด ํ”„๋ก์‹œ๋  URL์ž…๋‹ˆ๋‹ค.
body_filter_by_lua_file โ€” ํด๋ผ์ด์–ธํŠธ์— ์š”์ฒญ์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์ „์— ์š”์ฒญ์„ ํ•„ํ„ฐ๋งํ•˜๋Š” ๋…ผ๋ฆฌ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ, post_action - ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ต์ด ์ œ๊ณต๋œ ํ›„ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต์‹์ ์œผ๋กœ ๋ฌธ์„œํ™”๋˜์ง€ ์•Š์€ ์ง€์‹œ์–ด์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋Š”์ง€ ์ˆœ์„œ๋Œ€๋กœ ์•Œ๋ ค ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

์Šน์ธ/์ธ์ฆ ๋ฐ ์ˆ˜์ •์š”์ฒญ

๊ถŒํ•œ ๋ถ€์—ฌ

์ธ์ฆ์„œ ์•ก์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ถŒํ•œ ๋ถ€์—ฌ ๋ฐ ์ธ์ฆ์„ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฃจํŠธ ์ธ์ฆ์„œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณ ๊ฐ์˜ ์ƒˆ๋กœ์šด ๊ฐ ํด๋ผ์ด์–ธํŠธ๋Š” API์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐœ์ธ ์ธ์ฆ์„œ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด ์ธ์ฆ์„œ๋Š” nginx ์„ค์ •์˜ ์„œ๋ฒ„ ์„น์…˜์—์„œ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

ssl on;
ssl_certificate /usr/local/openresty/nginx/ssl/cert.pem;
ssl_certificate_key /usr/local/openresty/nginx/ssl/cert.pem;
ssl_client_certificate /usr/local/openresty/nginx/ssl/ca.crt;
ssl_verify_client on;

์ˆ˜์ •

๊ณต์ •ํ•œ ์งˆ๋ฌธ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ์ฆ๋œ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ฐ‘์ž๊ธฐ ์‹œ์Šคํ…œ์—์„œ ์—ฐ๊ฒฐ ํ•ด์ œํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋‹ค๋ฅธ ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•ด ์ธ์ฆ์„œ๋ฅผ ์žฌ๋ฐœ๊ธ‰ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ์›๋ž˜ ์š”์ฒญ์„ ์ˆ˜์ •ํ•˜๋Š” ๋‹ค์Œ ์ž‘์—…์— ์ˆœ์กฐ๋กญ๊ฒŒ ์ ‘๊ทผํ–ˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์˜ ์›๋ž˜ ์š”์ฒญ์€ ์ตœ์ข… ์‹œ์Šคํ…œ์— ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž‘์—… ์ค‘ ํ•˜๋‚˜๋Š” ๋ˆ„๋ฝ๋œ ๋ถ€๋ถ„์„ ์š”์ฒญ์— ์ถ”๊ฐ€ํ•˜์—ฌ ์œ ํšจํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์š”์ ์€ ๋ˆ„๋ฝ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋งˆ๋‹ค ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ง€๋ฌธ์„ ์ฑ„์ทจํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ํ•„์š”ํ•œ ํด๋ผ์ด์–ธํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ธ์ฆ์„œ๋ฅผ ๊ฐ€์ง€๊ณ  ์šฐ๋ฆฌ์—๊ฒŒ ์˜จ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด๋А ์‹œ์ ์— ๊ท€ํ•˜๊ฐ€ ๋‹น์‚ฌ ์„œ๋น„์Šค์—์„œ ํด๋ผ์ด์–ธํŠธ์˜ ์—ฐ๊ฒฐ์„ ๋Š์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น ํด๋ผ์ด์–ธํŠธ์˜ ๋ฐ์ดํ„ฐ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์‚ฌ๋ผ์ง€๊ณ  ํด๋ผ์ด์–ธํŠธ๋Š” ์•„๋ฌด๊ฒƒ๋„ ํ•  ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ ๋ฐ์ดํ„ฐ ์ž‘์—…

์šฐ๋ฆฌ๋Š” ์†”๋ฃจ์…˜, ํŠนํžˆ ๊ณ ๊ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป๋Š” ๋ฐฉ๋ฒ•์˜ ๊ณ ๊ฐ€์šฉ์„ฑ์„ ๋ณด์žฅํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์ด ๋ฐ์ดํ„ฐ์˜ ์ฃผ์š” ์†Œ์Šค๊ฐ€ ์ œ3์ž ์„œ๋น„์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๋‹จ ์—†์ด ์ถฉ๋ถ„ํžˆ ๋น ๋ฅธ ์†๋„๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ๊ณ ๊ฐ ๋ฐ์ดํ„ฐ์˜ ๊ณ ๊ฐ€์šฉ์„ฑ์„ ๋ณด์žฅํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋„๊ตฌ๋กœ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค ํ—ค์ด์ ค ์บ์ŠคํŠธ์ด๋Š” ์šฐ๋ฆฌ์—๊ฒŒ ๋‹ค์Œ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

  • ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๋น ๋ฅธ ์ ‘๊ทผ,
  • ์„œ๋กœ ๋‹ค๋ฅธ ๋…ธ๋“œ์— ๋ณต์ œ๋œ ๋ฐ์ดํ„ฐ๋กœ ์—ฌ๋Ÿฌ ๋…ธ๋“œ์˜ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ.

์šฐ๋ฆฌ๋Š” ์บ์‹œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์ „๋žต์„ ๋”ฐ๋ž์Šต๋‹ˆ๋‹ค.

API Gateway ์ƒ์„ฑ ๊ฒฝํ—˜

์ตœ์ข… ์‹œ์Šคํ…œ ์ž‘์—…์€ ์„ธ์…˜ ๋‚ด์—์„œ ์ด๋ฃจ์–ด์ง€๋ฉฐ ์ตœ๋Œ€ ๊ฐœ์ˆ˜์—๋Š” ์ œํ•œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ธ์…˜์„ ๋‹ซ์ง€ ์•Š์œผ๋ฉด ์ด๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ณต๊ฐœ ์„ธ์…˜ ๋ฐ์ดํ„ฐ๋Š” ์ตœ์ข… ์‹œ์Šคํ…œ์—์„œ ์ œ๊ณต๋˜๋ฉฐ ์ฒ˜์Œ์—๋Š” Lua ์ธก์—์„œ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” .NET์œผ๋กœ ์ž‘์„ฑ๋œ ์ž‘์—…์œผ๋กœ ์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด Hazelcast๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์–ด๋А ์ •๋„ ๋นˆ๋„๋กœ ์—ด๋ ค ์žˆ๋Š” ์„ธ์…˜์˜ ์ˆ˜๋ช…์„ ํ™•์ธํ•˜๊ณ  ์ฉ์€ ์„ธ์…˜์„ ๋‹ซ์Šต๋‹ˆ๋‹ค.

Lua์™€ .NET ๋ชจ๋‘์—์„œ Hazelcast์— ์•ก์„ธ์Šคํ•˜์„ธ์š”.

Hazelcast์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” Lua ํด๋ผ์ด์–ธํŠธ๋Š” ์—†์ง€๋งŒ Hazelcast์—๋Š” ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•œ REST API๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. .NET์˜ ๊ฒฝ์šฐ ํด๋ผ์ด์–ธํŠธ, ์ด๋ฅผ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” .NET ์ธก์—์„œ Hazelcast ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•  ๊ณ„ํš์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๊ฑฐ๊ธฐ์— ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

API Gateway ์ƒ์„ฑ ๊ฒฝํ—˜

REST๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  .NET ํด๋ผ์ด์–ธํŠธ๋ฅผ ํ†ตํ•ด ๊ฒ€์ƒ‰ํ•  ๋•Œ ๋‹ค์–‘ํ•œ ์ง๋ ฌ ๋ณ€ํ™˜๊ธฐ์™€ ์—ญ์ง๋ ฌ ๋ณ€ํ™˜๊ธฐ๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ REST๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  .NET ํด๋ผ์ด์–ธํŠธ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ๊ทธ ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

๋ˆ„๊ตฌ๋“ ์ง€ ๊ด€์‹ฌ์ด ์žˆ์œผ์‹œ๋ฉด ๋ณ„๋„์˜ ๊ธฐ์‚ฌ์—์„œ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์Šคํฌ์ผ๋Ÿฌ - ๋‹ค์ด์–ด๊ทธ๋žจ์— ์žˆ์Šต๋‹ˆ๋‹ค.

API Gateway ์ƒ์„ฑ ๊ฒฝํ—˜

๋กœ๊น… ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง

.NET์„ ํ†ตํ•œ ๋กœ๊น…์— ๋Œ€ํ•œ ๋‹น์‚ฌ์˜ ๊ธฐ์—… ํ‘œ์ค€์€ Serilog์ด๋ฉฐ, ๋ชจ๋“  ๋กœ๊ทธ๋Š” ๊ถ๊ทน์ ์œผ๋กœ Elasticsearch์— ์ €์žฅ๋˜๋ฉฐ Kibana๋ฅผ ํ†ตํ•ด ๋ถ„์„๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋„ ๋น„์Šทํ•œ ์ผ์„ ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ์œ ์ผํ•œ ์‚ฌ๋žŒ ํด๋ผ์ด์–ธํŠธ ๋ฐœ๊ฒฌ๋œ Elastic on Lua ์ž‘์—…์€ ์ฒซ ๋ฒˆ์งธ ์š”์ฒญ์—์„œ ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” Fluentd๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

์œ ์ฐฝํ•จ โ€” ๋‹จ์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ๊น… ๊ณ„์ธต์„ ์ œ๊ณตํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋‹ค์–‘ํ•œ ๊ณ„์ธต์—์„œ ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•œ ๋‹ค์Œ ์ด๋ฅผ ๋‹จ์ผ ์†Œ์Šค๋กœ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

API Gateway๋Š” K8S์—์„œ ์‹คํ–‰๋˜๋ฏ€๋กœ ๊ธฐ์กด์˜ fluentd ๊ฐœ๋ฐฉํ˜• TCP ํฌํŠธ์— ๋กœ๊ทธ๋ฅผ ์“ฐ๊ธฐ ์œ„ํ•ด ๋™์ผํ•œ Pod์— fluentd๊ฐ€ ํฌํ•จ๋œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ Elasticsearch์— ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ Fluentd๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ดํ‹€ ๋™์•ˆ ์ง€์†์ ์œผ๋กœ ๊ฒŒ์ดํŠธ์›จ์ด๋กœ ์š”์ฒญ์ด ์ „์†ก๋˜๊ณ , ๋กœ๊ทธ๋Š” fluentd๋กœ ์ „์†ก๋˜์—ˆ์ง€๋งŒ Fluentd์˜ IP Elastic์€ ๊ธˆ์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ์ด ๋ณต์›๋œ ํ›„ fluentd๋Š” ๋ชจ๋“  ๋กœ๊ทธ๋ฅผ Elastic์œผ๋กœ ์™„๋ฒฝํ•˜๊ฒŒ ์ „์†กํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

๊ตฌํ˜„์„ ์œ„ํ•ด ์„ ํƒํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์„ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” ๋‹จ 2.5๊ฐœ์›” ๋งŒ์— ์‹ค์ œ๋กœ ์ž‘๋™ํ•˜๋Š” ์ œํ’ˆ์„ ์ „ํˆฌ ํ™˜๊ฒฝ์— ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด์™€ ๊ฐ™์€ ์ผ์„ ํ•˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ, ๋จผ์ € ํ•ด๊ฒฐ ์ค‘์ธ ๋ฌธ์ œ๊ฐ€ ๋ฌด์—‡์ธ์ง€, ์ด๋ฏธ ๋ณด์œ ํ•˜๊ณ  ์žˆ๋Š” ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋ช…ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด API ๊ด€๋ฆฌ ์‹œ์Šคํ…œ๊ณผ ํ†ตํ•ฉํ•  ๋•Œ์˜ ๋ณต์žก์„ฑ์„ ์ธ์‹ํ•˜์„ธ์š”.

๊ฐœ๋ฐœํ•  ๋‚ด์šฉ์ด ์ •ํ™•ํžˆ ๋ฌด์—‡์ธ์ง€ ์ง์ ‘ ์ดํ•ดํ•˜์‹ญ์‹œ์˜ค. ์ฆ‰, ์š”์ฒญ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๋งŒ, ๋˜๋Š” ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ์—๋Š” ์ „์ฒด ํ”„๋ก์‹œ๋ฅผ ์ดํ•ดํ•˜์‹ญ์‹œ์˜ค. ๋‹น์‹ ์ด ์Šค์Šค๋กœ ํ•˜๋Š” ๋ชจ๋“  ์ผ์€ ๋‚˜์ค‘์— ์ฒ ์ €ํ•˜๊ฒŒ ํ…Œ์ŠคํŠธ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์„ธ์š”.

์ถœ์ฒ˜ : habr.com

DDoS ๋ณดํ˜ธ, VPS VDS ์„œ๋ฒ„๊ฐ€ ์žˆ๋Š” ์‚ฌ์ดํŠธ๋ฅผ ์œ„ํ•œ ์•ˆ์ •์ ์ธ ํ˜ธ์ŠคํŒ… ๊ตฌ์ž… ๐Ÿ”ฅ DDoS ๊ณต๊ฒฉ ๋ฐฉ์ง€ ๊ธฐ๋Šฅ์ด ํƒ‘์žฌ๋œ ์•ˆ์ •์ ์ธ ์›น์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ…, VPS ๋ฐ VDS ์„œ๋ฒ„๋ฅผ ๊ตฌ๋งคํ•˜์„ธ์š” | ProHoster