Forward Compatibility

상위 호환성 - "미래를 대비하는 설계"

  • 핵심: 구버전 애플리케이션(소비자)이 미래에 나올 새 버전의 데이터 형식을 만났을 때, 에러를 내며 멈추는 것이 아니라 자기가 모르는 부분은 적절히 무시하고 아는 부분만이라도 처리할 수 있는 능력이다.
  • 예시 (작성하신 내용): 2024년형 차량(구 버전)이 2026년에 추가된 신규 데이터 필드 a를 보고도 "어? 이건 내가 모르는 거네?" 하고 넘기면서 기존 기능을 유지하는 경우이다.

Backward Compatibility

하위 호환성 - "과거를 포용하는 설계"

  • 핵심: 새 버전 애플리케이션(소비자)이 과거에 생성된 낡은 데이터 형식을 여전히 지원하는 능력이다.
  • 예시 (작성하신 내용): 2026년형 차량(새 버전)이 a라는 데이터가 반드시 있을 것이라고 가정하지 않고, a가 없는 옛날 데이터를 받았을 때도 기본값(default)을 사용하거나 예외 처리를 해서 정상 동작하는 경우이다.

실무적으로 백엔드 엔지니어로서 API나 메시지 프로토콜(Protobuf, JSON 등)을 설계할 때 이 두 가지를 보장하려면 보통 다음과 같은 규칙을 따른다.

  • 상위 호환성을 위해: 클라이언트(구 버전)가 모르는 필드는 파싱할 때 무시(ignore unknown fields) 하도록 설계한다.
  • 하위 호환성을 위해: 새로운 필드를 추가할 때는 '필수(Required)'가 아닌 '옵션(Optional)' 으로 추가하거나, 반드시 기본값을 설정 한다.