컨텐츠 바로가기

09.28 (토)

"형식 힌트부터 가상환경까지" 현대 파이썬 코딩의 4가지 핵심

댓글 첫 댓글을 작성해보세요
주소복사가 완료되었습니다
파이썬은 2021년에 30주년을 맞이했지만 언어의 폭발적인 도입과 성장, 미래지향적 개발은 여전히 비교적 최근의 일이라고 할 수 있다. 파이썬의 많은 기능이 처음 등장 이후 바뀌지 않았지만 해가 지나고 새로운 에디션이 나올 때마다 이러한 발전을 활용하는 새로운 작업 방법과 새로운 라이브러리가 등장한다.

그래서 파이썬에는 예전 방식도 있고 새로운 방식도 있다. 당연히 편리한 최신 기능을 사용하여 파이썬을 다루는 방법을 익히는 것이 좋다. 이 기사에서는 2024년의 현대적 파이썬, 즉 파이썬의 최신 관용구와 개념, 기능을 사용하는 소프트웨어를 작성하기 위해 이해해야 하는 핵심 개념을 정리했다.
ITWorld

ⓒ Getty Images Bank

<이미지를 클릭하시면 크게 보실 수 있습니다>


파이썬의 형식 힌트

파이썬에 최근 도입된 형식 힌트 구문은 린터와 서드파티 코드 품질 툴이 런타임 전에 코드를 분석하고 발생 가능한 오류를 사전에 감지할 수 있게 해준다. 다른 사람들과 공유할 파이썬 코드를 많이 만들수록 만드는 본인이나 다른 사람들 모두 형식 힌트 사용의 혜택을 얻을 가능성도 커진다.

파이썬은 후속 버전이 나올 때마다 더 정교하고 강력한 형식 주석을 제공한다. 단기적으로 형식 주석 사용법을 익히는 습관을 들이면 형식 힌트의 새로운 혁신이 나올 때 더 잘 활용할 수 있게 된다.

형식 힌트는 필수가 아니라 ‘선택’임을 기억하는 것이 중요하다. 모든 프로젝트에서 형식 힌트가 필요하지는 않다. 형식 힌트를 사용해서 규모가 큰 프로젝트를 더 쉽게 이해할 수 있도록 만들 수 있지만 간단한 50줄짜리 스크립트라면 생략해도 무방하다. 또한 형식 힌트는 런타임에 적용되지 않지만 파이댄틱(Pydantic)을 사용하면 가능하다. FastAPI를 포함해서 널리 사용되는 파이썬 프로젝트의 상당수가 파이댄틱을 폭넓게 사용한다.

파이썬 가상 환경과 패키지 관리

간단한 프로젝트와 까다롭지 않은 개발 작업에서는 파이썬에 내장된 venv 툴을 사용해 프로젝트와 프로젝트의 요구사항을 분리할 수 있다. 그러나 파이썬 툴의 최근 발전 덕분에 다음과 같은 더 많은 옵션이 제공된다.
  • Pyenv : 다양한 프로젝트 요구사항을 충족하기 위해 여러 버전의 파이썬을 설치한 상태로 유지해야 한다면 Pyenv를 통해 전역으로 또는 프로젝트별로 버전 사이를 전환할 수 있다. 프로젝트별 가상 환경의 컨텍스트를 벗어나 명령줄에서 다양한 파이썬 에디션으로 작업하는 경우가 많은 경우 유용하다. 참고로 윈도우는 공식적으로는 지원되지 않지만 비공식 윈도우 이식 버전이 있다.
  • Pipenv : "인간을 위한 파이썬 개발 워크플로우"를 표방하는 Pipenv는 가상 환경과 프로젝트의 모든 종속 항목을 관리하기 위한 용도로 개발됐다. 또한 종속 항목의 결정적(deterministic) 속성을 보장한다. 즉, 원하는 특정 버전을 얻고 요청한 조합으로 작동한다. 다만 Pipenv는 어떤 형태로든 패키징과는 맞지 않으므로 최종적으로 PyPI에 업로드하거나 다른 사람과 공유할 프로젝트에는 적합하지 않다.
  • 포에트리(Poetry) : Pipenv의 툴셋을 기반으로 확장된 포에트리는 프로젝트와 요구사항을 관리하고 프로젝트를 PyPI에 쉽게 배포할 수 있게 해준다. 또한 프로젝트 디렉터리와 별도로 가상 환경을 관리해준다.
  • PDM : 파이썬 개발 마스터(Python Development Master)의 줄임말인 PDM은 이 분야의 최신 프로젝트다. 포에트리, Pipenv와 마찬가지로 PDM도 프로젝트 설정, 종속 항목 관리, 배포 아티팩트 빌드를 위한 단일 인터페이스를 제공한다. 또한 패키지를 프로젝트에 로컬로 저장하기 위해 PEP 582 표준을 사용하므로 프로젝트별 가상 환경을 만들 필요가 없다. 다만 비교적 새로운 툴인 만큼 프로덕션에 도입하기에 앞서 잘 작동하는지 확인해야 한다.
  • 해치(Hatch) : 해치 프로젝트는 프로젝트 설정 및 관리를 처리할 뿐만 아니라 빌드 시스템, PyPI에서 재배포하기 위한 프로젝트 패키징 툴, 테스트 처리 및 그 외의 많은 유용한 기능을 제공한다.
  • uv : 실험적인 uv 프로젝트는 러프(ruff) 파이썬 린팅 툴을 만든 사람들이 만들었다. pup, venv와 그 외의 여러 명령줄 파이썬 툴을 동시에 대체하는 것이 목표다. 러프와 마찬가지로 빠른 속도를 위해 러스트로 작성됐으며 상당수 명령이 pip를 비롯해 uv가 대체하는 다른 툴의 명령과 비슷하므로 비교적 쉽게 배울 수 있다.

