본문 바로가기
프로그래밍

Dependency Locking과 Pypoetry

by W_log 2023. 10. 24.

파이썬을 활용해서 프로젝트 같은 것을 세팅해서 협업할 때 conda, poetry 등을 쓰지만, 나는 주로 Pypoetry를 사용한다.

처음에 배울 때는 단순 쓰면 된다 하고 구글링하면서 어찌저찌 배웠었는데 이런 것들을 배울 때마다 누군가 가르쳐주는대로 바로바로 쓰는 것이 아니라 이게 정말 왜 필요한지 스스로 찾아보고 공부하는 것이 진짜 중요한 것 같다. 

 

나도 이번에 다시 쓰게 되면서 한번 더 정리해보려고 한다.

 

Dependency Locking

블로그의 여러 코드를 복붙하고 돌려보면 종종 안되는 경우가 있다. 파이썬 처음 배울 때 가장 많이 해보는게 크롤링인데 이를 예시로 들어보자

 

Selenium에서 이제 CSS나 여러 요소들을 선택하는 코드가 원래는 아래와 같다.

driver.find_element_by_css_selector('#id')

 

하지만 업데이트 된 코드는 저렇게 찾지 않고 다름과 같이 찾는다.

driver.find_element(By.CSS_SELECTOR, "#id")

 

블로그를 작성하는 당시에는 1번째 코드가 맞겠지만 여러 라이브러리가 업데이트되고 나서는 저 코드를 그대로 쓰면 안돌아간다.

이렇게 블로그 게시자가 부지런하지 않고서야 대부분은 라이브러리 업데이트에 맞춰져서 블로그 게시글은 업데이트되지 않는다.

 

블로그 정도야 찾는 사람이 좀만 더 검색해보면 최신의 기록을 확인할 수 있다.

 

하지만, 이게 실제 프로그램이라면 어떨까? 

프로그래밍의 대부분은 누군가 만들어준 라이브러리를 조합해서 원하는 목적을 달성하는 코드를 작성하는 것이 보통이다.

 

하지만 내가 어떤 라이브러리를 사용하게 된다면 이제 그 라이브러리에 대한 책임 역시 그 코드를 작성한 사람인 내가 질 수밖에 없다.

 

여기에서 이제 Dependency Locking이라는 개념이 발생하게 된다.

 

 

프로그램을 작성할 당시의 라이브러리 버전을 유지한채로 코드가 돌아가게 만들어준다면, 그 라이브러리 관리자가 버전을 업데이트 하더라도 그 코드는 문제 없이 돌아가게 해주는 것이다.

 

이것이 각 라이브러리의 의존성을 "Lock"한다고 해서 Dependency Locking이라고 한다.

 

 

Poetry

나는 파이썬에서는 PyPoetry를 사용한다.

 

설치 방식은 brew를 다운로드 받은 후에, 이 URL을 참고해서 코드를 실행하면 된다.

$brew install poetry

 

Poetry를 활용해서 프로젝트를 하게 되면 장점은 아래와 같다.

 

  • 일관성 유지: 정확한 패키지 버전을 사용하면 모든 개발자 및 배포 환경에서 동일한 라이브러리 조합과 버전을 사용하게 된다. 일관된 결과를 얻을 수 있다는 장점이 있다.
  • 안정성 보장: 패키지 개발자들은 새로운 기능 추가, 버그 수정 등을 위해 지속적으로 패키지를 업데이트해서 발생할 수 있는 호환성 문제를 위에서 말한 것처럼 버전을 유지할 수 있게 해줘서 문제를 해결할 수 있다.

  • 빌드 및 배포 성능 개선: 의존성 잠금 파일(poetry.lock 등)은 필요한 패키지만 다운로드하여 설치하기 때문에 전체 종속성 트리 검색 시간과 대역 폭 소모가 줄어든다고 한다.(이건 검색하다가 나온건데, 전체적으로 필요한 패키지만 사용할 수 있게 lock파일에 정리되어 있어서 내부적으로 연산시간을 줄여준다고 이해했다.)

 

Poetry 사용 방법 자체는 구글링하면 굉장히 많이 나와서 따로 다루지는 않으려 한다.

 

잘 정리해둔 블로그