Looker์ ๊ธฐ๋ณธ ์ ๊ณต ๋์์ ์ฝํ ์ธ ๋ฅผ ์ ๊ณตํ๋ ๊ฒ ์ธ์๋ ์์ (ํตํฉ์ด๋ผ๊ณ ๋ ํจ)์ ์ฌ์ฉํ์ฌ ์์ ํ๋ธ ์๋ฒ๋ฅผ ํตํด Looker์ ํตํฉ๋ ํ์ฌ ์๋น์ค์ ์ฝํ ์ธ ๋ฅผ ์ ์กํ ์ ์์ต๋๋ค.
์ด ํ์ด์ง์์๋ Looker ์์ ํ๋ธ ๋๋ ์์ฒด ๋น๊ณต๊ฐ ์์ ํ๋ธ ์๋ฒ์ ์ถ๊ฐํ๋๋ก ์์ฒญํ ์ ์๋ ์ปค์คํ ์์ ๋น๋ ์ต์ ์ ์๋ดํฉ๋๋ค. ์ด ํ์ด์ง์์๋ ๋ํ ๋ก์ปฌ ์์ ํ๋ธ ์๋ฒ๋ฅผ ๊ฐ๋ํ์ฌ ์ปค์คํ ์์ ์ ํ ์คํธํ๊ฑฐ๋ ๋น๊ณต๊ฐ ์์ ํ๋ธ ์๋ฒ๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
์์ ์ ์ฌ์ฉํ๋ ค๋ฉด ๋ค์ ์ค ํ๋๋ฅผ ์ํํ์ธ์.
- Looker ์์ ํ๋ธ์์ ์ ๊ณต๋๋ Looker์ ๊ธฐ์กด ์์ ์ ์ฌ์ฉํฉ๋๋ค.
- ๊ณต๊ฐ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด ์ปค์คํ ์์ ์ ๋น๋ํ๊ณ Looker ์์ ํ๋ธ์ ๊ฒ์ํฉ๋๋ค.
- ๋น๊ณต๊ฐ ์ฌ์ฉ์ ์ํด ์ปค์คํ ์์ ์ ๋น๋ํ๊ณ ๋น๊ณต๊ฐ ์์ ํ๋ธ ์๋ฒ์ ๊ฒ์ํฉ๋๋ค.
์์ ์ด ์์ ํ๋ธ์ ์ถ๊ฐ๋๋ฉด Looker ๊ด๋ฆฌ์๊ฐ ํด๋น ์๋น์ค์ Looker ์ฝํ ์ธ ๋ฅผ ์ ์กํ๋ ๋ฐ ์ฌ์ฉํ ์์ ์ ์ฌ์ฉ ์ค์ ํ ์ ์์ต๋๋ค.
๋ํ Looker ์์ ํ๋ธ๋ฅผ ํตํด Looker์ ํตํฉ์ ์ฌ์ฉํ๊ณ ์์ฒด ๋น๊ณต๊ฐ ๋๋ ์ปค์คํ ์์ ์ ํธ์คํ ํ๋ ค๋ ๊ฒฝ์ฐ ์ฌ๋ฌ ์์ ํ๋ธ๋ฅผ ์ค์ ํ ์๋ ์์ต๋๋ค. ๊ฐ ์์ ํ๋ธ์ ์์ ์ ๊ด๋ฆฌ์ ํจ๋์ ์์ ํ์ด์ง์ ํ์๋ฉ๋๋ค.
Looker ์์ ํ๋ธ
Looker๋ Looker์ Action API๋ฅผ ๊ตฌํํ๊ณ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์์ ์ ๋ ธ์ถํ๋ ์คํ ์ดํธ๋ฆฌ์ค(Stateless) ์๋ฒ์ธ Looker ์์ ํ๋ธ๋ฅผ ํธ์คํ ํ๊ณ ์ ๊ณตํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ์์ ์ ์ฌ์ฉํ์ฌ ๋ณด๋ด๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ Looker ์ธ์คํด์ค๊ฐ ์๋Looker ์์ ํ๋ธ ์๋ฒ์์ ์ผ์์ ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
Looker๋ ์ด๋ฏธ ์ฌ๋ฌ ์๋น์ค์ ํตํฉ๋์ด ์์ต๋๋ค. ๊ธฐ์กด ์๋น์ค๋ฅผ ์ฌ์ฉ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๋ ค๋ฉด ๊ด๋ฆฌ ์ค์ - ์์ ๋ฌธ์ ํ์ด์ง๋ฅผ ์ฐธ์กฐํ์ธ์.
Looker ์์ ํ๋ธ ์๊ตฌ์ฌํญ
Looker ์์ ํ๋ธ๋ ๋ค์ ๋ฐฉ์์ผ๋ก API ์์ฒญ์ ๋ณด๋ด๊ณ ๋ฐ์ ์ ์์ด์ผ ํฉ๋๋ค.
- Looker ์ธ์คํด์ค์์ Looker ์์ ํ๋ธ ๋คํธ์ํฌ๋ก
- Looker ์ฌ์ฉ์ ๋ธ๋ผ์ฐ์ ์์ Looker ์์ ํ๋ธ ๋คํธ์ํฌ๋ก
- Looker ์์ ํ๋ธ ๋คํธ์ํฌ์์ Looker ์ธ์คํด์ค๋ก
Looker ๋ฐฐํฌ๊ฐ ์ด๋ฌํ ์์ฒญ์ ์์ฉํ ์ ์๊ฑฐ๋ Looker ์ธ์คํด์ค์ IP ํ์ฉ ๋ชฉ๋ก ๊ธฐ๋ฅ์ด ์ฌ์ฉ ์ค์ ๋ ๊ฒฝ์ฐ ๋น๊ณต๊ฐ Looker ํตํฉ ๋๋ ์ปค์คํ ์์ ์ ์ ๊ณตํ๋๋ก ๋ก์ปฌ ์์ ํ๋ธ ์๋ฒ๋ฅผ ์ค์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ณ ๊ฐ ํธ์คํ ์ธ์คํด์ค ๊ด๋ฆฌ์๋ ๋ํ ํนํ OAuth ๋ฐ ์คํธ๋ฆฌ๋ฐ ์์ ์ ์ํด ๋ก์ปฌ ์์ ์๋ฒ๋ฅผ ๋ฐฐํฌํ ์ ์์ต๋๋ค.
Looker ์ธ์คํด์ค์์ Looker ์์ ํ๋ธ ๋คํธ์ํฌ๋ก์ ์์ฒญ
actions.looker.com
์ ๋ํ ์์ฒญ์ ๋์ IP ์ฃผ์๋ก ๋ณด๋ด์ง๋๋ค. Looker ์ธ์คํด์ค์์ ๋๊ฐ๋ ์์ฒญ์ ๋ค์ ์๋ํฌ์ธํธ์ ๋๋ฌํ ์ ์์ด์ผ ํฉ๋๋ค.
actions.looker.com/
actions.looker.com/actions/<name>/execute
actions.looker.com/actions/<name>/form
์ฌ๊ธฐ์ name
์ ์์
์ ํ๋ก๊ทธ๋๋งคํฑ ์ด๋ฆ์
๋๋ค.
Looker ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ์์ Looker ์์ ํ๋ธ ๋คํธ์ํฌ๋ก์ ์์ฒญ
Looker ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ๋ ๋ค์ Looker ์์ ํ๋ธ ์๋ํฌ์ธํธ(OAuth์ ๊ฒฝ์ฐ)์ ์์ฒญ์ ์ ์กํ ์ ์์ด์ผ ํฉ๋๋ค.
actions.looker.com/actions/<name>/oauth
์ฌ๊ธฐ์ name
์ ์์
์ ํ๋ก๊ทธ๋๋งคํฑ ์ด๋ฆ์
๋๋ค.
Looker ์์ ํ๋ธ ๋คํธ์ํฌ์์ Looker ์ธ์คํด์ค๋ก์ ์์ฒญ
Looker ์์ ํ๋ธ๋ Looker ์ธ์คํด์ค์ ์คํธ๋ฆฌ๋ฐ ๊ฒฐ๊ณผ๋ฅผ ์ง์ํ๊ฑฐ๋ OAuth๋ฅผ ์ฌ์ฉํ๋ ์์ ์ ์์ฒญํด์ผ ํฉ๋๋ค.
์คํธ๋ฆฌ๋ฐ ์์ ์ ํตํด ๋ชจ๋ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ๋ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์์ ์ ์ฌ์ฉ ์ค์ ํ ์ ์์ต๋๋ค. OAuth ์ง์ ์์ ์ OAuth 2.0 ํ๋ก์ฐ๋ฅผ ํตํ ์ฌ์ฉ์๋ณ ์ธ์ฆ์ ์ฌ์ฉํฉ๋๋ค. Looker ์์ ํ๋ธ๋ ์คํ ์ดํธ๋ฆฌ์ค(Stateless)์ด๊ณ ๋ฉํฐ ํ ๋ํธ์ด๋ฉฐ ์ด๋ ํ ์ข ๋ฅ์ ์ฌ์ฉ์๋ณ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ ์ ์ฅํ์ง ์์ผ๋ฏ๋ก OAuth ์์ ์ ํด๋น ์์ค Looker ์ธ์คํด์ค์ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ ์ฅํด์ผ ํฉ๋๋ค.
Looker ์์ ํ๋ธ์์ Looker ์ธ์คํด์ค๋ก์ ์์ฒญ์๋ ๋ค์ ์์์ด ์ฌ์ฉ๋ฉ๋๋ค.
GET <host_looker_url>/downloads/<random_40_char_token>
POST <host_looker_url>/action_hub_state/<random_40_char_token>
์ด๋ฌํ URL์ Looker ์์
ํ๋ธ๋ก ์ ์ก๋๊ธฐ ์ ์ Looker ์ธ์คํด์ค์์ ์ฆ์ ์์ฑ๋ฉ๋๋ค. ์ด๋ฌํ ์ด์ ๋ก Looker ์์
ํ๋ธ๋ <host_looker_url>
์ IP ์ฃผ์๋ก ํ์ธํ๊ณ Looker ์ธ์คํด์ค๊ฐ ์๋ ๋คํธ์ํฌ๋ก ์์ฒญ์ ์ ์กํด์ผ ํฉ๋๋ค.
Looker ์์
ํ๋ธ์๋ ํญ์ ์์ฒญ์ด ๋ฐ์ ๋๋ ๊ณ ์ ์ด๊ทธ๋ ์ค IP ์ฃผ์(35.153.89.114
, 104.196.138.163
, 35.169.42.87
)๊ฐ ์์ต๋๋ค. IP ํ์ฉ ๋ชฉ๋ก์ ์ฌ์ฉ ์ค์ ํ Looker ํธ์คํ
์ธ์คํด์ค์ ๊ด๋ฆฌ์๋ ์คํธ๋ฆฌ๋ฐ ๊ฒฐ๊ณผ๋ฅผ ์ง์ํ๊ฑฐ๋ OAuth๋ฅผ ์ฌ์ฉํ๋ ์์
์ ์ฌ์ฉํ๋ ค๋ฉด ์ด IP ์ฃผ์๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
๊ณ ๊ฐ ํธ์คํ ์ธ์คํด์ค ๊ณ ๋ ค์ฌํญ
Looker ํตํฉ์ ์ฌ์ฉํ๋ ค๋ฉด Looker ์์ ํ๋ธ๊ฐ Looker ์ธ์คํด์ค์ ํต์ ํ๊ณ Looker ์์ ํ๋ธ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํ ์ ์์ด์ผ ํฉ๋๋ค. ์ฌ๋ฌ ๊ฐ์ง ์ด์ ๋ก ๊ณ ๊ฐ์ด ํธ์คํ ํ๋ Looker ์ธ์คํด์ค์์ ์ด๊ฒ์ด ํญ์ ๊ฐ๋ฅํ ๊ฒ์ ์๋๋๋ค. Looker ์์ ํ๋ธ์ Looker ์ธ์คํด์ค ๊ฐ์ ์๋ฐฉํฅ ํต์ ์ด ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ Looker ์์ ํ๋ธ์์ ์ฟผ๋ฆฌ ์ค๋จ์ด๋ ์์ ์ฌ์ฉ ์ค์ง์ ๊ฐ์ ์๊ธฐ์น ์๊ฑฐ๋ ์์น ์๋ ๋์์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
Looker ์์ ํ๋ธ๊ฐ Looker ์ธ์คํด์ค์ ํต์ ํ ์ ์๋ ์ ์ฌ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Looker ๊ด๋ฆฌ์๋ ์ด ํ์ด์ง ํ๋ฐ๋ถ์ ํ์๋ ์๋ฃจ์ ์ค ํ๋๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค. ์ ์ ํ ์๋ฃจ์ ๋๋ ์๋ฃจ์ ์ ์กฐํฉ์ Looker ์ธ์คํด์ค์ ์ํคํ ์ฒ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
๊ณ ๊ฐ ํธ์คํ ์ธ์คํด์ค๋ฅผ Looker ์์ ํ๋ธ๋ก ํ์ธํ ์ ์๋ ๊ฒฝ์ฐ ์ฆ, Looker ์์ ํ๋ธ๊ฐ Looker ์ธ์คํด์ค์์ ์์ฒญ์ ์์ ํ ์ ์๋ค๋ฉด Looker ๊ด๋ฆฌ์๊ฐ
public_host_url
๋ผ์ด์ ์ค ๊ธฐ๋ฅ์ ์ฌ์ฉ ์ค์ ํ๊ธฐ ์ํด Google Cloud ์์ ํ์ ๋ฌธ์ํ ์ ์์ต๋๋ค. ์ด ๋ผ์ด์ ์ค ๊ธฐ๋ฅ์ ๊ด๋ฆฌ์๊ฐ ์ธ์คํด์ค<host_looker_url>
๊ณผ ๋ค๋ฅธ ํ์ธ ๊ฐ๋ฅํ<public_host_url>
ํธ์คํธ ์ด๋ฆ์ ์ง์ ํ ์ ์๋--public-host-url
์์ ์ต์ ์ ํ์ํฉ๋๋ค.public_host_url
์ ํน์ Looker ์์ ํ๋ธ ์ฝ๋ฐฑ URL์ ํธ์คํธ ์ด๋ฆ์ ์ฌ์ ์ํ๊ณ ๊ณต๊ฐ์ ์ผ๋ก ํ์ธ ๊ฐ๋ฅํ ์ด๋ฆ์public_host_url
์ด ์๋ ๋ฆฌ๋ฒ์ค ํ๋ก์๋ฅผ ํตํด ์ด๋ฌํ ์ฝ๋ฐฑ URL์ ๋ผ์ฐํ ํฉ๋๋ค. ์ด ๋ฆฌ๋ฒ์ค ํ๋ก์๋ Looker ์์ ํ๋ธ์ ๋ํ ๊ณ ์ ์ด๊ทธ๋ ์ค IP ์ฃผ์์ ์์ฒญ๋ง ํ์ฉํฉ๋๋ค. ์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ Looker ๊ด๋ฆฌ์๋ Looker ์์ ํ๋ธ๊ฐ Looker ์ธ์คํด์ค์ ์์ฒญ์ ์ ์กํ๋ ์ด๊ทธ๋ ์ค IP ์ฃผ์(35.153.89.114
,104.196.138.163
,35.169.42.87
)๋ฅผ ํ์ฉ ๋ชฉ๋ก์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.๊ณ ๊ฐ ํธ์คํ ์ธ์คํด์ค URL์ Looker ์ธ์คํด์ค๋ก ํ์ธํ ์ ์์ง๋ง Looker ์์ ํ๋ธ๊ฐ Looker ์ธ์คํด์ค์ ์์ฒญ์ ๋ณด๋ผ ์ ์๋ ๊ฒฝ์ฐ, ์ฌ์ฉ์๊ฐ ์คํธ๋ฆฌ๋ฐ ๊ฒฐ๊ณผ๋ฅผ ์ง์ํ๊ฑฐ๋ OAuth๋ฅผ ์ฌ์ฉํ๋ ์์ ์ ๊ตฌ์ฑํ๊ฑฐ๋ ์ฌ์ฉํ์ง ๋ชปํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด Looker ๊ด๋ฆฌ์๋ Looker ์์ ํ๋ธ๊ฐ Looker ์ธ์คํด์ค์ ์์ฒญ์ ์ ์กํ๋ ์ด๊ทธ๋ ์ค IP ์ฃผ์(
35.153.89.114
,104.196.138.163
,35.169.42.87
)๋ฅผ ํ์ฉ ๋ชฉ๋ก์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.์์ ์ธ๊ธํ ์๋ฃจ์ ์ค ์ด๋ ๊ฒ๋ Looker ์ธ์คํด์ค ์ํคํ ์ฒ์ ์ ํฉํ์ง ์์ผ๋ฉด Looker ๊ด๋ฆฌ์๊ฐ ๋ชจ๋ ์์ ๋๋ ์คํธ๋ฆฌ๋ฐ ๊ฒฐ๊ณผ๋ฅผ ์ง์ํ๊ฑฐ๋ OAuth๋ฅผ ์ฌ์ฉํ๋ ์์ ์๋ง ๊ณ ๊ฐ ํธ์คํ ์์ ํ๋ธ๋ฅผ ๋ฐฐํฌํ ์ ์์ต๋๋ค.
๊ณ ๊ฐ ํธ์คํ ์์ ํ๋ธ๋ฅผ ๋ฐฐํฌํ๋ ค๋ฉด Looker ์์ ํ๋ธ๊ฐ ํต์ ํ ์ ์๋๋ก JAR ํ์ผ์ด ๊ณต๊ฐ ์๋ฒ์์ ํธ์คํ ๋์ด์ผ ํฉ๋๋ค. ํ์ง๋ง ์ด ์๋ฃจ์ ์ ๊ถ์ฅ๋์ง ์์ต๋๋ค.
๋ํ ์ธ์คํด์ค๊ฐ ์ด ๋ฃจํธ ์ธ์ฆ์ ๋ชฉ๋ก์ ์๋ ์ธ์ฆ ๊ธฐ๊ด(CA)์์ ๋ฐ๊ธํ SSL ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ณ ๊ฐ ํธ์คํ Looker ์ธ์คํด์ค์์ OAuth ๋ฐ ์คํธ๋ฆฌ๋ฐ ์์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ปค์คํ ์์ ๋น๋
์ด ์น์
์์๋ Looker ์์
ํ๋ธ ์์ค ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ปค์คํ
์์
์ ์์ฑ ๋ฐ ํ
์คํธํ๋ ๋จ๊ณ๋ฅผ ์ค๋ช
ํฉ๋๋ค. ์ค์ ์ฝ๋ ์์๋ฅผ ๋ณด๋ ค๋ฉด GitHub์ looker-open-source/actions
์ ์ฅ์์์ ๊ธฐ์กด ์์
์ ํ์ธํ์ธ์.
๋ค์๊ณผ ๊ฐ์ด ์ปค์คํ ์์ ์ ๋ง๋ค ์ ์์ต๋๋ค.
- ๊ฐ๋ฐ ์ ์ฅ์ ์ค์
- ์์ ์์ฑ
- ์์ ํ ์คํธ
- Looker ์์ ํ๋ธ ๋๋ ์์ฒด ๋น๊ณต๊ฐ ์์ ํ๋ธ ์๋ฒ์์ ์์ ๊ฒ์ ๋ฐ ์ฌ์ฉ ์ค์
๋ค๋ฅธ ์์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์์ ์ ์ฌ์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ์ํด์๋ ๋จผ์ ํน์ ๋งค๊ฐ๋ณ์๋ก LookML ๋ชจ๋ธ์ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค.
๊ฐ๋ฐ ์ ์ฅ์ ์ค์
Looker ์์ ํ๋ธ๋ TypeScript๋ก ์์ฑ๋ Node.js ์๋ฒ์ ๋๋ค. ์ต์ JavaScript ๊ธฐ๋ฐ์ ์์ ๋ ์ด์ด๋ก ํ๋ก๊ทธ๋๋ฐ ์ค๋ฅ๋ฅผ ํฌ์ฐฉํ๋ ๋ฐ ๋์์ด ๋๋ ์ ํ ์ ๋ณด๋ฅผ ์ถ๊ฐํฉ๋๋ค. JavaScript์ ์ต์ํ๋ค๋ฉด ๋๋ถ๋ถ์ TypeScript ์ธ์ด์ ์ต์ํ ๊ฒ์ ๋๋ค.
Looker ์์ ํ๋ธ๋ฅผ ์คํํ๋ ค๋ฉด ๋ค์ ์ํํธ์จ์ด๊ฐ ํ์ํฉ๋๋ค.
ํ์ํ ์ํํธ์จ์ด๋ฅผ ์ค์นํ์ผ๋ฉด ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ ์ค๋น๊ฐ ๋์์ต๋๋ค. ๋ค์ ์์์์๋ Git๋ฅผ ์ฌ์ฉํฉ๋๋ค.
looker-open-source/actions
์ ์ฅ์๋ฅผ ๋ก์ปฌ๋ก ํด๋ก ํฉ๋๋ค.git clone git@github.com:looker-open-source/actions.git
actions/src/actions
๋๋ ํฐ๋ฆฌ์ ํด๋น ์์ ์ด๋ฆ์ผ๋ก ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ง๋ญ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.mkdir actions/src/actions/my_action
์์ ์ ์คํํ๋ ๋ฐ ํ์ํ ํ์ผ์ ๋๋ ํฐ๋ฆฌ์ ์ฑ์๋๋ค. ํ์ผ ๊ตฌ์กฐ ์์๋ ์์ GitHub ์ ์ฅ์๋ฅผ ์ฐธ์กฐํ์ธ์.
Looker์์๋ ๋ค์ ํญ๋ชฉ๋ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- ์์ ์ ์ธ์ฆ ๋ชฉ์ ๊ณผ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๋ ๋ฆฌ๋๋ฏธ
- Looker ์์ ํ๋ธ(๋๋ Looker ์ธ์คํด์ค์ ๋น๊ณต๊ฐ ์์ ํ๋ธ)์ Looker ๋ฐ์ดํฐ ์ ์ก ์ฐฝ์ ํ์ํ PNG ์์ด์ฝ
- ์์ ์ฝ๋์์ ์คํํ๋ ค๋ ํ ์คํธ์ ๋ํ ํ์ผ(์์ ํ ์คํธ์ ๋ค๋ฆ)
์์ ์์ฑ
Looker ์์ ํ๋ธ ์๋ฒ์ ์ค๊ณ ์๊ตฌ์ฌํญ์ ์์ ํ ์คํ ์ดํธ๋ฆฌ์ค(Stateless)๋ก ์ ์งํ๋ ๊ฒ์ด๋ฏ๋ก ์์ ์ ํ๋ฆฌ์ผ์ด์ ๋๋ ์๋น์ค์ ์ ๋ณด๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค. ์์ ์ํ์ ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ์์ ํ์ผ์ ์์ฒญ ํธ์ถ ๋ด์ ์ ๊ณตํด์ผ ํฉ๋๋ค.
์์ ํ์ผ์ ์ค์ ์ฝํ ์ธ ๋ ์๋น์ค, ์์ ์ด ์ํ๋๋ ์ ํ ๋๋ ์์ค, ์ง์ ํด์ผ ํ๋ ๋ฐ์ดํฐ ๋๋ ์๊ฐํ ํ์์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ๋ํ ์์ ์ OAuth 2.0 ์น์ธ ํ๋ฆ์ผ๋ก ๊ตฌ์ฑํ ์๋ ์์ต๋๋ค.
์์
ํ์ผ์ /execute
API ๋ฉ์๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ์ฌ์ฉ์๊ฐ Looker ๋ด์์ ์์
์ ์คํํ ๋๋ง๋ค Looker API ์์ฒญ์ DataActionRequest
๊ฐ ์ ๋ฌ๋ฉ๋๋ค. DataActionRequest
์๋ ์์
์คํ์ ํ์ํ ๋ชจ๋ ๋ฐ์ดํฐ ๋ฐ ๋ฉํ๋ฐ์ดํฐ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ์์
์คํ ์ ์ฌ์ฉ์์๊ฒ์ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์์งํ๊ธฐ ์ํด ์ฌ์ฉํ ์ ์๋ /form
๋ฉ์๋๋ ์ ๊ณต๋ฉ๋๋ค. /form
์์ ์ง์ ํ ํ๋๋ ์ฌ์ฉ์๊ฐ ์์
์ ๋ฐ์ดํฐ ์ ์ก ๋์์ผ๋ก ์ ํํ ๋ ์ ์ก ๋๋ ์ผ์ ํ์
์ ํ์๋ฉ๋๋ค.
์์ ํ์ผ์ ์์ฑํ ๋๋ ์ต์ํ ์์ ์ ์์ ํ์๋ก ํ์๋ ๋ค์ ๋งค๊ฐ๋ณ์๋ฅผ ํฌํจํด์ผ ํฉ๋๋ค.
๋งค๊ฐ๋ณ์ | ํ์ | ์ค๋ช | ๋ฐ์ดํฐ ์ ํ |
---|---|---|---|
name |
์ | ์์ ์ ๊ณ ์ ์ด๋ฆ์ ๋๋ค. Looker ์์ ํ๋ธ์ ์๋ ๋ชจ๋ ์์ ๊ฐ์ ๊ณ ์ ํด์ผ ํฉ๋๋ค. | ๋ฌธ์์ด |
url |
์ | ์ด ์์
์ ๋ํ /execute ์๋ํฌ์ธํธ์ ์ ๋ URL์
๋๋ค. |
๋ฌธ์์ด |
label |
์ | ์ธ๊ฐ์ด ์ฝ์ ์ ์๋ ์์ ๋ผ๋ฒจ์ ๋๋ค. | ๋ฌธ์์ด |
supportedActionTypes |
์ | ์์
์ ์ง์ํ๋ ์์
์ ํ ๋ชฉ๋ก์
๋๋ค. ์ ํจํ ๊ฐ์ "cell" , "query" , "dashboard" ์
๋๋ค. |
๋ฌธ์์ด |
formURL |
์๋์ | ์ด ์์
์ ๋ํ /form ์๋ํฌ์ธํธ์ ์ ๋ URL์
๋๋ค. |
๋ฌธ์์ด |
description |
์๋์ | ์์ ์ค๋ช ์ ๋๋ค. | ๋ฌธ์์ด |
params |
์๋์ | ์์
์ parameters ๋ฐฐ์ด์
๋๋ค. ๊ฐ ๋งค๊ฐ๋ณ์์ ๋ฌธ์์ด ํ์์ผ๋ก ๋ ์ด๋ฆ, ๋ผ๋ฒจ, ์ค๋ช
์ ํฌํจํฉ๋๋ค. ์ด ํ๋๋ ๊ด๋ฆฌ ํจ๋์ ์์
์ฌ์ฉ ์ค์ ํ์ด์ง์ ํ์๋ฉ๋๋ค. ์ฌ์ฉ์๊ฐ ์์
๋์์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ๋ฐฉ๋ฒ์ ๊ด๋ฆฌํ๊ธฐ ์ํด์๋ ์ฌ์ฉ์๊ฐ ํน์ ๊ฐ์ ์ ์ํด์ผ ํ๋ ์ฌ์ฉ์ ์์ฑ์ ์ง์ ํ ์ ์์ต๋๋ค. |
parameters |
supportedFormats |
์๋์ | ์์
์์ ์ง์ํ๋ ๋ฐ์ดํฐ ํ์์ ๋ชฉ๋ก์
๋๋ค. ์ ํจํ ๊ฐ์ "txt" , "csv" , "inline_json" , "json" , "json_detail" ์
๋๋ค. |
๋ฌธ์์ด |
supportedFormattings |
์๋์ | ์์
์์ ์ง์ํ๋ ํ์ ์ง์ ์ต์
์ ๋ชฉ๋ก์
๋๋ค. ์ ํจํ ๊ฐ์ "formatted" ๋ฐ "unformatted" ์
๋๋ค. |
๋ฌธ์์ด |
supportedVisualizationFormattings |
์๋์ | ์์
์์ ์ง์ํ๋ ์๊ฐํ ํ์ ์ง์ ์ต์
์ ๋ชฉ๋ก์
๋๋ค. ์ ํจํ ๊ฐ์ "apply" ๋ฐ "noapply" ์
๋๋ค. |
๋ฌธ์์ด |
iconName |
์๋์ | ์์ ์ ์์ด์ฝ ์ด๋ฏธ์ง๋ฅผ ๋ํ๋ด๋ ๋ฐ์ดํฐ URI์ ๋๋ค. | ๋ฌธ์์ด |
requiredFields |
์๋์ | ์ด ์์ ๊ณผ ํธํ๋๋ ํ์ ํ๋์ ์ค๋ช ๋ชฉ๋ก์ ๋๋ค. ์ด ๋ชฉ๋ก์ ํญ๋ชฉ์ด ์ฌ๋ฌ ๊ฐ ์์ผ๋ฉด ์์ ์ ๋ ์ด์์ ํ๋๊ฐ ํ์ํฉ๋๋ค. | RequiredField |
supportedDownloadSettings |
์๋์ | ๋ฌด์ ํ ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ์ ์ฒ๋ฆฌํ ์ ์๋๋ก ์ผํ์ฉ ๋ค์ด๋ก๋ URL์ ์ ์กํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ๋ถ๋ฆฌ์ธ์
๋๋ค. ๋งค๊ฐ๋ณ์๋ true/false ๋ถ๋ฆฌ์ธ์ธ usesStreaming ๋งค๊ฐ๋ณ์์ ์ํด ์ค์ ๋ฉ๋๋ค. usesStreaming = true ์ supportedDownloadSettings = url . usesStreaming = false ์ supportedDownloadSettings = push . |
๋ถ๋ฆฌ์ธ |
usesOAuth |
์๋์ | ์์
์ด OAuth ์์
์ธ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ๋ถ๋ฆฌ์ธ์
๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ด ์์
์์ ํน์ ์ฌ์ฉ์์ ๋ํด state ๋ฅผ ์ค์ ํ ์ ์๋๋ก ์ผํ์ฉ ๋งํฌ๊ฐ ์ ์ก๋๋์ง ์ฌ๋ถ๊ฐ ๊ฒฐ์ ๋ฉ๋๋ค. |
๋ถ๋ฆฌ์ธ |
usesStreaming |
์๋์ | ์์ ์ด ์คํธ๋ฆฌ๋ฐ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ง์ํ๋์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ๋ถ๋ฆฌ์ธ์ ๋๋ค. ํตํฉ ์๋น์ค ๋ชฉ๋ก์์ ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ ์ฌ์ฉ(์/์๋์) ์ด์ ์ ํํฉ๋๋ค. ๊ฒฐ๊ณผ๋ฅผ ์คํธ๋ฆฌ๋ฐํ๋ ์์ ์๋ ๋ก์ปฌ ์์ ํ๋ธ ์๋ฒ ๊ตฌ์ฑ์ด ํ์ํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ OAuth ๋๋ ์คํธ๋ฆฌ๋ฐ์ ์ฌ์ฉํ๋ ์์ ์ ๋ก์ปฌ ์์ ํ๋ธ ์ค์ ๊ถ์ฅ์ฌํญ ํ์ด์ง๋ฅผ ์ฐธ์กฐํ์ธ์. | ๋ถ๋ฆฌ์ธ |
minimumSupportedVersion |
์๋์ | ๊ด๋ฆฌ์ ํจ๋ ์์ ํ๋ธ ๋ชฉ๋ก์์ ์์ ์ด ํ์๋๋ ์ต์ Looker ๋ฒ์ ์ ๋๋ค. | ๋ฌธ์์ด |
Looker ์์ ํ๋ธ ์์ ์ ์์๋ GitHub์์ ์ฐธ์กฐํ ์ ์์ต๋๋ค.
์ง์๋๋ ์์ ์ ํ
Looker๋ ์์
์ supportedActionTypes
๋งค๊ฐ๋ณ์์ ์ง์ ๋ ๋๋ก ์ฟผ๋ฆฌ, ์
, ๋์๋ณด๋์ ์ธ ๊ฐ์ง ์ ํ์ ์์
์ ์ง์ํฉ๋๋ค.
- ์ฟผ๋ฆฌ ์์ค ์์ : ์ ์ฒด ์ฟผ๋ฆฌ๋ฅผ ์ ์กํ๋ ์์ ์ ๋๋ค. ์๋ฅผ ๋ค์ด ์ธ๊ทธ๋จผํธ ์์ ์ ์ฟผ๋ฆฌ ์์ค ์์ ์ ๋๋ค.
- ์
์์ค ์์
: ์
์์ค ์์
์ ๋ฐ์ดํฐ ํ
์ด๋ธ์์ ํน์ ๋จ์ผ ์
์ ๊ฐ์ ์ ์กํฉ๋๋ค. ์ด ์์
์ ํ์
action
๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ์ธก์ ๊ธฐ์ค ๋๋ ์ธก์ ๊ฐ์ ๋ํด ์ ์ํ ์ ์๋ ๋ฐ์ดํฐ ์์ ๊ณผ ๋ค๋ฆ ๋๋ค. ํ ์ด๋ธ ๋ด์ ์๋ ํน์ ์ ์ ์ ๋ณด๋ฅผ ์ ์กํ๊ธฐ ์ํด Looker๋ ํ๊ทธ๋ฅผ ์ฌ์ฉํด์ ์์ ์ ํด๋น ์ ์ ๋งคํํฉ๋๋ค. ์์ ์ ์ง์ํ๋ ํ๊ทธ๋ฅผrequiredFields
์ ์ง์ ํด์ผ ํฉ๋๋ค. ์์ ๋ฐ ํ๋๋ฅผ ๋งคํํ๋ ค๋ฉด LookML์ ํ๋๊ฐ LookMLtags
๋งค๊ฐ๋ณ์๋ก ๋งคํ๋๋ ํ๊ทธ๋ฅผ ์ง์ ํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด Twilio ๋ฉ์์ง ์์ ์phone
ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก LookML ๊ฐ๋ฐ์๊ฐ Twilio ์์ ์ด ํ์๋ ์ ํ๋ฒํธ ํ๋๋ฅผ ์ ์ดํ ์ ์์ต๋๋ค. - ๋์๋ณด๋ ์์ค ์์ : ๋์๋ณด๋ ์์ค ์์ ์ ๋์๋ณด๋์ ์ด๋ฏธ์ง ์ ์ก์ ์ง์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด SendGrid ์์ ์ ์ด๋ฉ์ผ์ ํตํด ๋์๋ณด๋ ์ด๋ฏธ์ง๋ฅผ ์ ์กํฉ๋๋ค.
์ปค์คํ ์์ ์ ์ฌ์ฉ์ ์์ฑ ์ถ๊ฐ
์ปค์คํ
์์
์ ๊ฒฝ์ฐ ์์
ํ์ผ์ params
๋งค๊ฐ๋ณ์์ ์ฌ์ฉ์ ์์ฑ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๋งค๊ฐ๋ณ์๊ฐ ํ์์ธ ๊ฒฝ์ฐ ๊ฐ ์ฌ์ฉ์๋ send_to_integration
๊ถํ ์ธ์๋ ์ฌ์ฉ์ ๊ณ์ ๋๋ ์ํ ์ฌ์ฉ์ ๊ทธ๋ฃน์ ์ ์๋ ์ด ์์ฑ์ ๊ฐ์ ๊ฐ์ง๊ณ ์์ด์ผ ์ฝํ
์ธ ๋ฅผ ๋ณด๋ด๊ฑฐ๋ ์์ฝํ ๋ ์์
์ ๋์ ์ต์
์ผ๋ก ๋ณผ ์ ์์ต๋๋ค.
์์ ์ ์ฌ์ฉ์ ์์ฑ์ ์ถ๊ฐํ๋ ค๋ฉด ๋ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์.
- Looker ๊ด๋ฆฌ์๋
user_attribute_param
์ ํด๋นํ๋ ์ฌ์ฉ์ ์์ฑ์ ๋ง๋ค์ด์ผ ํ ์ ์์ต๋๋ค(์์ง ์๋ ๊ฒฝ์ฐ). - ์์
๋์์ ์ฝํ
์ธ ๋ฅผ ์ ๊ณตํด์ผ ํ๋ ์ฌ์ฉ์ ๋๋ ์ฌ์ฉ์ ๊ทธ๋ฃน์ ๋ํด ์ฌ์ฉ์ ์์ฑ์ ์ ํจํ ๊ฐ์ ์ ์ํ์ธ์. (์ด๋ฌํ ์ฌ์ฉ์๋
send_to_integration
๊ถํ๋ ์์ด์ผ ํฉ๋๋ค.) params
๋งค๊ฐ๋ณ์๋ Looker ๊ด๋ฆฌ์๊ฐ ๊ด๋ฆฌ ํจ๋์ ์์ ๋ชฉ๋ก์์ ์์ ์ ์ฌ์ฉ ์ค์ ํ์ด์ง์์ ๊ตฌ์ฑํด์ผ ํ๋ ์์ ํ๋๋ฅผ ๋ํ๋ ๋๋ค. ์์ ํ์ผ์params
๋งค๊ฐ๋ณ์์ ๋ค์์ ํฌํจํฉ๋๋ค.
params = [{
description: "A description of the param.",
label: "A label for the param.",
name: "action_param_name",
user_attribute_name: "user_attribute_name",
required: true,
sensitive: true,
}]
์ฌ๊ธฐ์์ user_attribute_name
์ ๊ด๋ฆฌ ํจ๋์ ์ฌ์ฉ์ ์น์
์ ์ฌ์ฉ์ ์์ฑ ํ์ด์ง์ ์๋ ์ด๋ฆ ํ๋์ ์ ์๋ ์ฌ์ฉ์ ์์ฑ์
๋๋ค. required: true
๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ๋ ์์
์ ํ์ธํ๋ ค๋ฉด ์ฌ์ฉ์ ์์ฑ์ null์ด ์๋ ์ ํจํ ๊ฐ์ด ์ ์๋์ด ์์ด์ผ ํจ์ ์๋ฏธํฉ๋๋ค. sensitive: true
๋ ์ฌ์ฉ์ ์์ฑ ๊ฐ์ด ์ํธํ๋์ด ์
๋ ฅํ ํ์๋ Looker UI์ ํ์๋์ง ์์์ ์๋ฏธํฉ๋๋ค. ์ฌ์ฉ์ ์์ฑ ํ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
- ์์
ํ๋ธ ์๋ฒ์ ์
๋ฐ์ดํธ๋ฅผ ๋ฐฐํฌํฉ๋๋ค.
- ์ ์์ ์ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ Looker ๊ด๋ฆฌ์๊ฐ ๊ด๋ฆฌ ํจ๋์ ์์ ํ์ด์ง์ ์๋ ์์ ์์ ์๋ ์ฌ์ฉ ์ค์ ๋ฒํผ์ ํด๋ฆญํ์ฌ ์์ ์ ์ฌ์ฉ ์ค์ ํด์ผ ํฉ๋๋ค.
- ๊ธฐ์กด ์์ ์ ์ ๋ฐ์ดํธํ๋ ๊ฒฝ์ฐ ์๋ก๊ณ ์นจ ๋ฒํผ์ ํด๋ฆญํ์ฌ ์์ ๋ชฉ๋ก์ ์๋ก๊ณ ์นจํฉ๋๋ค. ๊ทธ๋ฐ ํ ์ค์ ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
- Looker ๊ด๋ฆฌ์๋ ์์
์ค์ /์ง์ ํ์ด์ง์์ ์ ํฉํ ํ๋ ์ค๋ฅธ์ชฝ์ ์๋ ์ฌ์ฉ์ ์์ฑ ์์ด์ฝ
์ ํด๋ฆญํ๊ณ ์ํ๋ ์ฌ์ฉ์ ์์ฑ์ ์ ํํ์ฌ ์ฌ์ฉ์ ์์ฑ์์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋๋ก ์์ ์ ์์ ํ๋๋ฅผ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค.
์
์์ค ์์
์ requiredField
๋งค๊ฐ๋ณ์
์
์์ค ์์
์ ๊ฒฝ์ฐ ์์
ํ์ผ์ requiredFields
๋งค๊ฐ๋ณ์์์ ์์
์ด ์ง์ํ๋ ํ๊ทธ๋ฅผ ์ง์ ํ์ฌ ํด๋น ์์
๋์์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋๋ก ๋ชจ๋ธ์ LookML ํ๋๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
๋งค๊ฐ๋ณ์ | ํ์ | ์ค๋ช | ๋ฐ์ดํฐ ์ ํ |
---|---|---|---|
tag |
์๋์ | ์์ผ๋ฉด, ์ด ํ๊ทธ๋ฅผ ํฌํจํ๋ ํ๋๋ฅผ ํ์ํฉ๋๋ค. | ๋ฌธ์์ด |
any_tag |
์๋์ | ์์ผ๋ฉด, tag ๋ฅผ ๋์ฒดํ๊ณ ์ ๊ณต๋ ํ๊ทธ๊ฐ ํฌํจ๋ ํ๋๋ฅผ ํ์ํฉ๋๋ค. |
๋ฌธ์์ด |
all_tags |
์๋์ | ์์ผ๋ฉด, tag ๋ฅผ ๋์ฒดํ๊ณ ์ ๊ณต๋ ํ๊ทธ๊ฐ ๋ชจ๋ ํฌํจ๋ ํ๋๋ฅผ ํ์ํฉ๋๋ค. |
๋ฌธ์์ด |
์ง์๋๋ ๋ฐ์ดํฐ ํ์
DataActionRequest
ํด๋์ค๋ ์์
์ํ์ ์ฌ์ฉํ ์ ์๋ ๋ฐ์ดํฐ ์ ์ก ํ์์ ์ ์ํฉ๋๋ค. ์ฟผ๋ฆฌ ์์ค ์์
์์๋ ์ฌ๋ฌ ํ์์ผ๋ก ํ์ํ ์ ์๋ ์ฒจ๋ถํ์ผ์ด ์์ฒญ์ ํฌํจ๋ฉ๋๋ค. ์์
์ ํ๋ ์ด์์ supportedFormats
๋ฅผ ์ง์ ํ๊ฑฐ๋ ๊ฐ๋ฅํ ๋ชจ๋ ํ์์ ์ง์ ํ์ฌ ์ฌ์ฉ์๊ฐ ํ์์ ์ ํํ๋๋ก ํ ์ ์์ต๋๋ค. ์
์์ค ์์
์์๋ ์
์ ๊ฐ์ด DataActionRequest
์ ํ์๋ฉ๋๋ค.
OAuth์ ์์ ๊ตฌ์ฑ
์ฌ์ฉ์๊ฐ OAuth๋ก ์์ ์ ์ธ์ฆํ ์ ์๋๋ก ์์ ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. Looker ์์ ํ๋ธ๋ ์คํ ์ดํธ๋ฆฌ์ค(Stateless)๋ก ์ ์ง๋์ด์ผ ํ์ง๋ง Looker Action API์ ์์ ์์ฒญ์ ํตํด ์ํ๋ฅผ ์ ์ฉํ ์ ์์ต๋๋ค.
Looker ์์ OAuth ํ๋ฆ
Looker ์์
ํ๋ธ์ ์์
์ Hub.Action
๋์ OAuthAction
์ ํ์ฅํ์ฌ ์ฌ์ฉ์๋ฅผ ์์
์ ์ธ์ฆํ๋ ๋ฐ ํ์ํ OAuth ๋ฉ์๋๋ฅผ ๋ํ๋ด๋ ๋ถ๋ฆฌ์ธ์ ์ค์ ํ ์ ์์ต๋๋ค. ๋ชจ๋ OAuth ์ฌ์ฉ ์ค์ ๋๋ ์ํ ์ฌ์ฉ ์ค์ ์์
์ ๋ํด Looker๋ ์ฌ์ฉ์๋ณ, ์์
๋ณ ์ํ๋ฅผ ์ ์ฅํ๋ฏ๋ก ๊ฐ ์์
๊ณผ ์ฌ์ฉ์ ์กฐํฉ์ ๋
๋ฆฝ์ ์ธ OAuth ์ด๋ฒคํธ๊ฐ ํฌํจ๋ฉ๋๋ค.
์์
์ ๋ง๋๋ ํ๋ฆ์๋ ์ผ๋ฐ์ ์ผ๋ก /form
์์ฒญ์ด ํฌํจ๋๋ฉฐ /execute
์์ฒญ์ผ๋ก ์ด์ด์ง๋๋ค. OAuth์ ๊ฒฝ์ฐ /form
์์ฒญ์ ์ฌ์ฉ์๊ฐ ๋์ ์๋น์ค ๋ด์ ์ธ์ฆ๋์ด ์๋์ง ํ์ธํ๋ ๋ฐฉ๋ฒ์ด ํฌํจ๋์ด์ผ ํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ์ด๋ฏธ ์ธ์ฆ๋ ๊ฒฝ์ฐ ์์
์ /execute
์์ฒญ์ ํ์ํ ์ฌํญ์ ๋ฐ๋ผ ์ผ๋ฐ /form
์ ๋ฐํํด์ผ ํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ์ธ์ฆ๋์ง ์์ ๊ฒฝ์ฐ ์์
์ OAuth ํ๋ฆ์ ์ด๊ธฐํํ๋ ๋งํฌ๋ฅผ ๋ฐํํฉ๋๋ค.
OAuth URL๋ก ์ํ ์ ์ฅ
Looker๋ ๋ณธ๋ฌธ์ด ๋น์ด ์๋ HTTP POST ์์ฒญ์ ActionList
์๋ํฌ์ธํธ๋ก ์ ์กํฉ๋๋ค. ์์
์ด ์ ์์ uses_oauth: true
๋ฅผ ๋ฐํํ๋ ๊ฒฝ์ฐ ์์
์ Looker์ ๋ชจ๋ /form
์์ฒญ์ ์ผํ์ฉ state_url
์ด ์ ์ก๋ฉ๋๋ค. state_url
์ ์ง์ ๋ ์์
์ ์ฌ์ฉ์ ์ํ๋ฅผ ์ค์ ํ๋ ํน์ํ ์ผํ์ฉ URL์
๋๋ค.
์ฌ์ฉ์๊ฐ ์๋ํฌ์ธํธ๋ก ์ธ์ฆ๋์ง ์์ ๊ฒฝ์ฐ ๋ฐํ๋ /form
์ ์์
์ /oauth
์๋ํฌ์ธํธ๋ก ์ด๋ํ๋ oauth_link
์ ํ์ form_field
๋ฅผ ํฌํจํด์ผ ํฉ๋๋ค. state_url
์ ์ํธํ๋๋ฉฐ ๋ฐํ๋๋ oauth_url
์ state
๋งค๊ฐ๋ณ์๋ก ์ ์ฅ๋์ด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
{
"name": "login",
"type": "oauth_link",
"label": "Log in",
"description": "OAuth Link",
"oauth_url": "ACTIONHUB_URL/actions/my_action/oauth?state=encrypted_state_url"
}
์ด ์์์์ /oauth
์๋ํฌ์ธํธ๋ ์ฌ์ฉ์๋ฅผ ์ธ์ฆ ์๋ฒ๋ก ๋ฆฌ๋๋ ์
ํฉ๋๋ค. /oauth
์๋ํฌ์ธํธ๋ Dropbox OauthUrl์ ํ์๋ ๊ฒ์ฒ๋ผ OAuth ์์
์ oauthUrl(...)
๋ฉ์๋์์ ๋ฆฌ๋๋ ์
์ ๊ตฌ์ฑํฉ๋๋ค.
์ํธํ๋ state_url
์ด ํฌํจ๋ state
๋งค๊ฐ๋ณ์๋ฅผ Looker ์์
ํ๋ธ์ ์ ๋ฌํด์ผ ํฉ๋๋ค.
์์ ํ๋ธ ๋ฆฌ๋๋ ์ URI๋ก ์ํ ์ ์ฅ
/oauth
์๋ํฌ์ธํธ์์ ์์
ํ๋ธ์ redirect_uri
๋ ์์ฑ๋๊ณ ์์
์ oauthUrl(...)
๋ฉ์๋๋ก ์ ๋ฌ๋ฉ๋๋ค. redirect_uri
๋ /actions/src/actions/my_maction/oauth_redirect
ํ์์ด๋ฉฐ ์ธ์ฆ์ด ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋๋ ์๋ํฌ์ธํธ์
๋๋ค.
์ด ์๋ํฌ์ธํธ๋ oauthFetchInfo(...)
๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค. ์ด ๋ฉ์๋๋ ํ์ํ ์ ๋ณด๋ฅผ ์ถ์ถํ๊ณ ๋ชจ๋ ์ํ ๋๋ ์ธ์ฆ ์๋ฒ์์ ์์ ๋ auth
๋ฅผ ์์ ํ๊ฑฐ๋ ์ ์ฅํ๋๋ก ์๋ํ๊ธฐ ์ํด OauthAction
๋ฉ์๋๋ก ๊ตฌํ๋์ด์ผ ํฉ๋๋ค.
state
๋ ์ํธํ๋ state_url
์ ๋ณตํธํํ๊ณ ์ด๋ฅผ ์ฌ์ฉํ์ฌ Looker์ ๋ค์ POST state
๋ฅผ ์ ์กํฉ๋๋ค. ๋ค์์ ์ฌ์ฉ์๊ฐ ์ด ์์
์ ์์ฒญํ๋ฉด ์๋ก ์ ์ฅ๋ ์ํ๊ฐ Looker ์์
ํ๋ธ๋ก ์ ์ก๋ฉ๋๋ค.
Looker ์์ ํ๋ธ ์ ์ฅ์์ ์์ ํ์ผ ์ถ๊ฐ
์์ ํ์ผ์ด ์์ฑ๋๋ฉด Looker ์์ ํ๋ธ ์ ์ฅ์์์ ๋ค์์ ์ํํฉ๋๋ค.
์์ ํ์ผ(์:
my_action.ts
)์actions/src/actions/index.ts
์ ์ถ๊ฐํฉ๋๋ค.import "./my_action/my_action.ts"
์์ ์ ์์ฑํ ๋ ํ์ฉํ ๋ชจ๋ Node.js ํจํค์ง ์๊ตฌ์ฌํญ์ ์ถ๊ฐํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
yarn add aws-sdk yarn add express
Looker ์์ ํ๋ธ ์๋ฒ์ Node.js ์ข ์ ํญ๋ชฉ์ ์ค์นํฉ๋๋ค.
yarn install
์์ฑํ ํ ์คํธ๋ฅผ ์คํํฉ๋๋ค.
yarn test
์์ ํ ์คํธ
์ ์ฒด ํ ์คํธ๋ฅผ ์ํด์๋ ๋น๊ณต๊ฐ ์์ ํ๋ธ ์๋ฒ๋ฅผ ํธ์คํ ํ์ฌ Looker ์ธ์คํด์ค์ ๋ํด ์์ ์ ์๋ํ ์ ์์ต๋๋ค. ์ด ์๋ฒ๋ ์ ํจํ SSL ์ธ์ฆ์๊ฐ ์๋ ๊ณต๊ฐ ์ธํฐ๋ท์ ์์ด์ผ ํ๋ฉฐ Looker์์ ์ฐ๊ฒฐ ๋๋ HTTPS ์์ฒญ์ ์์ํ๊ณ ์์ ํ ์ ์์ด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด ๋ค์ ์์ ํ์๋ ๊ฒ์ฒ๋ผ Heroku์ ๊ฐ์ ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ํ๋ซํผ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋๋ ์์์ ์ธ๊ธํ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํ๋ ํ๋ซํผ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ก์ปฌ ์์ ํ๋ธ ์๋ฒ ์ค์
์ด ์์์์๋ looker-open-source/actions/src/actions
GitHub ์ ์ฅ์์์ ๊ฐ๋ฐํ ์์
์ ์ํํ๊ณ ์ฝ๋๋ฅผ ์ Git ๋ธ๋์น์ ์ปค๋ฐํฉ๋๋ค. ์ฝ๋๋ฅผ ์ฝ๊ฒ ์ถ์ ํ๊ณ ์ํ๋ ๊ฒฝ์ฐ Looker๋ก PR์ ์ฝ๊ฒ ๋ง๋ค ์ ์๋๋ก ๋ธ๋์น๋ฅผ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์์ ์์
ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์์ํ๋ ค๋ฉด ๋ธ๋์น๋ฅผ ๋ง๋ ํ ์์ ์ ์คํ ์ด์งํ๊ณ ์ปค๋ฐํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
git checkout -b my-branch-name git add file-names git commit -m commit-message
์ด ์์์์๋ ๋ธ๋์น๋ฅผ Heroku๋ก ํธ์ํ๋ ค๋ฉด ๋ช ๋ น์ค์์ Heroku๋ฅผ ์๊ฒฉ ์ต์ ์ผ๋ก Git ์ ์ฅ์๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
heroku login heroku create git push heroku
Heroku๋ ์ด์ ์ฌ์ฉํ ์์ ํ๋ธ๋ฅผ ํธ์คํ ํ๋ ๊ณต๊ฐ URL์ ๋ฐํํฉ๋๋ค. URL์ ๋ฐฉ๋ฌธํ๊ฑฐ๋
heroku logs
๋ฅผ ์คํํ์ฌ ์์ ํ๋ธ๊ฐ ์คํ๋๋์ง ํ์ธํฉ๋๋ค. ๊ณต๊ฐ URL์ ์์ ๊ฒฝ์ฐ ๋ช ๋ น์ค์์ ๋ค์์ ์คํํ๋ฉด ๋ฉ๋๋ค.heroku info -s | grep web_url
Heroku๊ฐ ๊ณต๊ฐ URL์ ๋ฐํํฉ๋๋ค. ์:
https://my-heroku-action-server-1234.herokuapp.com
๋ช ๋ น์ค์์ ์์ ํ๋ธ ๊ธฐ์ค URL์ ์ค์ ํฉ๋๋ค.
heroku config:set ACTION_HUB_BASE_URL="https://my-heroku-action-server-1234.herokuapp.com"
์์ ํ๋ธ ๋ผ๋ฒจ์ ์ค์ ํฉ๋๋ค.
heroku config:set ACTION_HUB_LABEL="Your Action Hub"
Looker๊ฐ ์น์ธ ํ ํฐ์ ์ฌ์ฉํ์ฌ ์์ ํ๋ธ์ ์ฐ๊ฒฐํฉ๋๋ค. ๋ช ๋ น์ค์์ ํ ํฐ์ ์์ฑํฉ๋๋ค.
heroku run yarn generate-api-key
์ด ์์์์์ ๊ฐ์ด Heroku๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ ๋์ ๋ค์์ ์ฌ์ฉํ์ธ์.
yarn generate-api-key
Heroku๊ฐ ์น์ธ ํ ํฐ์ ๋ฐํํฉ๋๋ค. ์:
Authorization: Token token="abcdefg123456789"
๋ณด์ ๋น๋ฐ ํค๋ฅผ ์ฌ์ฉํด์ ์์ ํ๋ธ ๋ณด์ ๋น๋ฐ์ ์ค์ ํฉ๋๋ค.
heroku config:set ACTION_HUB_SECRET="abcdefg123456789"
๊ณ ๊ฐ ํธ์คํ ๋ฐฐํฌ์๋ ์ฌ๊ธฐ์์ ์ค๋ช ํ์ง ์์ ์ถ๊ฐ์ ์ธ ํ๊ฒฝ ๋ณ์ ๊ตฌ์ฑ์ด ํ์ํ ์ ์์ต๋๋ค.
๊ด๋ฆฌ์ > ์์ ์ผ๋ก ์ด๋ํ์ฌ ๋ก์ปฌ Looker ์ธ์คํด์ค์์ ์์ ์ ์ถ๊ฐํฉ๋๋ค.
- ์์ ๋ชฉ๋ก ํ๋จ์์ ์์ ํ๋ธ ์ถ๊ฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ์์ ํ๋ธ URL์ ์ ๋ ฅํ๊ณ , ์ ํ์ ์ผ๋ก ๋ณด์ ๋น๋ฐ ํค๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- Looker์ ๊ด๋ฆฌ์ ๋ฉ๋ด ์์์ ์์ ๋ชฉ๋ก์ ์๋ ์์ ์ ์ฐพ์ต๋๋ค.
- ์ฌ์ฉ ์ค์ ์ ํด๋ฆญํฉ๋๋ค.
ํน์ ์ ํ์ ๋ฐ์ดํฐ๋ฅผ Looker์์ ์ ๋ฌํด์ผ ํ๋ ์์
์ ๊ฒฝ์ฐ ์ ์ ํ tags
๋งค๊ฐ๋ณ์๋ฅผ ํฌํจํ๋๋ก ๋ชจ๋ธ์ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค.
์ด์ ์์ ์ ํ ์คํธํ ์ค๋น๊ฐ ๋์์ต๋๋ค.
๋์๋ณด๋ ์์ค ๋ฐ ์ฟผ๋ฆฌ ์์ค ์์ ํ ์คํธ
ํ์ํ ๊ฒฝ์ฐ Looker ์ธ์คํด์ค์์ ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ LookML ๋ชจ๋ธ์ ๊ตฌ์ฑํฉ๋๋ค. Look์ ๋ง๋ค๊ณ ์ ์ฅํฉ๋๋ค. ์ ์ฅ๋ Look์์ ์ค๋ฅธ์ชฝ ์๋จ ๋ฉ๋ด๋ฅผ ํด๋ฆญํ๊ณ ์์ ์ ๋์์ผ๋ก ์ง์ ํ๊ณ ์ ์ก์ ์ ํํฉ๋๋ค. ์ ์กํ ์์์ด ์์ผ๋ฉด Looker๊ฐ ์ ์ก ์ฐฝ์ ์ด๋ฅผ ํ์ํฉ๋๋ค.
ํ ์คํธ ์ ์ก์ ํด๋ฆญํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์กํฉ๋๋ค. ์์ ์ํ๊ฐ ๊ด๋ฆฌ์ ํจ๋์ ์ค์ผ์ค๋ฌ ๊ธฐ๋ก์ ํ์๋ฉ๋๋ค. ์์ ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ๊ด๋ฆฌ ํจ๋์ ํ์๋๊ณ Looker์์ ์์ ์ ์ ์กํ ์ฌ์ฉ์์๊ฒ ์ค๋ฅ ๋ฉ์์ง๊ฐ ํฌํจ๋ ์ด๋ฉ์ผ์ ์ ์กํฉ๋๋ค.
์ ์์ค ์์ ํ ์คํธ
์์ ์ ์ ํฉํ ํ๊ทธ๋ฅผ ์ฌ์ฉํด์ LookML ํ๋๋ฅผ ์ค์ ํฉ๋๋ค. Looker ์ธ์คํด์ค์์ ์ด ํ๋๊ฐ ํฌํจ๋ ์ฟผ๋ฆฌ๋ฅผ ์คํํฉ๋๋ค. ๋ฐ์ดํฐ ํ ์ด๋ธ์์ ํ๋๋ฅผ ์ฐพ์ต๋๋ค. ์ ์์ โฆ์ ํด๋ฆญํ๊ณ ๋๋กญ๋ค์ด ๋ฉ๋ด์์ ์ ์ก์ ์ ํํฉ๋๋ค. ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ์ค๋ฅ๋ฅผ ํด๊ฒฐํ ํ ๋ฐ์ดํฐ ํ ์ด๋ธ์ ์ ์ฒด ์๋ก๊ณ ์นจํด์ผ ํฉ๋๋ค.
- ์์ ์ด ์ค๋ฅ ์์ด ์ ์ก๋์์ผ๋ฉด ์์ ์ ๊ฒ์ํ ์ค๋น๊ฐ ๋์์ต๋๋ค!
- ๊ณ์ํด์ ์์ ์ ๋น๊ณต๊ฐ๋ก ํธ์คํ ํ๋ ค๋ฉด ๋น๊ณต๊ฐ ์์ ํ๋ธ์ ๊ฒ์ํ๋ฉด ๋ฉ๋๋ค.
- ๋ชจ๋ Looker ๊ณ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋๋ก ์์ ์ ๊ฒ์ํ๋ ค๋ฉด Looker ์์ ํ๋ธ์ ๊ฒ์ ์น์ ์ ์ฐธ์กฐํ์ธ์.
์ปค์คํ ์์ ๊ฒ์ ๋ฐ ์ฌ์ฉ ์ค์
์ปค์คํ ์์ ์๋ ๋ ๊ฐ์ง ๊ฒ์ ์ต์ ์ด ์์ต๋๋ค.
- Looker ์์ ํ๋ธ์ ๊ฒ์: Looker๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ์ฌ์ฉ์๊ฐ ์์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๋น๊ณต๊ฐ ์์ ํ๋ธ ์๋ฒ์ ๊ฒ์: Looker ์ธ์คํด์ค์์๋ง ์์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์์ ์ด ๊ฒ์๋์์ผ๋ฉด ๊ด๋ฆฌ์ ํจ๋์ ์์ ํ์ด์ง์์ ์์ ์ ์ฌ์ฉ ์ค์ ํ ์ ์์ต๋๋ค.
Looker ์์ ํ๋ธ์ ๊ฒ์
์ด ์ ๊ทผ ๋ฐฉ๋ฒ์ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ด๊ณ , Looker๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ์ฌ๋๋ค์๊ฒ ์ ๊ณตํ๋ ค๋ ์์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์์
์ด ํ
์คํธ๋์์ผ๋ฉด GitHub์์ looker-open-source/actions
์ ์ฅ์์ PR์ ์ ์ถํ ์ ์์ต๋๋ค.
๋ค์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํฉ๋๋ค.
git push <your fork> <your development branch>
looker-open-source/actions
์ ์ฅ์๋ฅผ ๋์์ผ๋ก ์ฌ์ฉํด์ pull ์์ฒญ์ ๋ง๋ญ๋๋ค.Looker Marketplace ๋ฐ ์์ ํ๋ธ ์ ์ถ ์์์ ์์ฑํฉ๋๋ค. ์์ ์๊ตฌ์ฌํญ์ ๋ํ ์์ธํ ๋ด์ฉ์ Looker Marketplace์ ์ฝํ ์ธ ์ ์ถ์ ์ฐธ์กฐํ์ธ์.
Looker๊ฐ ์์ ์ฝ๋๋ฅผ ๊ฒํ ํฉ๋๋ค. Google์ PR์ ๊ฑฐ๋ถํ ๊ถ๋ฆฌ๋ฅผ ๋ณด์ ํ์ง๋ง ๋ฌธ์ ๊ฐ ์๋ ๊ฒฝ์ฐ ์ด๋ฅผ ์ง์ํ๊ณ ๊ฐ์ ํ๋ ์ ์์ ์ ๊ณตํ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ํ ์ฝ๋๋ฅผ
looker-open-source/actions
์ ์ฅ์์ ๋ณํฉํ๊ณactions.looker.com
์ ๋ฐฐํฌํฉ๋๋ค. ์ฝ๋๊ฐ ๋ฐฐํฌ๋์์ผ๋ฉด ๋ชจ๋ Looker ๊ณ ๊ฐ๋ค์๊ฒ ์ ๊ณต๋ฉ๋๋ค.Looker ์ธ์คํด์ค์์ ์์ ์ ์ฌ์ฉ ์ค์ ํ๋ฉด ๋ฐ์ดํฐ ์ ์ก ์ต์ ์ผ๋ก ํ์๋ฉ๋๋ค.
๋น๊ณต๊ฐ ์์ ํ๋ธ ์๋ฒ์ ๊ฒ์
ํ์ฌ ๋๋ ์ฌ์ฉ ์ฌ๋ก์ ๋ฐ๋ผ ๋น๊ณต๊ฐ์ธ ์ปค์คํ
์์
์ด ์์ ๋๋ ์ด๋ฌํ ์์
์ looker-open-source/actions
์ ์ฅ์์ ์ถ๊ฐํ์ง ์์์ผ ํฉ๋๋ค. ๋์ ์์
ํ
์คํธ๋ฅผ ์ํด ์ฌ์ฉํ ๊ฒ๊ณผ ๋์ผํ Node.js ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋น๊ณต๊ฐ ์์
ํ๋ธ๋ฅผ ๋ง๋ญ๋๋ค.
์์ฒด ์ธํ๋ผ์์ ๋๋ ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ซํผ(์์์์ ์ฌ์ฉํ Heroku)์ ์ฌ์ฉํ์ฌ ๋ด๋ถ ์์ ํ๋ธ ์๋ฒ๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค. ๋ฐฐํฌ ์ ๋น๊ณต๊ฐ ์์ ํ๋ธ ์๋ฒ์ Looker ์์ ํ๋ธ๋ฅผ ํฌํฌํ๋ ๊ฒ์ ์์ง ๋ง์ธ์.
์์ ์ ์ฌ์ฉํ LookML ๋ชจ๋ธ ๊ตฌ์ฑ
Looker ์์
ํ๋ธ์์ ์ฌ์ฉํ ์ ์๋ ์ปค์คํ
์์
๊ณผ ์์
๋ชจ๋ LookML ๋ชจ๋ธ์ tags
๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ด๋ จ ๋ฐ์ดํฐ ํ๋๋ฅผ ์๋ณํด์ผ ํฉ๋๋ค. ๊ด๋ฆฌ ํจ๋์ ์์
ํ์ด์ง์์ ์๋น์ค์ ํ์ํ ํ๊ทธ(์๋ ๊ฒฝ์ฐ)์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
์๋ฅผ ๋ค์ด Twilio ๋ฉ์์ง ์ ์ก ํตํฉ์ ์ ํ ๋ฒํธ ๋ชฉ๋ก์ ๋ฉ์์ง๋ฅผ ์ ์กํฉ๋๋ค. ๊ด๋ฆฌ์ ํจ๋์ ์์
ํจ๋์์ ์ด ํตํฉ์๋ "phone
ํ๊ทธ ์ง์ ํ๋๊ฐ ์๋ ์ฟผ๋ฆฌ์ ์์
์ฌ์ฉ ๊ฐ๋ฅ" ๋ฌธ๊ตฌ๊ฐ ํ์๋ฉ๋๋ค.
์ฆ, Twilio ๋ฉ์์ง ์ ์ก ์๋น์ค์๋ ์ ํ ๋ฒํธ ํ๋๊ฐ ํฌํจ๋์ด ์๊ณ tags
๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํด์ ์ ํ ๋ฒํธ๊ฐ ํฌํจ๋ ์ฟผ๋ฆฌ์ ํ๋ ์๋ณํ๋ ์ฟผ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค. ํด๋น ํ๋์ tags: ["phone"]
์ ์ง์ ํ์ฌ LookML์์ ์ ํ๋ฒํธ ํ๋๋ฅผ ์๋ณํฉ๋๋ค. ์ ํ ๋ฒํธ ํ๋์ ๋ํ LookML์ ๋ค์๊ณผ ๊ฐ์ด ํ์๋ ์ ์์ต๋๋ค.
dimension: phone {
tags: ["phone"]
type: string
sql: ${TABLE}.phone ;;
}
ํ๊ทธ๊ฐ ํ์ํ์ง ์์ ํตํฉ์๋ ๊ด๋ฆฌ ํจ๋์ ์์ ํ์ด์ง์ '๋ชจ๋ ์ฟผ๋ฆฌ์ ์์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค'๋ผ๋ ํ์ ํ ์คํธ๊ฐ ํ์๋ฉ๋๋ค.
์ฌ์ฉ์๊ฐ ์๋น์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์ ์๋๋ก tags
๋งค๊ฐ๋ณ์๋ก LookML ๋ชจ๋ธ์ ํ์ ํ๋๋ฅผ ์๋ณํด์ผ ํฉ๋๋ค.
๋ค์ ๋จ๊ณ
Look ๋๋ Explore ๋๋ ๋์๋ณด๋์ ์ฝํ ์ธ ๋ฅผ ํตํฉ ์๋น์ค์ ์ ์กํ๋ ๋ฐฉ๋ฒ์ ์์๋ด ๋๋ค.