์ฝ๊ธฐ ๋ณต์ œ๋ณธ ๋งŒ๋“ค๊ธฐ

์ด ํŽ˜์ด์ง€์—์„œ๋Š” Cloud SQL ์ธ์Šคํ„ด์Šค์˜ ์ฝ๊ธฐ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์ฝ๊ธฐ ๋ณต์ œ๋ณธ์€ ์ผ๋ฐ˜์ ์ธ ์ƒํ™ฉ์—์„œ ๊ฑฐ์˜ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•˜๋Š” ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์˜ ์‚ฌ๋ณธ์ž…๋‹ˆ๋‹ค. ์ฝ๊ธฐ ๋ณต์ œ๋ณธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์˜ ์ฝ๊ธฐ ์š”์ฒญ์ด๋‚˜ ๋ถ„์„ ํŠธ๋ž˜ํ”ฝ์„ ์˜คํ”„๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์žฌํ•ด ๋ณต๊ตฌ๋ฅผ ์œ„ํ•ด ๋ฆฌ์ „ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณต์ œ๋ณธ์ด ๋ฆฌ์ „ ๊ฐ„ ๋ณต์ œ๋ณธ์ธ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ๋ฆฌ์ „์œผ๋กœ ์žฅ์•  ์กฐ์น˜๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋ณต์ œ๋ณธ์„ ๋…๋ฆฝํ˜• ์ธ์Šคํ„ด์Šค๋กœ ์Šน๊ฒฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ด ๊ฒฝ์šฐ ๊ธฐ์กด ๋ณต์ œ๋ณธ์€ ํ•ด๋‹น ์ธ์Šคํ„ด์Šค๋ฅผ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค๋กœ ๊ฐ„์ฃผํ•˜์ง€ ์•Š์Œ).

๋ณต์ œ ์ž‘๋™ ๋ฐฉ์‹์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ Cloud SQL์˜ ๋ณต์ œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

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

์ด ์ธ์Šคํ„ด์Šค์˜ ์ฒซ ๋ฒˆ์งธ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ

์ฝ๊ธฐ ๋ณต์ œ๋ณธ ๋งŒ๋“ค๊ธฐ

์ฝ๊ธฐ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“œ๋Š” ๋‹จ๊ณ„๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Console

  1. Google Cloud ์ฝ˜์†”์—์„œ Cloud SQL ์ธ์Šคํ„ด์Šค ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    Cloud SQL ์ธ์Šคํ„ด์Šค๋กœ ์ด๋™

  2. ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐพ์€ ํ›„ ๋“ฑ๋ก์ •๋ณด ์˜†์— ์žˆ๋Š” more actions ๋ฉ”๋‰ด๋ฅผ ์—ฝ๋‹ˆ๋‹ค.
  3. ์ฝ๊ธฐ ๋ณต์ œ๋ณธ ๋งŒ๋“ค๊ธฐ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    ํ•ด๋‹น ์„ ํƒ ์˜ต์…˜์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์œผ๋ฉด ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ณต์ œ๋ณธ์ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ณต์ œ๋ณธ์˜ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  4. ํŽ˜์ด์ง€์˜ ์ธ์Šคํ„ด์Šค ๋งž์ถค์„ค์ • ์„น์…˜์—์„œ ๋ณต์ œ๋ณธ์˜ ์„ค์ •์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์„ฑ ์˜ต์…˜ ํ‘œ์‹œ๋ฅผ ํด๋ฆญํ•˜์—ฌ ์„ค์ • ๊ทธ๋ฃน์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์›ํ•˜๋Š” ๊ทธ๋ฃน์„ ํŽผ์ณ ์„ค์ •์„ ๊ฒ€ํ† ํ•˜๊ณ  ๋งž์ถค์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์„ ํƒํ•œ ๋ชจ๋“  ์˜ต์…˜์˜ ์š”์•ฝ์ด ์˜ค๋ฅธ์ชฝ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด ์„ค์ •์„ ๋งž์ถค์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ์„ ํƒ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ๋งž์ถค์„ค์ •์ด ์ˆ˜ํ–‰๋˜์ง€ ์•Š๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์— ๊ธฐ๋ณธ๊ฐ’์ด ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.

    ๊ฐ ์„ค์ •์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ธ์Šคํ„ด์Šค ์„ค์ • ์ •๋ณด ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

    ์˜ˆ๋ฅผ ๋“ค์–ด BigQuery์™€ ๊ฐ™์€ ๋‹ค๋ฅธ Google Cloud ์„œ๋น„์Šค๊ฐ€ Cloud SQL์˜ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•˜๊ณ  ๋‚ด๋ถ€ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์ด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ฟผ๋ฆฌํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๋ ค๋ฉด ์—ฐ๊ฒฐ ๊ทธ๋ฃน์„ ํ™•์žฅํ•œ ํ›„ ๊ณต๊ฐœ IP ์ฒดํฌ๋ฐ•์Šค๋ฅผ ์„ ํƒ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.

  5. ๋ณต์ œ๋ณธ ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    Cloud SQL์ด ๋ฐฑ์—…์„ ๋งŒ๋“ค๊ณ , ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ธ์Šคํ„ด์Šค ํŽ˜์ด์ง€๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

gcloud

๋ณต์ œ๋ณธ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

gcloud sql instances create REPLICA_NAME \
--master-instance-name=MASTER_INSTANCE_NAME

