패키지 매니저를 좌절시키는 꿀팁 대방출!
발표자는 패키지 매니저를 괴롭히는 방법을 소개하며, 소프트웨어 설치 및 사용을 어렵게 만드는 전략을 제시함
프로젝트 이름, 용어, 코드 구조, 문서화 등 다양한 측면에서 패키지 매니저를 혼란시키는 구체적인 기술을 설명함
C++과 같은 난해한 언어 사용, 컴파일러의 오류 활용 등 실질적인 예시를 통해 이해를 돕고, 오픈 소스 생태계에서의 전략적 접근을 강조함
발표자는 AlphaFold의 설치 과정을 예시로 들며, Docker, NVIDIA Container Toolkit, Git clone 등 복잡한 단계를 통해 패키지 매니저를 좌절시키는 방법을 제시함
패키지 매니저를 위한 첫 번째 방어선: 이름 짓기
발표자는 패키지 매니저를 괴롭히기 위한 첫 번째 단계로 프로젝트 이름 짓기를 제시하며, 검색을 어렵게 만드는 이름을 사용할 것을 권장함. Rust, C++과 같은 일반적인 단어를 사용하거나, 특수 문자, 유니코드 문자를 활용하여 검색을 방해하는 전략을 소개함. 또한, 프로젝트의 실제 기능과 전혀 관련 없는 이름을 사용하여 혼란을 유발하는 방법을 강조함.
혼란을 가중시키는 용어와 코드 구조
발표자는 자신만의 용어를 만들고, 표준 용어의 의미를 변경하여 패키지 매니저를 혼란시키는 방법을 설명함. Crates, Modules와 같은 용어를 독자적으로 정의하고, 코드 구조를 복잡하게 구성하여 이해를 어렵게 만드는 전략을 제시함. 또한, 소스 코드 내의 파일 위치를 예측 불가능하게 배치하여 패키지 매니저의 작업을 더욱 어렵게 만들 것을 강조함.
문서화의 함정: 최소한의 문서화와 최신 정보의 부재
발표자는 문서화의 중요성을 인정하면서도, 최소한의 문서화, 불완전한 정보, 오래된 정보를 제공하여 패키지 매니저를 괴롭힐 수 있다고 설명함. 혼란스러운 용어 사용, 긴 설명, 여러 위치에 분산된 문서를 통해 문서의 가독성을 떨어뜨리고, 연구 논문 형태의 문서를 활용하여 검색을 어렵게 만드는 전략을 제시함. 또한, 소스 코드 내의 주석만으로 문서화를 대체하는 방법을 소개함.
빌드 도구와 의존성 관리의 역설
발표자는 Cmake, Bazel과 같은 빌드 도구를 사용하여 패키지 매니저를 괴롭히는 방법을 설명하며, 다양한 빌드 도구를 혼합하여 사용할 것을 권장함. 또한, 빌드 도구 자체의 의존성을 늘리고, 런타임 의존성을 추가하여 설치 과정을 복잡하게 만드는 전략을 제시함. TensorFlow의 Bazel 설정을 예시로 들며, GCC 대신 Clang 사용을 권장하는 등 구체적인 팁을 제공함.
테스트와 버전 관리의 함정
발표자는 테스트를 어렵게 만들고, 버전 관리를 혼란스럽게 하여 패키지 매니저를 괴롭히는 방법을 소개함. 테스트 실행 시간을 늘리고, 플래키 테스트를 활용하여 패키지 매니저의 작업을 방해하며, 테스트 도구 자체의 의존성을 추가하여 설치 과정을 복잡하게 만드는 전략을 제시함. 또한, 의미론적 버전 관리를 따르지 않고, 릴리스 시마다 브레이킹 체인지를 적용하여 패키지 매니저를 혼란시키는 방법을 강조함.
기타 전략: 컴파일러, 환경 변수, 그리고 잊혀진 기술
발표자는 컴파일러의 오류를 활용하고, 환경 변수를 숨겨 패키지 매니저를 괴롭히는 방법을 소개함. C++ 컴파일러의 오류 메시지를 활용하여 혼란을 유발하고, 환경 변수를 프로젝트 이름과 다른 접두사로 설정하여 검색을 어렵게 만드는 전략을 제시함. 또한, FTP 서버, 구형 버전 관리 시스템과 같은 잊혀진 기술을 활용하여 패키지 매니저의 작업을 더욱 어렵게 만들 것을 강조함.