4๋งŒ ์ค„์˜ Python ์ฝ”๋“œ๋ฅผ ์œ ํ˜• ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค. 2 ๋ถ€

์˜ค๋Š˜ ์šฐ๋ฆฌ๋Š” Dropbox๊ฐ€ ์ˆ˜๋ฐฑ๋งŒ ์ค„์˜ Python ์ฝ”๋“œ์— ๋Œ€ํ•œ ์œ ํ˜• ์ œ์–ด๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑํ–ˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ž๋ฃŒ ๋ฒˆ์—ญ์˜ ๋‘ ๋ฒˆ์งธ ๋ถ€๋ถ„์„ ๊ฒŒ์‹œํ•ฉ๋‹ˆ๋‹ค.

4๋งŒ ์ค„์˜ Python ์ฝ”๋“œ๋ฅผ ์œ ํ˜• ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค. 2 ๋ถ€

โ†’ XNUMX๋ถ€ ์ฝ๊ธฐ

๊ณต์‹ ์œ ํ˜• ์ง€์›(PEP 484)

์šฐ๋ฆฌ๋Š” Hack Week 2014 ๋™์•ˆ Dropbox์—์„œ mypy์— ๋Œ€ํ•œ ์ฒซ ๋ฒˆ์งธ ์ง„์ง€ํ•œ ์‹คํ—˜์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. Hack Week๋Š” Dropbox๊ฐ€ ์ฃผ์ตœํ•˜๋Š” XNUMX์ฃผ์ผ ์ด๋ฒคํŠธ์ž…๋‹ˆ๋‹ค. ์ด ๊ธฐ๊ฐ„ ๋™์•ˆ ์ง์›๋“ค์€ ์›ํ•˜๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ด๋“  ์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! Dropbox์˜ ๊ฐ€์žฅ ์œ ๋ช…ํ•œ ๊ธฐ์ˆ  ํ”„๋กœ์ ํŠธ ์ค‘ ์ผ๋ถ€๋Š” ์ด์™€ ๊ฐ™์€ ํ–‰์‚ฌ์—์„œ ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์‹คํ—˜์˜ ๊ฒฐ๊ณผ๋กœ ์šฐ๋ฆฌ๋Š” mypy๊ฐ€ ์•„์ง ๋„๋ฆฌ ์‚ฌ์šฉ๋  ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ์ง€๋Š” ์•Š์ง€๋งŒ ์œ ๋งํ•ด ๋ณด์ธ๋‹ค๋Š” ๊ฒฐ๋ก ์„ ๋‚ด๋ ธ์Šต๋‹ˆ๋‹ค.

๋‹น์‹œ์—๋Š” Python ์œ ํ˜• ํžŒํŠธ ์‹œ์Šคํ…œ์„ ํ‘œ์ค€ํ™”ํ•˜๋ ค๋Š” ์•„์ด๋””์–ด๊ฐ€ ๋– ๋Œ์•˜์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋งํ–ˆ๋“ฏ์ด Python 3.0๋ถ€ํ„ฐ ํ•จ์ˆ˜์— ์œ ํ˜• ์ฃผ์„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ ์ด๋Š” ์ •์˜๋œ ๊ตฌ๋ฌธ๊ณผ ์˜๋ฏธ๊ฐ€ ์—†๋Š” ์ž„์˜์˜ ํ‘œํ˜„์‹์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘์— ์ด๋Ÿฌํ•œ ์ฃผ์„์€ ๋Œ€๋ถ€๋ถ„ ๋ฌด์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Hack Week ์ดํ›„ ์šฐ๋ฆฌ๋Š” ์˜๋ฏธ ์ฒด๊ณ„ ํ‘œ์ค€ํ™” ์ž‘์—…์„ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ž‘ํ’ˆ์ด ๋“ฑ์žฅํ•˜๊ฒŒ ๋œ ๊ณ„๊ธฐ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค ํŽฉ 484 (Guido van Rossum, ลukasz Langa์™€ ๋‚˜๋Š” ์ด ๋ฌธ์„œ์— ํ˜‘๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค).

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

