Golang HTTP Package

HTTP Client Package

์ตœ๊ทผ ํšŒ์‚ฌ์—์„œ NestJS ๋ฅผ ์ด์šฉํ•ด์„œ ์™ธ๋ถ€ API๋ฅผ ์—ฐ๋™ํ•ด์•ผ ํ•˜๋Š” ์ผ๋“ค์ด ๋งŽ์•˜๋‹ค.

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

๋จผ์ € ๊ธฐ์กด์˜ ์ฝ”๋“œ๋ฅผ ๋ณด์ž.

type WebClient interface {
	WebClientMetadata
	WebClientFactory
	WebClientRequest
}

type WebClientMetadata interface {
	URI(uri string) WebClient
	QueryParams(values map[string]string) WebClient
	Headers(values map[string]string) WebClient
	Body(values map[string]string) WebClient
	Resp(resp *http.Response, err error) ([]byte, error)
}

type WebClientRequest interface {
	Get() ([]byte, error)
	Post() ([]byte, error)
	Put() ([]byte, error)
	Patch() ([]byte, error)
	Delete() ([]byte, error)
}

type WebClientFactory interface {
	Create() WebClient
}

ํฌ๊ฒŒ ๋„ค ๊ฐ€์ง€์˜ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

WebClientFactory ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ตœ์ดˆ์— WebClient ๊ตฌ์กฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

WebClientRequest๋ฅผ ํ†ตํ•ด์„œ ๊ฐ HTTP Method์— ๋”ฐ๋ผ์„œ Request๋ฅผ Sendํ•˜๋Š” ๋กœ์ง์ด ๋‹ด๊ธด๋‹ค.

์š”์ฒญ์— ํ•„์š”ํ•œ Body, Header ๋“ฑ์€ WebClientMetadata ๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด์„œ value๋ฅผ ๊ตฌ์กฐ์ฒด์— set ํ•˜๊ณ  ์ž๊ธฐ ์ž์‹ ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค.

๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ ์˜ˆ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์ผ๋‹จ NestJS์— ์žˆ๋˜ ํŒจํ‚ค์ง€๋ฅผ ๊ทธ๋Œ€๋กœ ๋”ฐ์˜จ ๊ฒƒ์ด๋ผ์„œ, ๋ญ”๊ฐ€ go ์Šค๋Ÿฝ์ง€ ์•Š๋‹ค๋Š” ๋А๋‚Œ๋„ ๋“ ๋‹ค.

์ถ”๊ฐ€๋กœ ๋‚ด๋ถ€ ๊ตฌํ˜„ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด,

๋ญ”๊ฐ€ ๊ฐ ๋ฉ”์†Œ๋“œ๊ฐ€ ๋น„์Šท๋น„์Šทํ•˜๊ณ  ์ค‘๋ณต ์ฝ”๋“œ๊ฐ€ ๊ฝค ๋งŽ์ด ์žˆ๋‹ค.

๋ฆฌํŒฉํ† ๋ง์„ ์ง„ํ–‰ํ•œ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์šฐ์„  Factory interface๋ฅผ ์‚ญ์ œํ•˜๊ณ , ์‹ค์ œ Request๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ Retrieve()๋ผ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ํ†ต์ผํ–ˆ๋‹ค.

์‚ฌ์šฉ ์ฝ”๋“œ๋ฅผ ๋ณด์ž.

๋‚ด ๋ˆˆ์—๋Š” ์กฐ๊ธˆ ๋‚˜์•„์ง„ ๊ฒƒ ๊ฐ™์•˜๋‹ค. ๊ทธ๋ž˜๋„ ์กฐ๊ธˆ ๊ฑฐ์Šฌ๋ฆฌ๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด, URI๋ฅผ ๋”ฐ๋กœ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์„œ ๊ตณ์ด ์ €๋ ‡๊ฒŒ ํ˜ธ์ถœํ•ด์•ผํ• ๊นŒ? ํ•˜๋Š” ๋ถ€๋ถ„์ด์—ˆ๋‹ค.

์œ„์™€ ๊ฐ™์ด ๋ฐ”๋€Œ์–ด์„œ, Method์— ๋”ฐ๋ผ์„œ Request๋ฅผ ์ƒˆ๋กœ์ด ๊ต์ฒดํ•ด์ฃผ๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ–ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‹ค๋ณด๋‹ˆ uri๋ฅผ ๊ทธ๋•Œ๊ทธ๋•Œ ์ฃผ์ž…ํ•ด์ค˜๋„ ์ƒ๊ด€ ์—†์„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

์ตœ์ข…์ ์œผ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

Last updated