OTA(Over-The-Air) 무선 업데이트: 백그라운드 듀얼 뱅크(Dual-Bank) 플래시 메모리 스와핑

OTA 무선 업데이트란? 듀얼 뱅크 플래시 메모리 스와핑 원리

자동차의 소프트웨어 비중이 높아지면서 차량이 출고된 이후에도 소프트웨어를 업데이트해야 하는 상황이 늘어나고 있다. 과거에는 문제가 발생하거나 기능을 개선하려면 정비소에서 진단 장비를 연결해 ECU의 펌웨어를 변경하는 방식이 일반적이었다. 하지만 커넥티드카와 소프트웨어 중심 자동차가 확대되면서 무선 네트워크를 이용해 새로운 소프트웨어를 배포하는 OTA(Over-The-Air) 기술이 중요해지고 있다.

OTA는 단순히 업데이트 파일을 인터넷으로 내려받는 기술을 의미하지 않는다. 차량에 전달된 펌웨어가 정상적인 파일인지 확인하고, 기존 소프트웨어가 실행되는 상태에서 새로운 버전을 안전하게 저장한 뒤, 다음 부팅에서 새로운 펌웨어를 선택하도록 만드는 일련의 과정이 필요하다.

특히 차량의 핵심 ECU는 업데이트에 실패했다고 해서 단순히 재설치하면 되는 장치가 아니다. 업데이트 도중 전원이 차단되거나 저장 과정에서 오류가 발생하면 ECU가 정상적으로 부팅하지 못할 가능성이 있기 때문이다. 이러한 위험을 줄이기 위한 설계 방법 가운데 하나가 듀얼 뱅크(Dual-Bank) 플래시 메모리 구조​다.

OTA 업데이트가 필요한 이유

자동차에는 수많은 전자제어장치와 소프트웨어가 탑재된다. 차량의 주행 제어, 차체 제어, 배터리 관리, 인포테인먼트, ADAS 등 다양한 기능이 소프트웨어와 연결되어 있다.

차량이 판매된 이후에도 소프트웨어 오류가 발견될 수 있으며 보안 취약점이 새롭게 확인될 수도 있다. 새로운 기능이 추가되거나 기존 기능의 성능이 개선되는 경우도 있다.

OTA가 적용되면 제조사가 배포한 소프트웨어 패키지를 차량이 네트워크를 통해 내려받고 설치할 수 있다. 정비소 방문 횟수를 줄일 수 있고, 여러 차량에 동일한 소프트웨어를 배포하기도 편리하다.

하지만 차량에서 OTA는 스마트폰 애플리케이션 업데이트와 동일하게 생각해서는 안 된다. 스마트폰에서 업데이트가 실패하면 다시 설치하면 되지만 차량 ECU는 펌웨어 손상으로 인해 정상적인 부팅 자체가 불가능해질 수 있다.

따라서 차량용 OTA에서는 업데이트 실패에도 기존의 정상적인 소프트웨어를 사용할 수 있는 구조가 중요하다.

듀얼 뱅크 플래시 메모리란?

듀얼 뱅크는 플래시 메모리를 두 개의 영역으로 나누어 활용하는 구조를 말한다. OTA에서는 흔히 A/B 형태로 설명할 수 있다.

예를 들어 현재 정상적으로 작동하는 펌웨어가 Bank A에 저장되어 있다고 가정해 보자. 차량은 Bank A의 펌웨어를 실행하면서 네트워크를 통해 새로운 펌웨어를 다운로드한다.

새로운 펌웨어를 Bank A에 바로 덮어쓰는 대신 Bank B에 기록한다.

이렇게 하면 새 펌웨어를 기록하는 동안 기존 펌웨어를 보존할 수 있다.

새로운 펌웨어가 Bank B에 모두 기록된 후에는 파일의 무결성이나 디지털 서명 등을 확인한다. 검증을 통과한 경우 다음 부팅에서 Bank B를 사용하도록 부팅 정보를 변경한다.

이후 ECU가 다시 시작되면 새로운 펌웨어가 실행된다.

개념적으로 보면 다음과 같은 구조다.

기존 상태

Bank A = 현재 정상 펌웨어
Bank B = 업데이트용 영역

↓

업데이트 진행

Bank A = 계속 사용
Bank B = 새로운 펌웨어 기록

↓

검증

Bank B의 펌웨어 무결성 및 서명 확인

↓

전환

다음 부팅 대상 = Bank B

↓

업데이트 완료

Bank B = 새로운 정상 펌웨어

이 방식의 핵심은 새 펌웨어를 준비하는 동안 기존 펌웨어를 보호하는 것이다.

백그라운드 OTA 업데이트는 어떻게 진행될까?

백그라운드 업데이트라는 표현을 사용할 때는 다운로드와 실제 펌웨어 교체 과정을 구분해야 한다.

차량이 정상적으로 운행되는 동안 새로운 업데이트 패키지를 다운로드할 수 있는 시스템이라면, 사용자가 별도의 작업을 하지 않아도 업데이트 준비가 진행될 수 있다.

