[심비 365] 완벽한 아키텍처는 '설계의 인내'에서

by 박동기

야고보서 1:4

인내를 온전히 이루라 이는 너희로 온전하고 구비하여 조금도 부족함이 없게 하려 함이라


Perseverance must finish its work so that you may be mature and complete, not lacking anything.


완벽한 아키텍처는 '설계의 인내'에서 태어난다. 야고보서 1:4 말씀은 견고한 소프트웨어를 설계하고 최적화하는 과정과 매우 닮아 있다.


야고보서는 당시 로마 제국의 박해와 경제적 어려움으로 인해 흩어져 있던 유대인 그리스도인들에게 보내진 편지다. 그들에게 '시련'은 선택이 아닌 일상이었다. 야고보는 이 시련이 단순히 고통으로 끝나는 것이 아니라, '인내'라는 공정을 거쳐 결국 신앙의 완성도를 높인다는 점을 강조합니다.


인내(Hupomonē)는 단순히 수동적으로 참는 것이 아니라, 장애물 아래서도 굴하지 않고 목표를 향해 나아가는 '능동적인 끈기'를 의미한다. 온전히 이루라(Finish its work)는 인내가 중도에 멈추지 않고 그 목적지에 도달하게 하라는 뜻이다. 온전하고 구비하여(Mature and complete)에서 '온전'은 결함이 없는 상태를, '구비'는 필요한 모든 부품이나 기능이 갖춰진 상태를 의미한다.


소프트웨어 개발 사이클에서 가장 고통스러우면서도 중요한 구간은 어디일까? 많은 엔지니어가 코드를 한 줄도 쓰기 전에 화이트보드 앞에서 시스템의 구조를 잡는 **'설계 단계'**를 꼽는다. 인공지능이 발달한 시대에하는 설계 능력이 훨씬 더 중요해졌다. 성경 야고보서 1장 4절은 이 고통스러운 설계의 과정을 관통하는 놀라운 통찰을 제시한다.


"인내를 온전히 이루라 이는 너희로 온전하고 구비하여 조금도 부족함이 없게 하려 함이라"


시스템 아키텍트의 언어로 번역하면 "설계의 복잡성과 검증의 고통을 끝까지 견뎌내어, 빈틈없는 아키텍처를 완성하라"는 뜻이 된다.


시련(Trial)은 설계 단계에서 마주하는 'Trade-off'의 고통이다. 아키텍처 설계는 끊임없는 선택과 포기(Trade-off)의 연속이다. 가용성(Availability)을 높이려면 비용이 상승한다. 일관성(Consistency)을 택하면 성능이 저하된다. 이러한 모순적인 요구사항들 사이에서 최적의 해를 찾는 과정은 설계자에게 큰 '시련'이다. 제품을 만들때도 저렴한 자재를 갖고 만들면 기능이 축소된다. 스펙이 화려하면 제품 단가가 올라가 중국 제품과 가격 경쟁에서 밀린다. 최적의 설계하는 과정이 중요하다.


하지만 이 시련을 피하기 위해 설계를 서두르면 어떻게 될까? 잘못된 기반 위에 세워진 시스템은 운영 단계에서 반드시 무너진다. 시련은 설계를 망가뜨리는 방해물이 아니다. 시련은 시스템의 약점을 미리 드러내어 더 단단하게 만드는 필수 공정이다.


인내를 온전히 이루라는 끝까지 설계를 온전하게 해야 함을 의미한다. 많은 프로젝트가 일정에 쫓겨 설계를 '적당히' 타협한다. 그러나 야고보는 인내를 '온전히(Finish its work)' 이루라고 권고한다. 이는 설계 단계에서 다음을 의미한다.


엣지 케이스의 철저한 검증을 해야 한다. "설마 이런 일이 생기겠어?"라는 안일함을 버리고, 발생 가능한 모든 장애 시나리오를 설계에 반영하는 것이다.


아키텍처 리뷰의 인내다. 동료들의 비판적인 리뷰와 피드백을 수용하며 설계를 수정하고 또 수정하는 지루한 반복 과정을 끝까지 완수하는 것이다. 지루하고 각 부서에 샌드위치같은 상황이다. 다 그냥 던지고 싶어도 리뷰는 끝까지 이어나가야 한다.


기술 부채의 사전 차단이다. 당장 편한 방식(Quick & Dirty)의 유혹을 견디고, 장기적으로 지속 가능한 구조를 고집하는 것이다. 한번 설계가 잘못되면 개발 시간을 기하 급수적으로 늘어난다. 처음 설계를 잘 해놓으면 개발 시간은 급격하게 줄어든다. 기술 부채가진 소스를 받은 적이 있다. 아직도 그 소스때문에 인생의 시간 낭비를 하고 있다. 간단한 기기인데 소스를 엉망으로 설계해서 한 군데 고치면 10군데에서 사이드 이펙트가 발생한다. 쓰레기 코드는 개발자 삶을 쓰레기로 만든다. 기술 부채는 사전 차단해야 한다. 이 인내의 루프가 종료(Terminated)되지 않고 끝까지 돌아가야만 시스템은 비로소 안정성을 얻는다.


온전하고 구비하여는 'Production-Ready' 아키텍처의 완성이다. 인내의 공정을 거친 아키텍처는 비로소 두 가지 상태에 도달한다.

아키텍저 완성은 온전함(Mature/Robustness)이다. 온전함이란 어떤 부하(Load)나 장애 환경에서도 시스템의 핵심 가치를 유지하는 견고함을 갖춘 상태다.

아키텍저 완성은 구비함(Complete/Extensibility)이다. 현재의 요구사항을 충족할 뿐만 아니라, 미래의 비즈니스 변화를 유연하게 수용할 수 있는 인터페이스와 확장성이 준비된 상태다.


두 단계에 이르면 시스템은 "조금도 부족함이 없는(Lacking nothing)" 상태가 된다. 즉 운영 단계에서 개발자를 괴롭히지 않는 '효자 시스템'이 된다.


결론을 말하면 인내는 설계자의 가장 강력한 도구다. 훌륭한 아키텍트는 뛰어난 코딩 실력보다 설계를 끝까지 다듬는 인내에서 판가름 난다. 인공지능시대에는 코등 실력보다 설계 실력이 훨씬 더 중요하다. 지금 화이트보드 앞에서 혹은 설계 문서의 빈 페이지 앞에서 괴로워하고 있다면 기억하자. 그 인내가 온전히 이루어질 때 당신의 시스템은 비로소 세상을 견딜 수 있는 '온전한 생명력'을 얻게 될 것이다.



매거진의 이전글[심비 365] 주 앞에서 즐거워하는 개발자.