๊ฒฐ๊ตญ ์ฑ„ํƒ๋œ ์œ ํ˜• ํžŒํŠธ ๊ตฌ๋ฌธ์€ ๋‹น์‹œ mypy๊ฐ€ ์ง€์›ํ–ˆ๋˜ ๊ฒƒ๊ณผ ๋งค์šฐ ์œ ์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค. PEP 484๋Š” 3.5๋…„ Python 2015์™€ ํ•จ๊ป˜ ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Python์€ ๋” ์ด์ƒ ๋™์ ์œผ๋กœ ์ž…๋ ฅ๋˜๋Š” ์–ธ์–ด๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด ์‚ฌ๊ฑด์„ ํŒŒ์ด์ฌ ์—ญ์‚ฌ์— ์žˆ์–ด์„œ ์ค‘์š”ํ•œ ์ด์ •ํ‘œ๋กœ ์ƒ๊ฐํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์‹œ์ž‘

2015๋…„ ๋ง, Dropbox๋Š” mypy ์ž‘์—…์„ ์œ„ํ•ด XNUMX๋ช…์œผ๋กœ ๊ตฌ์„ฑ๋œ ํŒ€์„ ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๊ท€๋„ ๋ฐ˜ ๋กœ์„ฌ(Guido van Rossum), ๊ทธ๋ ‰ ํ”„๋ผ์ด์Šค(Greg Price), ๋ฐ์ด๋น„๋“œ ํ”ผ์…”(David Fisher)๊ฐ€ ํฌํ•จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ˆœ๊ฐ„๋ถ€ํ„ฐ ์ƒํ™ฉ์€ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ๋ฐœ์ „ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. mypy ์„ฑ์žฅ์˜ ์ฒซ ๋ฒˆ์งธ ์žฅ์• ๋ฌผ์€ ์„ฑ๋Šฅ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์œ„์—์„œ ์•”์‹œํ–ˆ๋“ฏ์ด ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ์—๋Š” mypy ๊ตฌํ˜„์„ C๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ–ˆ์ง€๋งŒ ์ด ์•„์ด๋””์–ด๋Š” ํ˜„์žฌ ๋ชฉ๋ก์—์„œ ์ œ์™ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” mypy์™€ ๊ฐ™์€ ๋„๊ตฌ์— ๋น„ํ•ด ์ถฉ๋ถ„ํžˆ ๋น ๋ฅด์ง€ ์•Š์€ CPython ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์Šคํ…œ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์–ด๋ ค์›€์„ ๊ฒช์—ˆ์Šต๋‹ˆ๋‹ค. (JIT ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•œ ๋Œ€์ฒด Python ๊ตฌํ˜„์ธ PyPy ํ”„๋กœ์ ํŠธ๋„ ์šฐ๋ฆฌ์—๊ฒŒ ๋„์›€์ด ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.)

๋‹คํ–‰์Šค๋Ÿฝ๊ฒŒ๋„ ์ผ๋ถ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ์„ ์ด ์—ฌ๊ธฐ์— ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ตœ์ดˆ์˜ ๊ฐ•๋ ฅํ•œ "๊ฐ€์†๊ธฐ"๋Š” ์ฆ๋ถ„ ๊ฒ€์‚ฌ ๊ตฌํ˜„์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฐœ์„ ์˜ ์ด๋ฉด์— ์žˆ๋Š” ์•„์ด๋””์–ด๋Š” ๊ฐ„๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ „ mypy ์‹คํ–‰ ์ดํ›„ ๋ชจ๋“  ๋ชจ๋“ˆ์˜ ์ข…์†์„ฑ์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ข…์†์„ฑ์„ ์ž‘์—…ํ•˜๋Š” ๋™์•ˆ ์ด์ „ ์‹คํ–‰ ์ค‘์— ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜์ •๋œ ํŒŒ์ผ๊ณผ ์ด์— ์ข…์†๋œ ํŒŒ์ผ์— ๋Œ€ํ•ด์„œ๋งŒ ์œ ํ˜• ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Mypy๋Š” ์กฐ๊ธˆ ๋” ๋‚˜์•„๊ฐ”์Šต๋‹ˆ๋‹ค. ๋ชจ๋“ˆ์˜ ์™ธ๋ถ€ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ mypy๋Š” ์ด ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜จ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์„ ๋‹ค์‹œ ํ™•์ธํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

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

์ด๋Š” Dropbox์—์„œ ์œ ํ˜• ๊ฒ€์‚ฌ๊ฐ€ ๋น ๋ฅด๊ณ  ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ฑ„ํƒ๋œ ์‹œ๊ธฐ์˜€์Šต๋‹ˆ๋‹ค. 2016๋…„ ๋ง๊นŒ์ง€ ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ์œ ํ˜• ์ฃผ์„์ด ํฌํ•จ๋œ ์•ฝ 420000์ค„์˜ Python ์ฝ”๋“œ๋ฅผ ๋ณด์œ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์œ ํ˜• ๊ฒ€์‚ฌ์— ์—ด๊ด‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ ์  ๋” ๋งŽ์€ ๊ฐœ๋ฐœํŒ€์ด Dropbox mypy๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

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

