brunch

1장. 왜 다시 ‘모듈러’인가?

유행처럼 다시 돌아온 건지, 원래 그 자리에 있던 건지

by 심야서점


1995년, 제임스 고슬링이 주도해 발표한 자바(Java) 언어는 “Write Once, Run Anywhere”라는 철학으로 주목을 받았다. 당시로서는 운영체제나 하드웨어에 독립적으로 실행된다는 개념 자체가 파격적이었다. 이전 언어들은 환경마다 별도로 컴파일해야 했고, 운영도 복잡하게 관리해야 했기 때문이다.


자바의 이식성은 단순한 기술적 특성을 넘어, ‘모듈러 씽킹’이 구현된 대표 사례로 볼 수 있다. 자바는 프로그램을 하나의 모듈로 캡슐화하고, 외부와의 경계를 명확히 설정했으며, 독립적으로 실행 가능한 구조를 갖췄다. 즉, 모듈화된 사고방식이 이식성이라는 결과로 나타난 것이다.


자바 언어 내부로 들어가면 객체 지향적 특성이 모듈러 씽킹과 연관되어 있다는 점도 확인할 수 있다. 물론 객체 지향 프로그래밍은 자바 이전에 C++ 같은 언어를 통해 이미 널리 사용되었기 때문에, 자바만의 독창적인 개념은 아니다. 하지만 자바는 모듈화를 보다 체계적이고 명시적으로 실현하며, 이후 다양한 플랫폼에서의 소프트웨어 설계에 큰 영향을 주었다.


클라우드 네이티브와 AI 시대의 구조적 전환


현재 소프트웨어 아키텍처의 중심 패러다임은 ‘클라우드 네이티브(Cloud Native)’와 ‘AI 중심 인프라’로 이동하고 있다. 이는 단순한 기술 변화가 아니라, 시스템 설계 방식 자체가 구조적으로 바뀌고 있다는 의미다. 과거에는 하나의 서버에서 돌아가는 프로그램을 전제로 시스템을 설계했다면, 이제는 ‘클라우드’와 ‘AI’를 기본 전제로 삼고 소프트웨어를 설계해야 하는 시대가 된 것이다.


클라우드 네이티브 시스템은 마이크로서비스 아키텍처(MSA), 컨테이너, 이벤트 기반 설계 등 다양한 요소를 기반으로 구성된다. 기능 단위로 분리된 모듈들이 독립적인 라이프사이클을 가지며, 유기적으로 작동하는 구조를 지향한다. 각 서비스는 격리된 환경에서 실행되기 때문에 이식성과 일관성이 높아지고, 유지보수도 용이하다. 과거 클라우드 시스템이 단순히 기존 시스템을 클라우드 환경으로 옮긴 수준이었다면, 클라우드 네이티브는 처음부터 클라우드를 고려해 설계된 구조다. 이 시스템은 컨테이너, 마이크로서비스, 데브옵스, 오케스트레이션 같은 요소들을 통해 자동화, 확장성, 탄력성, 유연성을 확보한다.


AI 기반 시스템은 데이터 수집, 전처리, 모델 학습, 서빙, 피드백 루프 등 각 단계를 독립된 파이프라인으로 구성한다. 이러한 구조는 머신러닝 모델의 개발부터 운영까지 전 과정을 자동화하고 최적화할 수 있게 한다.


이 두 가지 흐름은 하나의 공통된 구조적 요구사항을 갖고 있다. 바로 내부와 외부, 내부 간의 경계를 명확하게 정의할 수 있는 아키텍처가 필요하다는 점이다. 이는 곧 ‘모듈러 씽킹’의 핵심 원리와 일치한다.

이러한 경계 설계가 부족하면 시스템은 다음과 같은 문제에 직면하게 된다.


특정 기능 하나의 변경이 전체 시스템에 영향을 미쳐 민첩성이 떨어진다.

배포 주기가 길어지고, 예기치 못한 에러가 발생할 가능성이 커진다.

