Google Cloud ์ฝ˜์†”์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งŒ๋“ค๊ธฐ ๋ฐ ์ฟผ๋ฆฌ

์ด ๋น ๋ฅธ ์‹œ์ž‘์—์„œ๋Š”Google Cloud ์ฝ˜์†”์„ ์‚ฌ์šฉํ•˜์—ฌ Spanner์—์„œ ๊ธฐ๋ณธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋น ๋ฅธ ์‹œ์ž‘์—์„œ ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Spanner ์ธ์Šคํ„ด์Šค ๋งŒ๋“ค๊ธฐ
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งŒ๋“ค๊ธฐ
  • ์Šคํ‚ค๋งˆ ๋งŒ๋“ค๊ธฐ
  • ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ๋ฐ ์ˆ˜์ •
  • ์ฟผ๋ฆฌ ์‹คํ–‰

Spanner ์‚ฌ์šฉ ๋น„์šฉ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ฐ€๊ฒฉ ์ฑ…์ •์„ ์ฐธ์กฐํ•˜์„ธ์š”.

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

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. ์„ ํƒ์‚ฌํ•ญ: Spanner API๊ฐ€ ์ž๋™์œผ๋กœ ์‚ฌ์šฉ ์„ค์ •๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜๋™์œผ๋กœ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    Spanner API ์‚ฌ์šฉ ์„ค์ •
  7. ์ธ์Šคํ„ด์Šค์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ถŒํ•œ์„ ์–ป์œผ๋ ค๋ฉด ๊ด€๋ฆฌ์ž์—๊ฒŒ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ Cloud Spanner ๊ด€๋ฆฌ์ž(roles/spanner.admin) IAM ์—ญํ• ์„ ๋ถ€์—ฌํ•ด ๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•˜์„ธ์š”.

  8. ์ธ์Šคํ„ด์Šค ๋งŒ๋“ค๊ธฐ

    ์ฒ˜์Œ์œผ๋กœ Spanner๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ธ์Šคํ„ด์Šค๋Š” ํ•ด๋‹น ์ธ์Šคํ„ด์Šค์—์„œ Spanner ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ํ• ๋‹นํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

      Spanner๋กœ ์ด๋™

    2. ์•„์ง ๋งŒ๋“ค์ง€ ์•Š์•˜์œผ๋ฉด Google Cloud ํ”„๋กœ์ ํŠธ๋ฅผ ์„ ํƒํ•˜๊ฑฐ๋‚˜ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    3. Spanner ํŽ˜์ด์ง€์—์„œ ํ”„๋กœ๋น„์ €๋‹๋œ ์ธ์Šคํ„ด์Šค ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

      Spanner๋ฅผ ์‚ฌ์šฉํ•œ ์ ์ด ์žˆ์œผ๋ฉด ์ œํ’ˆ ํŽ˜์ด์ง€ ๋Œ€์‹  Spanner ์ธ์Šคํ„ด์Šค ํŽ˜์ด์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    4. ์ธ์Šคํ„ด์Šค ์ด๋ฆ„ ์ง€์ • ํŽ˜์ด์ง€์— ์ธ์Šคํ„ด์Šค ์ด๋ฆ„(์˜ˆ: Test Instance)์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    5. ์ธ์Šคํ„ด์Šค ID๋Š” test-instance์™€ ๊ฐ™์€ ์ธ์Šคํ„ด์Šค ์ด๋ฆ„์„ ๊ธฐ์ค€์œผ๋กœ ์ž๋™์œผ๋กœ ์ž…๋ ฅ๋ฉ๋‹ˆ๋‹ค. ํ•„์š”์— ๋”ฐ๋ผ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜์„ธ์š”. ๊ณ„์†์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    6. ์ธ์Šคํ„ด์Šค ๊ตฌ์„ฑ ํŽ˜์ด์ง€์—์„œ ๊ธฐ๋ณธ ์˜ต์…˜ ๋ฆฌ์ „์„ ๊ทธ๋Œ€๋กœ ๋‘๊ณ  ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด์—์„œ ๊ตฌ์„ฑ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

      ์ธ์Šคํ„ด์Šค ๊ตฌ์„ฑ์€ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ €์žฅ ๋ฐ ๋ณต์ œ๋˜๋Š” ์ง€๋ฆฌ์  ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

    7. ๊ณ„์†์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    8. ์ปดํ“จํŒ… ์šฉ๋Ÿ‰ ํ• ๋‹น ํŽ˜์ด์ง€์—์„œ ์ฒ˜๋ฆฌ ๋‹จ์œ„(PU)๋ฅผ ์„ ํƒํ•˜๊ณ  ๊ธฐ๋ณธ๊ฐ’ 1000 ์ฒ˜๋ฆฌ ๋‹จ์œ„๋ฅผ ๊ทธ๋Œ€๋กœ ๋‘ก๋‹ˆ๋‹ค.

    9. ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

      ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค์˜ ๊ฐœ์š” ํŽ˜์ด์ง€๊ฐ€ Google Cloud ์ฝ˜์†”์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งŒ๋“ค๊ธฐ

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

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

    2. Test Instance์™€ ๊ฐ™์€ ๋งŒ๋“  ์ธ์Šคํ„ด์Šค๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    3. ํ‘œ์‹œ๋œ ์ธ์Šคํ„ด์Šค ๊ฐœ์š” ํŽ˜์ด์ง€์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    4. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ด๋ฆ„์œผ๋กœ example-db์™€ ๊ฐ™์€ ์ด๋ฆ„์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    5. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์–ธ์–ด๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

      PostgreSQL ์ง€์›์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ๊ณผ ์–ธ์–ด๋ฅผ ์„ ํƒํ•˜๊ธฐ ์œ„ํ•œ ์•ˆ๋‚ด๋Š” PostgreSQL ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. GoogleSQL์„ ์„ ํƒํ•œ ๊ฒฝ์šฐ ์ด ๋น ๋ฅธ ์‹œ์ž‘์˜ ๋‹ค์Œ ์„น์…˜์— ์žˆ๋Š” ์Šคํ‚ค๋งˆ ์ •์˜ ํ…์ŠคํŠธ ํ•„๋“œ์—์„œ ์Šคํ‚ค๋งˆ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

      ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งŒ๋“ค๊ธฐ ํŽ˜์ด์ง€๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

      ์—…๋ฐ์ดํŠธ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งŒ๋“ค๊ธฐ ์ฐฝ์ž…๋‹ˆ๋‹ค.

    6. ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

      ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ฐœ์š” ํŽ˜์ด์ง€๊ฐ€ Google Cloud ์ฝ˜์†”์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์œ„ํ•œ ์Šคํ‚ค๋งˆ ์ƒ์„ฑ

    1. ํƒ์ƒ‰ ๋ฉ”๋‰ด์—์„œ Spanner ์ŠคํŠœ๋””์˜ค๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    2. Spanner ์ŠคํŠœ๋””์˜ค ํŽ˜์ด์ง€์—์„œ ์ƒˆ ํƒญ์„ ํด๋ฆญํ•˜๊ฑฐ๋‚˜ ๋นˆ ํŽธ์ง‘๊ธฐ ํƒญ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    3. ๋‹ค์Œ์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

      GoogleSQL

      CREATE TABLE Singers (
        SingerId   INT64 NOT NULL,
        FirstName  STRING(1024),
        LastName   STRING(1024),
        SingerInfo BYTES(MAX),
        BirthDate  DATE
      ) PRIMARY KEY(SingerId);
      

      PostgreSQL

      CREATE TABLE Singers (
        BirthDate  TIMESTAMPTZ,
        SingerId   BIGINT PRIMARY KEY,
        FirstName  VARCHAR(1024),
        LastName   VARCHAR(1024),
        SingerInfo BYTEA
      );
      
    4. ์‹คํ–‰์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

      Google Cloud ์ฝ˜์†”์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐœ์š” ํŽ˜์ด์ง€๋กœ ๋Œ์•„๊ฐ€๊ณ  ์ง„ํ–‰ ์ค‘์ธ ์Šคํ‚ค๋งˆ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์—…๋ฐ์ดํŠธ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ํŽ˜์ด์ง€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

      GoogleSQL

      ์—…๋ฐ์ดํŠธ๋œ ๊ฐœ์š” ํŽ˜์ด์ง€์ž…๋‹ˆ๋‹ค.

      PostgreSQL

      ์—…๋ฐ์ดํŠธ๋œ ๊ฐœ์š” ํŽ˜์ด์ง€์ž…๋‹ˆ๋‹ค.

      PostgreSQL์€ ํ…Œ์ด๋ธ” ์ด๋ฆ„์„ ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ๋ฐ ์ˆ˜์ •

    Google Cloud ์ฝ˜์†”์€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…, ์ˆ˜์ •, ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

    ๋ฐ์ดํ„ฐ ์‚ฝ์ž…

    1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐœ์š” ํŽ˜์ด์ง€์˜ ํ…Œ์ด๋ธ” ๋ชฉ๋ก์—์„œ Singers ํ…Œ์ด๋ธ”์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

      Google Cloud ์ฝ˜์†”์— Singers ํ…Œ์ด๋ธ”์˜ ์Šคํ‚ค๋งˆ ํŽ˜์ด์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    2. ํƒ์ƒ‰ ๋ฉ”๋‰ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํด๋ฆญํ•˜์—ฌ Singers ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

    3. ์‚ฝ์ž…์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

      Google Cloud ์ฝ˜์†”์—๋Š” Singers ํ…Œ์ด๋ธ”์˜ ํ–‰์„ ์‚ฝ์ž…ํ•˜๊ณ  ์‚ฝ์ž… ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋„๋ก ์ˆ˜์ •ํ•˜๋Š” INSERT ๋ฐ SELECT ๋ฌธ์ด ํฌํ•จ๋œ ์ƒˆ ์ฟผ๋ฆฌ ํƒญ์ด ์žˆ๋Š” Singers ํ…Œ์ด๋ธ”์˜ Spanner Studio ํŽ˜์ด์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

      GoogleSQL

        -- Add new values in the VALUES clause in order of the column list.
        -- Each value must be type compatible with its associated column.
      INSERT INTO
        Singers (SingerId,
          BirthDate,
          FirstName,
          LastName,
          SingerInfo)
      VALUES
        (<SingerId>, -- type: INT64
          <BirthDate>, -- type: DATE
          <FirstName>, -- type: STRING(1024)
          <LastName>, -- type: STRING(1024)
          <SingerInfo> -- type: BYTES(MAX)
          );
        -- Change values in the WHERE condition to match the inserted row.
      SELECT
        *
      FROM
        Singers
      WHERE
        SingerId=<SingerId>;
      

      PostgreSQL

        -- Add new values in the VALUES clause in order of the column list.
        -- Each value must be type compatible with its associated column.
      INSERT INTO
        singers (singerid,
          birthdate,
          firstname,
          lastname,
          singerinfo)
      VALUES
        (<singerid>, -- type: bigint
          <birthdate>, -- type: timestamp with time zone
          <firstname>, -- type: character varying
          <lastname>, -- type: character varying
          <singerinfo> -- type: bytea
          );
        -- Change values in the WHERE condition to match the inserted row.
      SELECT
        *
      FROM
        singers
      WHERE
        singerid=<singerid>;
      

      PostgreSQL์€ ์—ด ์ด๋ฆ„์„ ๋ชจ๋‘ ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    4. INSERT ๋ฌธ์˜ VALUES ์ ˆ๊ณผ SELECT ๋ฌธ์˜ WHERE ์ ˆ์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

      GoogleSQL

        -- Add new values in the VALUES clause in order of the column list.
        -- Each value must be type compatible with its associated column.
      INSERT INTO
        Singers (SingerId,
          BirthDate,
          FirstName,
          LastName,
          SingerInfo)
      VALUES
        (1, -- type: INT64
          NULL, -- type: DATE
          'Marc', -- type: STRING(1024)
          'Richards', -- type: STRING(1024)
          NULL -- type: BYTES(MAX)
          );
        -- Change values in the WHERE condition to match the inserted row.
      SELECT
        *
      FROM
        Singers
      WHERE
        SingerId=1;
      

      PostgreSQL

        -- Add new values in the VALUES clause in order of the column list.
        -- Each value must be type compatible with its associated column.
      INSERT INTO
        singers (singerid,
          birthdate,
          firstname,
          lastname,
          singerinfo)
      VALUES
        (1, -- type: bigint
          NULL, -- type: timestamp with time zone
          'Marc', -- type: character varying
          'Richards', -- type: character varying
          NULL -- type: bytea
          );
        -- Change values in the WHERE condition to match the inserted row.
      SELECT
        *
      FROM
        singers
      WHERE
        singerid=1;
      
    5. ์‹คํ–‰์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

      Spanner๊ฐ€ ๋ฌธ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์™„๋ฃŒ๋˜๋ฉด ๊ฒฐ๊ณผ ํƒญ์€ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ด ํ–‰ ํ•œ ๊ฐœ๋ฅผ ์‚ฝ์ž…ํ–ˆ์Œ์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋งํฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

    6. ๊ฒฐ๊ณผ ํƒญ์—์„œ ํ…Œ์ด๋ธ” ๋งํฌ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ Singers ํ…Œ์ด๋ธ”์— ํ•˜๋‚˜์˜ ํ–‰์ด ์žˆ์Šต๋‹ˆ๋‹ค.

      GoogleSQL

      ํ–‰์ด ํ•˜๋‚˜ ์žˆ๋Š” ์—…๋ฐ์ดํŠธ๋œ Singers ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.

      PostgreSQL

      ํ–‰์ด ํ•˜๋‚˜ ์žˆ๋Š” ์—…๋ฐ์ดํŠธ๋œ Singers ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.

    7. ์‚ฝ์ž…์„ ํด๋ฆญํ•˜์—ฌ ํ–‰์„ ํ•˜๋‚˜ ๋” ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

      Google Cloud ์ฝ˜์†”์—๋Š” ๊ฐ™์€ INSERT ๋ฐ SELECT ๋ฌธ์ด ํฌํ•จ๋œ ์ƒˆ ์ฟผ๋ฆฌ ํƒญ์ด ์žˆ๋Š” Singers ํ…Œ์ด๋ธ”์˜ Spanner Studio ํŽ˜์ด์ง€๊ฐ€ ๋‹ค์‹œ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    8. INSERT ๋ฌธ์˜ VALUES ์ ˆ๊ณผ SELECT ๋ฌธ์˜ WHERE ์ ˆ์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

      GoogleSQL

        -- Add new values in the VALUES clause in order of the column list.
        -- Each value must be type compatible with its associated column.
      INSERT INTO
        Singers (SingerId,
          BirthDate,
          FirstName,
          LastName,
          SingerInfo)
      VALUES
        (2, -- type: INT64
          NULL, -- type: DATE
          'Catalina', -- type: STRING(1024)
          'Smith', -- type: STRING(1024)
          NULL -- type: BYTES(MAX)
          );
        -- Change values in the WHERE condition to match the inserted row.
      SELECT
        *
      FROM
        Singers
      WHERE
        SingerId=2;
      

      PostgreSQL

        -- Add new values in the VALUES clause in order of the column list.
        -- Each value must be type compatible with its associated column.
      INSERT INTO
        singers (singerid,
          birthdate,
          firstname,
          lastname,
          singerinfo)
      VALUES
        (2, -- type: bigint
          NULL, -- type: timestamp with time zone
          'Catalina', -- type: character varying
          'Smith', -- type: character varying
          NULL -- type: bytea
          );
        -- Change values in the WHERE condition to match the inserted row.
      SELECT
        *
      FROM
        singers
      WHERE
        singerid=2;
      
    9. ์‹คํ–‰์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

      Spanner๊ฐ€ ๋ฌธ์„ ์‹คํ–‰ํ•œ ํ›„ ๊ฒฐ๊ณผ ํƒญ์€ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ด ํ•˜๋‚˜์˜ ํ–‰์„ ์‚ฝ์ž…ํ–ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

    10. ํ…Œ์ด๋ธ” ๋งํฌ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ Singers ํ…Œ์ด๋ธ”์— ๋‘ ๊ฐœ์˜ ํ–‰์ด ์žˆ์Šต๋‹ˆ๋‹ค.

      GoogleSQL

      ํ–‰์ด 2๊ฐœ ์žˆ๋Š” ์—…๋ฐ์ดํŠธ๋œ Singers ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.

      PostgreSQL

      ํ–‰์ด 2๊ฐœ ์žˆ๋Š” ์—…๋ฐ์ดํŠธ๋œ Singers ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.

    ๋ฐ์ดํ„ฐ ์ž…๋ ฅ ์‹œ ๋นˆ ๋ฌธ์ž์—ด ๊ฐ’๋„ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    1. ์‚ฝ์ž…์„ ํด๋ฆญํ•˜์—ฌ ํ–‰์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

      Spanner์—๋Š” ๋™์ผํ•œ INSERT ๋ฐ SELECT ๋ฌธ์ด ํฌํ•จ๋œ ์ƒˆ ์ฟผ๋ฆฌ ํƒญ์ด ์žˆ๋Š” Singers ํ…Œ์ด๋ธ”์˜ Spanner ์ŠคํŠœ๋””์˜ค ํŽ˜์ด์ง€๊ฐ€ ๋‹ค์‹œ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    2. ํ…œํ”Œ๋ฆฟ INSERT ๋ฌธ์˜ VALUES ์ ˆ๊ณผ SELECT ๋ฌธ์˜ WHERE ์ ˆ์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

      GoogleSQL

        -- Add new values in the VALUES clause in order of the column list.
        -- Each value must be type compatible with its associated column.
      INSERT INTO
        Singers (SingerId,
          BirthDate,
          FirstName,
          LastName,
          SingerInfo)
      VALUES
        (3, -- type: INT64
          NULL, -- type: DATE
          'Kena', -- type: STRING(1024)
          '', -- type: STRING(1024)
          NULL -- type: BYTES(MAX)
          );
        -- Change values in the WHERE condition to match the inserted row.
      SELECT
        *
      FROM
        Singers
      WHERE
        SingerId=3;
      

      PostgreSQL

        -- Add new values in the VALUES clause in order of the column list.
        -- Each value must be type compatible with its associated column.
      INSERT INTO
        singers (singerid,
          birthdate,
          firstname,
          lastname,
          singerinfo)
      VALUES
        (3, -- type: bigint
          NULL, -- type: timestamp with time zone
          'Kena', -- type: character varying
          '', -- type: character varying
          NULL -- type: bytea
          );
        -- Change values in the WHERE condition to match the inserted row.
      SELECT
        *
      FROM
        singers
      WHERE
        singerid=3;
      

      ์„ฑ ์—ด์— ์ œ๊ณต๋œ ๊ฐ’์€ NULL ๊ฐ’์ด ์•„๋‹Œ '' ๋นˆ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.

    3. ์‹คํ–‰์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

      Spanner๊ฐ€ ๋ฌธ์„ ์‹คํ–‰ํ•œ ํ›„ ๊ฒฐ๊ณผ ํƒญ์€ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ด ํ•˜๋‚˜์˜ ํ–‰์„ ์‚ฝ์ž…ํ–ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

    4. ํ…Œ์ด๋ธ” ๋งํฌ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ Singers ํ…Œ์ด๋ธ”์— ํ–‰์ด ์„ธ ๊ฐœ ์žˆ์œผ๋ฉฐ, LastName ์—ด์—์„œ 3์˜ ๊ธฐ๋ณธ ํ‚ค ๊ฐ’์€ ๋ฌธ์ž์—ด์ด ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

      GoogleSQL

      ํ–‰์ด 3๊ฐœ ์žˆ๋Š” ์—…๋ฐ์ดํŠธ๋œ Singers ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.

      PostgreSQL

      ํ–‰์ด 3๊ฐœ ์žˆ๋Š” ์—…๋ฐ์ดํŠธ๋œ Singers ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.

    ๋ฐ์ดํ„ฐ ์ˆ˜์ •

    1. Singers ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€์—์„œ ๊ธฐ๋ณธ ํ‚ค ๊ฐ’์ด 3์ธ ํ–‰์˜ ์ฒดํฌ๋ฐ•์Šค๋ฅผ ์„ ํƒํ•œ ํ›„ ์ˆ˜์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

      Spanner์—๋Š” ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ํ…œํ”Œ๋ฆฟ UPDATE ๋ฐ SET ๋ฌธ์ด ํฌํ•จ๋œ ์ƒˆ ํƒญ์ด ์žˆ๋Š” Spanner ์ŠคํŠœ๋””์˜ค ํŽ˜์ด์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฌธ์˜ WHERE ์ ˆ์€ ์—…๋ฐ์ดํŠธํ•  ํ–‰์ด ๊ธฐ๋ณธ ํ‚ค ๊ฐ’์ด 3์ธ ํ–‰์ž„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

      GoogleSQL

        -- Change values in the SET clause to update the row where the WHERE condition is true.
      UPDATE
        Singers
      SET
        BirthDate='',
        FirstName='Kena',
        LastName='',
        SingerInfo=''
      WHERE
        SingerId=3;
      SELECT
        *
      FROM
        Singers
      WHERE
        SingerId=3;
      

      PostgreSQL

        -- Change values in the SET clause to update the row where the WHERE condition is true.
      UPDATE
        singers
      SET
        birthdate=NULL,
        firstname='Kena',
        lastname='',
        singerinfo=NULL
      WHERE
        singerid='3';
      SELECT
        *
      FROM
        singers
      WHERE
        singerid='3';
      
    2. UPDATE ๋ฌธ์˜ SET ์ ˆ์„ ์ˆ˜์ •ํ•˜์—ฌ ์ƒ๋…„์›”์ผ๋งŒ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

      GoogleSQL

        -- Change values in the SET clause to update the row where the WHERE condition is true.
      UPDATE
        Singers
      SET
        BirthDate='1961-04-01'
      WHERE
        SingerId=3;
      SELECT
        *
      FROM
        Singers
      WHERE
        SingerId=3;
      

      PostgreSQL

        -- Change values in the SET clause to update the row where the WHERE condition is true.
      UPDATE
        singers
      SET
        birthdate='1961-04-01 00:00:00 -8:00'
      WHERE
        singerid='3';
      SELECT
        *
      FROM
        singers
      WHERE
        singerid='3';
      
    3. ์‹คํ–‰์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

      Spanner๊ฐ€ ๋ฌธ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์™„๋ฃŒ๋˜๋ฉด ๊ฒฐ๊ณผ ํƒญ์€ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ด ํ–‰ ํ•œ ๊ฐœ๋ฅผ ์—…๋ฐ์ดํŠธํ–ˆ์Œ์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋งํฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

    4. ๊ฒฐ๊ณผ ํƒญ์—์„œ ํ…Œ์ด๋ธ” ๋งํฌ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

      ์ด์ œ ์—…๋ฐ์ดํŠธ๋œ ํ–‰์— ์ƒ๋…„์›”์ผ ๊ฐ’์ด ์žˆ์Šต๋‹ˆ๋‹ค.

      GoogleSQL

      ์—…๋ฐ์ดํŠธ๋œ ํ–‰์ด ์žˆ๋Š” ์—…๋ฐ์ดํŠธ๋œ Singers ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.

      PostgreSQL

      ์—…๋ฐ์ดํŠธ๋œ ํ–‰์ด ์žˆ๋Š” ์—…๋ฐ์ดํŠธ๋œ Singers ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.

    ๋ฐ์ดํ„ฐ ์‚ญ์ œ

    1. Singers ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€์—์„œ ์ฒซ ๋ฒˆ์งธ ์—ด์— 2๊ฐ€ ์žˆ๋Š” ํ–‰์˜ ์ฒดํฌ๋ฐ•์Šค๋ฅผ ์„ ํƒํ•œ ํ›„ ์‚ญ์ œ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    2. ๋Œ€ํ™”์ƒ์ž๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉด ํ™•์ธ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

      ์ด์ œ Singers ํ…Œ์ด๋ธ”์— ๋‘ ๊ฐœ์˜ ํ–‰์ด ์žˆ์Šต๋‹ˆ๋‹ค.

      GoogleSQL

      ํ–‰์ด 2๊ฐœ ์žˆ๋Š” ์—…๋ฐ์ดํŠธ๋œ Singers ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค. SingerId 2์˜ ํ–‰์ด ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.

      PostgreSQL

      ํ–‰์ด 2๊ฐœ ์žˆ๋Š” ์—…๋ฐ์ดํŠธ๋œ Singers ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค. SingerId 2์˜ ํ–‰์ด ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.

    ์ฟผ๋ฆฌ ์‹คํ–‰

    1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐœ์š” ํŽ˜์ด์ง€์˜ ํƒ์ƒ‰ ๋ฉ”๋‰ด์—์„œ Spanner ์ŠคํŠœ๋””์˜ค๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    2. ์ƒˆ ํƒญ์„ ํด๋ฆญํ•˜์—ฌ ์ƒˆ ์ฟผ๋ฆฌ ํƒญ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ฟผ๋ฆฌ ํŽธ์ง‘๊ธฐ์— ๋‹ค์Œ ์ฟผ๋ฆฌ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

      GoogleSQL

      SELECT * FROM Singers;
      

      PostgreSQL

      SELECT * FROM singers;
      
    3. ์‹คํ–‰์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

      Spanner๊ฐ€ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์™„๋ฃŒ๋˜๋ฉด ๊ฒฐ๊ณผ ํƒญ์— ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

      GoogleSQL

      ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

      PostgreSQL

      ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

    ์ˆ˜๊ณ ํ•˜์…จ์Šต๋‹ˆ๋‹ค. Spanner ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ๋งŒ๋“ค์—ˆ์œผ๋ฉฐ ์ฟผ๋ฆฌ ํŽธ์ง‘๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ SQL ๋ฌธ์„ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

    ์‚ญ์ œ

    Cloud Billing ๊ณ„์ •์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์š”๊ธˆ์ด ๋ถ€๊ณผ๋˜์ง€ ์•Š๋„๋ก ํ•˜๋ ค๋ฉด ์ƒ์„ฑํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ญ์ œํ•˜๋ฉด ํ•ด๋‹น ์ธ์Šคํ„ด์Šค์—์„œ ๋งŒ๋“  ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ž๋™์œผ๋กœ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.

    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ญ์ œ

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

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

    2. Test Instance์™€ ๊ฐ™์ด ์‚ญ์ œํ•  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์žˆ๋Š” ์ธ์Šคํ„ด์Šค ์ด๋ฆ„์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    3. example-db์™€ ๊ฐ™์ด ์‚ญ์ œํ•  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ด๋ฆ„์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    4. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ธ๋ถ€์ •๋ณด ํŽ˜์ด์ง€์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ญ์ œ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    5. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜๊ณ  ์‚ญ์ œ๋ฅผ ํด๋ฆญํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ญ์ œ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

    ์ธ์Šคํ„ด์Šค ์‚ญ์ œ

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

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

    2. Test Instance์™€ ๊ฐ™์ด ์‚ญ์ œํ•˜๋ ค๋Š” ์ธ์Šคํ„ด์Šค์˜ ์ด๋ฆ„์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    3. ์ธ์Šคํ„ด์Šค ์‚ญ์ œ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    4. ์ธ์Šคํ„ด์Šค ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜๊ณ  ์‚ญ์ œ๋ฅผ ํด๋ฆญํ•˜์—ฌ ์ธ์Šคํ„ด์Šค ์‚ญ์ œ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

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