0Pricing
C++ Academy · 강의

API 버전 관리와 ABI 안정성

시맨틱 버전 관리를 계획하고 릴리스 간 ABI 안정성을 보호합니다.

API 버전 관리와 ABI 안정성은(는) CoddyKit의 무료 C++ Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C++ Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

서로 다른 두 가지 호환성

고려해야 할 호환성은 두 가지입니다:

  • API 호환성 — N 버전에 맞게 컴파일되는 소스 코드가 N+1 버전에 대해서도 컴파일됨
  • ABI 호환성 — N 버전에 맞게 컴파일된 바이너리가 다시 컴파일하지 않아도 N+1 버전과 함께 작동함

ABI가 중요한 이유

ABI 호환성이 있으면 종속 프로그램을 다시 컴파일하지 않고도 공유 라이브러리를 업그레이드할 수 있습니다. 배포판, 플러그인, 장기간 실행되는 애플리케이션에 매우 중요합니다.

ABI를 깨뜨리는 변경

겉보기에는 무해한 많은 변경이 ABI를 깨뜨립니다:

  • 데이터 멤버 추가, 제거 또는 순서 변경
  • 가상 함수 추가 또는 제거
  • 상속 변경
  • 템플릿 매개변수 변경
  • 인라인 함수 변경(경우에 따라)

시맨틱 버전 관리(SemVer)

MAJOR.MINOR.PATCH 버전 번호를 통해 호환성을 전달하십시오:

  • MAJOR — 호환성을 깨뜨리는 변경
  • MINOR — 이전 버전과 호환되는 새 기능
  • PATCH — 수정 사항

헤더의 버전 관리

헤더에 버전 매크로를 제공하십시오.

#define MYLIB_VERSION_MAJOR 2
#define MYLIB_VERSION_MINOR 1
#define MYLIB_VERSION_PATCH 3

공유 라이브러리의 SONAME

Linux에서 공유 라이브러리에는 주 버전을 인코딩하는 SONAME이 있습니다. 링커와 로더는 이를 사용하여 호환되는 버전을 찾습니다.

# libmylib.so.2 -> libmylib.so.2.1.3
# SONAME = libmylib.so.2

구현 세부 정보 숨기기

안정적인 ABI를 유지하려면 구현을 헤더에서 제외해야 합니다. 다음 단원에서 다룰 PIMPL을 사용하면 사용자에게 영향을 주지 않고 비공개 멤버를 추가하거나 제거할 수 있습니다.

컴파일러 ABI

C++ ABI는 컴파일러마다 다릅니다(GCC와 MSVC는 서로 다른 이름 맹글링과 클래스 레이아웃을 사용합니다). 특정 컴파일러로 빌드한 바이너리를 배포하거나, extern "C" 인터페이스를 사용하십시오.

표준 라이브러리 ABI

표준 라이브러리도 ABI를 깨뜨릴 수 있습니다. 다만 libstdc++와 libc++에는 관련 정책이 있습니다. 여러 버전 간 호환성이 필요하다면 안정적인 공개 API에 표준 라이브러리 형식을 사용하지 마십시오.

호환성을 유지하며 기능 추가하기

안전한 추가:

  • 새 비멤버 함수
  • 새 클래스
  • 새 비가상 멤버 함수(주의해서 사용)

안전하지 않은 변경: 사용자가 스택에 보유하거나 컴파일에 포함한 클래스를 변경하는 것

ABI 확인 도구

두 빌드를 비교하는 도구입니다:

  • abidiff — ABI를 비교함
  • abicompliance-checker — 보고서를 생성함

장기 전략

처음부터 안정성을 고려하여 설계하십시오. 공개 API를 작게 유지하고, 불투명한 형식을 사용하며, 템플릿과 상속을 신중하게 사용하십시오. 배포를 시작한 후 ABI를 깨뜨리면 비용이 많이 듭니다. 주 버전 변경을 제한하고 변경 사항을 명확하게 전달하십시오.

빠른 확인

C++ 클래스에 대한 변경 중 ABI를 깨뜨릴 가능성이 가장 큰 것은 무엇입니까?

복습

API 호환성은 소스 호환성을 의미하고, ABI 호환성은 바이너리 호환성을 의미합니다. ABI는 취약하므로 멤버나 가상 함수를 추가하거나 상속을 변경하면 ABI가 깨집니다. SemVer를 사용하고, PIMPL로 구현을 숨기며, 여러 주 버전을 나란히 배포하고, ABI 확인 도구를 실행하십시오.

자주 묻는 질문

“API 버전 관리와 ABI 안정성” 강의는 무료인가요?

네 — “API 버전 관리와 ABI 안정성” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C++ Academy 강의 전체를 잠금 해제할 수 있습니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“API 버전 관리와 ABI 안정성”에서 뭘 배우나요?

시맨틱 버전 관리를 계획하고 릴리스 간 ABI 안정성을 보호합니다. 브라우저에서 직접 실행하는 실습 코드로 C++ Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

C++ Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 C++ Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“API 버전 관리와 ABI 안정성” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 C++ Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 C++ Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 헤더 전용 라이브러리와 컴파일 라이브러리 비교
  2. API 버전 관리와 ABI 안정성
  3. PIMPL로 구현 숨기기
  4. 현대적인 헤더 전용 유틸리티 라이브러리 작성하기
← C++ Academy(으)로 돌아가기