팀 간 협업의 경계가 모호해져 책임과 관리 범위가 불분명해진다.


기술이 고도화될수록 시스템은 더욱 정교하고 세분화되어야 하며, 그에 따라 명확한 책임 분리, 경계 정의, 인터페이스 설계가 필요해진다. 이러한 구조적 요구는 바로 모듈러 씽킹이 해결하고자 하는 핵심 과제이기도 하다.


1.1 시스템의 복잡성은 왜 증가하는가?


지금은 복잡성의 시대다. 오늘날 제품은 더 이상 단순한 기계 장치가 아니다. 하드웨어, 전자제어, 통신, 소프트웨어가 유기적으로 결합된 복합 시스템으로 발전했다. 디지털 전환, 인공지능, 사물인터넷(IoT), 개인 맞춤화 요구 등이 더해지면서 제품 구조는 점점 더 정교하고 복잡해지고 있다.


주변만 살펴봐도 이 사실은 쉽게 확인할 수 있다. 반도체가 들어간 제품이 얼마나 많은지, 예전에는 단순한 제어로 충분했던 제품들이 얼마나 복잡한 로직을 갖게 되었는지를 생각해보면 된다.


예를 들어 과거의 냉장고는 단순히 온도만 조절하면 되는 기계였다. 그러나 오늘날 냉장고는 다음과 같은 기능을 요구받는다.


실시간 온도 및 습도 조절

자동 제상 및 에너지 효율 최적화

모바일 앱과의 연동을 통한 원격 제어

카메라 기반 식품 인식 및 재고 관리

사용자 패턴 기반 AI 추천 기능


이러한 기능들은 대부분 소프트웨어에 의해 구현된다. 하나의 냉장고에만 수십 개의 센서, 수백 개의 부품, 수천 개의 코드 모듈이 들어간다. 과거처럼 단순한 회로만으로는 오늘날 수준의 제품을 만들 수 없으며, 이제는 복잡한 소프트웨어 시스템 없이는 제조라인조차 정상적으로 돌아가지 않을 정도다.


시스템은 점점 복잡해지고 있지만, 시스템을 구성하는 방식은 과거와 크게 다르지 않은 경우가 많다. 여전히 많은 시스템은 하나의 거대한 일체형(모놀리식) 구조로 개발되고 있다. 이 방식은 다음과 같은 문제를 유발한다.


변화 대응 속도 저하: 하나의 기능을 바꾸기 위해 전체를 다시 컴파일하고 배포해야 한다.

기능 간 충돌 증가: 모듈 간 의존도가 높아 예기치 못한 오류가 발생할 수 있다.

재사용 어려움: 기능들이 밀접하게 연결되어 있어 일부만 따로 떼어 쓰기가 어렵다.

협업의 비효율: 모듈 간 경계가 명확하지 않아 팀 간 책임과 역할이 혼란스럽다.


이러한 문제를 해결하려면, 기능을 나누고 경계를 설정하며, 각 요소를 독립적으로 관리할 수 있도록 설계해야 한다. 즉, 시스템 구조 자체를 다르게 생각해야 한다.


이처럼 복잡한 구조를 효과적으로 관리하려면, “모듈러 씽킹(Modular Thinking)”이라는 사고방식이 필요하다.


모듈화는 종종 부품의 표준화나 공용화와 같은 의미로 사용되지만, 사실 그것만으로는 충분하지 않다.

모듈러 씽킹은 "무엇을 표준화하고, 무엇은 유연하게 둘 것인가"를 판단하는 전략적 사고 방식이다.


즉, 한정된 자원을 어디에 집중하고 어디에 분산할지를 결정하는 구조 설계의 능력이 모듈러 씽킹의 핵심이다.


MIT의 OCW 강의 Principles of Computer System Design에서는 컴퓨터 시스템을 이렇게 정의한다:

“A computer system is a complex, changeable machine.”


