구글이 매일 쓰는 C++ 유틸리티로 표준 라이브러리의 빈틈을 메우는 방법
C++ 표준 라이브러리에 없는 기능이나 특수한 상황에 필요한 대안을 코드에 바로 넣을 수 있습니다. 구글 내부에서 광범위하게 테스트되고 매일 사용된 코드를 모아 공개한 것이므로, 복잡한 시스템에서 안정적으로 동작하는 도구를 원할 때 바로 꺼내 쓸 수 있습니다. 이는 표준 라이브러리를 대체하는 것이 아니라, 표준이 다루지 못하는 부분을 보완하는 보조 도구입니다.
구글 내부 코드에서 나온 실전 도구
Abseil은 구글의 C++ 코드베이스에서 수집된 오픈소스 컬렉션입니다. C++17 표준에 부합하며, 표준 라이브러리를 확장하는 것을 목표로 합니다. 표준에 없는 조각을 채워주거나, 구글이 사용하면서 발견한 특수한 요구사항에 맞는 대안을 제공합니다. 표준 라이브러리의 경쟁자가 아니라, 커뮤니티 전체가 활용할 수 있는 자원으로 공유된 것입니다. 모든 코드는 광범위하게 테스트되어 구글의 일상적인 개발 환경에서 매일 사용되고 있습니다.
주요 기능 구성 요소
라이브러리는 여러 하위 컴포넌트로 나뉘어 있어 필요한 부분만 선택적으로 사용할 수 있습니다.
- 컨테이너 및 알고리즘 STL 스타일의 추가 컨테이너와
algorithm라이브러리의 확장 기능을 제공합니다. 특히 'Swiss table' 기반의 unordered 컨테이너가 포함되어 있습니다. - 동기화 및 메모리 관리
absl::Mutex와 같은 동시성 원시 요소와 C++<memory>라이브러리를 보완하는 메모리 관리 시설을 포함합니다. - 오류 처리 및 로깅
absl::Status와absl::StatusOr<T>를 통한 오류 처리 추상화와,LOG및CHECK매크로를 활용한 로깅 기능을 제공합니다. - 문자열 및 시간 처리 다양한 문자열 유틸리티와 시간대 형식화, 파싱을 포함한 시간 계산 추상화를 지원합니다.
빌드 시스템과 지원 범위
공식 빌드 시스템은 Bazel과 CMake입니다. 빠른 시작을 위해 개발 환경 설정부터 테스트 실행까지 안내하는 Quickstart 문서를 참고해야 합니다. 지원되는 컴파일러, 플랫폼, 빌드 도구의 버전은 구글의 Foundational C++ Support Policy를 따릅니다. 최신 커밋을 자주 업데이트하는 'live-at-head' 방식을 권장하지만, 심각한 버그 수정을 백포트하는 장기 지원(LTS) 릴리스도 제공합니다.
도입 전 확인 사항
Abseil은 Apache 라이선스로 배포되며, C++17 표준을 준수합니다. 표준 라이브러리를 완전히 대체하려는 의도가 아니므로, 기존 프로젝트에 추가할 때 표준과의 상호작용을 고려해야 합니다. 구글의 지원 정책을 따르므로, 사용 중인 컴파일러와 플랫폼이 지원 목록에 포함되어 있는지 반드시 점검해야 합니다.