[FastAPI] 5. pyyaml์„ ์ด์šฉํ•œ FastAPI ํ™˜๊ฒฝ ๋‚˜๋ˆ„๊ธฐ

๋ฐ˜์‘ํ˜•

FastAPI๋กœ ๊ธฐ๋ณธ์ ์ธ API์™€ ๋ฌธ์„œ๋ฅผ ๋งŒ๋“œ๋Š” ์ž‘์—… ๊ทธ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—ฐ๋™ํ•˜๋Š” ๊ฒƒ๊นŒ์ง€ ํ•ด๋ดค๋‹ค๋ฉด ์ด์ œ๋Š” ๋ณธ๊ฒฉ์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด ํ™˜๊ฒฝ์„ ๋‚˜๋ˆ„์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ ํ™˜๊ฒฝ์ด๋ผ๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ผ๊นŒ์š”? ๊ฐœ๋ฐœ ํ™˜๊ฒฝ? ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ด๋ผ๋ฉด ์šฐ๋ฆฌ๋Š” PyCharm์„ ์‚ฌ์šฉํ•˜๊ณ  Python์„ ์„ค์น˜ํ–ˆ๊ณ  ์ด๋ฏธ ๋‹ค ์ž‘์—…ํ•œ ๊ฒƒ์ด ์•„๋‹Œ๊ฐ€์š”?

 

2021/01/16 - [Programming/Python] - [FastAPI] 4. SQLAlchemy + Alembic ์กฐํ•ฉ์„ ์ด์šฉํ•œ Database Migration ๊ฐ€์ด๋“œ

 

[FastAPI] 4. SQLAlchemy + Alembic ์กฐํ•ฉ์„ ์ด์šฉํ•œ Database Migration ๊ฐ€์ด๋“œ

์›น ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ๋ฐฐํฌํ•œ ๋’ค์— ๋ฐ˜๋“œ์‹œ ํ•œ ๋ฒˆ ์ฏค ๋”ฐ๋ฅด๋Š” ์—…๋ฐ์ดํŠธ ์‚ฌํ•ญ์ด ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๋ณดํ†ต ์•„๋ž˜์˜ 3๊ฐ€์ง€๊ฐ€ ๋Œ€ํ‘œ์ ์ž…

blog.neonkid.xyz

์šฐ๋ฆฌ๋Š” ์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ๋‹ค๋ฃจ์—ˆ๊ณ , ํ™˜๊ฒฝ์ด ๋‚˜๋ˆ„์–ด์ง„ ์ƒํƒœ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์–ด๋–ป๊ฒŒ ํšจ์œจ์ ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค.

 

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

 

 

 

 

YAML

์Šคํ”„๋ง์„ ๋‹ค๋ฃฌ ์ €์˜ ์ž…์žฅ์—์„œ YAML์€ ์•„์ฃผ ์ต์ˆ™ํ•˜๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Spring boot๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™˜๊ฒฝ ์„ค์ •์„ properties๋กœ ์ž‘์—…ํ•˜๊ฒŒ ๋˜์ง€๋งŒ ๊ทธ์™€ ๋น„์Šทํ•˜๊ฒŒ YAML ํŒŒ์ผ๋กœ๋„ ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด์ฃ .

 

FastAPI ๋˜ํ•œ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ์„œ๋กœ์˜ ํ™˜๊ฒฝ ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ pyyaml ํŒจํ‚ค์ง€๋ฅผ ์ด์šฉํ•˜๋ฉด YAML ํŒŒ์ผ์„ ์ด์šฉํ•˜์—ฌ ํ™˜๊ฒฝ ์„ค์ •์„ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ๊ณต๊ต๋กญ๊ฒŒ๋„ ๋ชจ๋“  ํ™˜๊ฒฝ ์„ค์ •์€ Spring boot์ฒ˜๋Ÿผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ฒƒ์€ ๊ฑฐ์˜ ์—†๊ณ  ๋Œ€๋ถ€๋ถ„ ๋งŒ๋“ค์–ด ์จ์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

