์ธํ”„๋Ÿฐ ์˜๋ฌธ ๋ธŒ๋žœ๋“œ ๋กœ๊ณ 
์ธํ”„๋Ÿฐ ์˜๋ฌธ ๋ธŒ๋žœ๋“œ ๋กœ๊ณ 

MSA ์•„ํ‚คํ…์ฒ˜์— ์‚ฌ์šฉ๋˜๋Š” Gateway ํŒจํ„ด ๊ตฌํ˜„ํ•˜๊ธฐ

ํ•ด๋‹น ๊ฐ•์˜์—์„œ๋Š” yaml์„ ํ™œ์šฉํ•˜์—ฌ ์ปค์Šคํ…€ํ•œ Gateway API๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ณผ์ •์„ ๋‹ค๋ฃจ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ดˆ๊ธ‰์ž๋ฅผ ์œ„ํ•ด ์ค€๋น„ํ•œ
[๋ฐฑ์—”๋“œ, gateway] ๊ฐ•์˜์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๊ฑธ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์–ด์š”

  • yaml์„ ํ†ตํ•œ ํ™˜๊ฒฝ์ฃผ์ž…

  • Kafka๋ฅผ ํ™œ์šฉํ•œ Trace

  • Async ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ Lock ์ œ์–ด

  • API Gateway๋ฅผ ํ™œ์šฉํ•œ ์ตœ์ ํ™” ์„œ๋ฒ„ ๊ด€๋ฆฌ

Microservice Architecture์—์„œ์˜ Gateway Pattern์€ ๋ฌด์—‡์ผ๊นŒ์š”? ๐Ÿซจ

MSA ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์ˆ ๋“ค์€ ๋ฌด์—‡์ด ์žˆ์„๊นŒ์š”?? ๋Œ€ํ‘œ์ ์œผ๋กœ Gateway API๋ฅผ ํ™œ์šฉํ•˜๋Š” Gateway Pattern์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ธฐ์ˆ ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์—ฌ๋Ÿฌ๋ถ„๋“ค์€ apache-apisix, nginx๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉ์„ ํ•˜์‹œ๋ฉฐ ๊ตฌํ˜„์„ ํ•˜์‹œ๊ฒŒ ๋  ๊ฒ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์„œ๋น„์Šค๋ฅผ ํ™œ์šฉํ•˜๋ฉฐ ํ•˜๋‚˜์˜ ๊ณ ์„ฑ๋Šฅ ์›น์„œ๋ฒ„๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ๊ณ ์„ฑ๋Šฅ์˜ ์›น์„œ๋ฒ„์—์„œ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์„œ๋ฒ„์— ๋ผ์šฐํŒ…ํ•˜๊ณ  ์—ฌ๋Ÿฌ๊ฐœ์˜ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ DDOS์™€ ๊ฐ™์€ ๊ณต๊ฒฉ์— ๋Œ€ํ•ด์„œ๋„ ๋‚ด๋ถ€ ๋กœ์ง์„ ๋‹ด๋‹นํ•˜๋Š” ์„œ๋ฒ„๋ฅผ ๋ณดํ˜ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ฐ•์˜์—์„œ๋Š” ๋ฌด์—‡์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์„๊นŒ์š”? ๐Ÿซจ

๋Œ€ํ‘œ์ ์œผ๋กœ ๋ง์”€๋“œ๋ฆฌ๊ณ  ์‹ถ์€๊ฒƒ์€ Go๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง์ ‘ ๊ณ ์„ฑ๋Šฅ์˜ ์›น์„œ๋ฒ„๋ฅผ ๊ตฌํ˜„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