즉, 시스템은 복잡하며 끊임없이 변화하는 존재다. 이런 ‘변경 가능한 복잡성’을 효과적으로 관리하려면 모듈화(Modularization)가 반드시 필요하다. 시스템이 복잡해질수록, 그 복잡성을 분리하고 경계를 명확히 하는 능력이 더욱 중요해진다.


1.2 테슬라가 보여준 모듈화 전략의 묘미


모듈러 씽킹이 실제로 어떻게 적용되는지 보여주는 대표적인 사례 중 하나는 테슬라다. 테슬라는 단순한 전기차 제조사가 아니라, 스스로를 소프트웨어 중심의 전기차 플랫폼 기업으로 재정의한 기업이다. 이 회사는 SoC(System-on-Chip), 배터리 셀, 차량 설계, 생산 공정, AI 학습용 슈퍼컴퓨터(Dojo) 등 주요 기술 요소를 대부분 자체적으로 보유하고 있다. 이러한 선택은 단순한 수직 통합이 아니라, 모듈러 씽킹을 기반으로 시스템 전체를 전략적으로 재설계한 결과라고 볼 수 있다.


테슬라가 어떻게 모듈러 씽킹을 구현했는지를 보여주는 대표적인 사례는 다음과 같다.


기가캐스팅(Gigacasting) 기존 자동차 산업에서는 차량 하부를 수백 개의 부품으로 나누어 조립하는 방식이 일반적이다. 하지만 테슬라는 이와 달리 하부 섀시 전체를 하나의 알루미늄 블록으로 주조하는 방식으로 전환했다. 이로써 부품 수를 대폭 줄이고, 조립 공정을 단순화할 수 있었다. 이는 생산 구조의 모듈화가 극단적으로 구현된 사례로, 제조 시간 단축과 품질의 일관성을 동시에 확보하게 했다.

자체 설계 SoC(System-on-Chip) 테슬라는 기존 자동차처럼 수십 개의 ECU(전자제어장치)를 사용하는 대신, 이를 하나의 중앙 컴퓨팅 유닛으로 통합했다. 이 구조는 하드웨어를 단순화하는 동시에, 소프트웨어의 통합과 유연성을 높여준다. 제어 기능이 분산되지 않고 한 곳에 집중되기 때문에, 기능 변경이나 업데이트가 더욱 빠르고 효율적으로 이루어진다. 핵심 모듈을 내부에 통합함으로써 시스템은 단순해지고, 변화에도 민첩하게 대응할 수 있다.

OTA(Over-the-Air) 업데이트 시스템 기존 차량은 하드웨어에 내장된 기능을 변경하려면 리콜이나 정비소 방문이 필요했다. 하지만 테슬라는 이를 무선 업데이트 방식(OTA)으로 전환했다. 이 방식은 원격으로 차량 기능을 개선하거나 새로운 기능을 추가할 수 있게 한다. 이는 소프트웨어 구조가 모듈화되어 있지 않으면 구현이 불가능한 시스템이며, 설계 단계에서부터 변경 가능성을 고려한 아키텍처가 적용되었음을 보여준다.


이 세 가지 사례는 공통적으로 다음과 같은 시사점을 전달한다.

기능을 세분화하고, 각 기능이 독립적으로 진화할 수 있도록 설계했다.

하드웨어와 소프트웨어의 경계를 재설계하여 인터페이스를 명확히 정의했다.

제품의 성능뿐 아니라 운영, 유지보수, 업그레이드까지 고려한 전 생애주기 관점의 효율화를 달성했다.


즉, 테슬라는 제품을 모듈 단위로 분해하고, 각 모듈을 전략적으로 재배치함으로써 성능 향상에 그치지 않고 제품 생애주기 전체를 혁신했다.


전략적 관점에서 보면, 테슬라의 모듈화 전략은 다음과 같은 구조적 장점을 가진다:

유연한 설계 구조를 통해 제품을 빠르게 업데이트할 수 있다.

각 모듈의 확장성을 통해 다양한 기능 차별화가 가능하다.

제조와 유지보수 측면에서도 높은 효율성을 유지할 수 있다.


