Backward compatibility
하위 호환성(Backward compatibility)은 기술 및 컴퓨터 분야에서 새로운 제품이 이전 버전과의 호환성을 유지하며 별도의 수정 없이 사용될 수 있는 것을 의미합니다. 즉, 소프트웨어의 새로운 버전이 이전 버전에서 작성된 파일이나 코드를 문제없이 읽고 실행할 수 있는 능력을 뜻합니다. 대표적인 예로, 이전 버전에서 작성된 파일이 최신 버전에서도 정상적으로 열리고 수정될 수 있는 경우를 들 수 있습니다.
소프트웨어 개발을 하게 된다면, 언젠간 의존하고 있는 패키지들을 업데이트할 일이 생기는데, 그 과정에서 패키지들의 하위 호환성이 보장되는 지 검토하게 됩니다. minor 업데이트의 경우 대부분의 패키지들이 이를 보장하지만, major 업데이트는 이를 보장할 수가 없습니다.
Type of backward compatibility
JDK를 참고하자면 하위 호환성이라는 단어를 조금 더 나눠보자면 3가지로 나누어볼 수 있다고 합니다.
Binary Compatibility
Binary Compatibility는 바이너리 수준에서 호환성을 보장한다는 의미입니다. 이전 버전에서 컴파일된 코드가 최신 라이브러리나 실행 파일과 함께 문제없이 실행될 수 있어야 합니다. 예를 들어, 어떤 모듈을 최신 버전으로 대체해도 해당 모듈을 호출하는 기존 프로그램이 정상적으로 동작하는 것을 의미합니다. 바이너리 호환성은 특히 다른 버전 간의 모듈 교체 시 중요한 역할을 합니다. (런타임에 모듈을 교체할 수 있다면, 굳이 빌드를 다시 할 필요가 없습니다)
Source compatibility
Source Compatibility는 소스 코드 수준에서 호환성을 보장한다는 뜻입니다. 이전에 작성된 소스코드가 최신 버전의 라이브러리나 실행 파일에서 문제없이 컴파일되고 작동할 수 있어야 합니다. 개발자는 소스 호환성을 통해 기존의 코드를 수정할 필요 없이 최신 라이브러리로 쉽게 전환할 수 있습니다. 이는 주로 API가 변경되지 않는 경우에 보장됩니다.
Behaviroal compatibility
Behavioral Compatibility는 기능적으로 동일한 동작을 유지하는지를 보장합니다. 코드가 실행된 결과나 응답이 이전 버전과 동일해야 한다는 의미입니다. 예를 들어, 같은 입력을 주었을 때 이전 버전과 동일한 결과를 반환해야 하며, 로직이나 계산 방식이 변경되지 않았음을 보장하는 것입니다. 사용자는 최신 버전의 업데이트가 있더라도 기존 버전과 동일한 동작을 기대할 수 있습니다.
이 세 가지 호환성 중 하나라도 지켜지지 않으면 하위 호환성이 깨지게 됩니다. 다만, 모든 오픈소스 프로젝트나 패키지들이 이러한 호환성을 충분히 공지해주지는 않기 때문에, 업데이트 시에는 릴리스 노트를 꼼꼼히 확인하는 것이 중요합니다.