예를 들어 차량이 주행 중일 때 필요한 파일을 다운로드하고, 차량이 정차한 뒤 실제 ECU 업데이트를 수행하도록 구성할 수 있다.

이때 업데이트 관리 소프트웨어는 현재 차량의 상태를 확인한다.

배터리 상태가 충분한지, 차량이 주행 중인지, 업데이트에 필요한 조건이 충족되었는지 등을 확인한 뒤 실제 설치 시점을 결정할 수 있다.

이 과정에서 중요한 것은 다운로드가 완료되었다고 해서 곧바로 새로운 펌웨어를 실행하지 않는 것이다.

먼저 업데이트 파일이 정상적으로 수신되었는지 확인해야 한다.

펌웨어 무결성 검증이 중요한 이유

OTA 업데이트에서는 네트워크를 통해 소프트웨어가 이동하기 때문에 파일이 손상되거나 변조되는 상황을 고려해야 한다.

이를 위해 업데이트 패키지의 무결성을 확인하는 절차가 사용된다.

대표적으로 해시(Hash)를 활용해 파일이 예상한 데이터와 일치하는지 확인할 수 있다. 또한 디지털 서명을 사용해 해당 펌웨어가 신뢰할 수 있는 주체에 의해 승인된 것인지 검증할 수 있다.

두 기능은 목적이 다르다.

해시 비교는 데이터가 변경되었는지를 확인하는 데 활용할 수 있고, 디지털 서명은 신뢰할 수 있는 서명자가 해당 데이터를 승인했는지를 확인하는 데 사용된다.

따라서 차량용 OTA에서는 단순히 파일을 다운로드했다고 업데이트가 완료되는 것이 아니다.

다운로드 → 무결성 확인 → 서명 검증 → 호환성 확인 → 설치 → 부팅 검증과 같은 여러 단계가 필요하다.

듀얼 뱅크 스와핑의 핵심은 부트로더

듀얼 뱅크 구조에서 매우 중요한 역할을 하는 구성 요소가 부트로더다.

부트로더는 ECU가 시작될 때 어떤 펌웨어를 실행할 것인지 결정하는 초기 소프트웨어 영역이다.

예를 들어 Bank A가 기존 버전이고 Bank B가 새 버전이라면, 업데이트가 정상적으로 완료된 이후 부트로더가 Bank B를 실행하도록 상태 정보를 변경할 수 있다.

하지만 단순히 실행 영역만 바꾸면 충분한 것은 아니다.

새 펌웨어가 부팅되지 않는 상황도 고려해야 한다.

따라서 실제 시스템에서는 업데이트 상태를 기록하고, 새 펌웨어가 정상적으로 시작되었는지 확인한 뒤 성공 상태를 확정하는 구조를 사용할 수 있다.

새 펌웨어가 부팅에 실패하거나 정해진 검증 조건을 만족하지 못하면 기존 펌웨어를 다시 선택하도록 설계할 수 있다.

이를 일반적으로 롤백(Rollback) 또는 복구 절차라고 설명할 수 있다.

업데이트 도중 전원이 꺼지면 어떻게 될까?

OTA 시스템을 설계할 때 반드시 고려해야 하는 상황 중 하나가 전원 차단이다.

예를 들어 새로운 펌웨어를 Bank B에 기록하는 도중 차량의 전원 상태가 불안정해진다고 가정해 보자.

단일 영역에 기존 펌웨어를 직접 덮어쓰는 구조라면 기존 데이터와 새로운 데이터가 모두 정상적이지 않은 상태가 될 위험이 있다.

반면 듀얼 뱅크 구조에서는 기존 펌웨어가 Bank A에 남아 있다면 Bank B의 업데이트가 실패하더라도 기존 영역을 활용할 수 있는 가능성이 높아진다.

물론 이것이 모든 전원 장애 상황에서 자동으로 복구된다는 의미는 아니다.

부트로더의 상태 관리, 메모리 구조, 전원 설계, 업데이트 프로토콜 등에 따라 실제 복구 방식이 달라진다.

따라서 듀얼 뱅크 자체가 안전성을 보장하는 것이 아니라, 듀얼 뱅크를 활용한 전체 업데이트 복구 구조가 중요하다.

OTA 업데이트에서 롤백이 필요한 이유

새로운 소프트웨어가 정상적으로 설치되었더라도 예상하지 못한 문제가 발생할 수 있다.

예를 들어 새로운 펌웨어가 부팅은 되지만 특정 ECU와 통신하지 못하거나 일부 기능에서 오류가 발생할 수 있다.

이러한 문제를 대비하기 위해 이전 버전을 유지하고 문제가 확인되면 이전 펌웨어로 돌아가는 롤백 구조를 설계할 수 있다.

이를 위해서는 몇 가지 조건이 필요하다.

먼저 기존 펌웨어가 실제로 보존되어 있어야 한다.

또한 어느 버전이 정상 버전인지 판단할 수 있는 상태 정보가 필요하다.

