Categorygithub.com/04Akaps/gateway_module
modulepackage
0.0.0-20241026110119-92ec2b831816
Repository: https://github.com/04akaps/gateway_module.git
Documentation: pkg.go.dev

# README


377772070-d937bb49-c8c2-4e93-baa6-4e4b6b413d2e

โœ… Gateway module โœ…

๐Ÿ“ ์†Œ๊ฐœ

Nginx, ApiSix์™€ ๊ฐ™์€ ๊ฒŒ์ดํŠธ์›จ์ด ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ๋Š” web-server์ž…๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•˜๊ฒŒ ์ •ํ•ด์ง„ yamlํ˜•ํƒœ๋ฅผ ํ†ตํ•ด์„œ ๋ผ์šฐํŒ… ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ์„œ๋ฒ„๋ฅผ ์ž๋™์œผ๋กœ ๋ฐฐํฌ ๋ฐ Request๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ—‚๏ธ yaml ๊ทœ๊ฒฉ

๋‹ค์Œ๊ณผ ๊ฐ™์€ yaml ํ˜•ํƒœ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ธฐ๋ณธ์ ์ธ yaml์˜ ๊ฒฝ๋กœ๋Š” ./deploy.yaml ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ๋”ฐ๋ฅด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • path์— ๋Œ€ํ•œ flag๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

1๏ธโƒฃ

app:
  name: "<Gatew Moudle Name>"
  version: v1
  port: "<Gatway Port>"

๊ธฐ๋ณธ์ ์ธ module์˜ ์ •๋ณด ์ž…๋‹ˆ๋‹ค.

  • name : ์›ํ•˜๋Š” module์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  • version : version ๊ด€๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.
  • port : web-server์˜ port๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

2๏ธโƒฃ

http:
  base_url: "<Internal Service Base URL>"
  router:
    - method: "<Method>"
      get_type: "<Type>"
      path: "<Optional path>"
      header:
        Content-Type: "application/json"
        Accept: "application/json"
    - method: "<Method>"
      get_type: "<Type>"
      path: "<Optional path>"
      variable:
        - "address"
        - "tid"

๋ผ์šฐํŒ…ํ•˜๊ณ ์ž ํ•˜๋Š” ์™ธ๋ถ€ ์„œ๋ฒ„์˜ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • base_url : ์™ธ๋ถ€ ์„œ๋ฒ„์˜ ๊ธฐ๋ณธ url๋ฅผ ์ ์–ด์ค๋‹ˆ๋‹ค.
  • method : ์™ธ๋ถ€ ์„œ๋ฒ„์˜ path๊ฐ€ ์ง€์›ํ•˜๋Š” method ํƒ€์ž…์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
    • GET, POST, PUT, DELETE ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • get_type : GET์š”์ฒญ์— ๋Œ€ํ•ด์„œ url, query ๋‘๊ฐ€์ง€๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • path : ์ถ”๊ฐ€์ ์ธ path๋ฅผ ์ž…๋ ฅํ•ด ์ค๋‹ˆ๋‹ค.
  • header : ์š”์ฒญ์— ๋Œ€ํ•ด์„œ ๋‹ด๊ณ ์ž ํ•˜๋Š” ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • variable : GET ์š”์ฒญ์˜ query ํƒ€์ž…์— ๋Œ€ํ•ด์„œ ๋งตํ•‘๊ณ ์ž ํ•˜๋Š” ํ‚ค ๊ฐ’์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

3๏ธโƒฃ

kafka:
  url: "<Kafka Producer Url>"
  client_id: "<Producer client id>"
  acks: "<producer acks>"
  topic: "<kafka topic>"
  batch_time: "<Request Produce Batch Time>"

producingํ•˜๊ณ ์ž ํ•˜๋Š” kafka์˜ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•ด ์ค๋‹ˆ๋‹ค.

  • url : producer์˜ ์ ‘์† ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•ด์ค๋‹ˆ๋‹ค.
  • client_id : producer์˜ client_id๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  • acks : ์›ํ•˜๋Š” acks ๋‹จ๊ณ„๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๋นˆ ๊ฐ’์ธ๊ฒฝ์šฐ all๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
  • topic : producingํ•˜๊ณ ์ž ํ•˜๋Š” topic์„ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.
  • batch_time : ์ฃผ๊ธฐ์ ์œผ๋กœ produceํ•˜๋Š” ์ฃผ๊ธฐ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

โš™ ๊ธฐ์ˆ  ์Šคํƒ

module์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋””ํŽœ๋˜์”จ๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

fx : dependency injection๋ฅผ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

zap : logging ๊ธฐ๋Šฅ์„ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

resty : builder ํŒจํ„ด์„ ํ™œ์šฉํ•˜๋ฉฐ api๋ฅผ ์ „์†กํ•˜๋ฉฐ, api์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ tracingํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

confluent-kafka-go : api์— ๋Œ€ํ•œ ์ „์†ก๋Ÿ‰์„ message ํ˜•ํƒœ๋กœ ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ํ•ด๋‹น ๋ชจ๋“ˆ์—์„œ๋Š” producing๋งŒ ์ง„ํ–‰์„ ํ•ฉ๋‹ˆ๋‹ค. consumer๋Š” ๊ตฌ์„ฑ์ด ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

sonic : web-server ํŠน์„ฑ์ƒ ์„ฑ๋Šฅ์ ์ธ ์ด์ ์„ ์ตœ๋Œ€ํ•œ ์ฑ™๊ฒจ๊ฐ€๊ธฐ ์œ„ํ•ด์„œ ์ง๋ ฌํ™” ๋ฐ ์—ญ์ง๋ ฌํ™”์— ์ ์šฉ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

fiber : web-server์˜ api๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉฐ ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

gopkg.in/yaml.v2 : yaml ํ˜•ํƒœ๋ฅผ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ์จ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

cricuit-breaker : MSA ์•„ํ‚คํ…์ฒ˜์—์„œ์˜ ์„œ๋ฒ„๊ฐ„ ๋ฒ„๊ทธ๋ฅผ ์ „ํŒŒํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด์„œ breaker๋ฅผ ์ถ”๊ฐ€ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.


๐Ÿ› ๏ธ ํ”„๋กœ์ ํŠธ ์•„ํ‚คํ…์ณ

123

ํ•ด๋‹น ์•„ํ‚คํ…์ฒ˜์—์„œ consumer๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ, ๋น„๋™๊ธฐ๋กœ ๋“ค์–ด์˜ค๋Š” ๋ฉ”์‹œ์ง€๋ฅผ Lock ์ œ์–ด๋ฅผ ํ†ตํ•ด DB์— ์ €์žฅ์„ ํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜๋กœ์จ ๋Œ์•„ ๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Consumer๋Š” ํ•ด๋‹น module์— ์ž‘์„ฑ์ด ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋‹ˆ, ๋”ฐ๋กœ ๊ตฌ์„ฑ์ด ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

# Packages

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author