๋™๊ธฐํ™” ๋‹ด๋‹น์ž ๊ตฌ์„ฑ

์ด ์„น์…˜์—์„œ๋Š” ๋™๊ธฐํ™” ๋‹ด๋‹น์ž๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋™๊ธฐํ™” ๋‹ด๋‹น์ž ๊ฐœ์š”

Apigee Hybrid์—์„œ ๋™๊ธฐํ™” ๋‹ด๋‹น์ž์˜ ๊ธฐ๋ณธ ์ž‘์—…์€ ๊ด€๋ฆฌ ์˜์—ญ์—์„œ ์ œ๊ณตํ•˜๋Š” ๋Ÿฐํƒ€์ž„ ๊ณ„์•ฝ์„ ํด๋งํ•˜๊ณ  ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ณ„์•ฝ์œผ๋กœ ์ „๋‹ฌ๋˜๋Š” ์ •๋ณด์—๋Š” API ํ”„๋ก์‹œ, API ์ œํ’ˆ, ์บ์‹œ, ๊ฐ€์ƒ ํ˜ธ์ŠคํŠธ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๋™๊ธฐํ™” ๋‹ด๋‹น์ž๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Cassandra ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ํ™˜๊ฒฝ ๊ตฌ์„ฑ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

๋Ÿฐํƒ€์ž„ ์˜์—ญ์—์„œ ์‹คํ–‰๋˜๋Š” ๋™๊ธฐํ™” ๋‹ด๋‹น์ž ์ธ์Šคํ„ด์Šค๋Š” ์ •๊ธฐ์ ์œผ๋กœ ๊ด€๋ฆฌ ์˜์—ญ์„ ํด๋งํ•˜๊ณ , ๊ณ„์•ฝ์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ , ๋กœ์ปฌ ๋Ÿฐํƒ€์ž„ ์ธ์Šคํ„ด์Šค์— ๋™์ผํ•˜๊ฒŒ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ•˜๋‚˜์˜ ๋™๊ธฐํ™” ๋‹ด๋‹น์ž๊ฐ€ ๋™์ผํ•œ pod์— ๋ฐฐํฌ๋œ ์—ฌ๋Ÿฌ ๋ฉ”์‹œ์ง€ ํ”„๋กœ์„ธ์„œ๋ฅผ ์ง€์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋™๊ธฐํ™” ๋‹ด๋‹น์ž ์•ก์„ธ์Šค ์‚ฌ์šฉ ์„ค์ •

