์ž์Šต์„œ 3: Snowpark Container Service ๋งŒ๋“ค๊ธฐ ๋ฐ ๊ด€๋ฆฌยถ

์†Œ๊ฐœยถ

Snowpark Container Services ๋Š” Snowflake ์ƒํƒœ๊ณ„ ๋‚ด์—์„œ ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐฐํฌ, ๊ด€๋ฆฌ, ํ™•์žฅ์„ ์ด‰์ง„ํ•˜๋„๋ก ์„ค๊ณ„๋œ ์™„์ „ ๊ด€๋ฆฌํ˜• ์ปจํ…Œ์ด๋„ˆ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด Snowflake ๋‚ด์—์„œ ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์›Œํฌ๋กœ๋“œ๋ฅผ ์ง์ ‘ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ž์Šต์„œ์—์„œ๋Š” Snowflake Python APIs ์„ ์‚ฌ์šฉํ•˜์—ฌ Snowpark Container Services ์—์„œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

์ค‘์š”

Snowpark Container Services ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ AWS์˜ Snowflake ๊ณ„์ •์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ์ง€์› ์€ Azure์˜ ๊ณ„์ •์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Snowpark Container Services โ€“ ์ด์šฉ ๊ฐ€๋Šฅํ•œ ๋ฆฌ์ „ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์ „์ œ ์กฐ๊ฑดยถ

์ด ์ž์Šต์„œ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์™„๋ฃŒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. Docker Desktop์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

    ์ด ์ž์Šต์„œ์—์„œ๋Š” Docker Desktop์ด ํ•„์š”ํ•œ ์ง€์นจ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์„ค์น˜ ์ง€์นจ์€ https://docs.docker.com/get-docker/ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

  2. ๋‹ค์Œ ๋‹จ๊ณ„๊ฐ€ ํฌํ•จ๋œ ์ผ๋ฐ˜ ์„ค์ • ์ง€์นจ์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

    • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    • Snowflake Python APIs ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

    • Snowflake ์—ฐ๊ฒฐ์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

    • Python API ์ž์Šต์„œ์— ํ•„์š”ํ•œ ๋ชจ๋“  ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

    • API Root ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

    ์ฐธ๊ณ 

    ์ด๋ฏธ ๊ณตํ†ต ์„ค์ • ์„ ์™„๋ฃŒํ–ˆ๋‹ค๋ฉด ์ด ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ณ  ์ž์Šต์„œ๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์‚ฌ์ „ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์™„๋ฃŒํ•˜๋ฉด Snowpark Container Services ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด API๋ฅผ ์‚ฌ์šฉํ•  ์ค€๋น„๊ฐ€ ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •ยถ

์ด์ „ Snowflake Python APIs ์ž์Šต์„œ์—์„œ ๋…ธํŠธ๋ถ์„ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด ์ด ์ž์Šต์„œ์—์„œ๋Š” ์ƒˆ ๋…ธํŠธ๋ถ์œผ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋…ธํŠธ๋ถ์—๋Š” Snowpark Container Services ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ NGINX ์›น ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ƒ˜ํ”Œ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋ชจ๋‘ Snowflake์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

  1. ์„ ํ˜ธํ•˜๋Š” ์ฝ”๋“œ ํŽธ์ง‘๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ jupyter notebook ๋ช…๋ น์„ ์‹คํ–‰ํ•ด ์ƒˆ ๋…ธํŠธ๋ถ์„ ์—ฝ๋‹ˆ๋‹ค.

  2. ๋…ธํŠธ๋ถ์˜ ์ฒซ ๋ฒˆ์งธ ์…€์—์„œ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    from snowflake.core.database import Database
    from snowflake.core.schema import Schema
    
    database = root.databases.create(Database(name="spcs_python_api_db"), mode="orreplace")
    schema = database.schemas.create(Schema(name="public"), mode="orreplace")
    
    Copy

    ์•ž์„œ ๊ณตํ†ต ์„ค์ • ์—์„œ ์ƒ์„ฑํ•œ Snowflake ์—ฐ๊ฒฐ ๋ฐ root ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— spcs_python_api_db ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ public ์Šคํ‚ค๋งˆ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ฐธ์กฐ๋„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. Snowpark Container Services ์ปดํฌ๋„ŒํŠธ๋Š” ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์Šคํ‚ค๋งˆ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

Snowpark Container Services ์˜ ๊ฐœ์š”ยถ