์ƒ์‚ฐ์„ฑ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค!

์ฆ๋ถ„ ๊ฒ€์‚ฌ๋ฅผ ํ†ตํ•ด mypy๊ฐ€ ๋” ๋นจ๋ผ์กŒ์ง€๋งŒ ๋„๊ตฌ๋Š” ์—ฌ์ „ํžˆ ์ถฉ๋ถ„ํžˆ ๋น ๋ฅด์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ์ฆ๋ถ„ ๊ฒ€์‚ฌ๊ฐ€ ์•ฝ XNUMX๋ถ„ ๋™์•ˆ ์ง€์†๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ์ฃผ๊ธฐ์  ์ˆ˜์ž… ๋•Œ๋ฌธ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์•„๋งˆ๋„ Python์œผ๋กœ ์ž‘์„ฑ๋œ ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ๋ฒ ์ด์Šค๋กœ ์ž‘์—…ํ•ด ๋ณธ ์‚ฌ๋žŒ์ด๋ผ๋ฉด ๋†€๋ž„ ์ผ์ด ์•„๋‹ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ˆ˜๋ฐฑ ๊ฐœ์˜ ๋ชจ๋“ˆ ์„ธํŠธ๋ฅผ ๊ฐ–๊ณ  ์žˆ์—ˆ๊ณ , ๊ฐ ๋ชจ๋“ˆ์€ ๋‹ค๋ฅธ ๋ชจ๋“  ๋ชจ๋“ˆ์„ ๊ฐ„์ ‘์ ์œผ๋กœ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค. ๊ฐ€์ ธ์˜ค๊ธฐ ๋ฃจํ”„์˜ ํŒŒ์ผ์ด ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ mypy๋Š” ํ•ด๋‹น ๋ฃจํ”„์˜ ๋ชจ๋“  ํŒŒ์ผ๊ณผ ์ข…์ข… ํ•ด๋‹น ๋ฃจํ”„์—์„œ ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜จ ๋ชจ๋“  ๋ชจ๋“ˆ์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌํ•œ ์•…์ˆœํ™˜ ์ค‘ ํ•˜๋‚˜๋Š” Dropbox์—์„œ ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚จ ์•…๋ช… ๋†’์€ โ€œ์˜์กด์„ฑ ์–ฝํž˜โ€์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ตฌ์กฐ์—๋Š” ์ˆ˜๋ฐฑ ๊ฐœ์˜ ๋ชจ๋“ˆ์ด ํฌํ•จ๋˜์–ด ์žˆ์—ˆ๊ณ  ์ง์ ‘ ๋˜๋Š” ๊ฐ„์ ‘์ ์œผ๋กœ ๋งŽ์€ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋™์•ˆ ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ์—๋„ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ˆœํ™˜ ์ข…์†์„ฑ์„ "ํ’€ ์ˆ˜ ์žˆ๋Š”" ๊ฐ€๋Šฅ์„ฑ์„ ๊ณ ๋ คํ–ˆ์ง€๋งŒ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•  ๋ฆฌ์†Œ์Šค๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์—๊ฒŒ ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ์šฐ๋ฆฌ๋Š” ๋Œ€์•ˆ์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ƒ๊ฐํ•ด ๋ƒˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” "์˜์กด์„ฑ ์—‰ํ‚ด"์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋„ mypy๊ฐ€ ๋น ๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” mypy ๋ฐ๋ชฌ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ๋ชฌ์€ ๋‘ ๊ฐ€์ง€ ํฅ๋ฏธ๋กœ์šด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค. ์ฒซ์งธ, ์ „์ฒด ์ฝ”๋“œ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” mypy๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๊ฐ€์ ธ์˜จ ์ˆ˜์ฒœ ๊ฐœ์˜ ์ข…์†์„ฑ๊ณผ ๊ด€๋ จ๋œ ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•  ํ•„์š”๊ฐ€ ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋‘˜์งธ, ๊ทธ๋Š” ์ž‘์€ ๊ตฌ์กฐ ๋‹จ์œ„ ์ˆ˜์ค€์—์„œ ๊ธฐ๋Šฅ๊ณผ ๋‹ค๋ฅธ ๊ฐœ์ฒด ๊ฐ„์˜ ์ข…์†์„ฑ์„ ์ฃผ์˜ ๊นŠ๊ฒŒ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•จ์ˆ˜๊ฐ€ foo ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋‹ค bar, ๊ทธ๋Ÿฌ๋ฉด ์˜์กด์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค foo ๋ถ€ํ„ฐ bar. ํŒŒ์ผ์ด ๋ณ€๊ฒฝ๋˜๋ฉด ๋ฐ๋ชฌ์€ ๋จผ์ € ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ๋งŒ ๊ฒฉ๋ฆฌํ•˜์—ฌ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ณ€๊ฒฝ๋œ ํ•จ์ˆ˜ ์„œ๋ช…๊ณผ ๊ฐ™์ด ํ•ด๋‹น ํŒŒ์ผ์— ๋Œ€ํ•ด ์™ธ๋ถ€์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค. ๋ฐ๋ชฌ์€ ์ˆ˜์ •๋œ ๊ธฐ๋Šฅ์„ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋‹ค์‹œ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋งŒ ๊ฐ€์ ธ์˜ค๊ธฐ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฒ€์‚ฌํ•ด์•ผ ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค.

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

