웹 통신 개요

sue·2020년 11월 22일
0

Jsp&Servlet

목록 보기
1/1

웹 서버(Web Server)

사용자에게 HTML페이지나 jpg, png같은 이미지를 HTTP프로토콜을 통해
웹 브라우저에 제공하는 서버로, 내부의 내용이 이미 만들어져 있는 정적인 컨텐츠들을 화면에 보여주는 역할

웹 서버의 역할

  • 클라이언트가 요청한 정적 컨텐츠를 찾아서 전달하는 기능 처리
  • 요청 파일이 없거나 문제가 발생하면 정해진 코드 값으로 응답
  • 정적 컨텐츠가 아니면 동적인 컨텐츠 제공을 위한 요청(Request)을 WAS에 보내고, WAS가 처리한 결과를 클라이언트에게 전달(응답, Response)
    ex) Apache, Nginx, IIS, WebtoB

    (참고) 인터넷을 여는 열쇠: 서버와 클라이언트

    인터넷이 동작하기 위해서는 최소 두 대의 컴퓨터가 필요하며, 이 두대의 컴퓨터는 인터넷으로 연결된다.

    1) 웹 브라우저(web client)
    웹 브라우저가 설치된 컴퓨터의 주소창에 http://info.cern.ch/index.html 입력하고 엔터를 치면 인터넷을 통해 전기적인 신호를 info.cern.ch라는 주소의 컴퓨터에게 보낸다. 그 전기적인 신호 안에는 이런 내용이 적혀 있다. '나는 index.html 이라는 파일의 코드를 원합니다.'
    = 정보 요청(request)

    2) 웹 서버(web server)
    info.cern.ch 주소 가지고 있으며, 하드디스크 안에 index.html라는 파일 저장되어 있다. 웹브라우저로부터 신호를 받은 웹 서버는 어떤 디렉토리에서 index.html이라는 파일을 찾고, 그 내용을 읽어서 전기적인 신호를 바꾼 후에 웹브라우저가 설치된 컴퓨터에 신호를 보낸다.
    = 정보응답(response)

    3) 웹브라우저가 설치된 컴퓨터에는 index.html 파일의 내용, 즉 코드가 도착하고, 웹브라우저는 그 코드를 읽어서 웹페이지를 화면에 출력한다.


    자본주의 사회에서 가장 중요한 관계?
    -> 고객과 사업자
    고객(client) - 사업자(server) 비유 사용
    요청하는 컴퓨터: 클라이언트 컴퓨터
    응답하는 컴퓨터: 서버 컴퓨터

    ex. 게임을 만든다면 사용자의 컴퓨터에 설치된 프로그램: 게임 클라이언트
    게임회사에 서버 컴퓨터에 설치된 프로그램: 게임 서버

    WAS

    Web Application Server의 약자로 사용자가 요청한 서비스의 결과 중
    DB 조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 사용자에게
    제공하는 역할
    크게 웹 서버 기능와 컨테이너 기능으로 구성된다(WAS = Web Server + Web Container).
    WAS는 웹서버나 컨테이너 기능 외에 엔터프라이즈 환경에서 필요한 트랜잭션, 보안, 트래픽 관리, DB 커넥션 풀, 사용자 관리 등의 다양하고 강력한 기능을 제공한다.
    ex) Tomcat, WebLogic, WebSphere, Jeus, JBoss 등

    서블릿 컨테이너와 JSP 컨테이너

    컨테이너는 서블릿의 생명 주기를 관리하고 JSP를 서블릿으로 변환하는 기능을 수행하는 프로그램

    서블릿 컨테이너(Servlet-Container)

    서블릿의 생명 주기 관리(생성, 초기화, 소멸), HttpServletRequest/
    HttpResponse객체 생성, 요청에 따라 멀티 스레딩 구성,
    전송 방식에 따라 동적으로 페이지 구성하는 작업 진행, 정적 로딩 처리

    JSP 컨테이너(JSP-Container)

    JSP파일을 다시 java코드로 변경해주고 class파일로 전환하여
    메모리 공간에 로드한 뒤 실행 가능하게 만드는 작업 진행(Servlet화),
    처리 결과를 HTML파일로 만들어주는 작업 진행, 동적 로딩 처리

    웹 서비스 구조

    (Client -> Web Server -> WAS -> DB)

    1) Web Server는 웹 브라우저 클라이언트로부터 HTTP 요청을 받는다.
    2) Web Server는 클라이언트의 요청(Request)을 WAS에 보낸다.
    3) WAS는 관련된 Servlet을 메모리에 올린다.
    4) WAS는 web.xml을 참조하여 해당 Servlet에 대한 Thread를 생성한다. (Thread Pool 이용)
    5) HttpServletRequest와 HttpServletResponse 객체를 생성하여 Servlet에 전달한다.
    5-1) Thread는 Servlet의 service() 메서드를 호출한다.
    5-2) service() 메서드는 요청에 맞게 doGet() 또는 doPost() 메서드를 호출한다.
    protected doGet(HttpServletRequest request, HttpServletResponse response)
    6) doGet() 또는 doPost() 메서드는 인자에 맞게 생성된 적절한 동적 페이지를 Response 객체에 담아 WAS에 전달한다.
    7) WAS는 Response 객체를 HttpResponse 형태로 바꾸어 Web Server에 전달한다.
    8) 생성된 Thread를 종료하고, HttpServletRequest와 HttpServletResponse 객체를 제거한다.

    Web Server VS WAS

    WAS와 웹서버가 동시에 필요한 이유?

    WAS도 보통 자체적으로 웹 서버 기능을 내장하고 있다.
    과거에는 WAS는 동적 처리에 최적화 된 서비스로 처리 속도 향상을 위해서 정적처리는 Web Server에서, 동적 컨텐츠는 WAS에서 분산 처리하는 것이 효율적이었다.
    하지만 현재는 WAS가 가지고 있는 웹 서버도 정적인 콘텐츠를 처리하는 데 있어서 성능상 큰 차이가 없다!
    다만 규모가 커질수록 웹 서버와 WAS를 분리하여, 자원 이용의 효율성 및 장애 극복, 배포 및 유지보수의 편의성을 높인다.



    References
    https://www.opentutorials.org/module/3569/21238
    https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html
    https://www.edwith.org/boostcourse-web/lecture/16666/

  • 0개의 댓글