"한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬 받아 작성된 서평입니다."

잘 되는 머신러닝 팀엔 이유가 있다.
딥러닝 오픈소스를 설치해서 사용하면 안되는 경우가 많다.
특정 cuda 에 특정 패키지 버전에, ...
그래서 그런지 의존성을 관리하는 것에 대해서도 작성되어 있다.
의존성 관리는 단순히 머신런닝 프로젝트 이외에도 다양하게 사용할 수 있으므로 유심히 읽어보았다.

의존성 관리 실패
가끔 운용환경과 개발환경 사이에, CPU 칩과 명령어 집합을 사용해야할 때가 있다.
ex. AMD64, AARCH64, ARM64, ...
나는 Dockerfile 내부에 각 컴파일러 등을 설치했지만, 책에서는 buildx 도구를 활용하면 기다양한 아키텍처 이미지를 생성할 수 있게 해준다.

수준별 의존성 분리
어플리케이션 수준의 의존성 관리에서, 책에서는 poety 를 소개한다.
- 의존성 고정
- 자동으로 pyproject.toml 을 업데이트
- 운용과 개발 의존성을 명확하게 정의.
- 패키징 및 배포의 유용성
그러나, 요즘은 uv 를 선호하는 사람이 더 많아지는 듯 하다.
빠르고, 간단하고 표준이되고 있다.
개인적으로 uv 를 썻을 때, 설정 관련되서 업데이트 해야하는 부분들이 보이긴 했다.
그러나 현재 많은 오픈소스(빅테크 포함)에서 많이 사용되고 있으므로 성숙도가 빠르게 높아질 것으로 보인다.



의존성 관리는 각 업무를 분류하게 하고, 분류된 모델은 일종의 테스트 단위가 되어 자동화 될 수 있다.
이런 흐름은 의존성을 고려하다보면,
각 Task 를 정의하게 되고,
분류된 각 Task 는 하나의 작업단위로써, 테스트 가능하게 된다.
개별 테스트 가능성은 전체 파이프라인을 자동화시키고,
전체적인 효율을 엄청나게 향상시킨다.
전체적으로 책이 말하고자 하는 것은,
동작하는 코드의 품질을 유지하도록 하는 방법을 말하고자 하는 것 같다.
- 누구나 빠르게 설정하고 동작시켜봄으로써, 빠르게 기여하게 할 수 있도록 하기.
- 알아보기 쉬운 테스트를 구축함으로써, 사이드이펙트를 사전에 차단하기
- 자동화(ex. 테스트) 전환을 통한 품질 향상하기.
- 개발에 IDE 의 활용하여, 인지부하와 실수 줄이기
- 효율적으로 커뮤니케이션하여 하나의 팀 되기.
- ...
"개발 단계를 넘어, 어떻게 코드를 유지보수할 수 있을까?" 에 대한 부분은 많은 사람들이 놓치고 있는 부분이라고 생각한다.
무엇을 만드는 것에만 너무 초첨을 맞추기보다는, 그 다음 단계인 유지보수를 생각해보는 시간이 많아지길 바란다.
나는 소프트웨어의 철학이 유지보수를 고려할 때, 더 깊은 생각을 하게 만든다고 생각한다.