이번 편의 목표: 실행 환경을 분리하고 계산 결과와 실행 상태를 확인합니다.
문법을 배운 뒤에도 “어제 되던 코드가 왜 안 되지?”라는 문제가 남습니다. 패키지 설치 위치가 달라졌거나, 수정하면서 계산 규칙을 깨뜨렸거나, 실패한 지점을 찾지 못할 수 있습니다. 이번 편에서는 환경·검증·기록이라는 세 가지 준비를 간단히 정리합니다.
가상환경은 프로젝트별 도구 상자
이 연재의 예제는 표준 라이브러리만 사용하므로 추가 패키지를 설치하지 않아도 됩니다. 그래도 다음 프로젝트를 위해 가상환경 생성법을 알아 두면 좋습니다. 프로젝트 폴더에서 실행합니다.
Windows:
py -m venv .venv .venv\Scripts\python.exe --version .venv\Scripts\python.exe -m pip --version
macOS·Ubuntu:
python3 -m venv .venv .venv/bin/python --version .venv/bin/python -m pip --version
활성화하지 않고 환경 안의 실행 파일을 직접 사용하면 어떤 파이썬을 쓰는지 명확합니다. Ubuntu에서 `venv` 지원이 없다는 메시지가 나오면 운영체제에서 해당 Python 버전에 맞는 venv 패키지를 준비해야 할 수 있습니다.
외부 패키지를 설치할 때도 같은 실행 파일로 `-m pip install 패키지명`을 사용합니다. 단독 `pip` 명령은 다른 파이썬을 가리킬 수 있습니다. 인터넷이 없는 환경에서는 미리 준비한 호환 패키지와 의존성이 필요합니다. 가상환경 자체가 패키지를 외부에서 가져오는 기능을 대신하지는 않습니다.
기대 결과를 코드로 남기는 테스트
import logging
import unittest
def calculate_total(price, quantity):
if price < 0 or quantity < 0:
raise ValueError("음수는 허용하지 않습니다.")
return price * quantity
class TotalTests(unittest.TestCase):
def test_normal(self):
self.assertEqual(calculate_total(4500, 2), 9000)
def test_zero(self):
self.assertEqual(calculate_total(4500, 0), 0)
def test_negative(self):
with self.assertRaises(ValueError):
calculate_total(-1, 2)
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s")
logging.info("총액 계산 테스트를 시작합니다.")
unittest.main()실행하면 테스트 3개가 통과하고 `OK`가 나타납니다. 실행 시간 등 주변 표시는 달라질 수 있습니다. 정상 입력만 아니라 0과 음수도 확인합니다. 함수 이름이나 코드를 그대로 베낀 검사가 아니라 프로그램의 약속을 검증하는 것이 목적입니다.
print와 로그의 역할
사용자에게 보여 줄 결과에는 `print()`가 간단합니다. 실행 상태나 진단 정보에는 `logging`이 유용합니다. `INFO`, `WARNING`, `ERROR`처럼 수준을 나누고 형식을 통일할 수 있습니다. 예제에서는 파일을 만들지 않고 기본 스트림으로 로그를 보냅니다.
로그에는 비밀번호나 개인정보를 무심코 넣지 않습니다. 예외 메시지에 실제 입력값을 전부 포함할지도 판단해야 합니다. 마지막 프로젝트의 테스트는 임시 폴더에서 실행해 실제 지출 파일을 건드리지 않도록 구성합니다.
직접 해 보기
`calculate_total(0, 3)`이 0인지 확인하는 테스트를 추가해 보세요.
해설
`TotalTests` 클래스 안에 다음 메서드를 추가하면 됩니다. 아래 조각은 클래스 내부에 넣는 코드입니다.
def test_zero_price(self): self.assertEqual(calculate_total(0, 3), 0)
다시 실행해 테스트 수가 4개가 되는지 확인하세요. 이후 가격 0을 허용하지 않기로 규칙을 바꾸면 함수와 테스트의 기대도 함께 바꿔야 합니다.
COMMENTS
댓글 0
이 글에 대한 의견이나 질문을 남겨 주세요.
등록된 댓글이 없습니다.