https://github.com/gogo/protobuf ๋ ๋ ์ด์ ๊ด๋ฆฌ๋์ง ์์ต๋๋ค. https://github.com/gogo/protobuf/issues/691 (ํ์ฌ)
๋ ๋ง์ ํจํค์ง๊ฐ ์์กดํ๋ ์๋ก์ด golang/protobuf
๋ฒ์ ๊ณผ ํธํ๋์ง ์๋ ์ฐ๋ฆฌ์ ์ข
์์ฑ์ด๋ฏ๋ก ์ง์ ์ข
์์ฑ์ ์ค๋๋ ๋ฒ์ ์ ๋ฐ๋ผ golang/protobuf
๋ฒ์ ์ ๊ต์ฒดํด์ผ ํฉ๋๋ค. ์ด๋ฐ ์์ผ๋ก ํจํค์ง ๊นจ๊ธฐ
gogo/protobuf
์ข
์์ฑ
์ด๊ฒ์ ์์๋ด์ญ์์ค
์๋ก์ด ๋ฉ์ธํ
์ด๋๊ฐ ๋ํ๋ ์ง ์๋๋ฉด ๊ธฐ๋ฅ ํจ๋ฆฌํฐ๊ฐ ์๋ ๋ค๋ฅธ ํ๋ฌ๊ทธ์ธ์ด ๋ํ๋ ์ง ์์๋ด์๊ฒ ์ต๋๊น?
๋ฐ๋๋ผ protobuf๋ง ์ฌ์ฉํ์๊ฒ ์ต๋๊น?
ํ ์คํธ
๋ค
GoGo์ ๋ํ ์ง์ ์ค๋จ์ ์ฌ์ฉํ๊ณ ์๋ ์ ํจ์ฑ ๊ฒ์ฌ ํ๋ฌ๊ทธ์ธ
https://github.com/envoyproxy/protoc-gen-validate/pull/340
์์ผ๋ก ๊ฐ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ์ํ๊ณ๋ฅผ ๋ฐ๋ฅด๊ณ gogo/protobuf์์ ๋ฉ๋ฆฌ ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ์ ๋ค๋ฅธ ์ข ์์ฑ์ด ์ ์ ๋ gogo์์ ๋ฉ์ด์ง์ ๋ฐ๋ผ ๊ณ์ ์ฌ์ฉํ๊ธฐ๊ฐ ์ ์ ๋ ์ด๋ ค์์ง ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ฌผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ค๋ฉด ๋ง์ ์์ ์ด ํ์ํ ๊ฒ์ด๋ฏ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ ๊ฒฝ์ฐ ์ข์ ๊ณํ์ ์ธ์์ผ ํฉ๋๋ค.
@rvolosatovs๋ ์๋ง๋ ์ฐ๋ฆฌ์ gogottn
์์ฑ๊ธฐ์ ์ค์ ๋ ์ฌ์ฉ์ ์ง์ ์ต์
์ ๋ํด ๋ ๋ง์ด ์๊ณ ์์ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ์ฌ๊ธฐ proto ํ์ผ์์ ๋ช
์์ ์ต์
์ ๋ํด ์ฐพ์ ๋ด์ฉ์ด ์์ต๋๋ค.
gogoproto.customname
, gogoproto.stdtime
๋ฐ gogoproto.stdduration
๋ฐ goproto_enum_prefix
์ต์
์ ์ ๊ฑฐํ์ฌ ์์ํ ์ ์์ต๋๋ค. Go ์ปดํ์ผ๋ฌ๋ ๊ฒฐ๊ณผ ๋ฌธ์ ์ ๋ํด ์ฆ์ ๋ถํํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ ๊ฑฐํ๊ธฐ๊ฐ ๋น๊ต์ ์ฝ์ต๋๋ค.gogoproto.embed
์ต์
์ ์ ๊ฑฐํ๋ฉด ํฌํจ๋ ํ๋์ ๋ ์ด์ ์ก์ธ์คํ ์ ์์ผ๋ฉฐ(Go ์ปดํ์ผ๋ฌ๊ฐ ํด๋น ํ๋๋ฅผ ์ฐพ๋ ๋ฐ ๋์์ด ๋จ) ๋ฉ์์ง๊ฐ ๋ ์ด์ ์ผ๋ถ ์ธํฐํ์ด์ค๋ฅผ ์ถฉ์กฑํ์ง ์์(์ด๋ ๋ ์ด๋ ค์ธ ์ ์์)์ ์๋ฏธํฉ๋๋ค.gogoproto.nullable
์ต์
์ ํจ์ฌ ๋ ๋ง์ ์์
์ด ํ์ํฉ๋๋ค. ์๋ํ๋ฉด getter ์ฌ์ฉ์ ์์ํ๊ณ nil-checks๋ฅผ ์ถ๊ฐํด์ผ ํ๊ธฐ ๋๋ฌธ์
๋๋ค. ๊ฒฐ๊ณผ ๋ฌธ์ ๋ Go ์ปดํ์ผ๋ฌ์์ ํฌ์ฐฉํ์ง ๋ชปํ ์ ์์ต๋๋ค. ๊ฐ๋ฅํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ํด๋น ํ๋๋ฅผ ์ผ์์ ์ผ๋ก ๋น๊ณต๊ฐ๋ก ๋ง๋ ๋ค์ getter/setter๋ก ๋ค์ ์์ฑํ๊ณ ๋ง์ง๋ง์ผ๋ก ํ๋๋ฅผ ๋ค์ ๊ณต๊ฐ๋ก ๋ง๋๋ ๊ฒ์
๋๋ค.gogoproto.customtype
๋ฅผ ์ฌ์ฉํ๋ ํ๋์ gogoproto.enum_stringer
์ต์
์ ์ฌ์ฉํ๋ ์ด๊ฑฐํ์
๋๋ค. ์ด๋ฅผ ์ํด JSON์ผ๋ก ๋ง์ฌ๋ง/๋น์ ๋ ฌํ๋๋ ๋ฐฉ์์ ์์ฃผ ๋ณ๊ฒฝํ์ต๋๋ค. EUI, DevAddr ๋ฑ๊ณผ ๊ฐ์ ์ฌ์ฉ์ ์ ์ bytes
ํ๋์ ๊ฒฝ์ฐ ์ ํ(ํ๋กํ ๋ฉ์์ง์์)์ string
(๋ฐ์ด๋๋ฆฌ ํธํ ๊ฐ๋ฅ)๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์ด๊ฑฐ ํ์ ์ฌ์ฉํ๋ฉด ์ด์ (UnmarshalJSON์์) ๋ฌธ์์ด๊ณผ ์ ์๋ก ๋ชจ๋ ํ์ฉ๋๊ธฐ ๋๋ฌธ์ JSON API๊ฐ ๊นจ์ง ๊ฒ ๊ฐ์ต๋๋ค.์ด์ฉ๋ฉด ์ด๊ฒ์ ์ฐ๋ฆฌ์ v4 API์ ๋ํด ์๊ฐํ๊ธฐ ์์ํ๊ธฐ์ ์ข์ ์๊ฐ์ด๊ธฐ๋ ํฉ๋๋ค. ์๋ํ๋ฉด ์ฐ๋ฆฌ๊ฐ ๋ ๋ง์ (API ๊นจ๋) ๋๋ผ์์ ๋ฐ๊ฒฌํ ์ ์๋ค๊ณ ์์ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๋จผ์ https://github.com/alta/protopatch๋ฅผ ์ฌ์ฉํด ๋ณด๋ ๊ฒ
api
๋๋ ํ ๋ฆฌ์์ ๊ฒ์ ๋ฐ ๋ฐ๊พธ๊ธฐ protopatch
๊ธฐ์ฌํด์ผ ํฉ๋๋ค. ๋
ธ๋ ฅ์ด ์ ์ ๊ธฐ๋ฅ. ์ด๊ฒ์ ์ต์
์ ๋ฐ๋ผ ๋ค๋ฅด์ง๋ง - customtype
์ ๋ํด ์ด์ผ๊ธฐํ๋ ๊ฒฝ์ฐ IMO๋ ํ์คํ ๊ธฐ์ฌ๋ฅผ ์ ๋นํํ์ง๋ง stdtime
์ ๊ฐ์ ๊ฒ์ ๊ทธ๋ค์ง ๋ง์ง ์์ต๋๋ค.์์ผ๋ก๋ ๋ฐํ์์ ๋ด๋ถ์ ์ผ๋ก ๊ตฌ์ฑ ์์์์ ๊ธฐ๋ณธ protobuf protos๋ฅผ ์ง์ ์ฌ์ฉํด์๋ ์ ๋๋ค๊ณ ์๊ฐํฉ๋๋ค(์ค๋ ์ ๊ณต๋ protobuf ๊ธฐ๋ฅ ์ธํธ๋ฅผ ๊ฐ์ํ ๋).
(์ญ)์ง๋ ฌํ๋ฅผ ์ํด์๋ง protobuf๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์
๋๋ค. ๊ทธ๋ฌ๋ ๋ด๋ถ์ ์ผ๋ก ์ผ๋ฐ ๋ฐ๋๋ผ ์์ฑ Go ํ๋กํ ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋์๊ฒ ์๋ฏธ๊ฐ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด NS:
*ttnpb.EndDevice
(๋ฐ๋๋ผ ์์ฑ Go ์ ํ) ๊ฐ์ ธ์ค๊ธฐ, ์ ์ฅ๋ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ์์ ์ญ์ง๋ ฌํ*ttnpb.EndDevice
๋ฅผ T_device
. (์ฐธ๊ณ : ์๋ง๋ ์ฒ์์ ๋๋ ์์ํ ๋ํผ์ผ ์ ์์)T_device
T_device
์ *ttnpb.EndDevice
(์ฐธ๊ณ : ๋ํผ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ด ์์
์ ๊ฐ๋จํ๊ณ ๋งค์ฐ ๋น ๋ฅธ ์์
์ผ ์ ์์ต๋๋ค. ๋ณ๊ฒฝ๋ ํ๋๋ง ์์ ํ๋ฉด ๋๊ณ ๋ฐ์ด๋๋ฆฌ์์๋ ์ํํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ฐ์ดํฐ ์ง์ )*ttnpb.EndDevice
, ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ก ์ง๋ ฌํ์ฐธ์กฐ https://github.com/TheThingsNetwork/lorawan-stack/issues/342 (์์ฑ๋ ์ธ๊ตฌ)
๋๋ gogo์ ๋ํ (์์) ๋์์ ์ฐฌ์ฑํ์ง ์์ต๋๋ค. ์บ์ ๋ฐ์ด๋ด๋ ๋๋์ ๋๋ค. ํนํ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ด ๋ฌด์์ธ์ง ๋ค์ ๊ฒฐ์ ํด์ผ ํ ๋ ๊ฐ๋ฅํ ํ ๋ฐ๋๋ผ๋ก ์ ์งํฉ์๋ค.
์์ฑ๋ ํ๋กํ ์ค์ ๋ชจ๋ ๊ณณ์์ ์์กดํ๋ ๋์ ์ผ๋ถ ์ฅ์์์ ์ค๊ฐ ์ ํ์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ ์ ์๋ค๋ ๋ฐ ๋์ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐ์ดํฐ ์ก์ธ์ค ๊ฐ์ฒด(DAO: ์ฌ์ฉ ๋ฐฉ๋ฒ)์์ ๋ฐ์ดํฐ ์ ์ก ๊ฐ์ฒด(DTO: proto, ์ ์ฅ์ฉ)๋ฅผ ๋ถ๋ฆฌํฉ๋๋ค. ๊ทธ๊ฒ์ด ์ฃผ๋ก ์ฝ๊ธฐ๋ผ๋ฉด ์ธํฐํ์ด์ค๋ฅผ ์ ์ธํ๊ณ ์ผ๋ง๋ ๋ฉ๋ฆฌ ์๋์ง ํ์ธํ ์๋ ์์ต๋๋ค.
์ฆ, T_device
๋ฅผ ์ฌ์ฉํ๋๋ก ์ ์ฒด NS ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ํ์์ ๋ฐ๋ผ ํน์ ๊ตฌ์กฐ์ฒด ๋ฐ/๋๋ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋๋ก ํ๊ฒ ์ต๋๋ค.
์ด ํ ๋ก ์ 11์๋ก ์ฎ๊ธฐ์
@rvolosatovs ์ฌ์ฉ์ ์ง์ JSON ๋ง์ฌ๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ๋๋ผ๋ก ์ ํํ๋ ๊ฒ์ ๋ํ ๋ฐ๋ ์๊ฒฌ์ ๋ฌด์์ ๋๊น?
๋ฐ๋๋ผ ํ๋กํ ์ค๋ฅผ ์ง์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋ง๋ํ ๋ง์ด๊ทธ๋ ์ด์
๋ถ๋ด๊ณผ ์์ฉ๊ตฌ์ ๋ถํ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ ๋ ๊ทธ๊ฒ์ ๋ํด ๋ฐ๋ํ์ง ์์ต๋๋ค. ์ ์๊ฐ์๋ ์ฐ๋ฆฌ๊ฐ ๋จผ์ ๊ฐ๋จํ๊ณ ๋ฐฉํด๊ฐ ๋์ง ์๋ ๋์์ ์ฐพ์์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๊ฒ์ด ๊ฐ๋ฅํ์ง ์๋ค๋ฉด ์ด ๋ชจ๋ ๊ฒ์ ์ฌ์์
ํ๋ ๋ฐ ์์งํด์ผ ํฉ๋๋ค.
์ฐ๋ฆฌ๊ฐ ์์กดํ๊ธฐ ์์ํ ํ๋ฌ๊ทธ์ธ์ด ์ด๋ ์์ ์์ ์ ์ง ๊ด๋ฆฌ๋์ง ์๋ ์ํ๋ก ๋๋ ๊น๋ด ๋๋ ต์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋งํด์, ๋๋ ๊ฐ๋ฅํ ํ ๋ฐ๋๋ผ์ ๊ฐ๊น๊ฒ ์ ์งํ๋ ๊ฒ์ ์ฐฌ์ฑํฉ๋๋ค. ๊ทธ๊ฒ์ด nil
์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ฒ๋ณด๋ค ๋ ์์ฃผ ํ์ธํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค๋ฉด ๊ทธ๋ ๊ฒ ํ์ญ์์ค. ๋ํ ์ด๊ธฐํ๋ ๊ตฌ์กฐ์ฒด ๋์ ์ค์ ๋์ง ์์ ํญ๋ชฉ์ ์๊ณ ์๋ค๋ ์ ์์ ์ ๋ฆฌํ๊ฒ ์๋ํ ์ ์์ต๋๋ค.
์ ์ฒด ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ฆฌํฉํ ๋งํ๋ ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์ด๋ป๊ฒ ํ๋ ๊ณ ํต์ค๋ฌ์ธ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ์ (gogo ์์ฑ) proto ๊ตฌ์กฐ์ฒด๋ ์ง๊ธ ๋ชจ๋ ๊ณณ์์ ์ฌ์ฉ๋ฉ๋๋ค(gRPC API, HTTP API, ์ด๋ฒคํธ, ์ค๋ฅ, ๋ด๋ถ์ ์ผ๋ก, Redis DB ๋ฑ). ์ฐ๋ฆฌ ์ฝ๋๋ฒ ์ด์ค์ ๊ฑฐ์ ๋ชจ๋ ๊ฒ๊ณผ ํ์ฌ์ ๋ชจ์ต์ ๋์์ ๋ณผ ์ ์์ต๋๋ค.
์ด๋ ค์ด ์๊ตฌ ์ฌํญ์ v3 API์ ํธํ์ฑ์ ์์์ํค์ง ์๋ ๊ฒ์ ๋๋ค. ์ด ์ํฉ์ v4 API(์ ์ด๋ ๋ด๋ถ์ ์ผ๋ก) ์์ ์ ์์ํ๋ ์๊ฐ์ผ๋ก ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ๋๋ผ๋ ๊ธฐ์กด ์ฌ์ฉ์๋ฅผ ์ํด ํด๋น v3 API๋ฅผ ๊ณ์ ์ง์ํด์ผ ํฉ๋๋ค.
์ฅ๊ธฐ์ ์ผ๋ก (๋ฒ์ ์ด ์๋, ์ฃผ์ ๋ด ์์ ) ์ธ๋ถ API๋ฅผ ๋ด๋ถ(๋ฒ์ ์ด ์ง์ ๋์ง ์์, ๋ถ ๋ด ์์ ) API์ (๋ฒ์ ์ด ์ง์ ๋, ์์ ์ ์ธ) ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฌธ์์์ ๋ถ๋ฆฌํจ์ผ๋ก์จ ์ฐ๋ฆฌ ์ค์ค๋ก์๊ฒ ํฐ ๋์์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. . ๊ทธ๋ฐ ๋ค์ ๋ด๋ถ API์ ๋ค๋ฅธ API ๊ฐ์ ๋ณํํ๋ ํจ์๋ฅผ ์์ฑํ๊ฑฐ๋ ์์ฑํ ์ ์์ต๋๋ค.
ํ์ง๋ง ์ฐ๋ฆฌ๊ฐ ์ง๊ธ ์ทจํ ์ ์๋ ๋ช ๊ฐ์ง ๋จ๊ณ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
v3 JSON API ํธํ์ฑ์ ์ ์งํ๊ธฐ ์ํด ์ฒซ ๋ฒ์งธ TODO๋ ์ฌ์ฉ์ ์ง์ ์ ํ์ ๋ง์ฌ๋ง/๋ง์ฌ๋ง ํด์ ํ๋ ๋ฐฉ๋ฒ์ ์ดํดํ๋ JSON ๋ง์ฌ๋ฌ ๋ฐ ์ธ๋ง์ฌ๋ฌ๋ฅผ ์์ฑํ๋ ๊ฒ์
๋๋ค. Go์ ํ๋กํ ์ฝ ๋ฒํผ์ฉ JSON ํ์ ๊ตฌํ์ ๋ํ ์์ ์ฑ ์ฝ์์ด ์๊ธฐ ๋๋ฌธ์ ์ด ์์
์ ์ํํ๋ ๊ฒ์ด ํ๋ช
ํ๋ค๊ณ ์๊ฐ grpc-gateway
๋ฐํ์์์ ์ฝ๋ฑ์ ๋ฑ๋กํ ์ ์์ผ๋ฏ๋ก {gogo,golang}/protobuf์ jsonpb ๋์ ์์ฒด (์์ฑ๋) (un) ๋ง์ฌ๋ฌ๋ฅผ ํธ์ถํ๋ ์ฝ๋ฑ์ ์์ฑํ ์ ์์ต๋๋ค.
๋๋ ์ด๋ฏธ ๊ทธ๊ฒ์ ์๋ํ๋ค: https://github.com/TheThingsNetwork/lorawan-stack/commit/a41f62d98ae7ee719b576e6fcd2009a79cd38f4c
์ด๊ฒ์ protobuf๊ฐ ์ ํ ๋ ์ง์คํธ๋ฆฌ์ ๋ํด ๋ถํํ๊ฒ ๋ง๋ค๋ฏ๋ก ์ด ์์
์ ์ํํ๋ ค๋ฉด ์ด์ proto์์ golang_proto.RegisterType
๋ฅผ ์ ๊ฑฐํด์ผ ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ์ ๊ฑฐํ๋ฉด ์ ์ฌ์ ์ผ๋ก google.protobuf.Any
ํด๊ฒฐ์ด ์ค๋จ๋ ์ ์์ง๋ง ์ค๋ฅ ๋ฐ ์ด๋ฒคํธ์์๋ง ์ฌ์ฉํ๋ฏ๋ก ํน์ ๊ฒฝ์ฐ์ ๋ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ์ ์ ์์ต๋๋ค.
์ด๊ฒ์ ์ ํ ๊ธฐ๊ฐ ๋์์๋ง ํด๋น๋์ง๋ง ์ฅ๊ธฐ์ ์๋ฃจ์ ์ ์ํด ์ ์ฌํ ๋ณํ๊ธฐ๋ฅผ ์์ฑํ๊ณ ์ ํฉ๋๋ค.
https://github.com/TheThingsNetwork/lorawan-stack/commit/cd7d75c8b42ad15eee1ac594ff6d0f2d5a75eb67 ์์ ๊ฐ๋จํ ์๋น์ค๋ก ์ด๋ฏธ ์๋ํ์ง๋ง ๋ ๋ณต์กํ ์๋น์ค์ ๊ฒฝ์ฐ ํ์คํ ์ด๋ฌํ ๋ณํ๊ธฐ๊ฐ ํ์ํฉ๋๋ค.
์ด๊ฒ์ grpc ์๋น์ค ์์ฒด๋ง ๋ณ๊ฒฝํฉ๋๋ค. grpc-gateway๋ ์ฌ์ ํ JSON ์ธก์์ ์ด์ gogo ํญ๋ชฉ์ ์ฌ์ฉํ๊ณ ๋ด๋ถ gRPC ์๋ฒ๋ฅผ ํธ์ถํ ๋ค์ ์ ๊ตฌํ์ ์คํํฉ๋๋ค.
์ฌ๊ธฐ์ ์ผ๋ถ ์ด๊ธฐ ์ข ์์ฑ ์ ๋ฐ์ดํธ ๋ฐ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ํธ์ํ์ต๋๋ค. https://github.com/TheThingsNetwork/lorawan-stack/compare/issue/2798-codec
์ ์ ๋ ๋ง์ ์ข ์์ฑ์ด protobuf 1.4 ๋ฐ V2 API๋ก ์ ๊ทธ๋ ์ด๋๋๊ณ ์์ผ๋ฉฐ, ์ด๋ฅผ ๋ ์ค๋ ์ ์งํ ์๋ก ์ข ์์ฑ์ ์ ๊ทธ๋ ์ด๋ํ๋ ค๊ณ ํ ๋ ๋ ๋ง์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ฐ๋ฆฌ๋ ์ด ๋ฌธ์ ์ ๋ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํ๊ณ ์ด ๋ชจ๋ ๊ฒ์ ๋ํด ์ฐ๋ฆฌ๊ฐ ํ ์ผ์ ๋ํ ๊ฒฐ์ ์ ๋ด๋ ค์ผ ํฉ๋๋ค.
์คํ๋ผ์ธ์์ ๋ ผ์ํ ์ ์๋๋ก ๋ค์ ์ฃผ์ ํตํ๋ฅผ ๊ณํํ์ธ์.
์ด ๊ณ ํต์ ๊ณผ์ ์ ๊ฑฐ์ณ 1~2์ฃผ ์์ ํด๊ฒฐํ๋ ๋ฐ ์ง์คํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๊ฐ ๋ค๋ฅธ ์ผ์ ํ๋ ๊ฒ์ ํผํ๊ธฐ ์ํด ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ง์ ๊ฐ๋ฑ์ ์ผ์ผํฌ ๊ฒ์ ๋๋ค. ๊ฐ๋ฅํ ํ ๋ง์ ์์ ๊ฐ์ง๋ ค๋ฉด ์ด๋ค ๊ฒฝ์ฐ์ ์ฐ๋ฆฌ๊ฐ ๋ฌด์์ ํ ๊ฒ์ธ์ง ์ ํํ ์๊ณ , ๊ฐ๋ฅํ ํ ๋ง์ ์์ ์ ๋๋๊ณ , ์์ ์ฃผ์ํด์ผ ํฉ๋๋ค.
๋ค์ ๋จ๊ณ:
unconvert
, gofumpt
๋ฐ protoc ์์์ ์ํ ์ค์ธ ๊ธฐํ ์์
์ ์ ๊ฑฐํฉ๋๋ค.protoc-gen-gogottn
์์ protoc-gen-gofast
(๋๋ ๋ฐ๋๋ผ์ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฒ)์ผ๋ก ์ ํ(gogoproto.*)
์ต์
์ ๋ช
์์ ์ผ๋ก ์ถ๊ฐํ์ฌ ํ์ฌ์ ๋์ผํ๊ฒ ๋ ๋๋งํฉ๋๋ค.gopls
๋ฐ rf
์ ๊ฐ์ ๋๊ตฌ๊ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.(gogoproto.*)
์ต์
์ ํ๋์ฉ ์ ๊ฑฐํ๊ธฐ ์์ํ๊ณ ์ด๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋๋ฅผ ์
๋ฐ์ดํธํฉ๋๋ค. gopls
๋ฐ rf
์ ๊ฐ์ ๋๊ตฌ๊ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.gogoproto.populate
์ ๊ฑฐ ๋ฐ ํ
์คํธ ์
๋ฐ์ดํธ (https://github.com/TheThingsNetwork/lorawan-stack/issues/342)gogoproto.customname
์ ๊ฑฐ ๋ฐ EUI -> Eui
๋ฑgogoproto.embed
์ ๊ฑฐ . ๋ฉ์์ง๊ฐ ValidateContext(context.Context) error
๋ฐ ExtractRequestFields(m map[string]interface{})
์ ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ๊ณ์ ๊ตฌํํ๋์ง ํ์ธํด์ผ ํฉ๋๋ค.gogoproto.nullable
์ ๊ฑฐํ๊ณ ๊ฐ๋ฅํ ๊ฒฝ์ฐ Getters๋ฅผ ์ฌ์ฉํ๋๋ก ํ๊ณ ๊ทธ๋ ์ง ์์ผ๋ฉด nil ๊ฒ์ฌ๋ฅผ ์ํํฉ๋๋ค.@rvolosatovs v3.11.3 ์ ์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ฅผ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค. ์๋ฃ๋๋ฉด ๋ค๋ฅธ ๋ด๋น์๋ฅผ ๋ค์ ์ถ๊ฐํ๊ณ ๋ค์ ๋ ผ์ํฉ์๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์คํ๋ผ์ธ์์ ๋ ผ์ํ ์ ์๋๋ก ๋ค์ ์ฃผ์ ํตํ๋ฅผ ๊ณํํ์ธ์.
์ด ๊ณ ํต์ ๊ณผ์ ์ ๊ฑฐ์ณ 1~2์ฃผ ์์ ํด๊ฒฐํ๋ ๋ฐ ์ง์คํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๊ฐ ๋ค๋ฅธ ์ผ์ ํ๋ ๊ฒ์ ํผํ๊ธฐ ์ํด ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ง์ ๊ฐ๋ฑ์ ์ผ์ผํฌ ๊ฒ์ ๋๋ค. ๊ฐ๋ฅํ ํ ๋ง์ ์์ ๊ฐ์ง๋ ค๋ฉด ์ด๋ค ๊ฒฝ์ฐ์ ์ฐ๋ฆฌ๊ฐ ๋ฌด์์ ํ ๊ฒ์ธ์ง ์ ํํ ์๊ณ , ๊ฐ๋ฅํ ํ ๋ง์ ์์ ์ ๋๋๊ณ , ์์ ์ฃผ์ํด์ผ ํฉ๋๋ค.