그리고 부팅 실패나 검증 실패를 감지할 수 있는 메커니즘도 필요하다.

마지막으로 롤백 과정 자체가 또 다른 오류를 발생시키지 않도록 충분한 검증이 필요하다.

차량용 OTA에서 메모리 용량이 중요한 이유

듀얼 뱅크 구조의 단점 가운데 하나는 저장 공간이다.

기존 펌웨어와 새로운 펌웨어를 동시에 저장해야 하기 때문에 단일 펌웨어 영역을 사용하는 것보다 더 많은 플래시 메모리가 필요할 수 있다.

특히 소프트웨어 규모가 커지는 차량에서는 이 문제가 더욱 중요해진다.

따라서 개발자는 필요한 펌웨어 크기와 메모리 용량을 비교하고, 실제 하드웨어가 어떤 메모리 구조를 지원하는지 확인해야 한다.

모든 MCU나 플래시 메모리가 동일한 방식의 듀얼 뱅크 동작을 지원하는 것도 아니다.

일부 장치는 뱅크 간 실행과 기록을 지원할 수 있지만, 다른 장치는 업데이트 과정에서 별도의 실행 영역이나 부트로더 동작이 필요할 수 있다.

따라서 ‘듀얼 뱅크’라는 용어만으로 모든 하드웨어의 동작 방식이 동일하다고 판단해서는 안 된다.

OTA 보안과 소프트웨어 버전 관리

차량용 OTA에서는 보안도 매우 중요한 요소다.

공격자가 정상적인 업데이트 파일을 악성 파일로 바꾸거나, 과거의 취약한 펌웨어를 다시 설치하려고 시도하는 상황을 고려해야 한다.

이를 방지하기 위해 디지털 서명 검증, 암호화된 통신, 키 관리, 접근 제어, 버전 관리 등의 보안 기능을 조합할 수 있다.

특히 롤백 기능과 보안 정책의 관계를 주의해야 한다.

업데이트 실패 시 이전 버전으로 돌아갈 수 있는 기능은 복구에 유용하지만, 공격자가 의도적으로 취약한 과거 버전을 설치하는 데 악용되어서는 안 된다.

따라서 어떤 버전으로 롤백할 수 있는지, 특정 버전의 설치를 허용할 것인지 등을 보안 정책과 함께 설계해야 한다.

OTA와 차량 소프트웨어의 미래

소프트웨어 중심 자동차가 확대되면서 OTA의 역할은 앞으로 더욱 중요해질 가능성이 있다.

차량 제조사는 OTA를 활용해 소프트웨어 오류를 수정하고 보안 취약점에 대응하며, 지원되는 차량의 기능을 개선할 수 있다.

하지만 안정적인 OTA는 무선으로 파일을 전달하는 기술만으로 완성되지 않는다.

차량 상태 확인, 안전한 다운로드, 펌웨어 인증, 무결성 검증, 메모리 기록, 부트로더 전환, 정상 부팅 확인, 장애 대응과 롤백까지 하나의 시스템으로 설계해야 한다.

그중 듀얼 뱅크 플래시 메모리 스와핑은 기존 펌웨어를 유지하면서 새로운 펌웨어를 별도의 영역에 준비하고, 검증된 버전으로 실행 영역을 전환할 수 있다는 점​에서 중요한 설계 방법이다.

결국 차량용 OTA의 핵심은 업데이트 자체보다 업데이트가 실패하더라도 차량을 정상적인 상태로 복구할 수 있는가에 있다.

앞으로 차량이 더 많은 기능을 소프트웨어로 구현할수록 OTA 업데이트 시스템의 안정성과 보안, 복구 능력은 차량 품질을 결정하는 중요한 요소가 될 것이다.

마무리

OTA는 자동차의 유지보수 방식을 바꾸고 있는 기술이다. 그러나 자동차에서는 스마트폰과 달리 업데이트 실패가 차량의 주요 기능에 영향을 줄 수 있기 때문에 더욱 신중한 설계가 필요하다.

듀얼 뱅크 플래시 메모리는 이러한 문제에 대응하기 위한 대표적인 구조 중 하나다. 기존 펌웨어와 새 펌웨어를 분리하고, 새 버전을 검증한 뒤 실행 대상으로 전환하는 방식은 업데이트 과정에서 발생할 수 있는 위험을 줄이는 데 도움을 줄 수 있다.

다만 실제 시스템의 안정성은 듀얼 뱅크만으로 결정되지 않는다. 부트로더, 전원 관리, 소프트웨어 검증, 보안 정책, 버전 호환성 및 복구 절차를 함께 설계하고 실제 차량 환경에서 검증해야 한다.

따라서 차량용 OTA를 이해할 때는 ‘무선으로 업데이트한다’는 개념을 넘어 어떻게 저장하고, 어떻게 검증하고, 어떻게 전환하며, 문제가 생겼을 때 어떻게 복구하는가​까지 살펴보는 것이 중요하다.

댓글 남기기