*있는 그대로의 내용이므로 기록정리성 글이지 확인 및 정리된 글이 아닙니다.

[미들웨어 기본]Tier의 역사에 대한 보다 자세한 설명은 아래 링크 1을 참조.인터넷이 발달하기 전/과거에는 기업이 컴퓨터를 이용하여 업무를 처리한다. / 이것이 2-Tier의 구조이다. (클라이언트 <->서버)/이 방식은/서버에 클라이언트가 직접 접근하여 업무를 처리하는 방식이고/비즈니스 로직은 클라이언트에서 처리/데이터 저장 및 조회는 데이터베이스를 직접 사용하는 것이다. / 비즈니스 로직을 클라이언트에서 처리하기 때문에 /클라이언트 성능이 좋아야 했고 /로직 변경 시 /클라이언트 프로그램을 재배포해야 했다.
이후 지금까지도 정형화된 3-Tier 구조가 사용된다. / 3개의 영역으로 구성되어 있으며 / 사용자로부터 입력을 받아 표시되는 프레젠테이션 영역 / 이전 입력단에서 받은 값으로 비즈니스 로직을 처리하는 애플리케이션 영역 / 데이터의 저장 및 조회를 담당하는 데이터베이스 영역이다.- 프레젠테이션 – 브라우저(chrome, Internet Explorer) – 애플리케이션 – WAS(Web Server + Application Server) – 데이터베이스 – DB 서버는 로직이 변경되더라도 클라이언트를 변경할 필요 없이 애플리케이션 영역만 수정, 클라이언트 리소스 강제 최소화 등 2-Tier에 비해 많은 장점이 있어 현재까지 사용되어 왔다. 그러나 코드 재사용에는 어려움이 있었다.
최근 클라우드나 MS가 사용되면서 /N-tier 구조가 주로 사용되고 있다. / 코드의 재이용이 용이하고/변경하는 부분이 있으면 그 서비스(컴포넌트)만 수정하면 된다. / 또한 이러한 방식으로 인해 소요되는 개발 시간이 현저히 줄어든다. /
Middleware의 대표적인 제품군으로 WAS와 TP 모니터가 있다. / 일반 기업의 앱 제공은 WAS가 주로 사용되지만/금융권의 경우 TP 모니터를 주로 사용하는 것으로 알려졌다. / WAS의 메모리 이슈가 한몫하고 있는데 이유는 다음과 같다. / WAS는 JAVA 기반이며 TP는 C 기반이다. / C는 메모리적으로 범위 지정이 간단하고 디테일하게 할 수 있는 반면 /JAVA는 디테일이 힘들어 대용량의 일처리 시 문제가 빈번하게 발생한다고 한다.(? – 보안보다는 성능 및 가용성 부분의 이슈가 좀 더 클 것으로 보인다.)
WAS는 /인터넷상에서 HTTP를 통해서 /유저 컴퓨터나 디바이스에 애플리케이션을 실행하는 /미들웨어(소프트웨어 엔진)이다. / WAS는 동적 서버 컨텐츠를 실행함으로써/일반적인 웹 서버와 구별되며/주로 데이터베이스 서버와 같이 실행된다. / 웹서버+웹컨테이너(JVM)에서/웹상에서 사용하는 컴포넌트를 실어 사용하는 서버이며/여기서 웹컨테이너는 JSP와 Serverlet을 실행시킬 수 있는 SW를 웹컨테이너라고 한다. 링크2

[미들웨어 동작 및 구성]

Java는 JVM에서 모든 것이 움직인다. / JVM은 프로세스라고 생각하면 되며, / 하나의 프로세스(=JVM)를 「Container」라고 불렀다(과거에는 도커 및 Container의 정의가 정해져 있지 않았을 때) / 상기에서 설명한 웹 컨테이너가 「JVM」을 의미한다.1. 사용자가 인터넷에서 웹페이지(정적)에 접속하여 특정 요청을 실행(HTTP)2. 수신된 요청을 웹서버는 WAS의 컨테이너(JVM)에 전달3. 동적 데이터를 처리한 후 DB의 값을 변환하고 4. 반환된 값을 다시 사용자에게 전달
Web Server에 /CDN을 연동시키면, 요구되는 값을 / 내부를 거쳐 확인 후 송신하는 것이 아니라 / 사전에 캐시되어 있는 값을 /CDN으로 대신 전달하여 / 요구에 대한 반응 속도를 빠르게 하는 것이다. /
DB인터넷 요구세션이 너무 많으면 /WAS 및 DB쪽에 문제가 발생하는데 /그때 대응방법의 /우선순위 및 선호도에 대한 현직자의 코멘트이다.1st.JVM 프로세스(컨테이너) 내 세션 제한을 줄인다.2nd.DB 세션 제한을 줄인다.3rd.DB 이중화 요청이 많이 오는 상황에서 /WAS와 DB가 해당 요청을 감당할 수 없을 정도로 리소스가 부족한 경우 / 들어오는 요청을 제한해야 한다. / 그러나 한쪽 제한만으로는 문제가 발생할 수 있기 때문에/WAS와 DB의 세션 제한을 균형 있게 줄이는 것이 중요한데/우선순위를 두면 WAS, DB 중 최초로 요청 세션을 받는 WAS에서 요청을 줄이는 것이/전체 요청을 줄일 수 있기 때문에 더 효율적이라고 한다.
동시에 과도하게 세션이 집중되는 것을 방지하기 위해 / 세션 제한을 가하는데 / 보통 Min과 Max가 비슷하게 하는 것이 좋다고 한다.
[미들웨어 모니터링 및 관리]

