건축가처럼 생각하는 개발자
지금까지 획일적인 코딩 교육의 문제점과 개발자로서의 적성 등을 살펴보았다. 코딩 교육을 하지 말아야 한다는 것은 아니다. 코딩 교육은 필요하다. 다만, 코딩보다는 시스템에 대한 것에 비중을 두어야 한다. 시스템을 만들 수 있는 교육, 즉 설계를 할 수 있는 교육으로 방향을 맞춰야 한다.
AI가 몇 년 사이에 대중화되고, 기술력도 상당히 향상되었다. 이제는 마치 스마트폰이 없으면 일상생활이 안 되는 것처럼 AI 없이는 어떤 것이든 하기 힘든 세상이 되었다.
Claud의 Claud Code, GTP의 Codex, Cursor, 구글의 Gemini Cli를 통해 AI가 자동으로 프로젝트를 만들어주고, 기초 코드까지 작성해 준다. 또한, 오류를 잡아서 수정하고, 테스트를 통해 버그와 코드까지 잡아준다. 설계만 잘 되어 있다면, 나머지는 프롬프트를 통해 AI에게 명령만 하면 알아서 만들어주는 시대이다.
이런 시대적 상황에 코딩 실력보다는 시스템 설계 능력인 설계 사고가 필요한 시점이다. 설계 사고의 시작인 아키텍처에 대해서 일단 언급하고 가야 할 듯하다.
아키텍처는 ‘건축학’이라는 의미를 가지고 있다. 시스템 아키텍처는 시스템을 건축한다는 의미로 설계도 또는 청사진을 말한다.
시스템 아키텍처를 이해하는 가장 쉬운 방법은 건물 건축에 비유하는 것이다. 집을 짓는다고 할 때 어떤 모양으로 짓고, 몇 층으로 할지, 방이 어디에 위치할지 등 전체적인 설계도를 만드는 것이 바로 아키텍처다.
마찬가지로 컴퓨터 프로그램도 건물처럼 설계도가 필요하다. 컴퓨터 프로그램을 개발할 때, 그 프로그램이 어떤 모듈들로 구성되고, 각 모듈들이 어떤 기능을 수행하며, 어떤 방식으로 데이터가 흐르는지를 결정하는 것이 시스템 아키텍처다.
예를 들어, 온라인 쇼핑몰을 만든다고 생각해 보자. 프레젠테이션 레이어는 마치 쇼핑몰의 쇼윈도와 같은 역할로, 고객이 제품을 볼 수 있는 공간이다. 비즈니스 레이어는 마치 쇼핑몰의 직원들과 같은 역할로, 주문 처리, 결제 처리, 할인 계산과 같은 작업을 수행한다. 데이터베이스 레이어는 마치 쇼핑몰의 창고와 같은 역할로, 제품 정보, 주문 기록, 고객 정보와 같은 데이터를 보관하고 관리한다.
많은 사람들이 코딩과 설계를 같은 것으로 생각하지만, 실제로는 전혀 다르다.
"코딩"은 마치 건물을 짓는 벽돌공이나 목수의 일과 같다. 정해진 설계도에 따라 벽돌을 쌓고, 문을 달고, 배관을 연결하는 구체적인 작업이다.
"설계"는 건축가의 일과 같다. 건물 전체의 모양을 정하고, 방들을 어떻게 배치할지, 사람들이 어떻게 움직 일지를 계획하는 일이다. 소프트웨어 아키텍처는 시스템의 전체적인 구조를 정의하고, 각 요소 간의 관계와 설계 지침을 세우는 데 초점을 둔다. 반면 소프트웨어 설계는 개별 구성 요소의 세부 구현에 집중한다는 것에 차이가 있다.
우리 일상생활에서도 복잡한 문제를 만나면 체계적으로 접근한다. 예를 들어, 새 집으로 이사를 간다고 생각해 보자. 무작정 짐을 싸기 시작하지 않는다. 먼저 전체 계획을 세운다.
1. 언제까지 이사해야 하는지
2. 어떤 짐들을 가져갈지
3. 어떤 순서로 포장할지
4. 이사업체는 언제 부를지
설계는 구상한 것을 현실화하는 것이고 다양한 제약 사항을 해결하며 초기 목적을 달성하는 과정을 의미한다. 이것이 바로 설계 사고이다.
좋은 설계는 미래를 준비한다. 아키텍처는 변화에 저항하기 위해 만드는 것이 아닌, 변화에 능동적으로 대응할 수 있는 미래를 위해 만드는 것에 있다.
스마트폰을 예로 들면, 초기 아이폰이 성공한 이유 중 하나는 앱스토어를 염두에 둔 설계였다. 애플은 처음부터 "나중에 다양한 앱들이 들어올 것"을 고려해서 시스템을 설계했다. 덕분에 수많은 앱 개발자들이 쉽게 아이폰용 앱을 만들 수 있었다.
아키텍처의 사고는 크게 네 가지로 나눌 수 있다.
1. 전체와 부분을 동시에 보는 능력
건축가가 건물 전체의 모습과 개별 방의 세부사항을 모두 고려하는 것처럼, 시스템 전체와 개별 부품을 동시에 생각할 수 있어야 한다.
2. 다양한 기술을 폭넓게 아는 능력
한 가지 기술만 깊이 아는 것보다, 여러 기술을 넓게 알고 있어야 한다. 마치 건축가가 건축 재료, 전기, 배관 등을 모두 알아야 하는 것처럼 말이다.
3. 서로 다른 요구사항 사이에서 균형 잡기
"빠르면서도 안전하고, 저렴하면서도 고품질"처럼 서로 상충하는 요구사항들 사이에서 최적의 균형점을 찾는 능력이다.
4. 비즈니스 요구를 기술로 번역하기
"고객이 더 편리하게 쇼핑할 수 있게 해 주세요"라는 요구를 구체적인 기술 설계로 바꾸는 능력이다.
2024년에 일어난 크라우드스트라이크 사고는 설계 사고의 중요성을 잘 보여준다. 미국의 사이버 보안 회사인 크라우드스트라이크가 제작한 보안 소프트웨어의 잘못된 업데이트로 인해 마이크로소프트 윈도우를 실행하는 수많은 컴퓨터와 가상 머신이 충돌했다. 전 세계의 기업과 정부는 정보 기술 역사상 최대 규모의 중단으로 묘사되는 사태로 인해 영향을 받았다.
이 사건에서 문제는 단순한 코딩 오류가 아니었다. 시스템을 설계할 때 "만약 업데이트에 문제가 생기면 어떻게 할 것인가?"를 충분히 고려하지 않았던 것이 근본 원인이었다. 좋은 설계라면 이런 상황을 미리 예상하고 대비책을 마련했을 것이다.
요즘 AI가 코딩을 많이 도와주고 있다. ChatGPT나 GitHub Copilot, Claud Code, Gemini Cli, Cursor 같은 도구들이 코드를 자동으로 작성해주기도 한다. 그렇다면 사람은 무엇을 해야 할까?
AI는 "이런 기능을 만들어줘"라고 하면 그 기능을 만드는 코드는 잘 짜준다. 하지만 AI는 “우리 회사에 어떤 시스템이 필요할까?’라는 ‘전체적인 계획 세우기’, “3년 후에는 사용자가 10배 늘어날 텐데, 그때도 잘 작동할까?”라는 ‘미래 예측하기’, “보안과 편의성 중 어느 것을 우선해야 할까?”라는 ‘’복잡한 판단하기’와 같은 일들은 잘 못한다. 물론 질문에 대한 조언을 할 수 있을 것이다.
미국의 소프트웨어 개발자 Martin Fowler는 소프트웨어 아키텍처가 무엇인지 정의한다면 '중요한 어떤 것'이라고 설명하는데, 바로 이런 "중요한 결정들"이 인간이 해야 할 일이다.
설계 사고는 프로그래밍에만 필요한 것이 아니다. 다음과 같이 일상생활에서도 연습할 수 있다.
- "여행 계획 세우기": 예산, 시간, 취향을 모두 고려해서 최적의 여행 계획 만들기
- "집 정리하기": 공간을 효율적으로 활용하면서도 사용하기 편하게 정리하기
- "모임 계획하기": 참석자들의 다양한 요구를 만족시키는 모임 계획하기
좋은 설계자는 항상 "왜"를 묻는다. "왜 이 기능이 필요한가?", "왜 이 방법을 선택했는가?", "왜 다른 방법은 안 되는가?"와 같이 “왜”라는 물음과 궁금증을 연습하는 것도 좋다.
한 가지 문제를 여러 관점에서 바라보는 연습을 해보는 것도 좋다. 사용자 관점에서 "사용하기 편할까?", 관리자 관점에서 "유지보수하기 쉬울까?", 경영자 관점에서 "비용 대비 효과가 있을까?"
엔터프라이즈 아키텍처 소프트웨어 시장은 미화 3억 8,319만 달러로 추산되었으며, 예측 기간 동안 연평균 성장률(CAGR)은 9.69%로 2031년에는 미화 5억 573만 달러에 도달할 것으로 예상된다. 이는 설계 사고와 아키텍처 능력에 대한 수요가 계속 늘어나고 있다는 뜻이다.
왜 그럴까? 세상이 점점 복잡해지고 있기 때문이다. 스마트폰, 자동차, 가전제품까지 모든 것이 인터넷으로 연결되는 시대에서는 단순히 개별 제품을 만드는 것이 아니라, 모든 것이 서로 연결되어 작동하는 큰 시스템을 설계해야 한다.
코딩은 정해진 설계도에 따라 집을 짓는 일이라면, 설계 사고는 어떤 집을 지을지 계획하는 일이다. AI가 집 짓는 일(코딩)을 많이 도와주게 되었지만, 어떤 집을 지을지 결정하는 일(설계)은 여전히 사람이 해야 한다.
단순성은 설계에서 매우 중요하다. 아키텍처가 너무 복잡해서 이해하기 어려우면 시간이 지남에 따라 설계를 구현하고 관리하는 것이 어려워진다. 좋은 설계는 복잡한 문제를 단순하고 이해하기 쉽게 만드는 것이다.
미래 사회에서는 단순히 주어진 일을 잘하는 사람보다는, 복잡한 문제를 체계적으로 해결하고, 미래를 내다보며, 서로 다른 요구사항들 사이에서 최적의 해답을 찾아내는 "설계 사고"를 가진 사람이 더욱 중요해질 것이다.
코딩 교육도 단순히 프로그래밍 언어를 가르치는 것에서 벗어나, 이런 설계적 사고를 기르는 방향으로 바뀌어야 한다. 그래야만 AI 시대에도 인간만이 할 수 있는 창조적이고 의미 있는 일을 계속할 수 있을 것이다.
주요 인용출처
보드 믹스 : 초보자도 쉽게 이해하는 시스템 아키텍처
Global Growth Insights : Enterprise Architecture Software 시장 규모, 점유율, 성장 및 산업 분석, 유형 (클라우드 기반, 온 프레미스), 응용 프로그램 (대규모 기업, 중소 기업 (SMES, 기타), 지역 통찰력 및 2033 년 예측.
위키 백과 : 2024년 크라우드스트라이크 사고
OSC : 비개발자도 쉽게 이해하는 ‘아키텍처’의 개념
요즘 IT : 개발자를 위한 ‘소프트웨어 아키텍처’ 개념과 활용법