Lorawan-stack: Webhook URL์—์„œ ์‚ฌ์šฉ์ž ์ •์˜ ๋ณ€์ˆ˜ ์ง€์›

์— ๋งŒ๋“  2019๋…„ 07์›” 16์ผ  ยท  9์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: TheThingsNetwork/lorawan-stack

์š”์•ฝ

ํ˜„์žฌ ์›นํ›…์˜ ์ตœ์ข… URL์€ ์ •์ ์ด๋ฉฐ JoinEUI , DevID , DevEUI ๋ฐ DevAddr ์™€ ๊ฐ™์€ ์‚ฌ์šฉ์ž ์ •์˜ ๋ณ€์ˆ˜๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๋Š” http://example.com/app1/wh1 ์™€ ๊ฐ™์€ webhook์— ๋Œ€ํ•œ ๊ธฐ๋ณธ URL์ด http://example.com/app1/wh1/{{.DevEUI}} ๊ฐ€ ๋  ์ˆ˜ ์žˆ๊ณ  Webhook ๋์ ์ด ์—…๋งํฌ๋ฅผ ๋” ์ž˜ ๋ผ์šฐํŒ…ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฉ”์‹œ์ง€ ํŠน์ • URL(์—…๋งํฌ ๋ฉ”์‹œ์ง€, ๋Œ€๊ธฐ ์ค‘์ธ ๋‹ค์šด๋งํฌ ๋“ฑ)์—๋„ ์ ์šฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์™œ ์ด๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด Webhook์˜ ๋” ๋‚˜์€ ๋ผ์šฐํŒ…์ด ๊ฐ€๋Šฅํ•˜๊ณ  WebHook์œผ๋กœ๋งŒ ํŠน์ • ํ†ตํ•ฉ(์˜ˆ: OpenSensors)์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฏธ ๊ฑฐ๊ธฐ์— ๋ฌด์—‡์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ง€๊ธˆ ๋ฌด์—‡์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ •์  URL ์ง€์› - BaseURL ๋Š” ์—…๋งํฌ ์œ ํ˜•์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฃผ์ œ์™€ ๊ฒฐํ•ฉ๋˜์ง€๋งŒ ์‚ฌ์šฉ์ž ์ง€์ • ๋ผ์šฐํŒ… ํ•„๋“œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์—†์–ด์ง„ ๋ฌผ๊ฑด ์žˆ์–ด์š”? ๋ญ๋ฅผ๋ณด๊ณ  ์‹ถ์œผ์„ธ์š”?

์‚ฌ์šฉ์ž ์ •์˜ ๋ผ์šฐํŒ… ํ•„๋“œ {{.AppEUI}} , {{.JoinEUI}} , {{.DevID}} , {{.DevEUI}} , {{.DevAddr}} .

ํ™˜๊ฒฝ

ํ•ด๋‹น๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ป๊ฒŒ ์ œ์•ˆํ•ฉ๋‹ˆ๊นŒ?

newRequest. ์—์„œ ๊ธฐ๋ณธ URL + ๊ตฌ์„ฑ URL ์กฐ์ธ์ด ๋ฐœ์ƒํ•œ ํ›„ URL์˜ ์‚ฌ์šฉ์ž ์ •์˜ ๋ณ€์ˆ˜๋ฅผ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค.

์ด ์ž‘์—…์„ ์ง์ ‘ ์ˆ˜ํ–‰ํ•˜๊ณ  Pull Request๋ฅผ ์ œ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์˜ˆ.

application server in progress

๋ชจ๋“  9 ๋Œ“๊ธ€

ํ•„๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณด์ด๋Š”์ง€์— ๋”ฐ๋ผ text/template ์œผ๋กœ ์ด๊ฒƒ์„ ๊ตฌํ˜„ํ•  ๊ณ„ํš์ด์—ˆ๋‚˜ ๋ด…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ์‚ฌ์‹ค์ด๋ผ๋ฉด ๋ชจ๋“  ์—…๋งํฌ์—์„œ ํ…œํ”Œ๋ฆฟ ๊ตฌ๋ฌธ ๋ถ„์„ ๋ฐ ์‹คํ–‰(ํŠนํžˆ ๊ธฐ๋ณธ URL์ผ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ฒฝ๋กœ์ธ ๊ฒฝ์šฐ)์€ ์ž ์žฌ์ ์œผ๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ๋‹นํžˆ ๋งŽ์ด ์†Œ๋ชจํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค.
๋˜ํ•œ ํ…œํ”Œ๋ฆฟ์ด ์‹คํ–‰๋  ๋งค์šฐ ์ œํ•œ๋œ ๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์œ ํ˜•๋งŒ ์‚ฌ์šฉํ•˜๊ณ (๋ชจ๋“  EUI/DevAddr์„ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜) ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

๋งค๋ฒˆ ํ…œํ”Œ๋ฆฟ์„ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด Webhook ID + updated_at ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…œํ”Œ๋ฆฟ ์ž์ฒด๋ฅผ ์บ์‹œํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํ…œํ”Œ๋ฆฟ ์ž์ฒด์— ๋ฌธ์ž์—ด๋งŒ ์ „๋‹ฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค(์‹๋ณ„์ž ์™ธ์— ๋‹ค๋ฅธ ๊ฒƒ์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค).

