[네트워크] WAS와 RESTful API 그리고 JVM

Robert.Yang·2023년 5월 28일
1

Network

목록 보기
37/59
post-thumbnail

이 포스트는 널널한 개발자님 강의를 참조하여 작성한 포스트입니다.

WAS와 RESTful API 그리고 JVM

웹을 이루는 구성요소가 웹서버도 있고 WAS서버도 있고 DB서버도 있다. 이 3개의 서버를 하나의 무언가로 이어보면 각 서버 하나가 하나의 Tier가 되는거고 이렇게 되면 3-Tier solution이 된다.

웹 서비스 시스템이 얼마나 잘 작동하는지 모니터링하기 마련인데 잘 보면 네트워크가 아무리 빨라도 처리가 늦어지면 안 될것이다. 혹은 처리가 아무리 빨라도 DB서버가 응답을 안하면 굉장히 느려질 것이다. WAS가 무언가를 질의를 할 대 그에 따르는 응답을 보내는데 걸리는 시간 즉, 응답시간이 서비스의 품질을 결정하는데 매우 중대한 역할을 한다. 그래서 이 부분은 집중적으로 모니터링하는 시스템이 있는데 이것을 APM이라고 한다. 대표적으로 Scouter가 있다. 그래서 APM은 기본적으로 응답시간을 모니터링하고 그 다음 WAS도 모니터링 할텐데 그런데 WAS를 이야기 하기전에 잠깐 다른 애기를 좀 해보고 이어가자.

이전 포스트에도 설명했듯이 하드웨어 부분에 CPU가 존재하고 이 하드웨어를 physcial이라고 한다. 그리고 그 이상 부분을 S/W인데 이것을 Logical 혹은 Virtual이라고 한다. 근데 이 이야기를 왜 하냐면 우리나라에서 웹을 한다고 하면 거의 Java + Spring을 이용해서 사용한다. 그럼 자바를 생각해보면 user-mode application 수준에 가상의 CPU를 구현해서 작동하는게 이것이 JVM이다. 그리고 이 CPU가 인식할 수 있는 명령체계가 있는데 그 명령체계가 Java byte code이다. 그런데 문제는 결국 연산을 한다는 것은 Java byte code일텐데 이 Java byte code기반으로 Applciation들을 잘 작동시켜주는 middleware가 있는데 이 middleware라는 것은 s/w인데 또 다른 소프트웨어가 잘 작동할수 있도록 도와주는 소프트웨어이다. 그리고 이 소프트웨어들이 잘 작동하도록 필요한 기본적인 기능(TCP/IP, DB I/O, File I/O등) 이러한 기능들을 지원해준다. 그리고 Applciation들을 JSP로 작성하여 만드는데 이것을 JSP로 만들면 이것이 변환되어 Servlet형태로 middleware S/W로 들어가는데 이 Servlet은 미들웨어가 기본으로 지원해주는 기능들을 가져다 사용하거나 알아서 지원해주니 개발자 입장에서는 편해진다. 쉽게 보면 우리가 C언어에서 test()라는 함수를 실행하기 위해서 main함수를 작성하고 test함수를 작성하고 main함수 안에서 실행해야 하는 과정이 필요하지만 jsp는 test()함수만 잘 작성하면 된다.

Servlet형태로 들어가는 곳을 Servlet Container라고 한다. 그리고 Middleware는 WAS라고 불리면 대표적으로 Tomcat이 있다.

그리고 이 Servlet Container 말고 이 Container 기술중에 기본으로 해주는 기능들을 커스텀해서 지원해주는 프레임워크가 등장했는데 그것이 Spring이다. 결국 Spring도 Container기술인데 결국 객체라는 걸 만들면 의존성을 가지고 어떤 객체를 생성했다가 실행했다가 소멸했다가 이 과정들을 Spring Container가 알아서 해준다.

즉, APM 애기로 가서 어떤 장애가 발생했을 때 그 장애를 따라가 원인을 찾아야 하는데 APM은 응답시간도 모니터링 하지만 JVM이 이상없는지를 모니터링해서 chart형태로 보여준다.

사용자의 request에 따라 코드뭉치가 생겨나고 실행되고 사라지고 그런 과정이 있을 것이다. 이걸 Spring Container가 알아서 관리해주는데 이 코드 뭉치는 약간의 함수처럼 생각하면 쉽고 이 함수는 반드시 사용자의 request에 의해 실행된다.

클라이언트에서 화면이 만들어지고 다 좋은데 이 html을 서버에서 만들어서 보내는건데 문제는 이 클라이언트 측 사용자 환경이 매우 다양해지면서 문제가 생겼다. PC뿐만 아니라 모바일, 태플릿등 엄청 환경자체가 다양해지면서 이거를 일일이 다 html로 구현해서 뿌려주기가 번거로워 새로운 생각을 한다. 서버의 request를 보낸다는 관점에서 뭔가를 보내는건 좋은데 response할 때 UI와 data를 분리하자는 시도를 하게 된다. 즉, response할 때 data만 날라오게 하는 것이다. 대표적으로 xml이나 json이 있다. 그래서 날라온 데이터를 JS S/W가 사용자 환경에 맞게 html을 그 자리에서 생성해주는데 이 JS S/W를 구현한 framework가 React, Vue등이 있다. 그리고 결국 request를 따라가보면 뭔가를 Create, Read, Update, Delete를 하는건데 그래서 나온게 CRUD이다. 즉, 처리에 대한 request가 된다. 그리고 이 CRUD를 함수형태로 바꿔서 사용하고 이 함수를 호출하면 또 다른 형태가 되는데 이 함수 자체를 URI로 만들어서 기술한게 Restful API가 되는 것이다.

인터넷과 웹서버 사이 장치가 IPS(보안장치), SSL(암호화 장치, 가속기), WAF(웹서버 방화벽)이 있는데 IPS는 1차 방어체계이고 2차 방어체계가 WAF인데 이 WAF가 웹서버와 WAS사이로 갈 때가 있기도 하다. 또한 SSL은 암호화 하는데 이 SSL장치 왼편 통신을 HTTPS 통신이라 하고 그 오른편 통신을 HTTP 통신이라고 한다.

profile
모든 것을 즐길 줄 아는 개발자, 양성빈입니다.

0개의 댓글