์ž์Šต์„œ๋ฅผ ๊ณ„์† ์ง„ํ–‰ํ•˜๊ธฐ ์ „์— Snowpark Container Services ์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๊ฐ„๋žตํžˆ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค. Snowpark Container Services ์—์„œ ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ ์˜ค๋ธŒ์ ํŠธ๋กœ ์ž‘์—…ํ•ฉ๋‹ˆ๋‹ค.

  • ์ด๋ฏธ์ง€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ: Snowflake ๊ณ„์ •์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ์ €์žฅ์†Œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

    Snowpark Container Services ๋Š” OCI ํด๋ผ์ด์–ธํŠธ(์˜ˆ: Docker CLI ๋ฐ SnowSQL)๊ฐ€ Snowflake ๊ณ„์ •์˜ ์ด๋ฏธ์ง€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ™œ์„ฑํ™”ํ•˜๋Š” OCIv2 ํ˜ธํ™˜ ์ด๋ฏธ์ง€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฏธ์ง€๋ฅผ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ด๋ฏธ์ง€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋ฐ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ž‘์—…ํ•˜๊ธฐ ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

  • ์ปดํ“จํŒ… ํ’€: ์ปดํ“จํŒ… ๋ฆฌ์†Œ์Šค(๊ฐ€์ƒ ๋จธ์‹  ๋…ธ๋“œ) ์ง‘ํ•ฉ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

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

    ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ปดํ“จํŒ… ํ’€ ์ž‘์—…ํ•˜๊ธฐ ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

  • ์„œ๋น„์Šค: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

    ์„œ๋น„์Šค์—๋Š” ์ตœ์†Œํ•œ ์‚ฌ์–‘๊ณผ ์ปดํ“จํŒ… ํ’€์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์–‘์—๋Š” ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ, ์„œ๋น„์Šค๊ฐ€ ๋…ธ์ถœํ•  ์—”๋“œํฌ์ธํŠธ ๋“ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์–‘์€ YAML๋กœ ์ž‘์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ปดํ“จํŒ… ํ’€์€ ์„œ๋น„์Šค๊ฐ€ ์‹คํ–‰๋˜๋Š” ์ปดํ“จํŒ… ๋ฆฌ์†Œ์Šค์˜ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค.

    ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„œ๋น„์Šค ์ž‘์—…ํ•˜๊ธฐ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๋‹ค์Œ ๋‹จ๊ณ„๋กœ ์ด๋™ํ•˜์—ฌ ์ด๋Ÿฌํ•œ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฏธ์ง€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋งŒ๋“ค๊ธฐยถ

์ด ์„น์…˜์—์„œ๋Š” ๋จผ์ € Snowflake Python APIs ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ Docker Hub์—์„œ NGINX ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  Docker CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋งŒ๋“ค๊ธฐ ๋ฐ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•œ ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ

  1. ๋…ธํŠธ๋ถ์˜ ๋‹ค์Œ ์…€์—์„œ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    from snowflake.core.image_repository import ImageRepository
    
    my_repo = ImageRepository("MyImageRepository")
    schema.image_repositories.create(my_repo)
    
    Copy

    ์ด ์ฝ”๋“œ ์˜ˆ์ œ์—์„œ๋Š” ์ด ์ž์Šต์„œ์—์„œ ์ด์ „์— ์ƒ์„ฑํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์Šคํ‚ค๋งˆ์— ์ด๋ฏธ์ง€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  2. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์ด๋ฆ„์„ ์ถœ๋ ฅํ•˜์—ฌ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    my_repo_res = schema.image_repositories["MyImageRepository"]
    my_repo = my_repo_res.fetch()
    print(my_repo.name)
    
    Copy
  3. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ(๋ฆฌํฌ์ง€ํ† ๋ฆฌ URL ๋ฐ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„)์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์žˆ์–ด์•ผ ์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ๋ฆฌํฌ์ง€ํ† ๋ฆฌ URL์„ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด ๋‹ค์Œ ์…€์—์„œ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    repositories = schema.image_repositories
      for repo_obj in repositories.iter():
        print(repo_obj.repository_url)
    
    Copy
    • ์ถœ๋ ฅ์˜ repository_url ํŠน์„ฑ์€ URL์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ:

      <orgname>-<acctname>.registry.snowflakecomputing.com/spcs_python_api_db/public/myimagerepository
      
    • ๋ฆฌํฌ์ง€ํ† ๋ฆฌ URL์˜ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์˜ˆ:

      <orgname>-<acctname>.registry.snowflakecomputing.com
      