nginx์—์„œ ํ™˜๊ฒฝ ์„ค์ • ํŒŒ์ผ์„ ๋”ฐ๋กœ ๊ด€๋ฆฌ๋ฅผ ํ•˜์—ฌ ๊ณ ์„ฑ๋Šฅ์˜ ์›น์„œ๋ฒ„๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, ์ด ๊ฐ•์˜์—์„œ๋Š” yaml์„ ํ™œ์šฉํ•˜๊ณ  ๊ทœ๊ฒฉ์„ ์ •์˜ํ•˜์—ฌ ์™ธ๋ถ€ ์„œ๋ฒ„์— ๋Œ€ํ•œ API Call์„ ์ฒ˜๋ฆฌ ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ํ•™์Šต ํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์ถ”๊ฐ€๋กœ Api Call์— ๋Œ€ํ•ด์„œ Latency logging ๋ฐ Kafka์˜ producer๋ฅผ ํ™œ์šฉํ•˜์—ฌ API๋ฅผ ํ†ตํ•œ ๋น„์šฉ ์„œ๋น„์Šค์— ๋Œ€ํ•ด์„œ๋„ ํ•จ๊ป˜ ์•Œ๋ ค๋“œ๋ฆฌ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Gateway Pattern์„ ์ž์ฃผ ์‚ฌ์šฉ์ด ๋˜๋‚˜์š”? ๐Ÿซจ

์ด๋Ÿฌํ•œ ํŒจํ„ด์€ ์ƒํ™ฉ์— ๋”ฐ๋ผ์„œ ์ž์ฃผ ์ ์šฉ์ด ๋˜๋Š” Pattern์ด๋ฉฐ ํŠน์ • ๊ธฐ๋Šฅ์„ ๊ณตํ†ตํ™”ํ•˜๋Š” ์„œ๋ฒ„๋ฅผ ํ™œ์šฉ ํ•  ๋–„์—๋„ ์ด๋Ÿฌํ•œ ํŒจํ„ด์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๋‚ด์šฉ์„ ๋ฐฐ์›Œ์š”

1โƒฃ Kafka Producer ๊ฐ์ฒด ๋ฐ Message ์ „์†ก

Kafka์˜ Procuer์„ ํ™œ์šฉํ•˜์—ฌ API์— ๋Œ€ํ•ด์„œ ์ •๋ณด๋ฅผ Trace ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด์„œ Kafka์˜ Message ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•๊ณผ API ๊ณผ๊ธˆ๋ชจ๋ธ์— ๋Œ€ํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ•™์Šต ํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2โƒฃ restry๋ฅผ ํ™œ์šฉํ•œ http client ์ปค์Šคํ„ฐ๋งˆ์ด์ง•

restry๋ผ๋Š” openSource๋ฅผ ํ™œ์šฉํ•˜๊ณ , ์—ฌ๋Ÿฌ๋ถ„๋“ค์ด ์•Œ๊ณ  ๊ณ„์‹œ๋Š” builder pattern์„ ํ™œ์šฉํ•˜์—ฌ rest API์— ๋Œ€ํ•œ Call ๋ฐ Request๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

3โƒฃ ์ง๋ ฌํ™” ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ openSource ์ปค์Šคํ„ฐ๋งˆ์ด์ง•

ํ•ด๋‹น moudle์€ ๋‹ค๋ฅธ ์„œ๋ฒ„์— ๋Œ€ํ•œ call์„ ๋ฒ”์šฉ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ํ”„๋กœ์ ํŠธ ์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ๊ณผ์ •์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ง๋ ฌํ™” ํ•˜๋Š”๋ฐ์— ์žˆ์–ด์„œ ์ตœ์ ํ™”๋ฅผ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•ด์„œ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

4โƒฃ Docker๋ฅผ ํ™œ์šฉํ•œ Kafka ๋ฐ ui ํ™œ์šฉ

Kakao, Naver์—์„œ API ๊ณผ๊ธˆ ๋ชจ๋ธ์— ๋Œ€ํ•ด์„œ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ• ๊นŒ์š”??

์ด ๊ฐ•์˜์—์„œ๋Š” kafka๋ฅผ ํ™œ์šฉํ•˜์—ฌ Message๋ฅผ ์ „์†กํ•˜๋Š” ๊ณผ์ •์„ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋ฉฐ, ui๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ๋ถ„๋“ค์ด ์ข€ ๋” ์ง๊ด€์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ•™์Šต ํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ฐ•์˜๋Š” ๋‘๊ฐ€์ง€ ์„œ๋ฒ„๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๐Ÿฅณ

