1. 아키텍처의 순환과 ‘페이스팜(Facepalm)’ 현상
소프트웨어 업계에서는 ‘지저분한 모놀리스’를 해결하기 위해 마이크로서비스로 전환했다가, 복잡성 문제로 다시 ‘모듈형 모놀리스’로 회귀하는 순환이 반복됩니다. 케블린 헤니는 이를 ‘페이스팜’ 상황으로 규정하며, 문제의 본질이 아키텍처 스타일이 아닌 설계 역량의 부재에 있음을 지적합니다. 지저분한 구조는 어떤 기술을 선택하든 동일한 문제를 야기합니다.
2. 잊혀진 역사와 고전적 설계 원칙
현대적인 마이크로서비스의 핵심 개념들은 사실 1960년대와 70년대에 이미 정립되었습니다. 데이비드 파나스의 ‘정보 은닉(Information Hiding)’과 에드거 다익스트라의 ‘관심사 분리(Separation of Concerns)’는 수십 년간 소프트웨어 공학의 근간이 되어왔습니다. 강연자는 이러한 고전적 원칙들이 현대의 기술적 유행 속에서 이름만 바뀐 채 재발견되고 있다고 강조합니다.
3. 아키텍처를 정의하는 세 가지 핵심 질문
효과적인 아키텍처 설계를 위해 아키텍트는 세 가지 질문에 답해야 합니다. 첫째, 시스템을 구성하는 ‘구조적 요소’가 무엇인가? 둘째, 이러한 요소들이 서로 어떤 ‘관계’를 맺고 있는가? 셋째, 왜 그러한 구조와 관계를 선택했는지에 대한 ‘설계 근거’는 무엇인가? 이 질문들은 시스템의 규모나 기술 스택에 상관없이 아키텍처의 본질을 꿰뚫는 질문들입니다.
4. 운영과 개발 사이의 트레이드오프
아키텍처 결정은 항상 운영 효율성(Operational)과 개발 편의성(Developmental) 사이의 트레이드오프를 수반합니다. 마이크로서비스는 확장성과 가용성 같은 운영적 이점을 제공할 수 있지만, 동시에 개발 복잡성과 네트워크 오버헤드를 증가시킵니다. 따라서 단순히 유행을 따르기보다는 조직의 상황에 맞는 최적의 균형점을 찾는 것이 중요합니다.
5. 결합도와 응집도의 중요성
결국 좋은 아키텍처의 척도는 결합도(Coupling)를 낮추고 응집도(Cohesion)를 높이는 것입니다. 결합도는 모듈 간의 의존성과 가정을 최소화하는 것을 의미하며, 응집도는 논리적으로 연관된 요소들을 하나의 견고한 단위로 묶는 것을 의미합니다. 이러한 원칙을 준수할 때 비로소 유지보수가 용이하고 지속 가능한 시스템을 구축할 수 있습니다.