요약하자면, 테슬라의 혁신은 단순한 기술의 진보가 아니라, ‘모듈러 씽킹’을 중심에 둔 시스템 아키텍처 전략의 결과다. 테슬라는 하드웨어 구조, 소프트웨어 설계, 운영 방식 전반에 걸쳐 모듈화를 일관되게 적용했다. 그 결과 시장 변화에 유연하게 대응하고, 확장성 있는 제품을 지속적으로 만들어내는 기업으로 자리 잡았다. 이 과정에서 테슬라의 전략은 다양한 형태로 바뀌었을 수 있지만, 그 중심에는 모듈러 씽킹이라는 일관된 구조적 철학이 자리하고 있다.


1.3 왜 소프트웨어가 더 중요해졌는가?


오늘날 제품의 경쟁력은 점점 소프트웨어 중심으로 이동하고 있다. 그 이유는 단순하다. 소프트웨어는 물리적 한계를 뛰어넘어, 제품의 기능을 지속적으로 개선하고 확장할 수 있는 유일한 수단이기 때문이다.


앞서 소개한 테슬라의 OTA(Over-the-Air) 업데이트는 이를 대표하는 사례다. OTA를 통해 차량에 새로운 기능을 추가하거나 기존 기능을 개선할 수 있으며, 보안 패치도 가능하다. 이런 변화는 정비소 방문 없이도 가능하고, 몇 주 혹은 며칠 안에 전 세계 차량에 동시에 적용된다. 반면 기존 완성차 기업은 하드웨어 기반의 기능을 변경하려면 수개월에서 수년이 걸린다. OTA는 단순한 업데이트 기능이 아니라, 제품 생애주기의 중심이 소프트웨어로 옮겨졌음을 보여주는 상징적인 사례다.


또한 스마트폰, 스마트홈, IoT 기기, 산업용 장비 등 대부분의 현대 제품에서 사용자 경험(UX)과 서비스 품질은 소프트웨어가 결정한다. 아무리 하드웨어 성능이 뛰어나더라도, 소프트웨어가 불안정하거나 불편하면 사용자는 그 제품에 만족하지 못한다.


이처럼 제품 경쟁력이 소프트웨어에 의해 좌우되는 시대에는, 소프트웨어 자체가 변화와 확장을 전제로 설계되어야 한다. 다시 말해, 변경이 쉽고 유연하게 확장될 수 있는 구조를 갖춰야 한다. 이 구조가 바로 모듈화된 아키텍처다. 기능 간 결합도가 낮고, 각 기능이 독립적으로 관리될 수 있어야만 빈번한 변화에 효과적으로 대응할 수 있다.


로버트 C. 마틴(Robert C. Martin)은 『Clean Architecture』에서 다음과 같이 강조한다:

“구체적인 구현보다 추상화에 의존해야 하며, 변경 가능성을 낮추기 위해 구조적으로 독립성을 확보해야 한다.”


이는 소프트웨어 모듈화의 핵심 원칙을 말한다. 변화에 강한 구조를 만드는 것은 단순한 설계 기법이 아니라, 지속 가능한 경쟁력을 확보하기 위한 전략적 선택이다.


1.4 시스템, 조직, 설계는 연결되어 있다


모듈러 씽킹과 소프트웨어 중심 사고는 기술의 변화만을 뜻하지 않는다. 이 두 가지는 공통적으로 조직 구조에도 변화를 요구한다는 점에서 중요한 의미를 가진다.


기술 아키텍처와 조직 구조는 별개로 존재하지 않는다. 오히려 이 둘은 서로 깊이 연결되어 있다. 이 사실을 잘 설명해주는 개념이 바로 ‘콘웨이의 법칙(Conway’s Law)’이다.

“조직은 그 조직의 커뮤니케이션 구조를 반영한 시스템을 설계하게 된다.”


