본 글에서는 애플리케이션 아키텍처와 관련된 개념들을 간략하게나마 정리한다.
애플리케이션 아키텍처란?
애플리케이션 아키텍처는 애플리케이션을 설계하고 구축하는 데 사용하는 패턴과 기술을 설명한다.
- 아키텍처는 애플리케이션을 구축할 때 따라야 할 로드맵과 모범 사례를 제공하여 체계적으로 구성된 애플리케이션을 완성할 수 있게 해준다.
- 여기서 패턴은 문제에 대한 반복 가능한 솔루션을 의미한다.
- 애플리케이션 아키텍처 종류로는 N계층, 웹-큐 작업자, 마이크로 서비스, 이벤트 기반 아키텍처, 빅 데이터(빅 컴퓨팅) 등이 있다.
N-tier 아키텍처
- N계층 아키텍처는 애플리케이션을 논리적 레이어와 물리적 계층으로 나눈다.
- 레이어는 책임을 구분하고 종속성을 관리하는 방법이다.
- 레이어마다 특정 책임이 있음
- 상위 레이어는 하위 레이어의 서비스를 사용할 수 있지만 하위 레이어는 상위 레이어의 서비스를 사용할 수 없음
- N계층 아키텍처는 폐쇄형 레이어 아키텍처 또는 개방형 레이어 아키텍처를 사용할 수 있다.
- 폐쇄형 : 자신과 맞닿아있는 하위 레이어로만 접속이 가능
- 개방형 : 하위에 있는 모든 레이어로 접속이 가능
- 계층은 물리적으로 분리되어 별도의 시스템에서 실행된다.
- 계층은 다른 계층을 직접 호출하거나 비동기 메시징(메시지 큐)을 사용할 수 있음.
- 계층을 물리적으로 분리하면 확장성과 복원력이 향상되지만 추가 네트워크 통신으로 인해 대기 시간도 증가함.
- 예를 들어, 3계층 애플리케이션에는 프레젠테이션 계층, 중간 계층(비즈니스 논리 처리), 데이터베이스 계층이 있음(중간 계층은 선택 사항).
- 전통적인 비즈니스에서 많이 사용되던 아키텍처이지만, 모노로틱(내부 요소 간 의존성이 강함)한 특성때문에 최근에는 조금 지양되고 있다.
Web-Queue-Worker 아키텍처
- 애플리케이션의 웹 프론트엔드는 HTTP 요청을 처리하고 백엔드 작업자(worker)는 CPU 집약적인 작업이나 장기 실행 작업을 수행한다. 이때, 프론트엔드는 비동기 메시지 큐(Queue)를 통해 작업자(worker)와 통신한다.
- Web-Queue-Worker 아키텍처는 보통 다음과 같은 구성을 갖고 있다.
- 하나 이상의 데이터베이스
- 빠른 읽기를 위해 데이터베이스의 값을 저장하는 캐시
- 정적 콘텐츠를 바로 제공하기 위한 CDN(Content Delivery Network)
- 원격 서비스(ex. 전자 메일 또는 SMS 서비스)
- 인증을 위한 Identity Provider
- 웹과 워커는 둘 다 상태 비저장이다.
- 세션 상태는 분산된 캐시에 저장할 수 있다.
- 모든 장기 실행 작업은 작업자에 의해 비동기적으로 수행된다.
- 작업자는 큐의 메시지에 의해 동작(trigger)되거나, 일정에 따라 실행된다.
- (장기 실행 작업이 없는 경우 작업자를 생략할 수 있음)
- 프론트엔드는 웹 API 형태로 구성될 수 있다.
마이크로 서비스 아키텍처
- 모든 요소를 하나의 애플리케이션에 구축하는 전통적인 모놀리식 접근 방식 대신, 마이크로 서비스는 작고, 독립적이며, 느슨하게 결합되어 있다.
- 각 서비스는 소규모의 집중 개발 팀에서 구축할 수 있으며, 개별 서비스를 배포할 때 팀 간의 조정이 거의 필요 없으므로 업데이트를 자주 수행할 수 있다(서비스를 독립적으로 배포할 수 있음).
- 서비스가 잘 정의된 API를 사용하여 서로 통신하며, 각 서비스의 내부 구현 세부 정보는 다른 서비스에서 볼 수 없다.
- 다중저장소 프로그래밍을 지원한다(모든 서비스가 동일한 기술 스택을 공유할 필요가 없음).
- 마이크로 서비스는 빠른 릴리스, 빠른 개발, 빠른 혁신, 복원력이 있는 아키텍처이다. 하지만 마이크로 서비스 아키텍처는 N-tier 아키텍처 또는 Web-Queue-Worker 보다 빌드 및 관리 방법이 좀 더 복잡함.
- 성숙한 개발 및 DevOps 문화가 필요함
- 관리/오케스트레이션, API 게이트웨이와 같은 요소가 추가적으로 필요
이벤트 기반 아키텍처
- 이벤트 기반 아키텍처는 이벤트 스트림을 생성하는 이벤트 생성자 와 이벤트 를 수신하는 이벤트 소비자로 구성된다.
- 생산자는 소비자와 독립적 관계이며, 각 소비자는 서로 독립적 관계이다.
- 생산자는 수신자가 받던 안 받던 관계없이, 일단 이벤트를 채널에 보내둠.
- 이벤트가 발생하면, 해당 이벤트를 구독하는 사용자가 이벤트를 수신함(pub/sub 패턴).
pub/sub 패턴이란?
- pub/sub 패턴은 비동기식 메세징 패턴으로,
- Publisher(발신자)는 Subscriber(수신자)에 대한 정보를 몰라도 그냥 일단 메세지를 채널에 보내놓는다
- 이 때 메세지에 맞는 Topic으로 보내놓으면, 해당 Topic을 구독중인 Subscriber에게만 메세지가 가게 된다
- 이벤트 기반 아키텍처는 지연 시간이 매우 짧은(실시간 처리) 어플리케이션 혹은 이벤트 요청에 다양한 종류의 작업을 처리해야 할 경우 유용하다.
빅데이터 아키텍처
- 빅 데이터 아키텍처는 기존의 데이터베이스 시스템에 비해 훨씬 크고 복잡한 데이터의 수집, 처리 및 분석 등을 수행하도록 디자인되었다.
- 빅데이터 아키텍처는 MLOps에 대해 정리한 블로그에서 더 자세히 확인할 수 있다.
Reference