<aside>
</aside>
지난 시간에 poetry add를 실행했더니 poetry.lock이라는 낯선 파일이 생겼죠? 오늘은 이 파일이 왜 Poetry의 핵심이자, "제 컴퓨터에선 됐는데요?"라는 말을 영원히 추방시켜 줄 마법의 열쇠인지 알아볼 거예요. pyproject.toml과 poetry.lock 파일의 역할을 명확히 구분하고, '결정론적 설치'가 무엇인지 확실하게 이해해 봅시다!
pyproject.toml과 poetry.lock 파일의 역할 차이를 명확하게 설명할 수 있습니다.poetry.lock 파일을 사용하여 프로젝트 환경을 100% 동일하게 복제(재현)할 수 있습니다.poetry install과 poetry sync의 차이를 이해합니다.이번 챕터는 새로운 코드를 작성하지 않아요. 기존 프로젝트 구조와 파일들을 그대로 사용해서 Poetry의 동작 원리를 탐구하는 데 집중합니다. 특히 poetry.lock 파일의 내용을 유심히 살펴보세요!
todo_api/
├── .venv/
├── poetry.lock <-- 오늘의 주인공!
├── pyproject.toml <-- lock 파일의 설계도
├── README.md
├── src/
│ └── todo_api/
│ ├── __init__.py
│ └── main.py
└── tests/
└── __init__.py
pyproject.toml vs poetry.lock : 설계도와 시공 계획서두 파일의 관계를 건물 짓는 것에 비유하면 이해하기 쉬워요.
pyproject.toml (설계도 📝): "벽은 >=0.111,<1.0 규격의 벽돌을 쓰고…"처럼, 우리가 원하는 의존성의 버전 범위를 추상적으로 정의하는 파일입니다. (PEP 508 문자열 형식) (Poetry)poetry.lock (시공 계획서 🔩): "벽에는 fastapi 0.111.0 버전, pydantic 2.x의 특정 버전…"처럼, 설치할 모든 패키지(전이 의존성 포함)의 정확한 버전과 파일 해시까지 기록한 파일입니다. 이 값들은 metadata.content-hash로 pyproject.toml과의 일치 여부도 검증돼요. (GitHub)poetry.lock 파일이 있기 때문에, 1년 뒤에 다른 컴퓨터에서 프로젝트를 설치해도 시공 계획서 그대로, 정확히 동일한 버전의 패키지들로 환경이 구성되는 '결정론적 설치'가 가능한 것이죠! (Poetry)