즉, 조직이 어떤 방식으로 나뉘어 있는지가 시스템의 경계를 결정한다는 뜻이다. 예를 들어 조직이 기능 중심으로 나뉘어 있다면, 시스템도 기능 단위로 구성된다. 반면 플랫폼 기반 조직이라면, 시스템 역시 플랫폼 단위로 나뉘게 된다.


테슬라는 플랫폼 기반 조직 구조를 갖추고 있는 것으로 알려져 있다. 예를 들어 주행 제어, 배터리 관리, 사용자 인터페이스 등 각 기능 영역은 독립된 플랫폼 단위로 관리된다. 그리고 이들 각각은 공통된 인터페이스와 데이터 구조를 통해 유기적으로 연결되어 있다. 조직의 정렬이 아키텍처의 정렬로 이어지고, 이로 인해 중복이나 충돌 없이 안정적인 시스템 구조를 만들 수 있게 된다.


반대로, 조직 구조가 분절적일 경우 시스템 아키텍처도 일관성을 잃기 쉽다. 기능 중복, 책임 불명확, 데이터 불일치, 커뮤니케이션 지연 등 조직의 단절이 기술적 문제로 이어진다. 이는 결국 개발 속도를 떨어뜨리고 유지보수를 어렵게 만든다.


소프트웨어 아키텍트는 단순한 기술 설계자가 아니다. 조직 구조를 함께 설계하는 역할도 수행해야 한다. 기술적 경계를 정의할 때, 팀 간 협업 방식, 책임의 분배, 커뮤니케이션 흐름까지 함께 고려해야 한다.


반대로, 시장에서 요구하는 시스템 아키텍처가 조직 구조의 변화를 유도하기도 한다. 시스템 아키텍처가 직접적으로 조직을 바꾸는 것은 아니지만, 시대에 맞는 시스템 구조를 갖추지 못한 조직은 결국 시장에서 도태된다. 살아남기 위해서라도 조직은 변화할 수밖에 없다.


소프트웨어 중심 사고가 강조되면서, 이런 변화는 더욱 분명해지고 있다. 과거에는 소프트웨어가 전체 시스템 중 일부 기능만을 담당했다. 그래서 소프트웨어 조직은 전체 설계에서 부차적인 위치에 있어도 큰 문제가 없었다. 그러나 지금은 상황이 완전히 다르다. 소프트웨어가 시스템의 중심이 되고 있고, 기능을 주도하고 있으며, 제품의 차별성을 만들어내는 핵심 수단이 되고 있다.


그럼에도 불구하고 여전히 하드웨어 중심의 조직 구조를 유지한다면, 그 조직은 미래 성장을 가로막는 구조적 한계를 안고 가게 된다. 더 이상 소프트웨어 조직은 ‘하드웨어를 보조하는 부서’로 남아 있어서는 안된다.


1.5 변화에 강한 아키텍처란 무엇인가?


소프트웨어 아키텍처를 설계할 때 가장 어려운 결정 중 하나는 “경계를 어디에 둘 것인가?”이다. 『Software Architecture: The Hard Parts』에서도 반복해서 강조되는 이 메시지는 단순히 시스템을 나누는 기술적 문제를 넘어선다. 경계의 위치는 의존성 관리, 팀 책임, 배포 전략, 변경 범위 등 시스템의 모든 품질 속성과 직접적으로 연결된다.


변화에 강한 아키텍처는 다음과 같은 특징을 갖는다:

명확한 모듈 경계 각 모듈은 하나의 책임을 가지고, 외부와 연결되는 인터페이스가 명확하게 정의되어 있어야 한다.

낮은 결합도, 높은 응집도 하나의 변경이 다른 모듈에 영향을 주지 않아야 하며, 각 모듈 내부는 기능적으로 긴밀하게 구성되어야 한다.

독립 배포 가능성 마이크로서비스처럼 전체 시스템을 재배포하지 않고, 필요한 부분만 선택적으로 배포할 수 있어야 한다.

계층적 구조 도메인, 애플리케이션, 인프라 계층 간의 역할이 명확히 구분되어 있어야 한다.


