목차

개요


<aside> 💡 ***만물은 변한다. 그대로 있는 것은 아무것도 없다.

</aside>

과거(2015년)의 카카오톡

과거(2015년)의 카카오톡

현재(2022년)의 카카오톡

현재(2022년)의 카카오톡

애플리케이션은 시간이 지남에 따라 변화하고, 이 변화는 간단하게는 UI변경부터 복잡하게는 기능 추가 비즈니스 로직 추가까지 될 수 있다.

이전 1장에서 발전성의 개념을 소개하며 애플리케이션이 변경 사항에 유연하도록 시스템을 구축해야 한다고 했다.

대부분의 경우 애플리케이션 기능의 변경이 되기 위해서는 저장하는 데이터도 변경해야 하는데, 변경되는 필드의 타입 혹은 추가되는 필드는 기존 데이터 저장소가 아닌 새로운 곳에 저장소를 만드는 식으로 새로운 방법으로 제공해야 할 수도 있다.

그런데 이렇게 새롭게 추가 혹은 변경된 기능이 반영된 코드와 데이터는 대규모 애플리케이션에서 다음과 같은 이유로 양방향 호환성이 필요하다.

즉, 애플리케이션의 새로운 버전이 즉시 반영이 안된다는 점인데, 이 경우 새 버전과 구 버전이 동시에 공존하는 상황이 생길 수 있고, 이 때 **하위 호환성(신 버전의 코드가 구 버전의 데이터를 읽을 수 있어야 한다.)**과 상위 호환성(구 버전의 코드가 신 버전의 새로운 데이터를 읽을 수 있어야 한다.)

둘 다 제공해야 하는데, 비교적 쉬운 하위호환성에 비해 상위 호환성은 구버전의 코드가 새 버전에 의해서 추가된 내용들을 무시할 수 있어야 하기에 난이도가 높다.

그렇기에 이번 장에서는 이러한 양측 호환성을 모두 만족시키는 시스템을 어떻게 만드는지에 대해 알아본다.