Http 서버, was 서버 차이점 공부를 위한 포스팅
목차
- 인터넷이 동작하는 과정
- 웹 페이지, 웹 사이트, 웹 서비 및 검색 엔진의 차이점
- 웹 서버란, (Http Server 란)
- 웹 어플리케이션 서버란, (was 란)
- 웹 서버 (http server) vs WAS
1. 인터넷이 동작하는 과정
웹과 웹 어플리케이션을 이야기하기전에, 인터넷에 대해서 공부해보았습니다.
인터넷이란, (internet 이란)
인터넷이란, 여러 통신망을 하나로 연결한다는 의미의 '인터 네트워크(inter-netowrk)' 라는 말에서 시작되었으며, 현재는 전 세계에 걸쳐 원거리 접속, 파일 전송, 전자 메일 등의 데이터 통신 서비스를 연결하는 컴퓨터 통신망 시스템을 의미합니다.
웹의 작동 방식
- 브라우저가 DNS 서버로 이동하여 웹 사이트가 있는 서버의 실제 주소를 찾습니다(상점의 주소를 찾을 수 있음).
- 브라우저는 HTTP 요청 메시지를 서버로 전송하여 웹 사이트의 복사본을 클라이언트에게 보내도록 요청합니다(상점에 가서 상품을 주문합니다).
- 이 메시지와 클라이언트와 서버 간에 전송되는 모든 데이터는 TCP/IP를 사용하여 인터넷 연결을 통해 전송됩니다.
- 서버가 클라이언트의 요청을 승인하면, 서버는 "200 OK" 메시지를 클라이언트에 발송합니다.
- 그리고 나서 웹 사이트의 파일을 데이터 패킷이라고 불리는 일련의 작은 덩어리로 브라우저에 보내기 시작합니다.
- 브라우저는 작은 덩어리를 완전한 웹 페이지로 조립하여 사용자에게 표시합니다(상품이 여러분의 문 앞에 도착합니다!).
2. 웹 페이지 vs 웹 사이트 vs 웹 서버 vs 검색엔진
👉 웹 페이지 - 웹 브라우저에서 표시할 수 있는 문서 (페이지라고도 함)
- 웹 페이지란, 브라우저에서 표시할 수 잇는 간단한 문서, 즉 HTML 파일을 말합니다/
👉 웹 사이트 - 웹 페이지의 모음
- 웹 사이트란, 고유한 도메인의 이름으로 연결된 웹 페이지의 모음입니다.
- 웹 사이트의 한 페이지에서 다른 페이지로 이동할 수 있도록 하는 명시적 링크를 보통 제공합니다.
👉 웹 서버 - 인터넷에서 웹 사이트를 호스팅하는(보여주는) 컴퓨터 - 우리집에있는 컴퓨터가 아님
- 웹 서버는 하나 이상의 웹사이트를 호스팅 하는 "컴퓨터" 입니다.
- "호스팅"은 모든 웹페이지와 지원 파일을 해당 컴퓨터에서 사용할 수 있음을 의미합니다. (쉡게 말해서 배포 - 물론 배포랑 호스팅은 다른 개념)
👉 검색 엔진 - 웹 브라우저에서 다른 웹 페이지를 찾는 데 도움이 되는 웹 서비스
3. HTTP server (Web Server)
HTTP servser 란 (웹 서버란)
웹 서버는, 소프트웨어의 관점과, 하드웨어의 관점 2 가지로 해석이 가능한 용어입니다.
💡 소프트웨어에서의 HTTP Server ( 웹서버 ) 란, 웹 브라우저와 같은 "클라이언트" 로 부터 HTTP 프로토콜로 요청을 받고, 요청에 대해 HTML 문서와 같은 정적인 웹 페이지를 응답해주는 소프트웨어 입니다.
- 웹 사용자가 어떻게 호스트 파일들에 접근하는지를 관리
- HTTP 서버는 URL(Web address)과 HTTP의 소프트웨어 일부임
💡 하드웨어에서 웹 서버란, 위와 같은 기능을 제공하는 컴퓨터 프로그램을 실행하는 하나의 컴퓨터 입니다.
- 웹사이트의 컴포넌트 파일들을 저장하는 컴퓨터
- 컴포넌트 파일에는 html 문서/images/css stylesheets/JavaScript 파일 등
- 이 컴포넌트 파일들을 최종 소비자의 디바이스에 전달함
- 웹 서버는 인터넷에 연결되어 있고, 도메인 이름을 통해 접속될 수 있음
정리하자면
웹 서버란, HTTP 또는 HTTPS 를 통해 웹 브라우저에서 요청하는 HTML 문서나 오브젝트(이미지 파일 등)을 전성해주는 서비스 프로그램을 말하며,
웹 서버 소프트웨어를 구동하는 하드웨어 또한 웹 서버라고 불려집니다.
💡 웹 서버의 주 기능은, 웹 페이지 (정적 컨텐츠) 를 클라이언트에게 전달하는 것 입니다.
(정적 컨텐츠 : 그림, CSS, 자바스크립트를 포함한 HTML)
웹 서버의 종류
- 아파치
- Nginx
- IIS
- GWS
4. WAS 란 (웹 어플리케이션 서버란)
💡 Was - Web Application Server 란, 간단하게 Web Server 에서 처리하지 못하는 동적인 컨텐츠를 처리하는 서버입니다.
- 클라이언트의 request(요청) 을 받아 DB 조회나, 어떤 로직을 처리해야하는 동적인 컨텐츠를 response(응답)하는 서버입니다.
- Web Server 위에 서버 어플리케이션을 얹은 것입니다. ( WAS = Web Server + Web Container)
- DB 조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위해 만들어진 Application Server 입니다.
- HTTP 를 통해 컴퓨터나 장치에 웹 어플리케이션을 수행해주는 미들웨어 입니다.
- 쉽게 말해, 웹 서버(Nginx) 와 웹 어플리케이션 (Spring) 이 통신을 할 떄,, Nginx 는 java 를 알지 못하고, Spring(웹 어플리케이션) 은 웹 서버의 요청이 어떤걸로 들어오는지 모르고 신경도 쓰지 않습니다.
- WAS 에서, HTTP 요청을 java 로 바꾸고, JAVA Response를 Nginx 가 알 수 있도록 변환해줍니다.
Web Container
웹 컨테이너란 (서블릿 컨테이너란)
일단 명확하게 집어보자면 (틀렸다면 제발 말해주세요 ㅠㅠ)
- 웹 컨테이너란. JSP, Servlet을 실행시키는 소프트웨어이다.
- 그래서 서블릿 컨테이너라고도 불리며, 이 JSP 와 Servlet 은 오직 자바 어플리케이션을 실행시키기 위한 것이다.
- Apache 는 CGI 라는 개념을 제공하고 (
Nginx 는 모르겠네요..) CGI (공용 게이트웨이 인터페이스) 란, 2개 이상의 컴퓨터 간의 자료들을 주고 받는 프로그램, 또는 주고 받아 프로그램을 동작시키기위한 방법을 정의한 프로그램입니다.
- PHP, Perl, Python등의 언어는 Apache를 통해 CGI를 적용시키는 것이 가능한데, JAVA는 안된다고 합니다.
- 즉, Java는 따로 CGI 와 같은 기능을 위해 컨테이너 라는 것이 필요하고, 이를 WAS 의 웹 컨테이너가 수행합니다.
💡 즉, 웹 컨테이너는 Java 서블렛과 상호작용하는 WAS의 구성요소이며, 자바 어플리케이션을 웹 서버상에서 잘 동작시키기위한 프로그램입니다.
👏🏻 WAS 내부에서 개발자 대신 서블릿을 관리해주는 녀석입니다!
웹 컨테이너의 동작 과정
- 클라이언트는 웹서버로 Request(요청)을 보냅니다.
- 서블릿을 포함하는 WAS는 컨테이너로 요청을 보냅니다.
- 컨테이너가 요청을 각 서블릿에게 전달합니다.
- 서블릿 메소드가 로드됩니다.
- 서블릿은 컨테이너에 관련 Response (응답) 을 넘겨줍니다.
- 컨테이너는 이를 서버에 전달하고, 서버는 응답을 클라이언트에게 전달합니다.
WAS 의 내부 동작 과정
- 웹 서버로 부터 요청이 들어오면, 제일 먼저 컨테이너가 이를 처리합니다.
- 컨테이너는 배포서술자(Web.xml) 을 참조하여 해당 서블릿에대한 스레드를 생성하고 요청( httpServletRequest ) 및 응답 (httpServletResponse) 객체를 생성하여 전달합니다.
- 스레드란? - 프로세스 내에서 실제 작업을 수행하는 주체
- 컨테이너는 사용자가 요청한 URL을 분석하여 어느 서블릿에 대한 요청인지 찾는다.
- 컨테이너는 서블릿을 호출 (service() ) 하여. HTTP Method 요청에 따라 메소드를 호출합니다.
- 호출된 메소드는 동적 페이지를 생성한 후 HttpServletResponse 객체에 실어 컨테이너에 전달한다.
- 컨테이너는 전달 받은 객체를 웹 서버에 전달하고 생성되었던 스레드르 종료하고 요청 ( HttpServletRequest ) 및 응답 (HttpServletResponse ) 객체를 소멸시킵니다.
5. Web Server vs WAS
둘의 차이점은, 어떤 타입의 컨텐츠(정적, 동적)을 제공해 줄 것인가에 달려있습니다.
WAS 안에, Web Server 가 있는데 왜 분리 하는거지..? 라고 생각했는데
웹 서버와 WAS 는 각각 독립적으로 존재할 수 있고
👏🏻 대부분의 WAS 는 정적인 컨텐츠를 제공해주고 있기 때문에, 별도의 웹 서버 없이 WAS 만 존재할 수 있다고 합니다.
그렇다면 Web Server를 사용하는 이유는?
굳이 WAS와 별도로 Web server, HTTP Server 를 사용하는 이유는 다음과 같습니다.
1. WAS 가 해야할 일의 부담을 줄이기 위해서입니다.
- WAS 앞에 웹 서버를 둠으로 써, 정적인 컨텐츠의 처리는 웹 서버에 맞기고, WAS 는 어플리케이션의 로직만 수행 가능하도록 기능을 분배해서 서버의 부담을 줄이기 위함입니다.
2. WAS의 환경 설정 파일을 외부에 노출시키지 않기 위해서라고 합니다.
- 클라이언트가 WAS 의 포트를 직접 연결하게 된다면, 중요한 설정 파일들이나 암호키들이 노출 될 가능성이 있습니다.
- 따라서, Web Server 를 통해서만, WAS 에 접근하게 함으로써, 웹 서버와 WAS 에 접근하는 포트가 다르기 때문에 WAS 에 들어오는 포트에 방화벽을 쳐서 보안을 강화시킬 수 있다고 합니다.
📌 보통 이렇게, WAS 앞에 WebServer 를 두는 것을 프록시 서버라 하며, 대표적으로 Nginx가 리버스 프록시 서버의 역할을 수행합니다.
WAS 의 종류
- 톰캣(Tomcat), WebSphere, Weblogic, JBoss, Jeus
이렇게 있는거 같은데, 톰캣 말고는 처음들어본다..ㅎ
아파치 톰캣이란?
Tomcat 은 WAS 이다.
Tomcat을 아파치 톰캣이라고 부르기도 하는데, 이는 Tomcat (아파치 꺼) 가 아파치사에서 만든 Web Server : Apache 기능을 포함하고 있기 때문에 Apache Tomcat 이라고 부르기도 하고, 실제로 WAS 앞에 웹 서버를 두어서 Apache Tomcat 이라고 부르기도 한다고 합니다.
*참고
웹 서버란 : https://developer.mozilla.org/en-US/docs/Learn/Common_questions/What_is_a_web_server
WAS 와 Server 의 차이,and Web container란 : https://doozi316.github.io/web/2020/09/13/WEB26/
'Web-Network' 카테고리의 다른 글
[mac] Nginx Tomcat 연동 - nginx 스프링 내장 톰캣 리다이렉트 방법 (Proxy Server) (0) | 2022.07.24 |
---|---|
jar 파일 생성하고, local 에서 Jar 실행하기 (4) | 2022.07.23 |
[Nginx] mac 로컬 환경에 nginx 설치 실행하기 (local os) (0) | 2022.07.22 |
[프록시란] Proxy? Proxy Server? 리버스 프록시 ? (0) | 2022.07.22 |
[백엔드] Rest API / Restful API 란 무엇인가요 (3) | 2022.03.04 |