이러한 원칙을 잘 적용한 사례로는 아마존(Amazon)을 들 수 있다. 아마존은 “You build it, you run it”이라는 운영 원칙을 따르며, 각 팀이 하나의 서비스를 끝까지 책임지는 구조를 채택했다. 이를 가능하게 한 것은 각 서비스가 독립된 모듈로 설계되어 있고, 팀 단위로 완전한 소유권을 가질 수 있도록 경계가 철저히 정의되어 있기 때문이다. 이러한 아키텍처는 빠른 출시 주기를 유지하고, 팀 간 충돌을 최소화하는 데 큰 도움이 된다.


결론적으로, 모듈러 씽킹은 단순히 시스템을 나누는 기술이 아니다. 그것은 조직 전략, 기술 전략, 제품 전략을 하나의 일관된 구조 안에서 정렬시키는 사고방식이다. 변화에 강한 시스템은 기술적으로 모듈화되어 있고, 조직적으로 책임이 명확하며, 전략적으로는 제품 방향성과 일치한다.


모듈화된 아키텍처는 단지 복잡한 시스템을 잘게 쪼개는 것 이상의 의미를 가진다. 그것은 변화에 대응할 수 있는 유연성을 확보하는 동시에, 시스템 전체의 확장성과 안정성을 보장하는 구조적 해법이다.


1.6 요약하며: 왜 지금, 다시 모듈러인가?


오늘날 시스템은 과거와 비교할 수 없을 정도로 복잡해지고 있으며, 기술 발전 속도 또한 매우 빠르게 진행되고 있다. 복잡성은 피할 수 없는 현실이 되었고, 이제는 이 복잡성을 어떻게 관리할 것인가가 핵심 과제가 되었다.


제품과 서비스의 중심도 눈에 띄게 변화하고 있다. 하드웨어 중심이던 과거와 달리, 이제는 소프트웨어가 제품 경쟁력의 핵심 축이 되고 있다. 기능의 구현, 사용자 경험, 서비스의 차별화는 대부분 소프트웨어에서 비롯된다. 그리고 이 소프트웨어는 끊임없이 변화하고 확장되어야 한다. 그만큼 설계 단계부터 유연성과 확장성을 고려한 구조가 필요하다.


이처럼 변화의 속도가 빨라지고, 복잡성이 증가하며, 소프트웨어의 역할이 커지는 지금, 시스템은 기존의 일체형(monolithic) 방식으로는 더 이상 감당하기 어렵다. 불필요한 재작업, 배포의 비효율, 협업의 혼선은 결국 기업의 민첩성과 경쟁력을 저하시킨다.


선도 기업들은 이러한 환경 변화에 적극적으로 대응하고 있다. 테슬라는 자동차라는 전통 산업에 모듈러 씽킹을 적용하여 제품 구조와 생산 방식을 혁신했고, 아마존은 서비스 단위로 책임을 분리해 소규모 팀이 빠르고 독립적으로 제품을 개선할 수 있도록 조직과 시스템을 설계했다. 이들의 사례는 단지 새로운 기술을 도입했다는 의미를 넘어, 조직과 아키텍처가 전략적으로 정렬되어 있다는 점에서 본질적인 차이를 만들어냈다.


결국 모듈화는 더 이상 기술적 선택의 문제가 아니다. 전략적으로 시스템을 설계하고 운영하기 위한 필수적인 접근 방식이다. 모듈러 아키텍처는 기술, 조직, 제품 전략이 하나의 흐름으로 연결되도록 만들며, 불확실성과 변화 속에서도 일관성을 유지할 수 있는 기반을 제공한다.


지금 우리가 다시 모듈러에 주목해야 하는 이유는 여기에 있다. 변화에 강한 시스템을 만들고 싶다면, 복잡성을 이겨내고 싶다면, 그리고 기술과 조직이 함께 성장하는 구조를 만들고 싶다면, 모듈러 씽킹은 선택이 아니라 출발점이 되어야 한다.

keyword
이전 01화프롤로그