APM은 Application performance Manager의 약자로 /WAS의 성능 관리를 위한 툴이다. (모니터링) / WAS에 APM 제품 Agent를 별도로 설치하고 정보를 수집하여 /APM(수집) 서버로 전달한다. / 수집된 정보를 바탕으로 /APM은 정형화된 그래프 등을 통해 / 대시보드화된 WAS 각종 정보를 /보기 쉽게 표시한다.
SMS, NMS의 경우/각각 시스템 관리 소프트웨어와 네트워크 관리 소프트웨어이지만/APM, SMS, NMS 각각/WAS 내 각 영역의 성능을 모니터링하고 확인하기 쉽도록/통계를 내는 제품군으로 볼 수 있다.APM – Application performance ManagerSMS – System Management SystemNMS – Network Management System
APM에서 가장 중요한 성능 지표는 /TPS와 Trace, JVM 모니터링이다. / TPS는 초당 트랜잭션 수입니다. / 이 트랜잭션은 WAS에서 발생하는 모든 왕복 움직임을 기준으로 하는데/단순히 HTTP 요청 |응답, SQL 요청 |응답 뿐만 아니라/통과하는 모든 요구에 대한 수를 포함하는 것이라고 한다. / 마침 웹~DB로 이동하는 요청만 취한 것이 아니라 /WAS에서 발생하는 모든 것으로 볼 수 있으며 /비중은 SQL 비중이 가장 높다고 한다. / 또 다른 트랜잭션의 의미는 /하나의 논리적 작업 단위로 실행되는 일련의 작업, DB쪽에 반응하는 쿼리 또는 쿼리 묶음이라고/생각하면 되는 것으로 / 일회성 1행 쿼리, 일회성 N행 쿼리를 모두 하나의 트랜잭션으로 보고/이는 위 SQL 요구사항 하위에 포함하는 내용이므로 그렇게 이해하도록 하자.
Trace는 추적의 의미, /로그 수집 수준의 의미 등으로 볼 수 있으며, /성능 지표에서 Trace는 Debug보다 높은 수준의 로그 수집 단계로 지정한 것(혹은 행위)에 대한 깊은 로그 수집으로 볼 수 있다. / 성능지표에서의 Trace는 그 수집된 로그의 정보를 빈도와 정보를 파악하는 것으로 간주할 수 있다.링크3
APM Agent를 WAS에 설치하면/정보 수집뿐만 아니라/환경설정에 대한 제어도 가능한지 궁금했는데/과거에는 그렇게 지원해서 사용하는 경우도 있었지만/Web,DB,WAS를 APM에서 제어할 때,/플랫폼 간의 잦은 충돌 문제로 인해/최근에는 모니터링만을 주된 목적으로 사용하고 있다고 한다.
APM은 웹/앱 서비스를 개발하는 회사에/필수로 넣으려는/중요한 성능 관리 장비이자 지표이다. / 다만 코어당 몇 백만원씩의 가격으로 인해/일반 서버에서는 주로 사용되지 않는다고 한다. (SMS로 성능만 모니터링 하셔도 되므로) /

다중 WAS 구조의 경우/WAS는 세션 유지를 위해/WAS 제품군 특정 라이센스, Enterprise 라이센스(Jeus 기준)를 사용해야 하며/그렇지 않으면 Web Server 간 세션 공유를 할 수 없다. / 이럴 때 WAS1을 이용하는 사용자가 WAS2를 사용할 경우 WAS1 세션을 공유받지 못하고 사용자 입장에서는 다시 로그아웃 후 로그인하는 상황이 발생한다고 한다. / 카드사, 금융권의 경우/한 사용자가 다양한 WAS에 접속하는 일이 많이 발생하기 때문에/기본적으로 WAS 제품군 특정 라이선스를 사용한다고 한다. /
Web 서버에도 세션을 유지해 주는 Keep_alive 기능이 있어/잠시 혼란스러웠지만, /WAS와 조합했을 경우의 이해는 다음과 같다. /Web 서버의 Keep_alive (HTTP 1.1) 는 /백앤 구간의 세션 유지 기능의 사용을 허용해준다는 느낌이며, /다중 WAS 간의 세션 유지와 연관짓기에는 애매한 부분이 있다. / 단, Web의 Keep_alive가 실행되지 않으면/후의 WAS 자체의 세션 유지도 의미가 없어지므로/Web의 Keep_alive는 선행적인 개념이며, /WAS의 세션 유지 및 공유는 WAS 자체의 기능으로 볼 수 있을 것 같다.
*수정할 부분이 있으면 댓글을 달아주세요.
[레퍼런스]링크1 https://syhwang.tistory.com/26링크2 https://helloworld-88.tistory.com/71링크3 https://blog.lulab.net/programmer/what-should-i-log-with-an-intention-method-and-level/