ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 웹 애플리케이션 이해
    교육 자료 2022. 7. 18. 22:16
    웹 애플리케이션 이해 01 계산기 프로그램을 웹 애플리케이션으로 만들기
      02 HTTP 프로토콜 이해
    서블릿 프로그래밍 01 CGI 프로그램과 서블릿
      02 계산기 서블릿 만들기

     

    계산기 프로그램을 웹 애플리케이션으로 만들기


    실습

    • 첫 번째 단계
      • 사용자 요청을 메인 Thread가 처리하도록 한다.
    • 두 번째 단계
      • 사용자 요청이 들어올 때마다 Thread를 새로 생성해서 사용자 요청을 처리하도록 한다.
        • Thread는 생성될 때마다 독립적인 스택 메모리 공간을 할당받는데 메모리 할당 작업은 상당히 비싼 작업이다. 따라서, 사용자 요청이 있을 때마다 Thread를 생성한다면 성능이 떨어진다.
        • 동시 접속자 수가 많아질 경우 많은 Thread가 생성되는데 Thread가 많아지면 CPU 컨텍스트 스위칭(Context Switching) 횟수 및 CPU와 메모리 사용량이 증가하게 된다. 따라서, 최악의 경우 서버의 리소스(CPU 및 메모리 자원) 한계로 인해 서버가 다운될 가능성이 높다.
    • 세 번째 단계
      • Thread Pool을 적용해 안정적인 서비스가 가능하도록 한다.
    • 실습 코드

     

     

    HTTP란


    • 서버와 클라이언트가 웹에서 데이터를 주고받기 위한 프로토콜(규약)
    • 거의 어떤 종류의 데이터든지 전송 가능 
    • 참고 
      • HTTP/1.1 , HTTP/2는 TCP 기반 위에서 동작 
        • 3-way handshake로 연결을 맺음
      • HTTP/3는 UDP 기반 위에서 동작

     

    HTTP 요청/응답 메시지 구조 

     

    HTTP 특징 

    • 클라이언트-서버 모델 따름 
      • 클라이언트가 서버에 요청을 보내면 서버는 클라이언트에게 응답을 보낸다.
    • 무상태 프로토콜(Stateless)
      • 서버가 클라이언트 상태를 유지하지 않음 
      • 각 요청을 독립적인 트랜잭션으로 취급
        • 해결책 : Keep-Alive 사용 
          • 단점은 없을까? No! Keep-Alive가 성능 하락의 주범이 되기도 한다. 왜냐하면, Keep-Alive 기능이 켜져 있는 상태에서 클라이언트 요청이 많아지게 되면 유지되는 커넥션도 자연스럽게 많아지게 되고 이로 인해 신규 사용자를 못 받아줄 수도 있기 때문 (웹서버 스레드 부족)

    • 비 연결성(Connectionless)
      • 서버가 클라이언트 요청에 대해 응답을 마치면 맺었던 연결을 끊어 버림 
        • 해결책 : 쿠키(클라이언트에 정보 저장), 세션(서버에 정보 저장), JWT 
    • 왜?
      • HTTP는 기본적으로 웹 상에서 불특정 다수와 통신이 가능하도록 설계가 됐다. 이런 상황에서 만약 서버가 다수의 클라이언트들의 상태 또는 연결을 계속 유지해야 한다면 리소스 낭비가 심해진다. 따라서, 상태 또는 연결을 유지하지 않는 대신 더 많은 연결을 할 수 있도록 설계가 됐다.

    HTTP 요청 메소드

    • GET, POST, PUT, DELETE 등 

    HTTP 응답 코드

    • 2xx(성공), 3xx(리다이렉션), 4xx(클라이언트 에러), 5xx(서버 에러) 등 

    HTTP 헤더

    • Content-type, Accept, Cookie, Set-Cookie, Authorization 등 

     

     

    CGI 프로그램과 서블릿


    CGI (Common Gateway Interface)

    • 웹 서버와 애플리케이션 사이에 데이터를 주고받는 규약
    • CGI 규칙에 따라서 만들어진 프로그램을 CGI 프로그램이라고 함 
    • CGI프로그램 종류로는 컴파일 방식(C, C++ 등)과 인터프리터 방식(PHP, Python 등)이 있음
    • 웹 서버에 의해 실행됨

     

    • 인터프리터 방식 CGI 프로그램

    • 서블릿과 서블릿 컨테이너

    Servlet (Server + Applet의 합성어)

    • 자바에서 웹 애플리케이션을 만드는 기술
    • 자바에서 동적인 웹 페이지를 구현하기 위한 표준 

     

    Servlet Container

    • 서블릿의 생성부터 소멸까지의 라이프사이클을 관리하는 역할
    • 서블릿 컨테이너는 웹 서버와 소켓을 만들고 통신하는 과정을 대신 처리해준다. 개발자는 비즈니스 로직에만 집중하면 된다. 
    • 서블릿 객체를 싱글톤으로 관리 (인스턴스 하나만 생성하여 공유하는 방식) 

     

    WAS vs 서블릿 컨테이너 

    • WAS는 서블릿 컨테이너를 포함하는 개념
    • WAS는 매 요청마다 스레드 풀에서 기존 스레드를 사용함
    • WAS의 주요 튜닝 포인트는 max thread 수
    • 대표적인 WAS로는 톰캣이 있다.

     

    계산기 서블릿 만들기


    실습 코드

    Servlet 인터페이스

    - 서블릿 컨테이너가 서블릿 인터페이스에 있는 메소드들을 호출함 

    • 서블릿 생명주기와 관련된 메소드
      • init(): 서블릿 컨테이너가 서블릿 생성 후 초기화 작업을 수행하기 위해 호출하는 메소드
      • service(): 클라이언트가 요청할 때마다 호출되는 메소드
      • destroy(): 서블릿 컨테이너가 종료될 때 호출하는 메소드 
    • 서블릿 기타 메소드
      •  getServletConfig()
        • 서블릿 초기 설정 정보를 담고 있는 객체를 반환 
        • 해당 객체를 통해 서블릿 이름과 서블릿 초기 매개변수 값 등을 얻을 수 있음
      • getServletInfo()
        • 서블릿을 작성한 사람, 서블릿 버전, 저작권과 같은 서블릿에 대한 정보를 반환

     

    URL 인코딩 (= 퍼센트 인코딩)

     

     

     

    참고 자료

    '교육 자료' 카테고리의 다른 글

    JDBC 프로그래밍  (0) 2022.08.11
    도커 및 도커 컴포즈 소개  (0) 2022.08.05
    멀티 스레드 환경에서 동시성 이슈  (0) 2022.07.25
    객체지향 패러다임  (0) 2022.07.12
    테스트 코드 실습  (0) 2022.07.11

    댓글

Designed by Tistory.