ํ•ด๋‹น ๊ฐ•์˜๋Š” yamlํŒŒ์ผ์„ ํ†ตํ•ด์„œ module์„ ๊ตฌ๋™ํ•˜๊ณ , ํ•ด๋‹น module์—์„œ ์™ธ๋ถ€ ์„œ๋ฒ„๋ฅผ ๊ด€๋ฆฌํ•จ์œผ๋กœ์จ gateway pattern์ด ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•œ ๊ฒฌํ•ด๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๊ธฐ ๋–„๋ฌธ์— ์ตœ์ ์˜ ์„ฑ๋Šฅ์„ ์œ„ํ•œ golang ์„œ๋ฒ„์™€ ์™ธ๋ถ€ ์„œ๋ฒ„์˜ ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๋Š” node ์„œ๋ฒ„๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์ž‡์”๋‹ˆ๋‹ค.


์ด ๋‘๊ฐ€์ง€ ์„œ๋ฒ„๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๊ณ  ์ถ”๊ฐ€๋กœ ๊ตฌํ˜„์„ ํ•˜๋ฉด์„œ ์—ฌ๋Ÿฌ๋ถ„๋“ค์˜ ๊ฐœ๋ฐœ์ด ๋” ์žฌ๋ฏธ์žˆ๊ณ  ํฅ๋ฏธ๋กœ์šฐ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด ๊ฐ•์˜๋Š” ์—ฌ๋Ÿฌ๋ถ„๋“ค๊ณผ ํ•จ๊ป˜ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿคจ

์ด ๊ฐ•์˜๋Š” ํŠน์ดํ•˜๊ฒŒ๋„ ๊ฐ•์‚ฌ๊ฐ€ ๋ฏธ๋ฆฌ ์™„์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ๋”ฐ๋ผ ์ž‘์„ฑํ•˜๋Š” ๊ฐ•์˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.


์—ฌ๋Ÿฌ๋ถ„๋“ค๊ณผ ํ•จ๊ป˜ ์ฒ˜์Œ๋ถ€ํ„ฐ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ์ž‘์„ฑํ•˜๊ณ  ์ดํ›„ ์‹ค์ œ๋กœ ์ˆ˜์ •์—†์ด ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด์„œ ์—ฌ๋Ÿฌ๋ถ„๋“ค์—๊ฒŒ ์ข€ ๋” ์‹ค์ œ ์‹ค๋ฌด์—์„œ ๊ฐœ๋ฐœํ•˜๋Š” ๋А๋‚Œ์„ ์ œ๊ณตํ•˜๊ณ  ์‹ถ๊ณ , ์‹ค์ œ๋กœ ์ด ๊ณผ์ •์—์„œ ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๊ฐ€ ๋˜๋ฉด์„œ ์—ฌ๋Ÿฌ๋ถ„๋“ค์ด ํ˜ผ์ž์„œ ํ–ˆ์„ ๋–„ ๊ณ ๋ฏผํ–ˆ์„๋งŒํ•œ ๋ถ€๋ถ„์„ ์ œ๊ฐ€ ์ง์ ‘ ๋งˆ์ฃผํ•˜๋ฉด์„œ ํ•ด๊ฒฐํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๋ฐฉํ–ฅ์„ฑ๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


๊พธ๋ฐˆ์—†๋Š” ๊ฐ•์˜๋ฅผ ์œ„ํ•ด์„œ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์„ ์„ ํƒํ–ˆ์œผ๋ฉฐ, ์ด๋Ÿฌํ•œ ๊ณผ์ •์ด ์ €์—๊ฒŒ๋Š” ์™„์„ฑ๋„ ์žˆ๋Š” ๊ฐ•์˜๊ฐ€ ์•„๋‹ˆ๊ฒ ์ง€๋งŒ ์—ฌ๋Ÿฌ๋ถ„๋“ค์—๊ฒŒ๋Š” ๋” ๋งŽ์€ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ˆ˜๊ฐ• ์ „ ์ฐธ๊ณ  ์‚ฌํ•ญ

์‹ค์Šต ํ™˜๊ฒฝ

  • ํ•ด๋‹น ๊ฐ•์˜๋Š” macos m1์—์„œ ๊ฐœ๋ฐœ์ด ์ง„ํ–‰์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • Kafka์— ๋Œ€ํ•œ ๋ถ€๋ถ„์€ Docker๋ฅผ ํ†ตํ•ด์„œ ๊ตฌํ˜„ ํ•ฉ๋‹ˆ๋‹ค.

  • IntelliJ IDE๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฐ•์˜๊ฐ€ ์ดฌ์˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