๋‘ ๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

  • ์ด ์‚ฌ์šฉ ์‚ฌ๋ก€์— ํŠน์ •ํ•œ ๋งค์šฐ ๊ฐ„๋‹จํ•œ ๊ตฌ์กฐ์ฒด์™€ ํ•จ๊ป˜ text/template ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ์ฆ‰, *ttnpb.ApplicationUp ๊ฐ€ ์•„๋‹ˆ๋ผ WebhookTemplateFields ๋ฅผ Google์—์„œ ์ง€์›ํ•˜๋Š” ํ•ญ๋ชฉ์œผ๋กœ๋งŒ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  • ์•Œ๋ ค์ง„ ํ•„๋“œ์—์„œ ๋ฌธ์ž์—ด ๋ฐ”๊พธ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ์ดˆ๊ณ ์†, ๋™์ผํ•œ ๊ฒฐ๊ณผ

๋‘ ๋ฒˆ์งธ๋กœ ๋„˜์–ด๊ฐ€๋ฉด Go ํ…œํ”Œ๋ฆฟ ๊ตฌ๋ฌธ์„ ์ „ํ˜€ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ์‚ฌ๋žŒ๋“ค์ด ํ˜ผ๋ž€์Šค๋Ÿฌ์šธ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค(์™œ ์ ์€ ๊ณต๋ฐฑ์œผ๋กœ ์ฑ„์›Œ์ ธ ์žˆ๋‚˜์š”?).

์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ทœ์น™์„ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋ ค๋ฉด $app_id ์™€ ๊ฐ™์€ ์ž๋ฆฌ ํ‘œ์‹œ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒํ•˜๋ฉด ์ž๋ฆฌ ํ‘œ์‹œ์ž๊ฐ€ ํ˜ธ์ŠคํŠธ์—์„œ ์œ ํšจํ•˜์ง€ ์•Š์ง€๋งŒ (์šฐ๋ฆฌ๋Š” ์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—) ๊ฒฝ๋กœ์—์„œ๋Š” ์œ ํšจํ•ฉ๋‹ˆ๋‹ค ( $ ๊ฐ€ URL ๊ฒฝ๋กœ์—์„œ ํ—ˆ์šฉ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ์„ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ).

$ ๋Š” RFC3986 ์„น์…˜ 2.2 ์— ๋”ฐ๋ผ ํ˜ธ์ŠคํŠธ ๋ฐ ๊ฒฝ๋กœ์˜ ์ผ๋ถ€๋กœ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์šฐ๋ฆฌ๋Š” url.URL ์˜ ํ˜ธ์ŠคํŠธ ๋ถ€๋ถ„์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

URI ํ…œํ”Œ๋ฆฟ์— ๋Œ€ํ•œ ํ‘œ์ค€( RFC 6570 ์— ๋”ฐ๋ผ 1.2 ๋ฐ 2.2 ์ฐธ์กฐ) ๊ตฌ๋ฌธ์€ {[operator]variable-list} ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํ•ซ์ŠคํŒŸ์—์„œ ์ž‘์—…ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ์—ฐ์‚ฐ์ž๋ฅผ ์‚ญ์ œํ•˜๊ณ (ํ™•์žฅ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—) ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜๋งŒ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์ด ํƒ€๋‹นํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ๋ฐ”ํ€ด๋ฅผ ์žฌ๋ฐœ๋ช…ํ•˜์ง€ ์•Š๊ณ  string.ReplaceAll ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

"ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜ ํ—ˆ์šฉ"์€ ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

๋˜ํ•œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์ธก๋ฉด์—์„œ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” text/template ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๋” ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” PHP ์Šคํƒ€์ผ์˜ ๋ณ€์ˆ˜ ์ด๋ฆ„์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ํ‘œ์ค€์€ {appEUI,devEUI} ์™€ ๊ฐ™์€ ํ‘œํ˜„์‹์„ ํ—ˆ์šฉํ•˜๋ฏ€๋กœ ๊ฐ„๋‹จํ•œ ๋ฌธ์ž์—ด ๋ฐ”๊พธ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์บก์ฒ˜๋‹น ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜๋งŒ ์žˆ๋Š” {appEUI}/{devEUI} ์™€ ๊ฐ™์€ ํ‘œํ˜„์‹์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์•˜์œผ๋ฉฐ ์™„๋ฒฝํ•˜๊ฒŒ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

๊ทธ ํ•˜๋‚˜๋Š” ๋‚ด๋ถ€ ํŒจํ‚ค์ง€์ด๊ณ  ๊ธฐ๋ณธ ํŒจํ‚ค์ง€ ์™ธ๋ถ€๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์ง€๋งŒ ์ด๋ ‡๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ํŽธ์ง‘: ๊ธฐ๋ณธ ํŒจํ‚ค์ง€๋„ ๊ธฐ๋Šฅ์„ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