Skip to main content

Rust와 AUTOSAR의 통합, 다양한 접근 방식 정리

Rust는 높은 메모리 안전성과 성능, 그리고 현대적인 언어 설계를 갖춘 시스템 프로그래밍 언어로, 최근 자동차 소프트웨어 개발 분야에서도 점차 주목받고 있습니다. 특히 AUTOSAR Classic 환경과의 통합은 Rust 도입을 검토하는 개발자와 기업들이 자주 고민하는 주제입니다.

앞서 살펴본 FFI(외부 함수 인터페이스) 기반 직접 통합 방식 외에도, 조직의 구조나 시스템 아키텍처에 따라 다른 형태의 통합 전략이 존재합니다. 이번 글에서는 그중 IPC 또는 COM 기반 통신, Static Library 연동, Adaptive AUTOSAR Bridge 등 세 가지 주요 방법을 중심으로 살펴보겠습니다.

1. IPC 또는 COM 기반 통합: 느슨한 결합 구조

이 방식은 Rust를 AUTOSAR Classic의 내부가 아닌 별도의 태스크(Task)나 프로세스로 두고, AUTOSAR Classic 시스템과는 통신 인터페이스를 통해 데이터를 주고받는 구조입니다.

즉, AUTOSAR의 SWC(Runnable)와 Rust 태스크가 직접 연결되는 것이 아니라, RTE의 COM 인터페이스나 OS 수준의 IPC(Inter-Process Communication) — 예를 들어 메시지 큐, 공유 메모리, 또는 CAN 통신 레이어 — 를 통해 간접적으로 통신합니다.

이 접근의 가장 큰 장점은 시스템 간 분리(Loose Coupling)에 있습니다. RTE 내부를 수정하지 않아도 되며, Rust 코드를 별도의 실행 단위로 운영할 수 있습니다. 그 결과 ISO 26262 인증 시 안전 영역(ASIL)의 경계를 분리하기가 쉬워지고, Rust 도입으로 인한 영향 범위를 최소화할 수 있습니다.

또한 RTE 생성 코드나 기존 빌드 체계를 건드리지 않아도 되기 때문에 기존 AUTOSAR 개발 파이프라인을 유지하면서 Rust를 병행할 수 있습니다.

다만 이 구조는 데이터 복사와 메시지 교환 과정에서 성능 오버헤드가 발생하고, 타이밍 제어나 동기화가 복잡해질 수 있다는 점을 고려해야 합니다. 이 접근은 상용 도구 체인과의 호환성을 유지할 수 있어, 단계적 도입 전략에서 고려할 수 있는 옵션입니다.

ISO26262 대응 가능한 차량용 Rust Compiler에 대해서 알아 보세요!

2. Static Library 연동: 빌드 통합 중심 접근

두 번째 방식은 Rust를 AUTOSAR 애플리케이션의 일부로 직접 정적으로 링크(static link)하는 방법입니다. 즉, Rust로 작성한 코드를 컴파일하여 정적 라이브러리(.a) 형태로 만든 뒤, C로 구성된 AUTOSAR Application 코드와 함께 링크하는 구조입니다.

Rust 코드는 일반적으로 cargo build 명령을 이용해 임베디드용 크로스 타깃(예: ARM 기반)에 맞게 컴파일됩니다. 이렇게 생성된 정적 라이브러리를 AUTOSAR 빌드 시스템(Make 또는 CMake)에 포함하면 하나의 실행 파일로 통합할 수 있습니다.

이 방법의 장점은 외부 통신 없이 완전한 정적 통합이 가능하다는 점입니다. 추가적인 IPC나 COM 계층이 필요하지 않고, Rust 내부에 자체 로직을 포함시켜 성능 저하 없이 동작할 수 있습니다.

그러나 주의할 점도 있습니다. RTE 호출 구조는 그대로 유지되어야 하고, 빌드 환경에서 C와 Rust의 ABI(Application Binary Interface) 호환성을 신중히 관리해야 합니다. 링크 과정에서의 오류나 데이터 구조 불일치는 런타임 오류로 이어질 수 있기 때문입니다.

이 방식은 “RTE → C → Rust Static Library” 형태로 연결되며, 외부 통신 오버헤드 없이 직접 통합할 수 있는 방법 중 하나입니다.

 

3. Adaptive AUTOSAR Bridge 패턴: 미래 지향적 접근

마지막으로 소개할 방식은 Adaptive AUTOSAR와의 브리지(Bridge) 패턴입니다. 이 방법은 AUTOSAR Classic과 Adaptive 플랫폼을 함께 사용하는 환경에서, Rust를 Adaptive 쪽의 애플리케이션 또는 서비스로 위치시키는 형태입니다.

AUTOSAR Classic이 실시간 제어(Real-Time Control) 계층을 담당한다면, Adaptive AUTOSAR는 보다 상위의 서비스나 애플리케이션 계층을 담당합니다. 이 둘은 SOME/IP나 ARA::COM 같은 표준 통신 인터페이스를 통해 데이터를 주고받습니다.

Rust를 Adaptive 측에 배치하면, 스마트 포인터, 비동기 처리(async/await), trait 기반 설계 등 Rust의 현대적인 언어 기능을 폭넓게 활용할 수 있습니다. 또한 POSIX 환경에서 빌드가 가능하기 때문에 개발 편의성이 높습니다.

다만, 이 방식은 Adaptive 플랫폼 자체가 구축되어 있어야 하며, Classic과 Adaptive 간의 데이터 연동 구조가 복잡하다는 점을 고려해야 합니다. 현재는 주로 연구 및 초기 검토 단계에 있는 접근법입니다.

4. 마무리: 단계적 통합이 현실적인 전략

정리하자면, Rust를 AUTOSAR와 통합하는 방법은 여러 가지가 있으며, 프로젝트의 목적과 제약 조건에 따라 최적의 전략이 달라집니다.

IPC나 COM 기반의 통신 구조는 시스템 분리와 안전성 확보에 유리하고, Static Library 연동은 빌드 효율성과 실행 성능 면에서 실질적인 이점을 제공합니다. Adaptive Bridge 방식은 Rust의 기능을 가장 폭넓게 활용할 수 있지만, 플랫폼 요건과 통합 복잡도를 고려해야 합니다.

프로젝트의 요구사항과 제약 조건에 따라, 정적 라이브러리 연동이나 IPC 기반 분리 구조 중 적합한 방법을 선택하고, 필요 시 Adaptive 구조로 확장하는 것을 고려할 수 있습니다.

ISO26262 대응 가능한 차량용 Rust Compiler에 대해서 알아 보세요!