ํ•„์š”ํ•œ ๊ฒฝ์šฐ --tier ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ๋“ฑ๊ธ‰ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์—์„œ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค๊ณ  ์ธ์Šคํ„ด์Šค์˜ Cloud SQL ๋ฒ„์ „์ด Enterprise ๋˜๋Š” Enterprise Plus ๋ฒ„์ „ 16 ์ด์ƒ์ธ ๊ฒฝ์šฐ ์ด ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์ง€์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ณต์ œ๋ณธ์€ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์—์„œ ๋จธ์‹  ์œ ํ˜•์„ ์ƒ์†ํ•ฉ๋‹ˆ๋‹ค.

--region ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ๋ฆฌ์ „์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์— ๋‚ด๋ถ€ IP ์ฃผ์†Œ๋งŒ ํฌํ•จ๋˜์—ˆ๊ณ  BigQuery์™€ ๊ฐ™์€ ๋‹ค๋ฅธ Google Cloud ์„œ๋น„์Šค๊ฐ€ Cloud SQL์˜ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•˜๊ณ  ๋‚ด๋ถ€ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์ด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ฟผ๋ฆฌํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๋ ค๋ฉด ๋ช…๋ น์–ด์— --enable-google-private-path ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๋ณต์ œ๋ณธ์„ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์™€ ๋™์ผํ•œ VPC ๋„คํŠธ์›Œํฌ์— ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด VPC ๋„คํŠธ์›Œํฌ์— allocated-ip-range-name์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ”์œ„๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š์œผ๋ฉด ๋ณต์ œ๋ณธ์ด ๋ฌด์ž‘์œ„ ๋ฒ”์œ„๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

Terraform

์ฝ๊ธฐ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค๋ ค๋ฉด Terraform ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