์ƒ์‚ฐ์„ฑ์ด ๋”์šฑ ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค!

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

์šฐ๋ฆฌ๋Š” mypy์— ๊ด€ํ•œ ์ด์ „ ์•„์ด๋””์–ด ์ค‘ ํ•˜๋‚˜๋กœ ๋Œ์•„๊ฐ€๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, Python ์ฝ”๋“œ๋ฅผ C ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Cython(Python์œผ๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ C ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ์Šคํ…œ)์„ ์‚ฌ์šฉํ•ด ์‹คํ—˜ํ•ด๋„ ๋ˆˆ์— ๋„๋Š” ์†๋„ ํ–ฅ์ƒ์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž์ฒด ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค๋Š” ์•„์ด๋””์–ด๋ฅผ ๋˜์‚ด๋ฆฌ๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. mypy ์ฝ”๋“œ๋ฒ ์ด์Šค(Python์œผ๋กœ ์ž‘์„ฑ๋จ)์—๋Š” ์ด๋ฏธ ํ•„์š”ํ•œ ๋ชจ๋“  ์œ ํ˜• ์ฃผ์„์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์ด๋Ÿฌํ•œ ์ฃผ์„์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์Šคํ…œ ์†๋„๋ฅผ ๋†’์ด๋Š” ๊ฒƒ์ด ๊ฐ€์น˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด ์•„์ด๋””์–ด๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ์‹ ์†ํ•˜๊ฒŒ ํ”„๋กœํ† ํƒ€์ž…์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ๋งˆ์ดํฌ๋กœ ๋ฒค์น˜๋งˆํฌ์—์„œ 10๋ฐฐ ์ด์ƒ์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๋ณด์—ฌ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ์•„์ด๋””์–ด๋Š” Cython์„ ์‚ฌ์šฉํ•˜์—ฌ Python ๋ชจ๋“ˆ์„ C ๋ชจ๋“ˆ๋กœ ์ปดํŒŒ์ผํ•˜๊ณ  ์œ ํ˜• ์ฃผ์„์„ ๋Ÿฐํƒ€์ž„ ์œ ํ˜• ๊ฒ€์‚ฌ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค(์ผ๋ฐ˜์ ์œผ๋กœ ์œ ํ˜• ์ฃผ์„์€ ๋Ÿฐํƒ€์ž„ ์‹œ ๋ฌด์‹œ๋˜๊ณ  ์œ ํ˜• ๊ฒ€์‚ฌ ์‹œ์Šคํ…œ์—์„œ๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค). ์šฐ๋ฆฌ๋Š” ์‹ค์ œ๋กœ Python์˜ mypy ๊ตฌํ˜„์„ ์ •์ ์œผ๋กœ ์ž…๋ ฅ๋˜๋„๋ก ์„ค๊ณ„๋œ ์–ธ์–ด๋กœ ๋ณ€ํ™˜ํ•  ๊ณ„ํš์„ ์„ธ์› ๋Š”๋ฐ, ์ด ์–ธ์–ด๋Š” Python๊ณผ ๋˜‘๊ฐ™์•„ ๋ณด์ด๊ณ  ๋Œ€๋ถ€๋ถ„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. (์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ์–ธ์–ด ๊ฐ„ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์€ mypy ํ”„๋กœ์ ํŠธ์˜ ์ „ํ†ต์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์›๋ž˜ mypy ๊ตฌํ˜„์€ Alore๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ Java์™€ Python์˜ ๊ตฌ๋ฌธ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.)