NGINX์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์™€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์—…๋กœ๋“œํ•˜๊ธฐ

  1. Docker๊ฐ€ ์‚ฌ์šฉ์ž๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œํ•˜๋ ค๋ฉด ๋จผ์ € Snowflake๋กœ Docker๋ฅผ ์ธ์ฆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    Snowflake ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋กœ Docker๋ฅผ ์ธ์ฆํ•˜๋ ค๋ฉด ๋ช…๋ น์ค„ ํ„ฐ๋ฏธ๋„์„ ์—ด๊ณ  Docker CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ docker login ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    docker login <registry_hostname> -u <username>
    
    Copy
    • registry_hostname: ์ด์ „ ๋‹จ๊ณ„์˜ ๊ฒฐ๊ณผ์—์„œ repository_url ์— ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

    • username: Snowflake ์‚ฌ์šฉ์ž ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. Docker๊ฐ€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ฌป๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

    ์˜ˆ

    docker login myorg-myacct.registry.snowflakecomputing.com -u admin
    
    Copy
  2. Docker Hub์—์„œ NGINX ์ด๋ฏธ์ง€: ์˜ AMD64 ๋นŒ๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ

    docker pull --platform linux/amd64 amd64/nginx
    
    Copy
  3. amd64/nginx ์ด๋ฏธ์ง€์— Snowflake ์ด๋ฏธ์ง€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ URL์„ ํƒœ๊ทธ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

    docker tag docker.io/amd64/nginx:latest <repository_url>/<image_name>
    
    Copy

    ์˜ˆ

    docker tag docker.io/amd64/nginx:latest myorg-myacct.registry.snowflakecomputing.com/spcs_python_api_db/public/myimagerepository/amd64/nginx:latest
    
    Copy

    ํƒœ๊ทธ๋Š” ํŠน์ • ๋ฒ„์ „์ด๋‚˜ ์ด๋ฏธ์ง€ ๋ณ€ํ˜•์„ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž ์ง€์ •ํ˜• ์ธ๊ฐ„์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค.

  4. Snowflake ๊ณ„์ •์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

    docker push <repository_url>/<image_name>
    
    Copy

    ์˜ˆ

    docker push myorg-myacct.registry.snowflakecomputing.com/spcs_python_api_db/public/myimagerepository/amd64/nginx:latest
    
    Copy

์ปดํ“จํŒ… ํ’€ ๋งŒ๋“ค๊ธฐยถ

์ปดํ“จํŒ… ํ’€์„ ์ •์˜ํ•˜๊ณ  ์ƒ์„ฑํ•˜๋ ค๋ฉด ๋…ธํŠธ๋ถ์˜ ๋‹ค์Œ ์…€์—์„œ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

new_compute_pool_def = ComputePool(
    name="MyComputePool",
    instance_family="CPU_X64_XS",
    min_nodes=1,
    max_nodes=2,
)

new_compute_pool = root.compute_pools.create(new_compute_pool_def)
Copy

์ด ์…€์—์„œ๋Š” ๋‹ค์Œ ํŠน์„ฑ์— ๋Œ€ํ•œ ๊ฐ’์„ ์ œ๊ณตํ•˜์—ฌ ComputePool ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•ด ์ปดํ“จํŒ… ํ’€์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

  • instance_family: ์ธ์Šคํ„ด์Šค ์ œํ’ˆ๊ตฐ์€ ์ปดํ“จํŒ… ํ’€์˜ ๋…ธ๋“œ์— ํ”„๋กœ๋น„์ €๋‹ํ•  ๋จธ์‹ ์˜ ์œ ํ˜•์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.

    ๊ฐ ๋จธ์‹  ์œ ํ˜•์€ ํ•ด๋‹น ์ปดํ“จํŒ… ํ’€์— ์„œ๋กœ ๋‹ค๋ฅธ ์–‘์˜ ์ปดํ“จํŒ… ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ์…€์—์„œ๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ์ž‘์€ ๋จธ์‹  ์œ ํ˜•์ธ CPU_X64_XS ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ CREATE COMPUTE POOL ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

  • min_nodes: ์ปดํ“จํŒ… ํ’€์„ ์‹œ์ž‘ํ•  ์ตœ์†Œ ๋…ธ๋“œ ์ˆ˜์ž…๋‹ˆ๋‹ค.

  • max_nodes: ์ปดํ“จํŒ… ํ’€์ด ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋…ธ๋“œ ์ˆ˜์ž…๋‹ˆ๋‹ค.

    ์ปดํ“จํŒ… ํ’€์„ ์ƒ์„ฑํ•˜๋ฉด Snowflake๋Š” ์ง€์ •๋œ ์ตœ์†Œ ๋…ธ๋“œ ์ˆ˜๋กœ ํ•ด๋‹น ํ’€์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด Snowflake๊ฐ€ ์ž๋™์œผ๋กœ ํ™•์žฅ์„ ๊ด€๋ฆฌํ•˜๊ณ , ์‹คํ–‰ ์ค‘์ธ ๋…ธ๋“œ๊ฐ€ ์ถ”๊ฐ€ ์›Œํฌ๋กœ๋“œ๋ฅผ ๊ฐ๋‹นํ•  ์ˆ˜ ์—†์„ ๋•Œ ์ตœ๋Œ€ ์ง€์ •๋œ ๊ฐœ์ˆ˜๊นŒ์ง€ ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ปดํ“จํŒ… ํ’€ ์ •์˜๋ฅผ compute_pools.create() ์— ์ „๋‹ฌํ•˜์—ฌ ์ปดํ“จํŒ… ํ’€์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.ยถ

