미들웨어 (Middleware)
미들웨어란 ?
분산 컴퓨팅 환경에서 서로 다른 기종의 하드웨어나 프로토콜, 통신환경 등을 연결하여 응용 프로그램이 운영되는 환경 간에 원만한 통신이 이루어 질 수 있게 하는 소프트웨어이다.
양쪽을 연결하여 데이터를 주고 받을 수 있도록 중간에서 매개 역할을 하는 소프트웨어로 네트워크를 통해 연결된 여러개의 컴퓨터에 있는 많은 프로세스들에게 어떤 서비스를 활용할 수 있도록 연결해주는 소프트웨어를 말한다.
예를 들어, 3-Tier 클라이언트/서버 구조라면 웹 브라우저에서 데이터베이스로부터 데이터를 저장하거나 읽어 올 수 있도록 중간다리 역할을 하는 미들웨어가 있다.
미들웨어 등장 배경
클라이언트와 DBMS가 직접적으로 연결되어 동작하는 방식이 여러 가지 단점이 있었음을 알게 된 후 이러한 문제점을 해결하기 위해 등장했다. 클라이언트와 DBMS 사이에 위의 그림과 같이 또 다른 서버를 두는 방식이다.
클라이언트는 중앙에 있는 서버에게 요청을 보내고, 중앙에 있는 서버(미들웨어)는 대부분의 로직을 수행한다.
이때, 데이터를 조작할 일이 있으면 DBMS에게 부탁한다.
그리고 그 결과를 클라이언트에게 전송하면 클라이언트는 그 결과를 화면에 보여주게 된다.
클라이언트가 해야했던 복잡한 로직은 사라지고, 단순히 화면에 그 결과만 보여주고 사용자로부터 값을 입력 받아서 미들웨어에게만 보내는 역할만 수행하면 되기 때문에 클라이언트의 크기가 매우 작아지게 됐다.
프로그램 로직이 변경이 된다 하더라고 모든 클라이언트를 다시 배포할 필요가 없이 중앙의 미들웨어만 변경하면 되는 장점을 가진다.
사례
기존의 1-Tier 아키텍처로 어플리케이션을 운영할 때는 어떤 포인트에서 장애가 발생했는지 분석하기 쉽지 않다는 단점이 있었다. 관리의 효율성을 위해 3-Tier 아키텍처가 등장하게 되었다.
프레젠테이션 (Web Server)
프리젠테이션 계층은 주로 사용자에게 보이는 계층으로 웹 브라우저 등에서 실행될 수 있다.
애플리케이션 계층 (WAS) (비즈니스 로직 계층이라고도 함)
애플리케이션의 핵심으로 해당 계층에서 프레젠테이션에서 보내진 데이터들이 처리된다.
요청되는 정보를 어떠한 규칙을 바탕으로 처리하고 가공하는 것들을 담당한다.
데이터 계층(DB)
데이터베이스에 접근해서 데이터를 읽거나 쓰는 것을 관리하는 계층이다.
특히 애플리케이션 계층은 또 한번 나눌 수 있게 되는데,
- Web server
클라이언트의 요청이 유입되는 순간 호출되는 프론트엔드의 정적 페이지(HTML, css, js 등)를 전용으로 처리하는 서버이다. HTTP를 기반으로 클라이언트의 요청을 서비스 하는 기능을 담당한다.
정적 콘텐츠를 제공함에 있어 WAS를 거치지 않고 바로 제공이 가능하며, 동적 콘텐츠에 대한 요청이 들어오면 WAS에 요청을 보내고 WAS가 처리한 결과를 클라이언트에게 전달한다. - WAS
로그인, 검색, DB 조회 등의 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위해 만들어진 애플리케이션 서버이다.
Q. Web Server와 WAS를 분리하는 이유 ?
1. 역할 분리를 통한 서버의 부담 감소
일반적인 웹 페이지는 정적 + 동적 컨텐츠로 구성된다.
정적 컨텐츠에 대한 요청은 웹 서버가 전담하고 WAS는 DB 조회나 비즈니스 로직을 처리하는 것에 집중해 서버 부담을 줄인다.
2. 보안 강화
WAS에는 실제 웹 어플리케이션이 실행되기 때문에 외부와 직접 연결이 되어 있다면 리소스들이 외부로 노출될 위험이 있다.
3. 로드 밸런싱 기능의 사용
웹 서버에 여러대의 WAS를 연결해 로드 밸런싱을 가능하게 한다.
여러대의 WAS를 두고 웹 서버에서 요청을 분산시킴으로써 하나의 WAS가 처리하는 요청의 양이 줄어들어 안정적인 서비스 운영이 가능하다.
또한 여러대의 WAS를 사용하면 하나의 WAS에서 장애가 생기더라도 해당 WAS를 사용 중지시키고 재시작함으로써 무중단 운영, 장애 극복 등에 유리하다.
미들웨어가 필요한 이유 ?
개발자 관점
- 비즈니스 로직을 개발하기 바쁘다.
- 장애 상황에서 생각할 수 있는 문제 범위가 광범위하다.
- 서비스를 운영하다가 접속자가 과도하게 몰려 페이지가 열리지 않는 장애가 발생했다면
실 서버의 자원 사용률은 여유가 있으나 WEB/WAS에 설정된 동시 사용자 수 제한을 초과하거나,
DB Connection Pool 부족 등의 소스 내부에서 검출할 수 있는 범위 밖 문제들이다.
- 서비스를 운영하다가 접속자가 과도하게 몰려 페이지가 열리지 않는 장애가 발생했다면
엔지니어 관점
- 어떤 서비스가 유입되고 호출되는지 알 수 없다.
- 인프라 조직의 네트워크, 하드웨어, 운영체제, 데이터베이스 담당 부서 별로 관점이 다를 것
- NW : 해당 IP의 네트워크 트래픽 세션이 증가했네요.
- HW/OS : Disk I/O가 증가했구요. CPU/Memory 사용률이 상승했습니다.
- DB : Select 및 DML Query가 지속 유입되구요. Active Session이 증가했습니다.
- 인프라 조직의 네트워크, 하드웨어, 운영체제, 데이터베이스 담당 부서 별로 관점이 다를 것
미들웨어의 종류
그림을 기준으로 좌측은 Web Server이고 우측은 WAS이다.
결론
개발자 - 소스 개발/운영에 집중하고 사용자를 고려한 서버 튜닝과 분석을 맡길 수 있다.
인프라 엔지니어 - 실제 유입되는 서비스를 알아채고 특정 로직이 수행되면서 인프라 영역에 문제가 된다는 것을 통역해줄 수 있다.
참고