brunch

11장. 시스템 수준에서의 소프트웨어 모듈러 디자인

소프트웨어는 시스템 안에 존재한다

by 심야서점

11.1 소프트웨어는 시스템 안에 존재한다


현대의 많은 제품은 단일 기술에 국한되지 않고, 여러 가지 기술이 융합된 복합 시스템으로 구성되고 있습니다. 특히 IoT, 임베디드 시스템, 스마트 디바이스, 자율주행 시스템 등의 영역에서는 하드웨어, 펌웨어, 네트워크, 클라우드 서비스, 그리고 사용자 인터페이스까지 아우르는 통합된 구조가 필수적입니다.


전통적으로 소프트웨어 공학은 소프트웨어 자체의 아키텍처 설계와 최적화에 집중해 왔습니다. 그러나 이제 소프트웨어는 물리적 시스템 내 한 부분으로서 기능하며, 시스템 전체 관점에서 모듈화를 설계해야 합니다. 그렇지 않으면 소프트웨어와 비소프트웨어 기술 간 괴리가 발생해 시스템적 최적화에 방해가 될 수 있고, 소프트웨어 아키텍처가 바람직하지 않은 방향으로 유도될 위험도 있습니다.


또한, 소프트웨어가 차지하는 시스템 내 영역이 확장되고 있기에, 과거처럼 소프트웨어를 단순한 외부 소싱 품목이나 내부 특정 부서의 단순 부품으로 바라보는 태도는 시스템 경쟁력을 저해할 수밖에 없습니다. 따라서 시스템 관점에서 소프트웨어 아키텍처를 최적화하는 방식이 점차 그 중요성을 더해가고 있음을 반드시 인식해야 합니다.


11.2 시스템 계층별 모듈러 아키텍처의 조정


복합 시스템에서는 하드웨어, 펌웨어, 소프트웨어가 유기적으로 결합되어 있으므로, 각 계층의 역할 정의가 선행되어야 합니다. 이를 위해 시스템을 하드웨어 계층, 펌웨어 계층, 애플리케이션 소프트웨어 계층으로 구분할 수 있습니다.


하드웨어 계층은 센서, 액추에이터, 통신 칩, 전원 관리 등을 담당합니다.

펌웨어 계층은 실시간 운영체제(RTOS), 드라이버, 하드웨어 추상화 계층(HAL)을 포함합니다.

애플리케이션 소프트웨어 계층은 데이터 처리, 알고리즘, 사용자 인터페이스, 클라우드 연동 기능을 수행합니다.


각 계층 내 모듈화는 기존 모듈러 디자인 방식에 따라 진행하되, 각 계층 간 경계와 역할 분담을 명확히 하는 것이 더욱 중요합니다. 예를 들어 센서 값 필터링은 펌웨어 계층에서, 경보 판단은 애플리케이션 계층에서 처리하는 식으로 역할과 책임을 분리하며, 계층 간 표준화된 통신 방식을 확립하는 것이 기본입니다.


만약 이러한 조정이 제대로 이루어지지 않는다면, 각 계층 내부의 최적화가 외부 변화에 의해 곧바로 무너지게 되고, 전체 시스템 신뢰성 저하로 이어질 수 있습니다. 따라서 가장 먼저 수행할 작업은 전체 시스템의 그랜드 아키텍처를 명확히 정의하는 것입니다.


이러한 그랜드 아키텍처 관리가 필요한 시스템은 규모가 큰 경우가 많으며, 대표적인 예가 우주선용 실시간 비행 소프트웨어입니다. 해당 시스템은 자세 제어, 추진력 계산, 통신, 상태 모니터링 등 핵심 기능을 독립 모듈로 구현하고, 메시지 기반 인터페이스로 연결되어 하나의 모듈 실패가 전체 시스템 중단으로 이어지지 않도록 설계되어 있습니다. 이는 고신뢰 시스템에서 모듈과 계층 간 경계 정의가 얼마나 중요한지를 보여주는 좋은 사례입니다.


11.3 시스템 기능 간의 모듈 독립성 확보


앞서 언급한 계층 구분과 표준화 작업 이후, 시스템 기능별로 여러 계층 구성 요소들이 모여 하나의 모듈처럼 동작하면서도, 다른 모듈에 영향을 미치지 않아야 독립성을 확보할 수 있습니다. 이는 단일 영역 내 모듈러 디자인과 구분되는 부분으로 이해가 다소 어렵지만 매우 중요합니다.


