밥 벨더보스: 하나의 코어, 두 개의 인터페이스, 재작성 없음
Ask the Canon의 저자는 기능 코어와 얇은 어댑터 접근 방식을 따라, 먼저 핵심 기능을 구축한 다음 인터페이스를 추가하여 애플리케이션을 만들었습니다. 코어는 embed, load_library, search_passages, reflow를 포함한 몇 개의 순수 함수로 구성되며, 이는 명령줄 인터페이스와 웹 애플리케이션 모두에서 사용됩니다. load_library 함수는 호출 비용이 저렴하지 않으므로, 저자는 성능 향상을 위해 캐싱을 사용했으며, cache 데코레이터는 첫 번째 호출을 딕셔너리 조회로 전환합니다. 첫 번째 방문자가 라이브러리 로딩 오버헤드를 부담하지 않도록, 저자는 FastAPI의 lifespan을 사용하여 첫 번째 요청 전에 라이브러리를 미리 워밍업하고 모델을 RAM으로 로드했습니다. 저자는 또한 sentence-transformers 모델을 실제로 필요할 때까지 로딩을 지연시키기 위해 지연 로딩을 사용했습니다. 애플리케이션의 디자인은 클래스가 필요 없는 순수 데이터 대신 함수를 사용하며, 코어 함수는 새로운 인터페이스에서 쉽게 재사용할 수 있습니다. 저자는 프로토타입에서 프로덕션으로 전환할 때 애플리케이션 구축에 있어 엔지니어링 판단의 중요성을 강조합니다. 애플리케이션의 아키텍처는 핵심 기능과 인터페이스 간의 명확한 분리를 통해 유연하고 확장 가능하도록 설계되었습니다. 저자는 향후 게시물에서 애플리케이션 결과를 개선하기 위한 후처리 트릭에 대해 논의할 계획입니다. 캐싱, 지연 로딩, 사전 워밍업의 사용은 모두 애플리케이션의 성능과 효율성에 기여합니다.