ArchitectureSoftware Engineering

아키첵처 설계의 과거와 현재

·9 min read

도서 "아키텍트 첫걸음" 에서 발췌

2000년대의 시대적 배경과 아키텍처 설계 트랜드

2000년대 초반은 기업의 업무 시스템이 메인 프레임에서 오픈형 시스템으로 전환되는 흐름이 있었다.

메인 시스템은 제조사가 모든 것을 통제하는 거대한 중앙집중형 컴퓨터로,

당시 IBM에서 제공하는 하드웨어, 운영체제, 데이터베이스에 종속되는 형태를 생각하면 된다.

오픈형 시스템은 UNIX나 윈도우 Server 기반 환경에서 표준 따라 서로 다른 제품들이 연계하는 방식의 시스템이다.

또한 인터넷의 폭발적 보급과 스마트폰의 등장으로 이커머스 사이트를 비롯해 일반 소비자 대상의 웹사이트가 새로운 판매 채널로 자리잡으며 중요한 역할을 하기 시작했다.

웹 애플리케이션과 SOA의 확산

2000년도 당시는 기술적 선택지가 많지 않았다.

초기에는 클라이언트 단말기에 설치된 업무용 애플리케이션이 데이터베이스 서버에 접근하는 클라이언트-서버 방식이 주류였다.

이후 점차 웹 애플리케이션으로 전환되면서 루비와 같은 웹 애플리케이션 프레임워크가 등장해 인기를 끌었다.

웹 애플리케이션은 '브라우저-AP서버-DB서버' 3계층으로 구성되며,

이에 따라 아키텍처도 'UI계층-비즈니스 로직 계층-데이터베이스 계층'으로 구성된 방식이 많이 사용됬다.

한편, 애플리케이션 통합 관점에서 기존 애플리케이션의 기능을 서비스 단위로 분리하고,

다양한 시스템에서 재사용 하도록 구성하는 SOA(서비스 지향 아키텍처)라는 설계 사상이 등장했다.

Java를 활용한 엔터프라이즈 애플리케이션 개발에서는 Java EE가,

SOA 서비스 구현 프로토콜은 SOAP(단순 객체 접근 프로토콜)이 표준으로 자리 잡았다.

다만 시간이 지나 표준이 지나치게 복잡하고 무거워지면서 개발 효율이 낮아지는 문제가 발생했다.

이러한 배경 속에서 Spring Framework와 같은 경량 컨테이너 프레임워크가 등장했다.

2020년대의 시대적 배경과 아키첵처 설계 트랜드

2020년대에는 B2C(일반 소비자 대상)와 B2B(기업 대상)에서 매력적인 서비스를 얼마나 신속하게 제공할 수 있는지가 중요 과제가 되었다.

기업 내부에서는 백오피스 업무 시스템과 경영 가시화 도구 등 다양한 소프트웨어가 등장하고 서로 연결되었다.

2023년 기점으로 생성형 AI가 등장하고,

현재시점으로도 기술의 발전 속도가 더욱 빨라지고 있다.

서비스에서 AI 기술을 적용하거나 통합한 사례와 이를 업무 개선에 활용한 사례도 꾸준히 증가하고 있다.

클라우드의 등장과 확산

AWS을 기점으로 현재 Microsoft Azure, Google Cloud Platform 등 주요 사업자가 클라우드 시장을 선도하고 있다.

현재는 새로운 시스템을 도입시 클라우드 퍼스트라는 사고방식이 정착되어 이를 우선적으로 검토하는 경우가 많다.

애플리케이션 설게시 클라우드 환경배포와 클라우드 서비스 제공 기능 활용을 기본 전제로 삼고 있으며,

이에 최적화된 아키첵처를 채택해야 한다는 클라우드 네이티브의 개념이 중요해지고 있다.

REST API의 보급

애플리케이션 간 데이터 통신을 간결하게 구현하는 설계 원칙의 등장으로,

다양한 클라우드 서비스에서 애플리케이션과 서비스간 연동이 한층 수월해졌다.

마이크로서비스

여러 개의 독립적인 소규모 서비스를 조합하여 하나의 애플리케이션을 구성하는 설계 방식으로 최근 비중이 늘어나고 있다.

각 서비스 단위로 독립적인 개발과 배포가 가능하며, 서비스 단위로 스케일링을 수행할 수 있다는 점,

추가로 서비스 별 적합 기술을 취사선택해 적용하는 점에서 큰 이점이 있다.

반면 분산 시스템 특성상 복잡성이 증가하고, 그에 따라 발생하는 과제와 비용이 문제이지만,

AI의 보급으로 인해 개발 생산성이 매우 증가하고 있으며,

컨텍스트를 효율적으로 쓰기 위해서는 마이크로 서비스의 중요성이 점점 커질 것으로 보인다.

소프트웨어 어질리티를 크게 향상시키고, 변화에 유연한 대응해야 하는 현대 개발 환경에서 충분히 검토할만한 가치가 있다.

다양성

프로그래밍은 객체 지향 언어(Java, C#), 함수형 언어(Haskell), 행위자 모델(Erlang)과 같이 다양한 언어가 존재하고 개별로 고유한 특성을 지닌다

또한 객체 지향과 함수형의 하이브리드 언어도 개발되고 있다.

데이터베이스에서도 전통적인 RDBMS, 열 기반, 문서 기반, 그래프 기반 등 다양한 NoSQL을 취사 선택 할 수 있게 되었다.

변화에 흐름이 가장 빠른 것은 프론트엔드로 HTML에서 jQuery 구현의 전통적인 방법부터,

최근 React와 같은 SPA 아키첵처가 자리잡고,

SSE를 고려한 SSR 프레임워크도 널리 사용되고 있다.

이처럼 애플리케이션 개발에 각 분야에서 활용할 수 있는 기술이 매우 다양해짐에 따라 상황에 맞는 기술을 선택하고 적제적소에 활용하는 역량이 요구되고 있다.

← Previous
개발에서 가장 어려운건 기획이다.
Next →
AI 시대 아키텍츠에게 요구되는 역할 변화와 필요한 역량