์ด์ œ ์„ค์ •ํ•œ ์ด๋ฏธ์ง€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์™€ ์ปดํ“จํŒ… ํ’€์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ์ •์˜ํ•˜๊ณ  ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šค๋ž€ Snowflake์—์„œ ๋ชจ๋‘ ์กฐ์ •๋˜๋Š” ์ปดํ“จํŒ… ํ’€์—์„œ ์‹คํ–‰๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ ๋ชจ์Œ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

  1. ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๊ฐ€ ํฌํ•จ๋œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ ค๋ฉด ๋…ธํŠธ๋ถ์˜ ๋‹ค์Œ ์…€์—์„œ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    image_repository = schema.image_repositories["MyImageRepository"]
    
    Copy

    ์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋Š” PUBLIC ์Šคํ‚ค๋งˆ์— ์Šคํ…Œ์ด์ง€๋กœ ๋‚˜์—ด๋œ Snowflake ๊ณ„์ •์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‹จ๊ณ„์—์„œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด ์ด ์ฐธ์กฐ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  2. ์„œ๋น„์Šค๋ฅผ ์ •์˜ํ•˜๊ณ  ์ƒ์„ฑํ•˜๋ ค๋ฉด ๋‹ค์Œ ์…€์—์„œ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    from textwrap import dedent
    from io import BytesIO
    from snowflake.core.service import Service, ServiceSpecInlineText
    
    specification = dedent(f"""\
        spec:
          containers:
          - name: web-server
            image: {image_repository.fetch().repository_url}/amd64/nginx:latest
          endpoints:
          - name: ui
            port: 80
            public: true
        """)
    
    service_def = Service(
        name="MyService",
        compute_pool="MyComputePool",
        spec=ServiceSpecInlineText(spec_text=specification),
        min_instances=1,
        max_instances=1,
    )
    
    nginx_service = schema.services.create(service_def)
    
    Copy

    ์ด ์…€์€ ์„œ๋น„์Šค ์‚ฌ์–‘๊ณผ ์„œ๋น„์Šค๋ฅผ ์ •์˜ํ•œ ๋‹ค์Œ NGINX ์›น ์„œ๋ฒ„์— ๋Œ€ํ•œ ์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์–‘ ๋ฐ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์ •์˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์†์„ฑ์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.

    • specification โ€“ Python ํ˜•์‹์ด ์ง€์ •๋œ ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด (f-string)์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์–‘์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด์€ YAML๋กœ ํ˜•์‹์ด ์ง€์ •๋ฉ๋‹ˆ๋‹ค.

      ์‚ฌ์–‘์—๋Š” ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„, ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ, ์„œ๋น„์Šค๊ฐ€ ๋Œ€์ค‘์—๊ฒŒ ๊ณต๊ฐœ๋  ์—”๋“œํฌ์ธํŠธ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์ œ์—์„œ๋Š” ์‚ฌ์–‘์„ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ํ•˜์ง€๋งŒ, ์Šคํ…Œ์ด์ง€์—์„œ .yml ํŒŒ์ผ์— ๋Œ€ํ•œ ์ฐธ์กฐ๋กœ ์‚ฌ์–‘์„ ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

    • service_def โ€“ Service ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค ์ด๋ฆ„, ์„œ๋น„์Šค๊ฐ€ ์‹คํ–‰๋  ์ปดํ“จํŒ… ํ’€, ์‚ฌ์–‘ ๊ฒฝ๋กœ, ์„œ๋น„์Šค์˜ ์ด ์ธ์Šคํ„ด์Šค ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

      ์ด ์…€์—์„œ๋Š” ์‚ฌ์–‘์„ ์ธ๋ผ์ธ์œผ๋กœ f- ๋ฌธ์ž์—ด๋กœ ์ •์˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ServiceSpecInlineText ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ spec ์˜ ๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ์„œ๋น„์Šค๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด ์˜ˆ์ œ์—์„œ๋Š” min_instances ๋ฐ max_instances ๋ฅผ 1 ๋กœ ์„ค์ •ํ•˜์—ฌ ์‹คํ–‰ํ•  ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค๋ฅผ ํ•˜๋‚˜๋งŒ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

  3. ์„œ๋น„์Šค ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด ๋‹ค์Œ ์…€์—์„œ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    from pprint import pprint
    
    pprint(nginx_service.get_service_status(timeout=5))
    
    Copy

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

    {'auto_resume': True,
    'auto_suspend_secs': 3600,
    'instance_family': 'CPU_X64_XS',
    'max_nodes': 1,
    'min_nodes': 1,
    'name': 'MyService'}
    

