- 있는 그대로의 내용이기 때문에 기록 정리성 글이지 확인 및 정리된 글이 아닙니다.
[미들웨어 기본]Tier 역사에 대한 자세한 설명은 아래 링크 1을 참조하면 된다.인터넷이 발달하기 전/과거에는 기업이 컴퓨터를 이용해 업무를 처리한다. / 이것이 2-Tier의 구조이다. (클라이언트 <->서버)/이 방식은/서버에 클라이언트가 직접 접속해 업무를 처리하는 방식이고/비즈니스 로직은 클라이언트에서 처리/데이터 저장 및 조회는 데이터베이스를 직접 사용하는 것이다. / 비즈니스 로직을 클라이언트에서 처리하기 때문에 / 클라이언트 성능이 좋아야 했고 / 로직 변경 시 / 클라이언트 프로그램을 재배포해야 했다.
이후 지금까지도 정형화된 3-Tier 구조가 사용된다. / 3가지 영역으로 구성되어 있으며 / 사용자로부터 입력받아 표시되는 프레젠테이션 영역 / 앞의 입력단에서 받은 값을 가지고 비즈니스 로직을 처리하는 애플리케이션 영역 / 데이터의 저장 및 조회를 담당하는 데이터베이스 영역이다.- 프레젠테이션-브라우저(chrome, Internet Explorer)-애플리케이션-WAS(WebServer+Application Server)-데이터베이스-DB서버는 로직이 변경되더라도 클라이언트를 변경할 필요 없이 애플리케이션 영역만 수정, 클라이언트의 자원 강요 최소화 등 2-Tier에 비해 많은 장점으로 현재까지 사용되어 왔다. 그러나 코드 재사용에 대한 어려움이 있었다.
최근 클라우드 및 MS가 사용되고/N-tier 구조가 주로 사용되고 있다. / 코드 재사용이 용이하고/변경할 부분이 있다면 해당 서비스(컴포넌트)만 수정하면 된다. / 또한 이러한 방식으로 인해 소요되는 개발 시간이 현저히 줄어든다. /
Middleware의/대표적인 제품군으로 /WAS와 TP 모니터가 있다. / 일반 기업의 App 제공은 WAS가 주로 사용되지만/금융권의 경우에는 TP 모니터를 주로 사용하는 것으로 알려졌다. / WAS의 메모리 이슈가 한몫하고 있는 이유는 다음과 같다. / WAS는 JAVA 기반이며 TP는 C 기반이다. / C는 메모리적으로 범위 지정이 용이하고 디테일하게 되는 반면 /JAVA는 디테일이 어려워 대용량의 일처리 시 문제가 자주 발생한다고 한다. (?-보안보다는 성능 및 가용성 부분의 이슈가 더 클 것으로 보인다.)
WAS는/인터넷상에서 HTTP를 통해/사용자 컴퓨터나 디바이스에 애플리케이션을 실시하는/미들웨어(소프트웨어 엔진)이다. / WAS는 동적 서버 컨텐츠를 실행함으로써 /일반적인 웹 서버와 구별되며 / 주로 데이터베이스 서버와 같이 실행된다. / 웹 서버 + 웹 컨테이너(JVM)에서 / 웹 상에서 사용하는 컴포넌트를 올려 사용하는 서버이며, / 여기서 웹 컨테이너는 JSP와 Services를 실행시킬 수 있는 SW를 웹 컨테이너라고 한다. 링크 2
[미들웨어 동작 및 구성]
Java는 JVM에서 모든 것이 움직인다. /JVM은 프로세스라고 생각하면 되며, /하나의 프로세스(=JVM)를 「Container」라고 불렀다(과거에는 도커 및 Container의 정의가 정립되어 있지 않을 때) / 위에서 설명한 웹 컨테이너가 「JVM」을 의미한다.1. 사용자가 인터넷에서 웹 페이지(정적)에 접속하여 특정 요청을 실행(HTTP) 2. 받은 요청을 Web Server는 WAS의 컨테이너(JVM)에 전달 3. 동적 Data를 처리하고 이후 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은 Applicationperformance Manager의 약자로 /WAS 성능관리를 위한 툴이다. (모니터링) / WAS에 APM 제품의 Agent를 별도로 설치하고 정보를 수집하여 / APM (수집) 서버에 전달한다. / 수집된 정보를 바탕으로 /APM은 정형화된 그래프 등을 통해 / 대시보드화된 WAS 각종 정보를 / 보기 쉽게 보여준다.
SMS, NMS의 경우/각각 시스템 관리 소프트웨어와 네트워크 관리 소프트웨어이지만/APM, SMS, NMS 각각/WAS 내 각 영역의 성능을 모니터링하고 확인하기 쉽도록/통계를 내는 제품군으로 볼 수 있다.APM-Application performance ManagerSMS-System Management System NMS-Network Management System
APM에서 가장 중요한 성능 지표는 /TPS와 Trace, JVM 모니터링이다. / TPS는 초당 트랜잭션 수인데 /WAS에서 요구와 응답을 1사이클 기준으로 한 값, 트랜잭션이 /1초에 얼마나 발생하는지를 확인하는 수치이다. / 이 트랜잭션은 WAS에서 일어나는 모든 왕복한 움직임을 기준으로 하는데/단순히 HTTP 요청|응답, SQL 요청|응답뿐만 아니라/지나가는 모든 요청에 대한 수를 포함하는 것이라고 한다. / 마침 웹~DB로 이동하는 요청만 파악한 것이 아니라 /WAS에서 발생하는 모든 것으로 볼 수 있으며 / 비중은 SQL 비중이 가장 높다고 한다. / 또 다른 트랜잭션의 의미는 /하나의 논리적 작업 단위로 실행되는 일련의 작업, DB측에 반응하는 쿼리 또는 쿼리 묶음이라고/생각하면 된다고 하니 / 일회성 1행의 쿼리, 일회성 N행의 쿼리를 모두 하나의 트랜잭션으로 보고 / 이는 위에서 설명한 SQL 요청의 하위에 포함되는 내용이므로 그렇게 이해하기로 하자.
Trace는 추적의 의미, /로그 수집 수준의 의미 등으로 볼 수 있으며 /성능 지표에서 Trace는 Debug보다 높은 수준의 로그 수집 단계로 지정한 것(혹은 행위)에 대한 깊은 로그 수집으로 볼 수 있다. / 성능지표에서 Trace는 그 수집된 로그의 정보를 빈도와 정보를 파악하는 것으로 생각된다.링크 3
APMAgent를 WAS에 설치하면/정보 수집뿐만 아니라/환경 설정에 대한 제어도 가능한지 궁금했는데/과거에는 그렇게 지원하고 사용하는 경우도 있었지만/Web, DB, WAS를 APM으로 제어할 때/플랫폼 간의 잦은 충돌 이슈로 인해/최근에는 모니터링만을 주목적으로 사용한다고 한다.
APM은 웹/앱 서비스를 개발하는 회사에/필수로 편입하고자 하는 중요한 성능 관리 장비이자 지표이다. / 단, 코어당 몇 백만원씩의 가격으로 인해/일반 서버에서는 주로 사용되지 않는다고 한다. (SMS로 성능만 모니터링하셔도 되므로)/
다중 WAS 구조의 경우 /WAS는 세션 유지를 위해 /WAS 제품군의 특정 라이센스, Enterpise 라이센스(Jeus 기준)를 사용해야 하며 /그렇지 않으면 Web Server 간에 세션 공유를 할 수 없다. / 이럴 때 WAS1을 이용하는 사용자가 WAS2를 사용할 경우 WAS1의 세션을 공유할 수 없고 사용자 입장에서는 다시 로그아웃 후 로그인하는 상황이 발생한다고 한다. / 카드사, 금융권의 경우/어떤 사용자가 다양한 WAS에 접속하는 경우가 많이 발생하기 때문에/기본적으로 WAS 제품군의 특정 라이선스를 사용한다고 한다. /
WebServer에도/세션을 유지해 주는 Keep_alive 기능이 있어/잠시 혼란스러웠지만 /WAS와 조합했을 때의 이해는 이하와 같다. /WebServer의 Keep_alive(HTTP 1.1)는 /백앤구간의 세션 유지 기능 사용을 허용해준다는 느낌이며 /다중WAS간의 세션 유지와 연관짓기에는 애매한 부분이 있다. / 다만 웹의 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/