팀 환경에서 사용되거나 예를 들어 PyPI를 통해 다른 사람들에게 배포한 목적으로 새 프로젝트를 만드는 경우 요구사항 및 프로젝트 구성에 최신 pyproject.toml 형식, 그리고 이와 함께 사용되는 프로젝트 레이아웃을 사용해야 한다. 이전의 requirements.txt 파일을 pyproject.toml과 나란히 사용할 수도 있지만 후자가 더 폭넓은 사용 사례를 처리하고 프로젝트의 상위 호환성도 확보할 수 있다.

새로운 파이썬 구문

파이썬이 발전하면서 언어 자체에 많은 새로운 기능이 추가됐다. 지난 몇 번의 파이썬 버전에서는 더 강력하고 간결한 프로그래밍을 위한 유용한 구문 구조가 추가됐다. 필수는 아니지만 새로운 써드 파티 모듈에서 이를 사용할 수 있으므로 대략이라도 알아두는 것이 좋다.

최근에 추가된 구문 중에서 특히 주목할 만한 세 가지는 다음과 같다.

패턴 매칭
최근 파이썬 3.10에 추가된 가장 눈에 띄는 기능은 구조적 패턴 매칭이다. 종종 "파이썬을 위한 switch/case"라고도 하지만 그 이상이다. 구조적 패턴 매칭을 사용하면 객체의 내용 또는 구조를 기반으로 제어 흐름 결정을 내릴 수 있다. 간단히 말해, 값이 아니라 형식 또는 형식의 모양(예를 들어 int와 string이 있는 목록)을 기반으로 매칭하는 방법이다.

'바다코끼리 연산자'
모양(:=)으로 인해 바다코끼리라는 이름이 붙은 이 연산자는 파이썬 3.8에 추가됐으며 이를 통해 한 단계로 변수에 값을 할당하고 이 변수에 테스트를 적용하는 할당 식이 도입됐다. 예를 들어 결과를 보존하면서 함수의 반환 값을 확인하는 등 일반적인 많은 상황에서 코드의 장황함을 줄일 수 있다.

위치 전용 매개변수
최근에 추가된 소소하지만 유용한 파이썬 구문은 위치 전용 매개변수다. 어느 함수 매개변수를 키워드 인수가 아닌 위치 매개변수로 지정해야 하는지를 지정할 수 있게 해준다. 명확성을 높이고 코드베이스의 향후 개발을 용이하게 하기 위한 것으로, 이는 파이썬의 다른 많은 새로운 기능이 초점을 맞추고 있는 목표이기도 하다.

파이썬 테스트

코드베이스에 대한 테스트 작성은 매일 치실을 사용하는 것과 같다. 좋다는 것은 모두가 알지만 실천하는 사람은 극소수다. 최신 파이썬 코드베이스에는 당연히 테스트 모음이 있어야 하며, 현재 나와 있는 테스트용 툴을 사용하면 쉽게 테스트 모음을 만들 수 있다.

파이썬에는 내장된 자체 테스트 프레임워크인 unittest가 있다. 기본 옵션으로 나쁘지는 않지만 설계와 동작 모두 구식이다. 파이테스트(Pytest)는 이를 대체하는 프레임워크로 부상했다. 더 유연하고(subset에 국한되지 않고 코드의 어느 부분에서나 테스트를 선언할 수 있음) 상용구를 써야 하는 경우도 훨씬 더 적다. 또한 파이테스트에는 기능 확장을 위한 애드온이 풍부하다(예를 들어 비동기 코드 테스트).

테스트의 다른 중요한 부가 요소는 테스트가 실제로 코드베이스의 얼마나 많은 부분을 커버하는지를 결정하는 코드 커버리지다. 이름 그대로 커버리지(Coverage) 모듈이 사용되며, 파이테스트에는 커버리지 모듈을 사용하기 위한 플러그인도 제공된다.
editor@itworld.co.kr

Serdar Yegulalp editor@itworld.co.kr
저작권자 한국IDG & ITWorld, 무단 전재 및 재배포 금지
기사가 속한 카테고리는 언론사가 분류합니다.
언론사는 한 기사를 두 개 이상의 카테고리로 분류할 수 있습니다.