์ž์ฒด ์„œ๋น„์Šค ์‚ฌ์šฉยถ

์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ•œ ํ›„ Snowpark Container Services ๋Š” ์„œ๋น„์Šค์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ”„๋กœ๋น„์ €๋‹ํ•˜๋Š” ๋ฐ ๋ช‡ ๋ถ„ ์ •๋„ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

  1. ์—”๋“œํฌ์ธํŠธ์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด ๋…ธํŠธ๋ถ์˜ ๋‹ค์Œ ์…€์—์„œ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    import json, time
    
    while True:
        public_endpoints = nginx_service.fetch().public_endpoints
        try:
            endpoints = json.loads(public_endpoints)
        except json.JSONDecodeError:
            print(public_endpoints)
            time.sleep(15)
        else:
            break
    
    Copy

    ์ด ์ฝ”๋“œ ์˜ˆ์ œ๋Š” Snowpark Container Services ๋˜๋Š” Snowflake Python APIs ์— ํŠน์ •ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์ค€๋น„๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ํŽธ๋ฆฌํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•  ๋ฟ์ž…๋‹ˆ๋‹ค. ์„œ๋น„์Šค ์˜ค๋ธŒ์ ํŠธ์—์„œ .fetch().public_endpoints ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์—”๋“œํฌ์ธํŠธ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

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

    Endpoints provisioning in progress... check back in a few minutes
    Endpoints provisioning in progress... check back in a few minutes
    Endpoints provisioning in progress... check back in a few minutes
    
  2. ์—”๋“œํฌ์ธํŠธ๊ฐ€ ํ”„๋กœ๋น„์ €๋‹๋œ ํ›„์—๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ณต๊ฐœ ์—”๋“œํฌ์ธํŠธ๋ฅผ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ๋‹ค์Œ ์…€์—์„œ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    import webbrowser
    
    print(f"Visiting {endpoints['ui']} in your browser. You might need to log in there.")
    webbrowser.open(f"https://{endpoints['ui']}")
    
    Copy

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

    Visiting myorg-myacct.snowflakecomputing.app in your browser. You might need to log in there.
    

    ์„ฑ๊ณตํ•˜๋ฉด ์—”๋“œํฌ์ธํŠธ ๋ฐฉ๋ฌธ ์‹œ ๋ธŒ๋ผ์šฐ์ €์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ NGINX ์„ฑ๊ณต ํŽ˜์ด์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    ๋ธŒ๋ผ์šฐ์ €์˜ NGINX ์›น ์„œ๋ฒ„ ์„ฑ๊ณต ํŽ˜์ด์ง€ ์Šคํฌ๋ฆฐ์ƒท
  3. Python API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ ์„œ๋น„์Šค๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด, ์„œ๋น„์Šค๋ฅผ ์ผ์‹œ ์ค‘๋‹จํ•œ ํ›„ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    from time import sleep
    
    nginx_service.suspend()
    sleep(3)
    print(nginx_service.get_service_status(timeout=5))
    
    Copy
  4. ์„œ๋น„์Šค๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    nginx_service.resume()
    sleep(3)
    print(nginx_service.get_service_status(timeout=5))
    
    Copy

