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