YAML์€ ์ด๋ ‡๊ฒŒ KEY-VALUE ํ˜•ํƒœ๋กœ ์ œ๊ณตํ•˜๋Š” ํŒŒ์ผ์˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด์„œ ๋™์‹œ์— ๋ฐฐ์—ด, ๋ฌธ์ž์—ด, ์ˆซ์žํ˜• ๋“ฑ์˜ ์ž๋ฃŒํ˜•์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ์„ ๊ตฌ์„ฑํ•˜๋Š” ํฌ๋งท์ž…๋‹ˆ๋‹ค.

 

 

 

 

 

PyYAML

Python์—์„œ๋Š” YAML ํŒŒ์ผ์„ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ํŒŒ์‹ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ pyyaml์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ง์ ‘ YAML ํŒŒ์ผ์„ ์ž‘์„ฑํ•ด์„œ ์„ค์ • ํŒŒ์ผ์„ ๊ตฌ์„ฑํ•˜๊ณ  ์ด๋ฅผ Python์—์„œ ๋ณ€์ˆ˜๋กœ ๋ถ€๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜์ฃ .

$ poetry add pyyaml

๋””ํŽœ๋˜์‹œ ๋งค๋‹ˆ์ €๋ฅผ ํ†ตํ•ด pyyaml์„ ์ถ”๊ฐ€/์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๊ณ  ๋‚˜๋ฉด import yaml ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. pyyaml์„ ์„ค์น˜ํ•œ ๋’ค yaml์„ importํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

yaml์—์„œ load ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ์„ ์ฝ์–ด๋“ค์ผ ์ˆ˜ ์žˆ์ง€๋งŒ safe_load ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ์ด์œ ๋Š” ๋งŒ์•ฝ ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋“ฑ์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด Exception์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ , None์„ ๋ฐ˜ํ™˜์‹œํ‚ค๋„๋ก ํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์–ด๋–ป๊ฒŒ ํ•˜๋ƒ์— ๋”ฐ๋ผ์„œ ์–ด๋–ค ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ• ์ง€๋Š” ์—ฌ๋Ÿฌ๋ถ„๋“ค์ด ๊ฒฐ์ •ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

๋˜ํ•œ ๋ชจ๋“  Config๋Š” ํŒŒ์ผ ์™ธ์—์„œ ์ •์ ์œผ๋กœ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ ์™ธ์— ํŒŒ์ด์ฌ ์ฝ”๋“œ์—์„œ ๋ณ€์ˆ˜๋ฅผ ์ž„์˜๋กœ ๊ณ ์น˜์ง€ ์•Š๋„๋ก open ํ•จ์ˆ˜์˜ ๋‘ ๋ฒˆ์งธ ์ธ์ž์— read only ์˜ต์…˜์ธ 'r'์„ ๋„ฃ์–ด์ฃผ๋„๋ก ํ•ฉ์‹œ๋‹ค.

 

๋ถˆ๋Ÿฌ์ง„ ํŒŒ์ผ์€ dict ํ˜•ํƒœ๋กœ ๋ถˆ๋Ÿฌ๋“ค์ด๊ฒŒ ๋˜๋ฉฐ 'conf['${key_name}']' ์œผ๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

Dev, Prod, Test ํ™˜๊ฒฝ ๋‚˜๋ˆ„๊ธฐ

์šฐ๋ฆฌ๊ฐ€ ์œ„์—์„œ ์ž‘์„ฑํ•œ pyyaml ์ฝ”๋“œ๋ฅผ ํ† ๋Œ€๋กœ OS ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๊ฒธํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ™˜๊ฒฝ์„ ๋‚˜๋ˆ„์–ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋จผ์ € ์œ„์—์„œ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์ผ๋ถ€ ์ˆ˜์ •ํ•ด๋ณด๋„๋ก ํ•˜์ฃ .

 