ํ”„๋ก์‹œ ๋ฒˆ๋“ค ๋ฐ ๊ด€๋ฆฌ ์˜์—ญ์˜ ๋ฆฌ์†Œ์Šค์™€ ๊ฐ™์€ Apigee ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ํ’€๋‹ค์šดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋™๊ธฐํ™” ๋‹ด๋‹น์ž ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Apigee API๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋™๊ธฐํ™” ๋‹ด๋‹น์ž๊ฐ€ ๊ด€๋ฆฌ ์˜์—ญ์—์„œ ๋Ÿฐํƒ€์ž„ ์˜์—ญ์œผ๋กœ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๋„๋ก ์Šน์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. Google Cloud ์„ค์ • ๋‹จ๊ณ„์˜ ์„ค๋ช…๋Œ€๋กœ Apigee API๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ–ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ API ์‚ฌ์šฉ ์„ค์ •์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.
  2. ์„œ๋น„์Šค ๊ณ„์ • ๋ฐ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด ๋งŒ๋“ค๊ธฐ์˜ ์ผ๋ถ€๋กœ ๋‹ค์šด๋กœ๋“œํ•œ ์“ฐ๊ธฐ ์‚ฌ์šฉ ์„ค์ •๋œ Google Cloud ์„œ๋น„์Šค ๊ณ„์ • ํ‚ค(JSON ํŒŒ์ผ)๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šค ๊ณ„์ •์—๋Š” Apigee ์กฐ์ง ๊ด€๋ฆฌ์ž ์—ญํ• ์ด ์žˆ์œผ๋ฉฐ ์ด๋ฆ„์€ 'apigee-org-admin'์ž…๋‹ˆ๋‹ค. ์ด์ „์— ์ด ์„œ๋น„์Šค ๊ณ„์ •์„ ๋งŒ๋“ค์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ณ„์†ํ•˜๊ธฐ ์ „์— ๊ณ„์ •์„ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  3. Apigee ์กฐ์ง ๊ด€๋ฆฌ์ž ์„œ๋น„์Šค ๊ณ„์ • ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ OAuth 2.0 ์•ก์„ธ์Šค ํ† ํฐ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. Apigee API๋ฅผ ์ธ์ฆํ•˜๋ ค๋ฉด ์ด ํ† ํฐ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

    gcloud๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ OAuth 2.0 ์•ก์„ธ์Šค ํ† ํฐ์„ ๊ฐ€์ ธ์˜ค๊ณ  GOOGLE_APPLICATION_CREDENTIALS ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์šด๋กœ๋“œํ•œ ์„œ๋น„์Šค ๊ณ„์ • ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด JSON ํŒŒ์ผ์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

    export GOOGLE_APPLICATION_CREDENTIALS=your_sa_credentials_file.json
    gcloud auth application-default print-access-token

    OAuth2.0 ํ† ํฐ์ด ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

    ์ž์„ธํ•œ ๋‚ด์šฉ์€ gcloud beta auth application-default print-access-token์„ ์ฐธ์กฐํ•˜์„ธ์š”.

  4. ๋ฐ˜ํ™˜๋œ OAuth 2.0 ํ† ํฐ์„ ๋ณต์‚ฌํ•˜์—ฌ TOKEN๊ณผ ๊ฐ™์€ ๋ณ€์ˆ˜์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    export TOKEN=ya29....Ts13inj3LrqMJlztwygtM
  5. setSyncAuthorization API๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋™๊ธฐํ™” ๋‹ด๋‹น์ž์— ํ•„์š”ํ•œ ๊ถŒํ•œ์„ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    ๋ฐ์ดํ„ฐ ์ƒ์ฃผ ์—†์Œ

    curl -X POST -H "Authorization: Bearer $TOKEN" \
      -H "Content-Type:application/json" \
      "https://apigee.googleapis.com/v1/organizations/YOUR_ORG_NAME:setSyncAuthorization" \
       -d '{"identities":["serviceAccount:SYNCHRONIZER_MANAGER_SERVICE_ACCOUNT_NAME"]}'
    

    ๊ฐ ํ•ญ๋ชฉ์˜ ์˜๋ฏธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    • YOUR_ORG_NAME: ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์กฐ์ง์˜ ์ด๋ฆ„
    • SYNCHRONIZER_MANAGER_SERVICE_ACCOUNT_NAME: Apigee ๋™๊ธฐํ™” ๋‹ด๋‹น์ž ๊ด€๋ฆฌ์ž ์—ญํ• ์ด ์žˆ๋Š” ์„œ๋น„์Šค ๊ณ„์ •์˜ ์ด๋ฆ„ ์ด๋ฆ„์€ ์ด๋ฉ”์ผ ์ฃผ์†Œ ํ˜•์‹๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด my-synchronizer-manager-service_account@my_project_id.iam.gserviceaccount.com์ž…๋‹ˆ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    curl -X POST -H "Authorization: Bearer $TOKEN" \
      -H "Content-Type:application/json" \
      "https://apigee.googleapis.com/v1/organizations/my_org:setSyncAuthorization" \
       -d '{"identities":["serviceAccount:my-synchronizer-manager-service_account@my_project_id.iam.gserviceaccount.com"]}'
    

    ๋ฐ์ดํ„ฐ ์ƒ์ฃผ

    curl -X POST -H "Authorization: Bearer $TOKEN" \
      -H "Content-Type:application/json" \
      "https://CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/YOUR_ORG_NAME:setSyncAuthorization" \
       -d '{"identities":["serviceAccount:SYNCHRONIZER_MANAGER_SERVICE_ACCOUNT_NAME"]}'
    

    ๊ฐ ํ•ญ๋ชฉ์˜ ์˜๋ฏธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    • YOUR_ORG_NAME: ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์กฐ์ง์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
    • CONTROL_PLANE_LOCATION: ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์„ค์น˜์—์„œ ๋ฐ์ดํ„ฐ ์ƒ์ฃผ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜์ž…๋‹ˆ๋‹ค. ํ”„๋ก์‹œ ๋ฒˆ๋“ค๊ณผ ๊ฐ™์€ ๊ณ ๊ฐ ํ•ต์‹ฌ ์ฝ˜ํ…์ธ ๊ฐ€ ์ €์žฅ๋˜๋Š” ์œ„์น˜์ž…๋‹ˆ๋‹ค. ๋ชฉ๋ก์€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ Apigee API ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๋ฆฌ์ „์„ ์ฐธ์กฐํ•˜์„ธ์š”.
    • SYNCHRONIZER_MANAGER_SERVICE_ACCOUNT_NAME: Apigee ๋™๊ธฐํ™” ๋‹ด๋‹น์ž ๊ด€๋ฆฌ์ž ์—ญํ• ์ด ์žˆ๋Š” ์„œ๋น„์Šค ๊ณ„์ •์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์ด๋ฆ„์€ ์ด๋ฉ”์ผ ์ฃผ์†Œ ํ˜•์‹๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด my-synchronizer-manager-service_account@my_project_id.iam.gserviceaccount.com์ž…๋‹ˆ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    curl -X POST -H "Authorization: Bearer $TOKEN" \
      -H "Content-Type:application/json" \
      "https://us-apigee.googleapis.com/v1/organizations/my_org:setSyncAuthorization" \
       -d '{"identities":["serviceAccount:my-synchronizer-manager-service_account@my_project_id.iam.gserviceaccount.com"]}'
    

    ์ด API์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ setSyncAuthorization API๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

  6. ์„œ๋น„์Šค ๊ณ„์ •์ด ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด ๋‹ค์Œ API๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์„œ๋น„์Šค ๊ณ„์ • ๋ชฉ๋ก์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

    ๋ฐ์ดํ„ฐ ์ƒ์ฃผ ์—†์Œ

    curl -X POST -H "Authorization: Bearer $TOKEN" \
      -H "Content-Type:application/json" \
      "https://apigee.googleapis.com/v1/organizations/your_org_name:getSyncAuthorization" \
       -d ''

    ๋ฐ์ดํ„ฐ ์ƒ์ฃผ

    curl -X POST -H "Authorization: Bearer $TOKEN" \
      -H "Content-Type:application/json" \
      "https://CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/your_org_name:getSyncAuthorization" \
       -d ''

    ์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

    {
       "identities":[
          "serviceAccount:my-synchronizer-manager-service_account@my_project_id.iam.gserviceaccount.com"
       ],
       "etag":"BwWJgyS8I4w="
    }