비행 소프트웨어를 예로 들면, 자세 제어, 추진력 계산, 통신, 상태 모니터링 등은 각각 독립된 모듈로 구현되고 테스트됩니다. 하지만 전체 시스템 관점에서는 관련 하드웨어, 기구와 결합해 하나의 기능 모듈로 통합 운영되어야, 실시간성 확보와 결함 허용성 보장이 가능합니다.


즉, 단순히 소프트웨어 내부 기능 분할에 머무르지 않고, 여러 계층에 걸친 관련 모듈들을 하나로 묶어 기능 단위 모듈러 설계를 구현해야 합니다.


11.4 통합 시스템에서의 설계 기준


소프트웨어 모듈화와 복합 시스템 내의 소프트웨어 포함 모듈화는 엄연히 구분할 필요가 있습니다. 시스템이 요구하는 품질 특성에 따라, 단순 기능 구분뿐 아니라 하드웨어·기구 등 타 구성 요소까지 포함한 모듈 분리가 이루어져야 최적의 결과를 얻을 수 있습니다.


설계 기준 예시는 다음과 같습니다.

시간 주기(Time Cycle): 각각 모듈의 실행 주기에 따른 분리 (예: 10ms 센서, 1초 제어, 이벤트 기반 통신 등)

신뢰성 수준(Reliability Class): 장애 발생 시 영향도에 따른 계층 분리 및 이중화 구성

통신 구조(Message Flow): 이벤트, 명령, 상태 보고 등 메시지 단위로 인터페이스 정의


현실적으로 하드웨어, 기구, 소프트웨어 별로 조직이 나뉘어 있어 기능 분리와 계층 간 연계가 쉽지 않으므로, 먼저 그랜드 아키텍처를 정의하고 이를 기초로 계층별 세부 조율에 나서는 방식이 더 효과적입니다.


11.5 FACE 사례


시스템 수준 소프트웨어 모듈러 디자인의 대표 사례로 FACE(Future Airborne Capability Environment)를 들 수 있습니다. FACE는 미국 국방부가 제시한 MOSA(Modular Open Systems Approach) 철학을 구현한 레퍼런스 아키텍처입니다.


FACE는 군용 항공기 소프트웨어의 이식성, 유지보수성, 재사용성을 극대화하기 위해 모듈화를 핵심 비즈니스 전략으로 채택했으며, 미국 정부와 산업계가 공동 개발한 개방형 아키텍처 프레임워크입니다. FACE의 목표는 서로 다른 항공 플랫폼 간 소프트웨어 컴포넌트를 신속히 교체·재사용해 개발 비용과 기간을 줄이고, 전투 기능을 적시에 향상시키는 데 있습니다.


구체적으로 FACE는 “모듈형 오픈 시스템 접근법” 원칙을 적용해 기능별 모듈화를 수행합니다. 전체 아키텍처는 운영체제 세그먼트, 입출력 서비스 세그먼트, 플랫폼별 서비스 세그먼트, 전송 서비스 세그먼트, 이식 가능한 컴포넌트 세그먼트 등 다섯 논리적 세그먼트로 구성되며, 각 세그먼트는 역할과 인터페이스를 명확히 정의해 독립성과 상호 운용성을 강화합니다.


이러한 구조는 서로 다른 플랫폼과 벤더 환경 간 소프트웨어 호환성을 제공하고, 기존 소프트웨어를 신속히 새로운 하드웨어에 이식하거나 모듈 단위로 업그레이드할 수 있게 해 줍니다. FACE 아키텍처는 높은 응집도와 낮은 결합도를 유지하며, 비즈니스 로직과 플랫폼 특화 기능을 엄격히 분리하는 모듈 설계 원칙에 기반하고 있습니다.


FACE를 실제 도입한 미군 군용기 체계들은 시스템 간 호환성 증가, 개발 및 인증 기간 단축, 유지보수 비용 절감 등의 실질적 성과를 내고 있습니다. 이는 복잡한 운용 환경에서도 신속한 기능 추가와 비용 효율 개선이 가능한 효과적인 전략임을 입증합니다.


11.6 현장 적용 팁과 고려사항


소프트웨어 모듈러 디자인을 현장에 적용할 때는 산업별 요구와 환경에 맞춘 설계와 관리가 필요합니다.