Python์—์„œ ์ œ๊ณตํ•˜๋Š” os ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. OS ํ™˜๊ฒฝ ๋ณ€์ˆ˜์—์„œ APP_ENV์— prod, dev, test๋ฅผ ๋ถ™์—ฌ์ฃผ๋Š” ๊ฒƒ์œผ๋กœ ํ•˜์—ฌ๊ธˆ ํ™˜๊ฒฝ์„ ๋‹ค๋ฅด๊ฒŒ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ตฌํ˜„ํ•ด์ค๋‹ˆ๋‹ค.

 

์ด๋ฅผ ํ† ๋Œ€๋กœ YAML ํŒŒ์ผ ์—ญ์‹œ ๋ฉ”์ธ KEY์— ๊ฐ ํ™˜๊ฒฝ์— ํ•ด๋‹นํ•˜๋Š” ์ด๋ฆ„์„ ๋ถ™์—ฌ์ฃผ๊ณ  ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด OS ํ™˜๊ฒฝ ๋ณ€์ˆ˜์˜ ๋ณ€๋™์— ๋”ฐ๋ผ DB ์ ‘์† ์ฃผ์†Œ ๋“ฑ์˜ ๋ณ€์ˆ˜๊ฐ€ ๋ฐ”๋€Œ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

 

 

 

Test

๊ทธ๋Ÿฌ๋ฉด ์œ„ ์ฝ”๋“œ๊ฐ€ ์ž˜ ๋™์ž‘๋˜๊ณ  ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

main.py์— ๊ฐ„๋‹จํ•˜๊ฒŒ print ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์–ด๋–ป๊ฒŒ ๋ถˆ๋Ÿฌ์˜ค๊ณ  ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๊ธฐ๋ณธ์ ์œผ๋กœ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ 'dev'๋กœ ๋ถˆ๋Ÿฌ์˜ค๋„๋ก ์„ค์ •๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— dev ํ™˜๊ฒฝ์˜ ์„ค์ • ๊ฐ’์ด ์ถœ๋ ฅ๋˜๊ณ  ์žˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ export APP_ENV=prod

๋ณดํ†ต export ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•˜์—ฌ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ...

 

PyCharm์„ ์ด์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด Run Edit Configurations์—์„œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์œ„์™€ ๊ฐ™์ด ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ prod๋กœ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋˜๋ฉด...

 

์œ„์™€ ๊ฐ™์ด ๋‹ค๋ฅธ ๋ณ€์ˆ˜๋ช…์ด ๋ถˆ๋Ÿฌ์ง€๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

์ด์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐ ์ฝ”๋“œ์—์„œ ์—ญํ• ์— ๋งž๋Š” ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๊ณ , ์ด๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ์— ์„ค์ •ํ•˜๋ฉด ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ฐฉ๋ฒ•์€ CI/CD ํ†ตํ•ฉ ์ž‘์—…์— ์—ฌ๋Ÿฌ๋ชจ๋กœ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒ ๊ตฐ์š”.

 

 

 

 

 

๋งˆ์น˜๋ฉฐ...

Pure Python ์ฝ”๋“œ๋งŒ์„ ์ด์šฉํ•ด์„œ๋„ Config ํŒŒ์ผ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์ง€๋งŒ Spring์—์„œ ์‚ฌ์šฉํ–ˆ๋˜ application.yml ํŒŒ์ผ์˜ ์„ค์ • ๋ฐฉ๋ฒ•์ด ์›Œ๋‚™ ์ต์ˆ™ํ•˜๋‹ค๋ณด๋‹ˆ FastAPI์—์„œ๋„ ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์„ ์ฑ„ํƒํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

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

 

๋ณ„๋„์˜ ๋ฏธ๋“ค์›จ์–ด ์„ค์ •์„ ๊ฐœ๋ณ„์ ์œผ๋กœ ์šด์˜์ž์—๊ฒŒ ์œ„์ž„ํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด YAML ํŒŒ์ผ์ด ์•„๋‹Œ Python ์ฝ”๋“œ์—์„œ ์ง์ ‘ os ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ์œ ๋„ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜์˜ ์šด์˜ ์‹œ์Šคํ…œ์—์„œ๋„ ์ง์ ‘ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์…‹ํŒ…ํ•˜์—ฌ ๊ทธ์— ๋งž๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments