ํ”„๋ก์‹œ ์„œ๋ฒ„ ๋ฐฐํฌ

์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” ํ”„๋ก์‹œ ์„œ๋ฒ„๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋‹จ๊ณ„๋ฅผ ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ก์‹œ ์„œ๋ฒ„๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ Dialogflow API์™€์˜ ์ธ์ฆ์„ ๊ฐ„์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ƒ๋‹ด์‚ฌ ์›Œํฌ์ŠคํŽ˜์ด์Šค์—์„œ UI ๋ชจ๋“ˆ์„ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐฉ๋ฒ•์€ LivePerson ๊ธฐ๋ณธ ํŠœํ† ๋ฆฌ์–ผ ํŽ˜์ด์ง€๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”. LivePerson์—์„œ ๋ชจ๋“ˆ์„ ๋ Œ๋”๋งํ•˜๋ ค๋ฉด ๋™์ผํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์™€ ํ”„๋ก์‹œ ์„œ๋ฒ„๊ฐ€ ๋ชจ๋‘ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์–ด๋–ค ํ˜ธ์ŠคํŒ… ํ”Œ๋žซํผ์—์„œ๋“  ์ด ํ†ตํ•ฉ ๋ฐฐํฌ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด ์•ˆ๋‚ด์—์„œ๋Š” Google์˜ Cloud Run์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๊ธฐ ์ „์—

์ด ํŠœํ† ๋ฆฌ์–ผ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋ฅผ ๋ฐฐํฌํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

๊ตฌ์„ฑ

์„œ๋น„์Šค๋ฅผ ๋ฐฐํฌํ•  ๋•Œ ๋‹ค์Œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฒ˜์Œ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค ๋•Œ LP_CLIENT_ID ๋ฐ LP_CLIENT_SECRET ๋ณ€์ˆ˜๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๋‚จ๊ฒจ์•ผ ํ•ฉ๋‹ˆ๋‹ค. LivePerson์€ Conversational Cloud ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ๋•Œ ์ด๋Ÿฌํ•œ ๋ณ€์ˆ˜๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ์ด๋•Œ ๋ณ€์ˆ˜๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ฒ˜์Œ์—๋Š” APPLICATION_SERVER_URL์™€ DF_PROXY_SERVER_URL๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ํ”„๋ก์‹œ ์„œ๋ฒ„๊ฐ€ ๋ฐฐํฌ๋˜๊ณ  ํ•„์š”ํ•œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ ํ›„์— ๋‘˜ ๋‹ค ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  • LP_ACCOUNT_ID: LivePerson ๊ณ„์ • ID์ž…๋‹ˆ๋‹ค.
  • LP_CLIENT_ID: LivePerson ํด๋ผ์ด์–ธํŠธ ID์ž…๋‹ˆ๋‹ค. ์ด๋Š” Conversational Cloud ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์„ค์น˜๋˜๋ฉด LivePerson์—์„œ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. (์ •๋ณด๊ฐ€ ์ œ๊ณต๋˜๋ฉด ์—…๋ฐ์ดํŠธํ•  ๊ฒƒ์ด๋ฏ€๋กœ ์ง€๊ธˆ์€ ์ด ๋ณ€์ˆ˜๋ฅผ ๊ฑด๋„ˆ๋›ฐ์„ธ์š”.)
  • LP_CLIENT_SECRET: LivePerson ํด๋ผ์ด์–ธํŠธ ๋ณด์•ˆ ๋น„๋ฐ€๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค. ์ด๋Š” Conversational Cloud ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์„ค์น˜๋˜๋ฉด LivePerson์—์„œ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. (์ •๋ณด๊ฐ€ ์ œ๊ณต๋˜๋ฉด ์ด ๋ณ€์ˆ˜๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ฏ€๋กœ ์ง€๊ธˆ์€ ๊ฑด๋„ˆ๋›ฐ์„ธ์š”.)
  • LP_SENTINEL_DOMAIN: https://developers.liveperson.com/domain-api.html๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ณ„์ • ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  'sentinel' ๋„๋ฉ”์ธ์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
  • LP_ACCOUNT_CONFIG_READONLY_DOMAIN: https://developers.liveperson.com/domain-api.html๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ณ„์ • ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  'accountConfigReadOnly' ๋„๋ฉ”์ธ์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
  • APPLICATION_SERVER_URL: UI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์˜ URL์ž…๋‹ˆ๋‹ค.
  • JWT_SECRET: ์ธ์ฆ ํ† ํฐ์— ์„œ๋ช…ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” '๋ณด์•ˆ' ๋ฌธ๊ตฌ์ž…๋‹ˆ๋‹ค. ๊ธด ์ž„์˜์˜ ๋ณด์•ˆ ๋น„๋ฐ€์ด ๊ฐ€์žฅ ์•ˆ์ „ํ•˜์ง€๋งŒ ์–ด๋–ค ๋ฌธ๊ตฌ๋“  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://fusionauth.io/learn/expert-advice/tokens/building-a-secure-jwt/#keys์˜ ๊ถŒ์žฅ์‚ฌํ•ญ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์ƒ˜ํ”Œ .env ํŒŒ์ผ:

    LP_ACCOUNT_ID = 12345678
    LP_CLIENT_ID = abc-123-f0f0
    LP_CLIENT_SECRET = abc123abc123abc123abc123
    LP_SENTINEL_DOMAIN = va.sentinel.liveperson.net
    LP_ACCOUNT_CONFIG_READONLY_DOMAIN = z1.acr.liveperson.net
    APPLICATION_SERVER_URL = https://my-project.wm.r.appspot.com
    JWT_SECRET = an_example_JWT_secret_phrase_please_use_something_better