방위산업에서는 FACE 사례와 같이 미사일 체계, 무인기(UAV) 등 임베디드 무기체계에서 기능별 분할과 표준 인터페이스 적용이 필수입니다. 특히 가혹한 운용 환경과 긴 시스템 수명 주기를 고려해, 개별 기능 모듈을 독립적으로 업그레이드하거나 교체해야 하는 상황이 빈번하므로, 실시간 요구사항과 안전성 기준을 충족하는 엄격한 모듈 경계 관리가 요구됩니다.


자동차 전장 시스템, 특히 ADAS나 자율주행 소프트웨어 분야에서는 센서 데이터 처리, 주행 제어, 경고 시스템 등 각 기능별 모듈이 하드웨어와 밀접하게 결합되지만 ISO 26262 안전 표준을 준수하며, 이상 상황이 다른 모듈에 영향을 미치지 않도록 설계해야 합니다. 예컨대 센서 데이터 처리 모듈의 고장이나 오작동이 주행 제어에 영향을 미친다면 운전자의 안전이 심각하게 위협받으므로 이를 철저히 방지해야 합니다.


대형 통신 및 네트워크 장비에서도 라우팅, 보안, 관리 기능을 모듈 단위로 나누고, SDN(Software Defined Networking) 기술을 통해 동적으로 재구성하는 사례가 증가하고 있습니다. 이는 시스템 수준에서 소프트웨어 모듈러 디자인이 가능함을 보여주는 대표적인 사례입니다.


11.7 최신 동향 및 미래 전망


소프트웨어 모듈러 디자인은 여러 산업 분야에서 점차 중요성과 복잡성이 커지고 있습니다. 그랜드 아키텍처 내에서 기능과 계층 간 조화를 이루고, 품질과 보안 요구사항에 부합하는 지속적 최적화를 통해 미래 최첨단 시스템 개발의 성공 기반 역할을 하고 있습니다.


특히 최근에는 클라우드 네이티브와 컨테이너 기술의 적용이 눈에 띕니다. 쿠버네티스(Kubernetes) 같은 컨테이너 오케스트레이션 기술로 모듈의 자동 배포, 확장, 롤백이 가능해져 시스템 운영의 민첩성이 향상되고 있습니다. 방산과 항공우주 분야에서도 경량 컨테이너 기반 모듈화가 실험적으로 도입되고 있습니다.


또한, 인공지능과 엣지 컴퓨팅이 융합한 모듈러 설계가 증가하고 있습니다. AI 추론 모듈과 머신러닝 파이프라인을 개별 모듈로 분리해 엣지 장치와 클라우드 간 분산 처리하며 실시간 성능과 데이터 프라이버시 요구를 동시에 만족시키는 구조가 확산되고 있습니다.


FACE 외에도 SOSA(Open Systems Architecture) 같은 개방형 아키텍처 표준이 등장해 모듈 간 상호운용성을 강화하고, 커뮤니티 기반으로 지속적인 발전을 이루고 있습니다. 보안 요구도 높아져 모듈별 인증, 권한 관리, 침입 탐지 시스템(IDS) 통합 같은 보안 아키텍처가 초기 설계 단계부터 함께 검토되는 추세입니다.


11.8 정리하며


시스템 수준의 소프트웨어 모듈러 디자인은 소프트웨어 자체 구조 최적화를 넘어, 하드웨어와 펌웨어 등 다양한 계층과 유기적으로 연계된 통합 관점에서 접근해야 합니다. 각 계층과 기능별 모듈은 명확한 역할과 경계를 가지고, 표준화된 인터페이스로 연결되어 모듈 간 독립성을 확보해야 합니다. 여러 계층 기능이 하나로 묶여 독립적으로 동작하는 설계는 시스템 전체의 신뢰성과 확장성 향상에 필수적입니다.


비행 소프트웨어와 FACE 아키텍처 사례는 이러한 설계 원칙을 실천하는 모델이며, 이식성, 유지보수성, 재사용성 극대화뿐 아니라 비용 절감과 신속한 기능 개선을 동시에 가능하게 합니다.


#소프트웨어모듈러 #모듈러아키텍처 #시스템설계 #소프트웨어설계 #임베디드시스템 #클라우드네이티브 #마이크로서비스 #AI엣지컴퓨팅 #소프트웨어재사용 #MOSA #FACE아키텍처 #보안아키텍처 #소프트웨어개발 #기능분할 #소프트웨어통합 #SDN #자동차소프트웨어 #자율주행 #군사용소프트웨어

keyword
이전 11화10장. 공통성과 다양성의 균형 잡기