어플리케이션 아키텍처
우선 마이크로서비스 Architecture를 내외부로 구분했을 때 외부 Architecture가 Architecture를 이루는 구성요소의 관계를 설명한다면, 내부 Architecture는 구성요소 자신의 내부 구조를 상세히 정의하는 것을 말합니다. 이런 어플리케이션의 내부 구조를 정의하는 활동을 Application Architecture라고 하는데요.
마이크로서비스의 Inner Architecture, 다른 말로 하면 Application Architecture에 대해 자세히 살펴보도록 하겠습니다. Application Architecture는 어플리케이션이 동작하는 구조, 즉 동작하는 공통 메커니즘을 정의하는 것입니다.
웹 어플리케이션 구조
클라이언트 쪽에 브라우저 및 모바일 화면이 있고, 서버 쪽에 웹 서버와 어플리케이션 서버 그리고 제일 말단에 데이터를 저장한 DB 서버가 존재합니다. 정적 콘텐츠만 존재한다고 한다면 웹 서버만 존재하면 되고, 동적 콘텐츠가 존재한다면 DB 서버에서 데이터를 가져와서 어플리케이션 서버에서 동적으로 처리한 뒤 웹 서버를 통해 클라이언트로 보내주면 됩니다.
웹서버나 어플리케이션 서버 내의 구조를 어떻게 정의하느냐가 Application Architecture의 영역입니다. 웹 서비스 초창기에는 웹 서버에서 HTML 언어로 정적 서비스만 제공하는 것이 1단계였습니다. 그러다가 동적 콘텐츠를 제공하기 위한 CGI가 등장하게 되고, 데이터를 가공하여 보여줄 수 있게 됩니다.
그런데 Perl 등의 언어로 저장한 CGI는 세션 관리 기능이 없었습니다. 그래서 이러한 문제점 해결을 위해 Java 언어를 이용한 Servlet JSP가 등장하게 됩니다. 그리고 이 시점에 엔터프라이즈 업무 처리를 위한 컴포넌트 모델의 EJB가 등장해서 화면 디스플레이 처리와 비즈니스 로직 처리를 분리하게 됩니다.
왜냐하면 웹 기술이 발전함에 따라 웹 시스템으로 서비스할 수 있는 비즈니스가 많아지고, 이러한 시스템이 매우 복잡해져서 점점 관리하기 힘들게 됩니다. 클라이언트를 위한 기능과 계산 등 비즈니스 순수 로직을 구분해서 개발하는 것이 복잡성 관리 측면에서 효율적이라는 것을 깨닫게 된 결과라고 할 수 있습니다. 그래서 이러한 Biz 로직을 모듈화해서 재사용하겠다는 개념이 등장하고, 이런 컴포넌트 모델을 기술적으로 지원한 자바 표준이 EJB인 겁니다.
EJB에서는 Biz 로직을 담고 있고, JSP에서는 화면 디스플레이를 처리만 하고, Servlet에서는 로직 흐름제어를 담당합니다. 그렇지만 이런 구조도 문제가 제기되기 시작하는데, EJB가 너무 무겁고, 즉 Biz 로직을 구현하기 위해서는 EJB 스펙을 상속하게 되는데 이러한 구문이 Biz 로직보다 많았습니다.
그래서 이에 대한 불만과 개선으로 등장하게 된 것이 Spring 프레임워크입니다. Spring은 POJO라고 부르는 컨테이너와
프레임워크에 의존하지 않는 일반 Object의 생명주기 관리나 Object 간의 의존관계를 해결하는 방법을 제공하고 있습니다.
특히 POJO로 Biz 로직을 순수하게 표현하는 것을 중요하게 여깁니다. 이는 기존의 EJB 프레임워크로 만든 어플리케이션 코드가 기술 처리를 하는 부분과 Biz 로직 처리를 하는 부분들을 잘 분리하지 않아 복잡하게 얽힘으로써 시스템이 점점 복잡하게 되어 유지보수 및 확장이 어렵다는 단점을 극복하려는 시도입니다.
따라서 POJO 등으로 비즈니스를 객체 모델로 표현하고, Transaction 처리 및 에러, 로깅 처리, 데이터 처리 등 기술에 의존적인 부분들을 분리하려고 노력하고 있습니다. 이런 의존관계들을 분리하기 위해 Spring에서는 AOP나 DI 기술을 활용하고 있습니다.
이러한 노력들이 지지를 받아 최근에 와서는 사실상 Spring이 Java 진영의 표준 프레임워크가 되었다고 보고 있습니다. 이처럼 어플리케이션 Architecture는 개발 효율과 유연성을 위해 어플리케이션이 처리하는 기능들을 응집성 있게 각 영역으로 구분하고 이들 간의 의존관계를 최소화하려는 노력들을 하고 있습니다.
'SW > 마이크로서비스' 카테고리의 다른 글
마이크로서비스 : 헥사고널 아키텍처 : 개념, 개요, 정의 (0) | 2020.05.05 |
---|---|
마이크로서비스 : 어플리케이션 아키텍쳐 : 계층형 아키텍처 : 개념, 정의, 개요 (0) | 2020.05.04 |
마이크로서비스 : 기반 서비스의 종류 : 두번쨰 이야기 (0) | 2020.05.02 |
마이크로서비스 : 기반 서비스의 종류 : 첫번쨰 이야기 (0) | 2020.05.01 |
마이크로 서비스 : 외부 아키텍처 : 인프라, 플랫폼, DevOps : 개념, 정의, 개요 (0) | 2020.04.30 |