# README
โ Gateway module โ
๐ ์๊ฐ
Nginx, ApiSix์ ๊ฐ์ ๊ฒ์ดํธ์จ์ด ์ญํ ์ ํ ์ ์๋ web-server์ ๋๋ค.
๊ฐ๋จํ๊ฒ ์ ํด์ง yamlํํ๋ฅผ ํตํด์ ๋ผ์ฐํ ์ฒ๋ฆฌ๋ฅผ ํ๋ ์๋ฒ๋ฅผ ์๋์ผ๋ก ๋ฐฐํฌ ๋ฐ Request๋ฅผ ์ฒ๋ฆฌํ๊ฒ ๋ฉ๋๋ค.
๐๏ธ yaml ๊ท๊ฒฉ
๋ค์๊ณผ ๊ฐ์ yaml
ํํ๋ฅผ ์ง์ํฉ๋๋ค.
- ๊ธฐ๋ณธ์ ์ธ
yaml
์ ๊ฒฝ๋ก๋./deploy.yaml
ํ์ผ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ฅด๊ฒ ๋ฉ๋๋ค. path
์ ๋ํflag
๋ฅผ ์์ ๋กญ๊ฒ ์ง์ํฉ๋๋ค.
app:
name: "<Gatew Moudle Name>"
version: v1
port: "<Gatway Port>"
๊ธฐ๋ณธ์ ์ธ module์ ์ ๋ณด ์ ๋๋ค.
- name : ์ํ๋ module์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.
- version : version ๊ด๋ฆฌ๋ฅผ ํฉ๋๋ค.
- port : web-server์ port๋ฅผ ์ค์ ํฉ๋๋ค.
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
ํ์ ์ ๋ํด์ ๋งตํ๊ณ ์ ํ๋ ํค ๊ฐ์ ์ ๋ ฅํฉ๋๋ค.
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๋ฅผ ์ถ๊ฐ ํ์์ต๋๋ค.
๐ ๏ธ ํ๋ก์ ํธ ์ํคํ ์ณ
ํด๋น ์ํคํ ์ฒ์์ consumer๋ฅผ ์ถ๊ฐํ์ฌ, ๋น๋๊ธฐ๋ก ๋ค์ด์ค๋ ๋ฉ์์ง๋ฅผ Lock ์ ์ด๋ฅผ ํตํด DB์ ์ ์ฅ์ ํ๋ ์ํคํ ์ฒ๋ก์จ ๋์ ๊ฐ๊ฒ ๋ฉ๋๋ค.
Consumer๋ ํด๋น module์ ์์ฑ์ด ๋์ด ์์ง ์์ผ๋, ๋ฐ๋ก ๊ตฌ์ฑ์ด ๋์ด์ผ ํฉ๋๋ค.