๋ฐฐํฌ

UI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋Š” Google Cloud ํ˜ธ์ŠคํŒ… ์„œ๋น„์Šค์— ๋ฐฐํฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Google App Engine ๋˜๋Š” Cloud Run์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ๋‹จ๊ณ„์—์„œ๋Š” Cloud Run์„ ์˜ˆ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌ

๋กœ์ปฌ ํ„ฐ๋ฏธ๋„์—์„œ ํ™œ์„ฑ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ €์žฅ์†Œ์˜ ๋ฃจํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ €์žฅ์†Œ์˜ ์ƒํƒœ๋ฅผ Google Cloud Platform Container Registry์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. PROJECT-ID๋ฅผ Google Cloud Platform ํ”„๋กœ์ ํŠธ ID๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    gcloud builds submit --tag gcr.io/PROJECT-ID/agent-assist-modules-proxy-server

๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ†ตํ•ฉ์„ ๋ผ์ด๋ธŒ๋กœ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค. PROJECT-ID๋ฅผ ์—์ด์ „ํŠธ์˜ Google Cloud Platform ํ”„๋กœ์ ํŠธ ID๋กœ ๋ฐ”๊พธ๊ณ  SERVICE-ACCOUNT-EMAIL๋ฅผ ์„œ๋น„์Šค ๊ณ„์ • ํด๋ผ์ด์–ธํŠธ ์ด๋ฉ”์ผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    gcloud run deploy --image gcr.io/PROJECT-ID/agent-assist-modules-proxy-server --service-account=SERVICE-ACCOUNT-EMAIL --memory 1Gi --platform managed
  • ๋ฆฌ์ „์„ ์ž…๋ ฅํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด ๋ฆฌ์ „ (์˜ˆ: us-central1)์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  • ์„œ๋น„์Šค ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด Enter ํ‚ค๋ฅผ ๋ˆŒ๋Ÿฌ ๊ธฐ๋ณธ๊ฐ’์„ ์ˆ˜๋ฝํ•ฉ๋‹ˆ๋‹ค.
  • ์ธ์ฆ๋˜์ง€ ์•Š์€ ํ˜ธ์ถœ์„ ํ—ˆ์šฉํ• ์ง€ ๋ฌป๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด y์„ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ Cloud Run ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”. Google Cloud Platform Console์˜ Cloud Run์—์„œ ํ™œ์„ฑ ํ†ตํ•ฉ ๋ฐฐํฌ ๋ชฉ๋ก์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ ๋ณ€์ˆ˜

Cloud Run ์•ˆ๋‚ด์— ๋”ฐ๋ผ ํ•„์š”ํ•œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์„œ๋น„์Šค๊ฐ€ ๋ฐฐํฌ๋˜๋ฉด CLI์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฐฐํฌ๋œ URL (target_url)์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๋Œ์•„๊ฐ€์„œ ์ด ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์˜ DF_PROXY_SERVER_URL ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์„œ๋ฒ„ ์ข…๋ฃŒ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋ฅผ ์ข…๋ฃŒํ•˜๋ ค๋ฉด Cloud Run ์„œ๋น„์Šค๋ฅผ ์‚ญ์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋กœ์ปฌ ํ„ฐ๋ฏธ๋„์—์„œ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ด์ „์— ์„ ํƒํ•œ ํƒ€๊ฒŸ ํ”Œ๋žซํผ์„ ์„ ํƒํ•˜์—ฌ ํ™œ์„ฑ ๋ฐฐํฌ๋ฅผ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค.

    gcloud beta run services list

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    gcloud beta run services delete agent-assist-modules-proxy-server