들어가기
3학년 1학기 동안 동아리에서 학습한 지식을 복습하는 차원에서 이 시리즈를 작성하게 됐다. 동아리에서 학습한 내용이 Spring Boot가 주이지만, 부가적으로 학습한 네트워크, 웹 등 도움이 되는 내용들도 많다.
Spring Boot 복습 내용은 따로 시리즈를 파서 작성할 예정이고, 부가적인 내용은 해당 시리즈에서 작성할 것이다.
배경 지식
Web
- 인터넷에 연결된 컴퓨터를 통해 사람들이 정보를 공유할 수 있는 전 세계적인 정보 공유 시스템이다.
- 웹(Web)에는 수많은 웹사이트(Website)들이 있고, 각 웹사이트는 수 많은 웹 페이지(Web Page)로 구성된다.
- 즉, 웹은 온라인 상에 다양한 웹페이지가 서로 연결되어 있는 것으로 볼 수 있다.
- 웹은 인터넷 상에서 텍스트나 그림, 소리 영상 등과 같은 멀티미디어 정보를 하이퍼 텍스트 방식으로 연결하여 제공한다.
웹은 인터넷을 구성하는 여러 기술 중 하나이다.
인터넷 : 통신 프로토콜을 이용해 정보를 주고받는 거대한 컴퓨터 통신망이다.
하이터 텍스트 : 문서 내부에 또 다른 문서를 연결하는 참조를 집어 넣음으로써 웹 상에 존재하는 웹 페이지끼리 서로 참조할 수 있는 기술이다.
Web Server
- 인터넷을 기반으로 클라이언트에게 웹 서비스를 제공하는 컴퓨터이다.
- 클라이언트가 HTTP 프로토콜을 통해 서버에 요청을 한다.
- 서버는 클라이언트 요청에 대한 데이터를 만들어서 응답한다.
- 웹 서버는 정적 데이터(HTML, CSS, 이미지 파일 등)와 동적 데이터를 모두 제공한다.
- 정적 데이터: 웹 서버 컴퓨터에 저장되있으며, 클라이언트 요청에 따라 변하지 않는 데이터이다.
- 동적 데이터: 클라이언트 요청에 따라 실시간으로 생성되는 데이터이다.
- 정적 데이터를 제공할 때는 웹 서버 컴퓨터에서 해당 파일을 찾아 클라이언트에게 전달한다.
- 동적 데이터가 필요한 경우, 클라이언트 요청을 웹 애플리케이션 서버나 웹 컨테이너로 전달하고 결과를 받아 클라이언트에게 전달한다.
- Apache, Microsoft IIS, Ngnix 등이 있다고 한다.
정적 요청인지 동적 요청인지 어떻게 판단?
URL 패턴을 통해 구분할 수 있다.
동적 요청 : www.soundbar91.com/image.jpg
정적 요청 : www.soundbar91.com/user/profile?id=1
Web Container
- 웹 애플리케이션을 실행하기 위한 런타임 환경을 제공하는 소프트웨어이다.
- 웹 애플리케이션의 생명주기와 웹 서버와 애플리케이션 사이의 통신을 관리한다.
- JSP나 Servlet이 실행 할 수 있는 소프트웨어이기 때문에 서블릿 컨테이너라고도 한다.
- 웹 서버로부터 받은 동적 요청을 웹 애플리케이션을 통해 처리하고 동적 데이터를 만들어 웹 서버에 전달한다.
- JSP, RESIN, WebtoB 등이 있다고 한다.
Web Application
- 사용자의 웹 브라우저(클라이언트)에서 실행되는 소프트웨어이다.
- 프로그램 코드가 서버에서 실행이 된다.
- 사용자의 요청을 처리하는 부분은 PHP, Python, Java 등과 같은 프로그래밍 언어로 개발된다.
- 처리된 결과를 바탕으로 동적 데이터를 구성하는 부분은 HTML, CSS, JavaScript와 같은 언어를 사용한다.
- 필요에 따라 웹 애플리케이션에서 정적 데이터를 구성하고 전달할 수 있다.
- 사용자는 별도의 소프트웨어 설치 없이, 브라우저를 통해 서비스에 접근하고 사용할 수 있다.
웹 서버의 정적 데이터와 웹 애플리케이션의 정적 데이터의 차이점에 대한 생각
웹 서버 - 서버 내부에 저장되있거나 정적 데이터를 바탕으로 만들어진 데이터
웹 애플리케이션 - 동적 데이터를 얻기 위한 데이터
Web Application Server
- 웹 애플리케이션을 실행하기 위한 서버 소프트웨어이다.
- 웹 서버와 웹 컨테이너를 붙여놓은 서버 소프트웨어라고 보면 편하다.
- 그렇기 때문에 웹 서버의 기능과 웹 컨테이너의 기능을 모두 제공한다.
- 또한 다음과 같은 기능도 제공한다고 한다.
- 동작 과정은 다음과 같다.
- 웹 서버에서 동적 요청을 웹 컨테이너에게 전달한다.
- 동적 요청을 받은 웹 컨테이너는 요청 및 응답 객체를 생성한다.
- 요청 객체에는 동적 요청이, 응답 객체에는 동적 요청의 처리 결과가 담겨진다.
- 객체 생성 이후, 웹 컨테이너는 동적 요청에 맞는 서비스를 호출한다.
- 요정 객체를 호출한 서비스에 전달하고 처리 결과를 응답 객체에 넣는다.
- 응답 객체를 HTTP 응답 형태로 전환하고 웹 서버에 전달한다.
- 이후, 생성된 모든 객체를 소멸한다.
- Tomcat, Websphere, Weblogic 등이 있다고 한다.
Web Server와 Web Application Server
- 웹 서버 1개에 웹 애플리케이션 서버 여러개를 물리는 형태를 많이 사용한다고 한다.
- 얻을 수 있는 장점은 다음과 같다.
- 업무 분할
- 웹 서버에서는 정적 데이터, 웹 애플리케이션 서버에서는 동적 데이터를 처리하여 서버 부하를 방지할 수 있다.
- 보안 강화
- 물리적으로 분리가 되어 있기 때문에 웹 서버가 당했을 경우 웹 애플리케이션 서버와의 연결을 끊으면 보안적으로 유리하다고 생각했다.
- SSL에 대한 암복호화 처리에 웹 서버를 사용한다고 한다.
- 장애 극복
- 웹 애플리케이선 서버 한 곳에서 장애가 발생할 경우 해당 서버를 웹 서버와 분리한다.
- 웹 서버에서는 장애가 발생한 서버를 이용하지 못하도록 막고, 개발자는 분리된 서버의 장애를 처리한다.
- 분리 방법 이외에도 동일한 웹 애플리케이션을 구동하는 웹 애플리케이션 서버를 여러 개가 있다면 장애가 발생하지 않는 웹 애플리케이션 서버로 대응하는 방법도 있다고 생각했다.
- 여러 웹 애플리케이션 서비스
- 다양한 웹 애플리케이션을 제공하기 위해 하나의 웹 서버에 여러 개의 웹 애플리케이션 서버를 물릴 수 있다.
Web Server와 Web Application Server의 Web Server
- 웹 애플리케이션 서버에서도 웹 서버의 기능을 제공한다고 했다.
- 그렇다면 웹 서버와 웹 애플리케이션 서버를 물렸을 때 웹 서버라는 공통적인 부분이 생긴다.
- 이 둘의 차이점에 대해서 생각을 해봤다.
- 단독으로 존재하는 웹 서버는 사용자의 요청을 처리할 수 있는 웹 애플리케이션 서버를 안내하는 곳
- 웹 애플리케이션 서버 내부에 있는 웹 서버는 웹 컨테이너에서 처리된 결과를 단독으로 존재하는 웹 서버로 전달하는 중간 다리 역할을 한다고 생각했다.
- 즉 단독으로 존재하는 웹 서버는 클라이언트와 웹 애플리케이션 서버의 중간 다리, 웹 애플리케이션 서버의 웹 서버는 단독으로 존재하는 웹 서버와 동적 데이터의 중간 다리 역할을 한다라고 생각했다.
- 아님 말고이다.
참고 문헌