resource "google_sql_database_instance" "read_replica" {
  name                 = "postgres-replica-instance-name"
  master_instance_name = google_sql_database_instance.primary.name
  region               = "europe-west4"
  database_version     = "POSTGRES_14"

  settings {
    tier              = "db-custom-2-7680"
    availability_type = "ZONAL"
    disk_size         = "100"
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

REST v1

์ธ์Šคํ„ด์Šค ๋ฆฌ์†Œ์Šค์˜ insert ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ๊ธฐ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. region๊ณผ databaseVersion ์†์„ฑ์ด ๋งˆ์Šคํ„ฐ์™€ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • project-id: ํ”„๋กœ์ ํŠธ ID
  • database-version: Enum ๋ฒ„์ „ ๋ฌธ์ž์—ด(์˜ˆ: POSTGRES_12)
  • primary-instance-name: ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค ์ด๋ฆ„
  • primary-instance-region: ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์˜ ๋ฆฌ์ „
  • replica-region: ๋ณต์ œ๋ณธ ์ธ์Šคํ„ด์Šค์˜ ๋ฆฌ์ „
  • replica-name: ๋ณต์ œ๋ณธ ์ธ์Šคํ„ด์Šค์˜ ์ด๋ฆ„
  • machine-type: ๋จธ์‹  ์œ ํ˜•์˜ ์—ด๊ฑฐํ˜• ๋ฌธ์ž์—ด (์˜ˆ: 'db-custom-1-3840')
  • private-network: ๋น„๊ณต๊ฐœ ์—ฐ๊ฒฐ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์„ ํƒํ•˜๋Š” ๋„คํŠธ์›Œํฌ

HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

POST https://sqladmin.googleapis.com/v1/projects/project-id/instances

JSON ์š”์ฒญ ๋ณธ๋ฌธ:

{
  "masterInstanceName": "primary-instance-name",
  "project": "project-id",
  "databaseVersion": "database-version",
  "name": "replica-name",
  "region": "replica-region",
  "settings":
  {
    "tier": "machine-type",
    "settingsVersion": 0,
    "ipConfiguration": {
    object (IpConfiguration)
  },
  {
  "ipv4Enabled": false,
  "privateNetwork": private-network,
  "requireSsl": boolean,
  "authorizedNetworks": [
    {
      object (AclEntry)
    }
  ],
  "allocatedIpRange": string
    }
  }
}

์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

REST v1beta4

์ธ์Šคํ„ด์Šค ๋ฆฌ์†Œ์Šค์˜ insert ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ๊ธฐ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. region๊ณผ databaseVersion ์†์„ฑ์ด ๋งˆ์Šคํ„ฐ์™€ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • project-id: ํ”„๋กœ์ ํŠธ ID
  • database-version: Enum ๋ฒ„์ „ ๋ฌธ์ž์—ด(์˜ˆ: POSTGRES_12)
  • primary-instance-name: ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค ์ด๋ฆ„
  • primary-instance-region: ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์˜ ๋ฆฌ์ „
  • replica-region: ๋ณต์ œ๋ณธ ์ธ์Šคํ„ด์Šค์˜ ๋ฆฌ์ „
  • replica-name: ๋ณต์ œ๋ณธ ์ธ์Šคํ„ด์Šค์˜ ์ด๋ฆ„
  • machine-type: ๋จธ์‹  ์œ ํ˜•์˜ ์—ด๊ฑฐํ˜• ๋ฌธ์ž์—ด (์˜ˆ: 'db-custom-1-3840')
  • private-network: ๋น„๊ณต๊ฐœ ์—ฐ๊ฒฐ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์„ ํƒํ•˜๋Š” ๋„คํŠธ์›Œํฌ

HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances

JSON ์š”์ฒญ ๋ณธ๋ฌธ:

{
  "masterInstanceName": "primary-instance-name",
  "project": "project-id",
  "databaseVersion": "database-version",
  "name": "replica-name",
  "region": "replica-region",
  "settings":
  {
    "tier": "machine-type",
    "settingsVersion": 0,
    
    "ipConfiguration": {
    object (IpConfiguration)
  },
  {
  "ipv4Enabled": false,
  "privateNetwork": private-network,
  "requireSsl": boolean,
  "authorizedNetworks": [
    {
      object (AclEntry)
    }
  ],
  "allocatedIpRange": string
    }
    
  }
}

์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

Private Service Connect๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋œ ์ธ์Šคํ„ด์Šค์— ์ฝ๊ธฐ ๋ณต์ œ๋ณธ ๋งŒ๋“ค๊ธฐ

Private Service Connect๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋œ ์ธ์Šคํ„ด์Šค์˜ ์ฝ๊ธฐ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค๋ ค๋ฉด gcloud CLI ๋˜๋Š” API๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ณต์ œ๋ณธ์€ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์™€ ๊ฐ™์€ ๋ฆฌ์ „ ๋˜๋Š” ๋‹ค๋ฅธ ๋ฆฌ์ „(๋ฆฌ์ „ ๊ฐ„ ์ฝ๊ธฐ ๋ณต์ œ๋ณธ)์— ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์—ฐ๊ฒฐ ์œ ํ˜•์˜ ์ธ์Šคํ„ด์Šค์—์„œ ์ฝ๊ธฐ ๋ณต์ œ๋ณธ์„ ๋ณต์ œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Private Service Connect๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋œ ์ธ์Šคํ„ด์Šค๋Š” ๋‹ค๋ฅธ Private Service Connect ์ธ์Šคํ„ด์Šค์—์„œ๋งŒ ๋ณต์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์™ธ๋ถ€ IP ์—ฐ๊ฒฐ์„ ์ง€์›ํ•˜๋Š” ์ธ์Šคํ„ด์Šค ๋˜๋Š” ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค ์•ก์„ธ์Šค๋กœ ๊ตฌ์„ฑ๋œ ์ธ์Šคํ„ด์Šค์—์„œ ๋ณต์ œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

gcloud

์ธ์Šคํ„ด์Šค์˜ ์ฝ๊ธฐ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค๋ ค๋ฉด gcloud sql instances create ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

gcloud sql instances create REPLICA_INSTANCE_NAME \
--master-instance-name=PRIMARY_INSTANCE_NAME \
--project=PROJECT_ID \
--region=REGION_NAME \
--enable-private-service-connect \
--allowed-psc-projects=ALLOWED_PROJECTS \
--availability-type=AVAILABILITY_TYPE \
--no-assign-ip

๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • REPLICA_INSTANCE_NAME: ๋ณต์ œ๋ณธ ์ธ์Šคํ„ด์Šค์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • PRIMARY_INSTANCE_NAME: ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • PROJECT_ID: ์ธ์Šคํ„ด์Šค๊ฐ€ ํฌํ•จ๋œ Google Cloud ํ”„๋กœ์ ํŠธ์˜ ID ๋˜๋Š” ํ”„๋กœ์ ํŠธ ๋ฒˆํ˜ธ
  • REGION_NAME: ๋ณต์ œ๋ณธ ์ธ์Šคํ„ด์Šค์˜ ๋ฆฌ์ „ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • ALLOWED_PROJECTS: ํ—ˆ์šฉ๋˜๋Š” ํ”„๋กœ์ ํŠธ ID ๋˜๋Š” ์ˆซ์ž์˜ ๋ชฉ๋ก(์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„). ํ”„๋กœ์ ํŠธ๊ฐ€ ์ด ๋ชฉ๋ก์— ํฌํ•จ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  Private Service Connect๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

    Cloud SQL์€ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์— ํ—ˆ์šฉ๋˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๋ณต์ œ๋ณธ์œผ๋กœ ๋ณต์‚ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ณต์ œ๋ณธ๋งˆ๋‹ค Private Service Connect ์—”๋“œํฌ์ธํŠธ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Cloud SQL ์ธ์ฆ ํ”„๋ก์‹œ ๋˜๋Š” Cloud SQL ์–ธ์–ด ์ปค๋„ฅํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ณต์ œ๋ณธ์— DNS ์˜์—ญ๊ณผ DNS ๋ ˆ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • AVAILABILITY_TYPE: ์ธ์Šคํ„ด์Šค์— ๊ณ ๊ฐ€์šฉ์„ฑ์„ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ๋‹ค์Œ ๊ฐ’ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
    • REGIONAL: ๊ณ ๊ฐ€์šฉ์„ฑ์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ฉฐ, ํ”„๋กœ๋•์…˜ ์ธ์Šคํ„ด์Šค์— ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค๋Š” ์„ ํƒํ•œ ๋ฆฌ์ „ ๋‚ด์˜ ๋‹ค๋ฅธ ์˜์—ญ์œผ๋กœ ์žฅ์•  ์กฐ์น˜๋ฉ๋‹ˆ๋‹ค.
    • ZONAL: ์žฅ์•  ์กฐ์น˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์„ค์ •์ด ๊ธฐ๋ณธ ์„ค์ •์ž…๋‹ˆ๋‹ค.

    ์ธ์Šคํ„ด์Šค์˜ ๊ณ ๊ฐ€์šฉ์„ฑ ์„ค์ • ๋ฐ ์‚ญ์ œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ธฐ์กด ์ธ์Šคํ„ด์Šค๋ฅผ ๊ณ ๊ฐ€์šฉ์„ฑ์œผ๋กœ ๊ตฌ์„ฑ ๋ฐ ์ธ์Šคํ„ด์Šค์˜ ๊ณ ๊ฐ€์šฉ์„ฑ ๋น„ํ™œ์„ฑํ™”๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

REST v1

์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • PRIMARY_INSTANCE_NAME: ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • PROJECT_ID: ์ธ์Šคํ„ด์Šค๊ฐ€ ํฌํ•จ๋œ Google Cloud ํ”„๋กœ์ ํŠธ์˜ ID ๋˜๋Š” ํ”„๋กœ์ ํŠธ ๋ฒˆํ˜ธ
  • REPLICA_INSTANCE_NAME: ๋ณต์ œ๋ณธ ์ธ์Šคํ„ด์Šค์˜ ์ด๋ฆ„
  • REGION_NAME: ๋ณต์ œ๋ณธ ์ธ์Šคํ„ด์Šค์˜ ๋ฆฌ์ „ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • MACHINE_TYPE: ์ธ์Šคํ„ด์Šค์˜ ๋จธ์‹  ์œ ํ˜•์ž…๋‹ˆ๋‹ค.
  • AVAILABILITY_TYPE: ์ธ์Šคํ„ด์Šค์— ๊ณ ๊ฐ€์šฉ์„ฑ์„ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ๋‹ค์Œ ๊ฐ’ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
    • REGIONAL: ๊ณ ๊ฐ€์šฉ์„ฑ์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ฉฐ, ํ”„๋กœ๋•์…˜ ์ธ์Šคํ„ด์Šค์— ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค๋Š” ์„ ํƒํ•œ ๋ฆฌ์ „ ๋‚ด์˜ ๋‹ค๋ฅธ ์˜์—ญ์œผ๋กœ ์žฅ์•  ์กฐ์น˜๋ฉ๋‹ˆ๋‹ค.
    • ZONAL: ์žฅ์•  ์กฐ์น˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์„ค์ •์ด ๊ธฐ๋ณธ ์„ค์ •์ž…๋‹ˆ๋‹ค.

    ์ธ์Šคํ„ด์Šค์˜ ๊ณ ๊ฐ€์šฉ์„ฑ ์„ค์ • ๋ฐ ์‚ญ์ œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ธฐ์กด ์ธ์Šคํ„ด์Šค๋ฅผ ๊ณ ๊ฐ€์šฉ์„ฑ์œผ๋กœ ๊ตฌ์„ฑ ๋ฐ ์ธ์Šคํ„ด์Šค์˜ ๊ณ ๊ฐ€์šฉ์„ฑ ๋น„ํ™œ์„ฑํ™”๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

  • ALLOWED_PROJECTS: ํ—ˆ์šฉ๋˜๋Š” ํ”„๋กœ์ ํŠธ ID ๋˜๋Š” ์ˆซ์ž์˜ ๋ชฉ๋ก(์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„). ํ”„๋กœ์ ํŠธ๊ฐ€ ์ด ๋ชฉ๋ก์— ํฌํ•จ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  Private Service Connect๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

    Cloud SQL์€ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์— ํ—ˆ์šฉ๋˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๋ณต์ œ๋ณธ์œผ๋กœ ๋ณต์‚ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ณต์ œ๋ณธ๋งˆ๋‹ค Private Service Connect ์—”๋“œํฌ์ธํŠธ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Cloud SQL ์ธ์ฆ ํ”„๋ก์‹œ ๋˜๋Š” Cloud SQL ์–ธ์–ด ์ปค๋„ฅํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ณต์ œ๋ณธ์— DNS ์˜์—ญ๊ณผ DNS ๋ ˆ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances

JSON ์š”์ฒญ ๋ณธ๋ฌธ:

{
  "masterInstanceName": "PRIMARY_INSTANCE_NAME",
  "project": "PROJECT_ID",
  "databaseVersion": "POSTGRES_13",
  "name": "REPLICA_INSTANCE_NAME",
  "region": "REGION_NAME",
  "kind": "sql#instance",
  "settings":
  {
    "tier": "MACHINE_TYPE",
    "availabilityType": "AVAILABILITY_TYPE",
    "settingsVersion": 0,
    "ipConfiguration": {
      "ipv4Enabled": false,
      "pscConfig": {
        "allowedConsumerProjects": [ALLOWED_PROJECTS],
        "pscEnabled": true
      }
    },
    "kind": "sql#settings",
    "pricingPlan": "PER_USE",
    "replicationType": "ASYNCHRONOUS",
    "tier": "MACHINE_TYPE"
  }
}

์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/REPLICA_INSTANCE_NAME",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "CREATE_REPLICA",
  "name": "OPERATION_ID",
  "targetId": "REPLICA_INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

REST v1beta4

์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • PRIMARY_INSTANCE_NAME: ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • PROJECT_ID: ์ธ์Šคํ„ด์Šค๊ฐ€ ํฌํ•จ๋œ Google Cloud ํ”„๋กœ์ ํŠธ์˜ ID ๋˜๋Š” ํ”„๋กœ์ ํŠธ ๋ฒˆํ˜ธ
  • REPLICA_INSTANCE_NAME: ๋ณต์ œ๋ณธ ์ธ์Šคํ„ด์Šค์˜ ์ด๋ฆ„
  • REGION_NAME: ๋ณต์ œ๋ณธ ์ธ์Šคํ„ด์Šค์˜ ๋ฆฌ์ „ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • MACHINE_TYPE: ์ธ์Šคํ„ด์Šค์˜ ๋จธ์‹  ์œ ํ˜•์ž…๋‹ˆ๋‹ค.
  • AVAILABILITY_TYPE: ์ธ์Šคํ„ด์Šค์— ๊ณ ๊ฐ€์šฉ์„ฑ์„ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ๋‹ค์Œ ๊ฐ’ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
    • REGIONAL: ๊ณ ๊ฐ€์šฉ์„ฑ์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ฉฐ, ํ”„๋กœ๋•์…˜ ์ธ์Šคํ„ด์Šค์— ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค๋Š” ์„ ํƒํ•œ ๋ฆฌ์ „ ๋‚ด์˜ ๋‹ค๋ฅธ ์˜์—ญ์œผ๋กœ ์žฅ์•  ์กฐ์น˜๋ฉ๋‹ˆ๋‹ค.
    • ZONAL: ์žฅ์•  ์กฐ์น˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์„ค์ •์ด ๊ธฐ๋ณธ ์„ค์ •์ž…๋‹ˆ๋‹ค.

    ์ธ์Šคํ„ด์Šค์˜ ๊ณ ๊ฐ€์šฉ์„ฑ ์„ค์ • ๋ฐ ์‚ญ์ œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ธฐ์กด ์ธ์Šคํ„ด์Šค๋ฅผ ๊ณ ๊ฐ€์šฉ์„ฑ์œผ๋กœ ๊ตฌ์„ฑ ๋ฐ ์ธ์Šคํ„ด์Šค์˜ ๊ณ ๊ฐ€์šฉ์„ฑ ๋น„ํ™œ์„ฑํ™”๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

  • ALLOWED_PROJECTS: ํ—ˆ์šฉ๋˜๋Š” ํ”„๋กœ์ ํŠธ ID ๋˜๋Š” ์ˆซ์ž์˜ ๋ชฉ๋ก(์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„). ํ”„๋กœ์ ํŠธ๊ฐ€ ์ด ๋ชฉ๋ก์— ํฌํ•จ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  Private Service Connect๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

    Cloud SQL์€ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์— ํ—ˆ์šฉ๋˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๋ณต์ œ๋ณธ์œผ๋กœ ๋ณต์‚ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ณต์ œ๋ณธ๋งˆ๋‹ค Private Service Connect ์—”๋“œํฌ์ธํŠธ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Cloud SQL ์ธ์ฆ ํ”„๋ก์‹œ ๋˜๋Š” Cloud SQL ์–ธ์–ด ์ปค๋„ฅํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ณต์ œ๋ณธ์— DNS ์˜์—ญ๊ณผ DNS ๋ ˆ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances

JSON ์š”์ฒญ ๋ณธ๋ฌธ:

{
  "masterInstanceName": "PRIMARY_INSTANCE_NAME",
  "project": "PROJECT_ID",
  "databaseVersion": "POSTGRES_13",
  "name": "REPLICA_INSTANCE_NAME",
  "region": "REGION_NAME",
  "kind": "sql#instance",
  "settings":
  {
    "tier": "MACHINE_TYPE",
    "availabilityType": "AVAILABILITY_TYPE",
    "settingsVersion": 0,
    "ipConfiguration": {
      "ipv4Enabled": false,
      "pscConfig": {
        "allowedConsumerProjects": [ALLOWED_PROJECTS],  
        "pscEnabled": true
      }
    },
    "kind": "sql#settings",
    "pricingPlan": "PER_USE",
    "replicationType": "ASYNCHRONOUS",
    "tier": "MACHINE_TYPE"
  }
}

์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_NAME",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "CREATE_REPLICA",
  "name": "OPERATION_ID",
  "targetId": "REPLICA_INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

IAM ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ์ฆ์„ ์œ„ํ•œ ์ฝ๊ธฐ ๋ณต์ œ๋ณธ ๊ตฌ์„ฑ

๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์—์„œ cloudsql.iam_authentication ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ฉด PostgreSQL์šฉ Cloud SQL์€ ์ฝ๊ธฐ ๋ณต์ œ๋ณธ์—์„œ ์ž๋™์œผ๋กœ ์‚ฌ์šฉ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์—์„œ ์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด PostgreSQL์šฉ Cloud SQL์€ ์ฝ๊ธฐ ๋ณต์ œ๋ณธ์—์„œ ์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. IAM ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ์ฆ์—๋Š” ๋ณต์ œ๋ณธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

IAM ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ์ฆ์„ ์œ„ํ•œ ์ฝ๊ธฐ ๋ณต์ œ๋ณธ์„ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. Google Cloud ์ฝ˜์†”์—์„œ Cloud SQL ์ธ์Šคํ„ด์Šค ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    Cloud SQL ์ธ์Šคํ„ด์Šค๋กœ ์ด๋™

  2. ์ธ์Šคํ„ด์Šค์˜ ๊ฐœ์š” ํŽ˜์ด์ง€๋ฅผ ์—ด๋ ค๋ฉด ์ธ์Šคํ„ด์Šค ์ด๋ฆ„์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ตฌ์„ฑ ํƒ€์ผ์—์„œ cloudsql.iam_authentication ํ”Œ๋ž˜๊ทธ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. ํ”Œ๋ž˜๊ทธ๊ฐ€ ๋ชฉ๋ก์— ์—†์œผ๋ฉด ์ฝ๊ธฐ ๋ณต์ œ๋ณธ์—์„œ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ”Œ๋ž˜๊ทธ๊ฐ€ ๋ชฉ๋ก์— ์žˆ์œผ๋ฉด ์ฝ๊ธฐ ๋ณต์ œ๋ณธ์— ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฝ๊ธฐ ๋ณต์ œ๋ณธ์—์„œ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๊ณ„์† ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  4. SQL ํƒ์ƒ‰ ๋ฉ”๋‰ด์—์„œ ๋ณต์ œ๋ณธ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  5. ์ˆ˜์ •ํ•  ๋ณต์ œ๋ณธ์˜ ์ด๋ฆ„์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  6. ์ˆ˜์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  7. ๊ตฌ์„ฑ ์˜ต์…˜ ์„น์…˜์—์„œ ํ”Œ๋ž˜๊ทธ๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.
  8. + ์ถ”๊ฐ€ ํ•ญ๋ชฉ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  9. ํ”Œ๋ž˜๊ทธ ์ด๋ฆ„์œผ๋กœ cloudsql.iam_authentication์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”Œ๋ž˜๊ทธ์— ์ผœ๊ธฐ๊ฐ€ ์„ ํƒ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  10. ์ €์žฅ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

์—ฐ์‡„ ๋ณต์ œ๋ณธ ๋งŒ๋“ค๊ธฐ

์ด ์„น์…˜์—์„œ๋Š” ์—ฐ์‡„ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์—ฐ์‡„ ๋ณต์ œ๋ณธ ์ž‘๋™ ๋ฐฉ์‹์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—ฐ์‡„ ๋ณต์ œ๋ณธ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์—ฐ์‡„ ๋ณต์ œ๋ณธ ๋งŒ๋“ค๊ธฐ ๋‹จ๊ณ„

Console

  1. Google Cloud ์ฝ˜์†”์—์„œ Cloud SQL ์ธ์Šคํ„ด์Šค ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    Cloud SQL ์ธ์Šคํ„ด์Šค๋กœ ์ด๋™

  2. ๋งŒ๋“ค๋ ค๋Š” ๋ณต์ œ๋ณธ์˜ ์ƒ์œ„ ์š”์†Œ ์—ญํ• ์„ ํ•  ๋ณต์ œ๋ณธ์˜ ๋ณต์ œ๋ณธ ํƒญ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ณต์ œ๋ณธ ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  4. ์ฝ๊ธฐ ๋ณต์ œ๋ณธ ๋งŒ๋“ค๊ธฐ ํŽ˜์ด์ง€์—์„œ ์ธ์Šคํ„ด์Šค ID๋ฅผ ๋น„๋กฏํ•ด ์ด๋ฆ„, ๋ฆฌ์ „, ์˜์—ญ ๋“ฑ์˜ ๊ธฐํƒ€ ๊ตฌ์„ฑ ์˜ต์…˜์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  5. ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    Cloud SQL์€ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ƒ์œ„ ๋ณต์ œ๋ณธ์˜ ์ธ์Šคํ„ด์Šค ํŽ˜์ด์ง€๊ฐ€ ๋‹ค์‹œ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  6. ๋งŒ๋“ค๋ ค๋Š” ์ƒˆ ์—ฐ์‡„ ๋ณต์ œ๋ณธ๋งˆ๋‹ค 4~6๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

gcloud

  1. --master-instance-name ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ ๋ณต์ œ๋ณธ์„ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค๋กœ ์ง€์ •ํ•ด ์ƒˆ ๋ณต์ œ๋ณธ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. gcloud sql instances create REPLICA_NAME \
          --master-instance-name=PARENT_REPLICA_NAME \
    ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
    • REPLICA_NAME: ๋งŒ๋“ค๋ ค๋Š” ๋ณต์ œ๋ณธ์˜ ๊ณ ์œ  ID
    • PARENT_REPLICA_NAME: ์ƒ์œ„ ๋ณต์ œ๋ณธ์˜ ์ด๋ฆ„
  3. ์—ฐ์‡„ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“  ํ›„ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์— ์ˆ˜ํ–‰๋œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์—ฐ์‡„ ๋ณต์ œ ์ฒด์ธ์— ์žˆ๋Š” ๋ชจ๋“  ๋ณต์ œ๋ณธ์— ๋ณต์ œ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

curl

  1. ์ƒ์œ„ ๋ณต์ œ๋ณธ ์•„๋ž˜์— ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ JSON ์ฝ”๋“œ ์ƒ˜ํ”Œ์„ ์ˆ˜์ •ํ•˜๊ณ  request.json ํŒŒ์ผ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
    {
      "masterInstanceName": "PARENT_REPLICA_NAME",
      "project": "PROJECT_ID",
      "name": "REPLICA_NAME",
      "region": "REPLICA_REGION",
      "settings":
        {
          "tier": "MACHINE_TYPE",
        }
    }
  2. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    curl -X POST
    -H "Authorization: Bearer "$(gcloud auth print-access-token)
    -H "Content-Type: application/json; charset=utf-8"
    -d @request.json
    "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances"

๋ฌธ์ œ ํ•ด๊ฒฐ

๋ฌธ์ œ ๋ฌธ์ œ ํ•ด๊ฒฐ
์ƒ์„ฑ ์‹œ ์ฝ๊ธฐ ๋ณต์ œ๋ณธ์ด ๋ณต์ œ๋ฅผ ์‹œ์ž‘ํ•˜์ง€ ์•Š์Œ ๋กœ๊ทธ ํŒŒ์ผ์— ๋” ๊ตฌ์ฒด์ ์ธ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Cloud Logging์˜ ๋กœ๊ทธ๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ ์‹ค์ œ ์˜ค๋ฅ˜๋ฅผ ์ฐพ์œผ์„ธ์š”.
์ฝ๊ธฐ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค ์ˆ˜ ์—†์Œ - invalidFlagValue ์˜ค๋ฅ˜ ์š”์ฒญ์˜ ํ”Œ๋ž˜๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ช…์‹œ์ ์œผ๋กœ ์ œ๊ณตํ•œ ํ”Œ๋ž˜๊ทธ ๋˜๋Š” ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •๋œ ํ”Œ๋ž˜๊ทธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋จผ์ € max_connections ํ”Œ๋ž˜๊ทธ์˜ ๊ฐ’์ด ๊ธฐ๋ณธ ๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€์ง€ ํ™•์ธํ•˜์„ธ์š”.

max_connections ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ ์ ˆํ•˜๊ฒŒ ์„ค์ •๋œ ๊ฒฝ์šฐ Cloud Logging์—์„œ ๋กœ๊ทธ๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ ์‹ค์ œ ์˜ค๋ฅ˜๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

์ฝ๊ธฐ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค ์ˆ˜ ์—†์Œ - ์•Œ ์ˆ˜ ์—†๋Š” ์˜ค๋ฅ˜ ๋กœ๊ทธ ํŒŒ์ผ์— ๋” ๊ตฌ์ฒด์ ์ธ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Cloud Logging์˜ ๋กœ๊ทธ๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ ์‹ค์ œ ์˜ค๋ฅ˜๋ฅผ ์ฐพ์œผ์„ธ์š”.

์˜ค๋ฅ˜๊ฐ€ set Service Networking service account as servicenetworking.serviceAgent role on consumer project์ด๋ฉด Service Networking API๋ฅผ ์‚ฌ์šฉ ์ค‘์ง€ํ–ˆ๋‹ค๊ฐ€ ๋‹ค์‹œ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ณ„์† ์ง„ํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์„œ๋น„์Šค ๊ณ„์ •์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๋””์Šคํฌ๊ฐ€ ๊ฐ€๋“ ์ฐธ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“œ๋Š” ๋™์•ˆ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค ๋””์Šคํฌ ํฌ๊ธฐ๊ฐ€ ๊ฐ€๋“ ์ฐฐ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ๋” ํฐ ๋””์Šคํฌ ํฌ๊ธฐ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•ฉ๋‹ˆ๋‹ค.
๋””์Šคํฌ ๊ณต๊ฐ„์ด ํ˜„์ €ํ•˜๊ฒŒ ์ฆ๊ฐ€ํ•จ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ ํ•˜๋Š” ๋ฐ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์Šฌ๋กฏ์ด ์žˆ์œผ๋ฉด PostgreSQL์ด WAL ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๋ฌด๊ธฐํ•œ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋กœ ์ธํ•ด ๋””์Šคํฌ ๊ณต๊ฐ„๋„ ๋ฌด์ œํ•œ์œผ๋กœ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. Cloud SQL์—์„œ ๋…ผ๋ฆฌ์  ๋ณต์ œ ๋ฐ ๋””์ฝ”๋”ฉ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ณต์ œ ์Šฌ๋กฏ์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ ๋ฐ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ณต์ œ ์Šฌ๋กฏ์€ pg_replication_slots ์‹œ์Šคํ…œ ๋ทฐ๋ฅผ ์ฟผ๋ฆฌํ•˜๊ณ  active ์—ด๋กœ ํ•„ํ„ฐ๋ง์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. pg_drop_replication_slot ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ WAL ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์Šฌ๋กฏ์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ณต์ œ๋ณธ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณต์ œ๋ณธ์€ ์ž„์‹œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž์ฃผ ์š”์ฒญ๋˜๋Š” ์ฝ๊ธฐ ์ž‘์—…์„ ์บ์‹œํ•˜๋ฏ€๋กœ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค๋ณด๋‹ค ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณต์ œ๋ณธ ์ธ์Šคํ„ด์Šค๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์—ฌ ์ž„์‹œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํšŒ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.

๋ณต์ œ๊ฐ€ ์ค‘์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ตœ๋Œ€ ์Šคํ† ๋ฆฌ์ง€ ํ•œ๋„์— ๋„๋‹ฌํ–ˆ๊ณ  ์Šคํ† ๋ฆฌ์ง€ ์ž๋™ ์ฆ๊ฐ€๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ automatic storage increase๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๊ธด ๋ณต์ œ ์ง€์—ฐ ์‹œ๊ฐ„์ด ์ง€์†์ ์œผ๋กœ ๋ฐœ์ƒํ•จ ์“ฐ๊ธฐ ๋ถ€ํ•˜๊ฐ€ ๋„ˆ๋ฌด ๋†’์•„ ๋ณต์ œ๋ณธ์ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ณต์ œ๋ณธ์˜ SQL ์Šค๋ ˆ๋“œ๊ฐ€ IO ์Šค๋ ˆ๋“œ๋ฅผ ๋”ฐ๋ผ์žก์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ๋ณต์ œ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ์ฟผ๋ฆฌ ๋˜๋Š” ์›Œํฌ๋กœ๋“œ๋กœ ์ธํ•ด ํŠน์ • ์Šคํ‚ค๋งˆ์—์„œ ์ผ์‹œ์ ์ด๊ฑฐ๋‚˜ ์˜๊ตฌ์ ์ธ ๋ณต์ œ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณต์ œ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ์›์ธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • ๋ณต์ œ๋ณธ์— ๋Œ€ํ•œ ์ฟผ๋ฆฌ์˜ ์†๋„๊ฐ€ ๋А๋ฆฝ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ์ฐพ์•„ ์ˆ˜์ •ํ•˜์„ธ์š”.
  • ๋ชจ๋“  ํ…Œ์ด๋ธ”์— ๊ณ ์œ /๊ธฐ๋ณธ ํ‚ค๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ”์— ๊ณ ์œ /๊ธฐ๋ณธ ํ‚ค๊ฐ€ ์—†์œผ๋ฉด ์—…๋ฐ์ดํŠธํ•  ๋•Œ๋งˆ๋‹ค ๋ณต์ œ๋ณธ์—์„œ ์ „์ฒด ํ…Œ์ด๋ธ” ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • DELETE ... WHERE field < 50000000๊ณผ ๊ฐ™์€ ์ฟผ๋ฆฌ์˜ ๊ฒฝ์šฐ ๋ณต์ œ๋ณธ์— ๋‹ค์ˆ˜์˜ ์—…๋ฐ์ดํŠธ๊ฐ€ ์Œ“์ด๊ฒŒ ๋˜๋ฏ€๋กœ ํ–‰ ๊ธฐ์ค€ ๋ณต์ œ์—์„œ ๋ณต์ œ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ธ์Šคํ„ด์Šค๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ๋ณต์ œ๋ณธ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆฝ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค.
  • ์ฝ๊ธฐ ํŠธ๋ž˜ํ”ฝ์„ ์ฝ๊ธฐ ๋ณต์ œ๋ณธ์œผ๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  • ํ…Œ์ด๋ธ” ์ƒ‰์ธ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ๋А๋ฆฐ ์“ฐ๊ธฐ ์ฟผ๋ฆฌ๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณต์ œ๋ณธ์„ ๋‹ค์‹œ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
PostgreSQL 9.6์—์„œ ์ƒ‰์ธ์„ ๋‹ค์‹œ ๋นŒ๋“œํ•  ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•จ PostgreSQL์—์„œ ํŠน์ • ์ƒ‰์ธ์„ ๋‹ค์‹œ ๋นŒ๋“œํ•ด์•ผ ํ•œ๋‹ค๋Š” ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์—์„œ๋งŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ ๋ณต์ œ๋ณธ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๋ฉด ๊ณง ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋‹ค์‹œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. PostgreSQL 10 ๋ฏธ๋งŒ์˜ PostgreSQL์—์„œ๋Š” ํ•ด์‹œ ์ƒ‰์ธ์ด ๋ณต์ œ๋ณธ์— ์ „ํŒŒ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ•ด์‹œ ์ƒ‰์ธ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ PostgreSQL 10 ์ด์ƒ์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜์„ธ์š”. ๊ทธ๋Ÿฌ์ง€ ์•Š๊ณ  ๋ณต์ œ๋ณธ๋„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด PostgreSQL 9.6์—์„œ ํ•ด์‹œ ์ƒ‰์ธ์„ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”.

๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ฟผ๋ฆฌ๋Š” ํ•ญ์ƒ ์‹คํ–‰๋จ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“  ํ›„์—๋Š” ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์—์„œ SELECT * from pg_stat_activity where state = 'active' and pid = XXXX and username = 'cloudsqlreplica' ์ฟผ๋ฆฌ๋ฅผ ๊ณ„์† ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ œํ•œ ์‹œ๊ฐ„์œผ๋กœ ์ธํ•ด ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค์ง€ ๋ชปํ•จ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์—์„œ ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ์žฅ๊ธฐ ์‹คํ–‰ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ธํ•ด ์ฝ๊ธฐ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹คํ–‰ ์ค‘์ธ ๋ชจ๋“  ์ฟผ๋ฆฌ๋ฅผ ์ค‘์ง€ํ•œ ํ›„ ๋ณต์ œ๋ณธ์„ ๋‹ค์‹œ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์™€ ๋ณต์ œ๋ณธ์˜ vCPU ํฌ๊ธฐ๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ ์ฟผ๋ฆฌ ์ตœ์ ํ™” ๋„๊ตฌ์—์„œ vCPU ํฌ๊ธฐ๋ฅผ ๊ณ ๋ คํ•˜๋ฏ€๋กœ ์ฟผ๋ฆฌ ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์™„๋ฃŒํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

  1. log_duration ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๊ณ  log_statement ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ddl๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ฟผ๋ฆฌ์™€ ์‹คํ–‰ ์‹œ๊ฐ„ ๋ชจ๋‘ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์›Œํฌ๋กœ๋“œ์— ๋”ฐ๋ผ ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์™€ ์ฝ๊ธฐ ๋ณต์ œ๋ณธ ๋ชจ๋‘์—์„œ ์ฟผ๋ฆฌ์— explain analyze๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  3. ์ฟผ๋ฆฌ ๊ณ„ํš์„ ๋น„๊ตํ•˜๊ณ  ์ฐจ์ด์ ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

ํŠน์ • ์ฟผ๋ฆฌ์ด๋ฉด ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์กฐ์ธ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„