CPython ํ™•์žฅ API์— ์ง‘์ค‘ํ•˜๋Š” ๊ฒƒ์ด ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์žƒ์ง€ ์•Š๋Š” ํ•ต์‹ฌ์ด์—ˆ์Šต๋‹ˆ๋‹ค. mypy์— ํ•„์š”ํ•œ ๊ฐ€์ƒ ๋จธ์‹ ์ด๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•  ํ•„์š”๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ „์ฒด Python ์ƒํƒœ๊ณ„์™€ ๋ชจ๋“  ๋„๊ตฌ(์˜ˆ: pytest)์— ๊ณ„์† ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ฐœ๋ฐœ ์ค‘์— ํ•ด์„๋œ Python ์ฝ”๋“œ๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋ฉฐ, ์ฝ”๋“œ๊ฐ€ ์ปดํŒŒ์ผ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๋Š” ๋งค์šฐ ๋น ๋ฅธ ํŒจํ„ด์œผ๋กœ ๊ณ„์† ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋งํ•˜์ž๋ฉด ์šฐ๋ฆฌ๋Š” ๋‘ ๊ฐœ์˜ ์˜์ž์— ์•‰์•„ ์ผ์„ ํ›Œ๋ฅญํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์˜€๊ณ  ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ์ข‹์•„ํ–ˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ mypyc๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ์ปดํŒŒ์ผ๋Ÿฌ(์œ ํ˜• ๋ถ„์„์„ ์œ„ํ•œ ํ”„๋ŸฐํŠธ ์—”๋“œ๋กœ mypy๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—)๋Š” ๋งค์šฐ ์„ฑ๊ณต์ ์ธ ํ”„๋กœ์ ํŠธ๋กœ ํŒ๋ช…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ „๋ฐ˜์ ์œผ๋กœ ์šฐ๋ฆฌ๋Š” ์บ์‹ฑ ์—†์ด ๋นˆ๋ฒˆํ•œ mypy ์‹คํ–‰์— ๋Œ€ํ•ด ์•ฝ 4๋ฐฐ์˜ ์†๋„ ํ–ฅ์ƒ์„ ๋‹ฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. mypyc ํ”„๋กœ์ ํŠธ์˜ ํ•ต์‹ฌ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ์—๋Š” Michael Sullivan, Ivan Levkivsky, Hugh Hahn ๋ฐ ๋‚˜๋กœ ๊ตฌ์„ฑ๋œ ์†Œ๊ทœ๋ชจ ํŒ€์ด ์•ฝ 4๊ฐœ์›”์ด ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. ์ด ์ž‘์—…๋Ÿ‰์€ ์˜ˆ๋ฅผ ๋“ค์–ด C++ ๋˜๋Š” Go์—์„œ mypy๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ž‘์—…๋Ÿ‰๋ณด๋‹ค ํ›จ์”ฌ ์ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ๋‹ค์‹œ ์ž‘์„ฑํ•  ๋•Œ๋ณด๋‹ค ํ›จ์”ฌ ์ ์€ ์ˆ˜์˜ ๋ณ€๊ฒฝ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์šฐ๋ฆฌ๋Š” mypyc์„ ๋‹ค๋ฅธ Dropbox ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์ด mypyc์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜๊ณ  ์†๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ๋Š” ์ˆ˜์ค€์œผ๋กœ ๋Œ์–ด์˜ฌ๋ฆด ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž์Šต๋‹ˆ๋‹ค.

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

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

๊ณ„์† ๋  ...

๋…์ž ์—ฌ๋Ÿฌ๋ถ„! mypy ํ”„๋กœ์ ํŠธ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ์•˜์„ ๋•Œ ๊ทธ์— ๋Œ€ํ•œ ์ธ์ƒ์€ ์–ด๋• ๋‚˜์š”?

4๋งŒ ์ค„์˜ Python ์ฝ”๋“œ๋ฅผ ์œ ํ˜• ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค. 2 ๋ถ€
4๋งŒ ์ค„์˜ Python ์ฝ”๋“œ๋ฅผ ์œ ํ˜• ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค. 2 ๋ถ€

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€