안녕하세요 오늘은 웹 백엔드 개발자라 하면은 꼭 알아야 웹 서버, 웹 어플리케이션 서버 개념에 대해서 알아보도록
하겠습니다.
일단 웹 브라우저 및 웹 환경에서는 클라이언트와 서버가 통신하기 위해 HTTP 라는 통신 프로토콜을 통해 데이터를
주고 받습니다.
🖐 여기서 그럼 HTTP 가 무엇인지를 궁금해 하실 수 있습니다.
HTTP란?
HTTP는 클라이언트와 서버 사이에 이루어지는 요청/응답(request/response) 프로토콜이다
간단하게 이정도 의미라고만 알고 있으면 될 것 같습니다.
자세하게 HTTP에 대하여 공부하시고 싶으시면
https://www.cloudflare.com/ko-kr/learning/ddos/glossary/hypertext-transfer-protocol-http/
요 링크에서 자세한 내용을 확인할 수 있습니다.
간단하게 서버에 대하여 공부하기 전에 서버가 하는 업무를 간단하게 사진으로 봐보겠습니다
웹 개발을 공부 해본적이 있다면 html 코드를 작성하고 폼에 띄워본적이 있을 것 입니다.
그 html 코드를 화면에 띄울 때 중간 매개채 역할을 해주는게 바로 웹 서버(WS) 입니다.
웹 서버란?
HTTP 또는 HTTPS를 통해 웹 브라우저에서 요청하는 정적인 문서(=HTML), CSS, Image 파일 등을 전송해주는 서비스 프로그램 을 말한다
웹 서버(WS) 특징
- HTTP 기반으로 동작
- 정적 리소스 제공, 기타 부가기능
- 정적(파일) HTML,CSS,JS, 이미지, 영상
- ex) Apache, NGINX
WS는 정적인 데이터만 처리할 수 있기 때문에,
비즈니스 로직 처리나 DB 연동 문제를 해결하기 위해 등장한 게 웹 어플리케이션 서버(WAS) 입니다.
(* 보통 엔진엑스를 많이 사용한다)
WAS란?
Web 서버처럼 HTTP 프로토콜을 기반으로 동작하고 웹 서버 기능을 포함하여 동적 리소스도 제공 할 수 있는 Application 서버입니다.
WAS(Web Application Server)
- Http기반으로 동작
- 웹서버 기능 포함 + (정적 리소스 제공 기능)
- 프로그램 코드를 실행해서 애플리케이션 로직 수행
- 동적HTML, HTTP API(JSON) = (RestAPI)
- 서블릿, JSP, 스프링, MVC
- ex) Tomcat, WebLogic, Jeus
웹 서버 => WS
웹 어플리케이션 서버 => WAS
로 이제 줄여서 포스팅 하겠습니다.
📢 이제 간단한 WS, WAS에 대해 알아보았으니 둘의 차이점에 대해서 알아보겠습니다
- WS는 정적 리소스파일, WAS는 비즈니스 로직
- 사실 둘의 용어도 경계가 애매하다.
- WS도 프로그램을 실행하는 기능을 포함하기도 함
- WAS 서버도 WS의 기능을 제공함
- 자바는 서블릿 컨테이너 기능을 제공하면 WAS
- 서블릿 없이 자바코드를 실행하는 서버 프레임워크도 있음
- WAS는 비즈니스 로직을 실행하는데 더 특화 (=DB연동)
🔔 이제 WS와 WAS에 대해서 알았으니, 우리가 지금 사용하는 웹 브라우저에서는 어떻게 구성이 되어있는지 알아보자
웹 시스템 구성
1) WAS + DB
- WAS , DB 만으로 시스템 구성 가능
- WAS는 정적 리소스, 애플리케이션 로직 모두 제공 가능
그러나 위 조합을 사용하면 단점이 있습니다
- WAS가 너무 많은 역할을 담당, 서버 과부화 우려
- 가장 중요한(=복잡한) 비즈니스 로직이 정적 리소스 때문에 수행이 어려울 수 있음
- WAS 장애 발생 시 오류 화면도 노출 불가능 (=>아예 안켜짐..)
그래서 분산작업을 할 수 있게, 새로운 구성을 추가 했습니다.
2) WAS + DB + WS(추가)
- 정적 리소스 → WS가 처리
- WAS는 비즈니스 로직, 동적인 처리 필요시 WAS가 처리
- WAS는 중요한 비즈니스 로직 처리 담당
⇒ 효율적인 리소스 관리
- 정적 리소스가 많이 사용되면 WS만 증설 하면 됨
- 동적처리가 많이 필요하면 WAS를 증설 하면 됨
- 정적 리소스만 제공하는 웹 서버는 잘 죽지 않는다.
- 애플리케이션 로직이 동작하는 WAS 서버는 잘 죽음
- WAS, DB 장애시 WEB 서버가 오류 화면 제공 가능.
즉 위 구성을 통해 WAS에 역할을 분산해서 서버 부하를 줄이고, WAS서버를 잘 관리할 수 있습니다.
참고로 스프링 부트를 사용하면 내장 톰캣을 사용하고 있으며 빌드하여 나온
boot.jar 파일을 was에 배포하여 띄울 수 있다
추가적으로 DB 서버는 이중화 상태로 별도 서버에서 관리한다.
이상 포스팅 마치겠습니다.