๋‹จ ๋ช‡ ์ค„์˜ Python์œผ๋กœ Snowpark Container Services ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Snowflake์—์„œ NGINX ์›น ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ •๋ฆฌยถ

Snowflake๋Š” ๊ณ„์ •์˜ ํ™œ์„ฑ ์ปดํ“จํŒ… ํ’€ ๋…ธ๋“œ์— ๋Œ€ํ•ด ์š”๊ธˆ์„ ์ฒญ๊ตฌํ•ฉ๋‹ˆ๋‹ค. ์›์น˜ ์•Š๋Š” ์š”๊ธˆ์ด ์ฒญ๊ตฌ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ๋จผ์ € ์„œ๋น„์Šค์™€ ์ปดํ“จํŒ… ํ’€์„ ์ผ์‹œ ์ค‘๋‹จํ•œ ๋‹ค์Œ, ๋‘ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋ชจ๋‘ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

  1. ์ปดํ“จํŒ… ํ’€๊ณผ ์„œ๋น„์Šค๋ฅผ ์ผ์‹œ ์ค‘๋‹จํ•˜๋ ค๋ฉด ๋…ธํŠธ๋ถ์˜ ๋‹ค์Œ ์…€์—์„œ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    new_compute_pool_def.suspend()
    nginx_service.suspend()
    
    Copy
  2. ์ปดํ“จํŒ… ํ’€๊ณผ ์„œ๋น„์Šค๋ฅผ ์‚ญ์ œํ•˜๋ ค๋ฉด ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    new_compute_pool_def.drop()
    nginx_service.drop()
    
    Copy

๋‹ค์Œ์—๋Š” ๋ฌด์—‡์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?ยถ

์ถ•ํ•˜ํ•ฉ๋‹ˆ๋‹ค! ์ด ์ž์Šต์„œ์—์„œ๋Š” Snowflake Python APIs ์„ ์‚ฌ์šฉํ•˜์—ฌ Snowpark Container Services ์—์„œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋ณธ ์‚ฌํ•ญ์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค.

์š”์•ฝยถ

์ด ๊ณผ์ •์—์„œ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์™„๋ฃŒํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œํ•˜๋Š” ์ด๋ฏธ์ง€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • ์„œ๋น„์Šค๊ฐ€ ์‹คํ–‰๋˜๋Š” ์ปดํ“จํŒ… ํ’€์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  • Snowpark Container Services ๋ฆฌ์†Œ์Šค ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ผ์‹œ ์ค‘๋‹จํ•˜๊ณ  ์‚ญ์ œํ•˜์—ฌ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ๋ฆฌ์†Œ์Šคยถ

API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Snowflake์—์„œ ๋‹ค๋ฅธ ์œ ํ˜•์˜ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋” ๋งŽ์€ ์˜ˆ์ œ๋Š” ๋‹ค์Œ ๊ฐœ๋ฐœ์ž ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๊ฐ€์ด๋“œ

์„ค๋ช…

Python์„ ์‚ฌ์šฉํ•˜์—ฌ Snowflake ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์Šคํ‚ค๋งˆ, ํ…Œ์ด๋ธ” ๋ฐ ๋ทฐ ๊ด€๋ฆฌํ•˜๊ธฐ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์Šคํ‚ค๋งˆ, ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋ ค๋ฉด API๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Python์„ ์‚ฌ์šฉํ•˜์—ฌ Snowflake ์‚ฌ์šฉ์ž, ์—ญํ•  ๋ฐ ๊ถŒํ•œ ๊ด€๋ฆฌ

API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž, ์—ญํ•  ๋ฐ ๋ณด์กฐ๊ธˆ์„ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

Python์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ๋ฐ ์–ธ๋กœ๋”ฉ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ

API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์™ธ๋ถ€ ๋ณผ๋ฅจ, ํŒŒ์ดํ”„, ์Šคํ…Œ์ด์ง€๋ฅผ ํฌํ•จํ•œ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ๋ฐ ์–ธ๋กœ๋”ฉ ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

Python์„ ์‚ฌ์šฉํ•˜์—ฌ Snowflake ์ž‘์—… ๋ฐ ์ž‘์—… ๊ทธ๋ž˜ํ”„ ๊ด€๋ฆฌํ•˜๊ธฐ

API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…๊ณผ ์ž‘์—… ๊ทธ๋ž˜ํ”„๋ฅผ ์ƒ์„ฑ, ์‹คํ–‰, ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.