์ด๋Ÿฐ ๋ถ„๋“ค๊ป˜
์ถ”์ฒœ๋“œ๋ ค์š”!

ํ•™์Šต ๋Œ€์ƒ์€
๋ˆ„๊ตฌ์ผ๊นŒ์š”?

  • ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค๋ฅผ ํ•™์Šตํ•˜๊ณ  ๊ณ„์‹œ๋Š” ๋ถ„

  • Gateway Pattern์ด ๊ถ๊ธˆํ•˜์‹  ๋ถ„

  • API ๊ณผ๊ธˆ ๋ชจ๋ธ์ด ๊ถ๊ธˆํ•˜์‹  ๋ถ„

  • kafka๋ฅผ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•˜๋Š”์ง€ ๊ถ๊ธˆํ•˜์‹  ๋ถ„

  • Docker๋ฅผ ํ™œ์šฉํ•œ ์ด๋ฏธ์ง€ ํ™œ์šฉ์ด ๊ถ๊ธˆํ•˜์‹  ๋ถ„

์„ ์ˆ˜ ์ง€์‹,
ํ•„์š”ํ• ๊นŒ์š”?

  • Go [ ๊ฐœ๋…๋งŒ ์Šต๋“ํ•˜์‹œ๊ณ  ๋‹ค๋ฅธ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์…”๋„ ๋ฌด๋ฐฉํ•ฉ๋‹ˆ๋‹ค. ]

  • javascript [ ์™ธ๋ถ€ ์„œ๋ฒ„๋ฅผ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ]

์•ˆ๋…•ํ•˜์„ธ์š”
July์ž…๋‹ˆ๋‹ค.

3,235

๋ช…

์ˆ˜๊ฐ•์ƒ

146

๊ฐœ

์ˆ˜๊ฐ•ํ‰

84

๊ฐœ

๋‹ต๋ณ€

4.5

์ 

๊ฐ•์˜ ํ‰์ 

15

๊ฐœ

๊ฐ•์˜

์ž๊ธฐ ์†Œ๊ฐœ

๋น„์ „๊ณต์ž ์ถœ์‹ ์œผ๋กœ ํŒ๊ต์—์„œ ํ”Œ๋žซํผ ์„œ๋ฒ„ ๊ฐœ๋ฐœ์„ ๋‹ด๋‹นํ•˜์—ฌ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์„œ๋ฒ„ ์ตœ์ ํ™”์™€ ๋‹ค์–‘ํ•œ ์ฟผ๋ฆฌ ํŠœ๋‹์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

 

๊ฒฝ๋ ฅ

[ๅ‰] ์ƒŒ๋“œ๋ฐ•์Šค ๋ธ”๋ก์ฒด์ธ ๊ฐœ๋ฐœ์ž

[ๅ‰] ๋„ฅ์Šจ ์žํšŒ์‚ฌ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž

[ๅ‰] ํŒ๊ต ๋Œ€๊ธฐ์—… ํ”Œ๋žซํผ ์„œ๋ฒ„ ๊ฐœ๋ฐœ์ž

[็พ] ํŒ๊ต ๋ชจํšŒ์‚ฌ ์„œ๋ฒ„ ๊ฐœ๋ฐœ์ž

๋”๋ณด๊ธฐ

์ปค๋ฆฌํ˜๋Ÿผ

์ „์ฒด

21๊ฐœ โˆ™ (2์‹œ๊ฐ„ 57๋ถ„)

๊ฐ•์˜ ๊ฒŒ์‹œ์ผ: 
๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ์ผ: 

์ˆ˜๊ฐ•ํ‰

์•„์ง ์ถฉ๋ถ„ํ•œ ํ‰๊ฐ€๋ฅผ ๋ฐ›์ง€ ๋ชปํ•œ ๊ฐ•์˜์ž…๋‹ˆ๋‹ค.
๋ชจ๋‘์—๊ฒŒ ๋„์›€์ด ๋˜๋Š” ์ˆ˜๊ฐ•ํ‰์˜ ์ฃผ์ธ๊ณต์ด ๋˜์–ด์ฃผ์„ธ์š”!