카테고리 없음

[모각코] 5주차 결과 (15:00 ~ 18:00)

ddd12347 2022. 8. 1. 17:45

HTTP

  • HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜
  • Plain text, JSON, XML, HTML등 다양한 형태의 정보도 전송함
  • 특징
    • 클라이언트 - 서버 구조
      • 클라이언트가 서버에 요청(Request)를 보내면 서버가 그에 대한 응답(Response)를 보내는 구조
      • 클라이언트는 서버에 요청을 보내고 응답을 대기
    • 주로 TCP/IP를 이용하는 프로토콜이다.
    • 연결 상태를 유지하지 않는 (Stateless) 프로토콜이다
      • 쿠키와 세션을 통해 상태 저장
    • 요청, 응답 방식으로 동작
  • 메서드
    • GET : 리소스 취득
    • POST : 서브 리소스의 작성, 리소스의 추가, 그 밖의 처리
    • PUT : 리소스 갱신, 리소스 작성
    • DELETE : 리소스 삭제
    • HEAD : 리소스의 헤더 취득
    • OPTIONS : 리소스가 서포트하는 메서드의 취득
    • TRACE : 자기 앞으로 요청 메세지를 반환 시험
    • CONNECT : 프록시 동작의 터널 접속으로 변경
    • Create → POST/PUT, Read → GET, Update → POST, Delete → DELETE

웹 서버와 웹 어플리케이션 서버

  • 웹 서버 (WS)
    • 클라이언트로부터 HTTP 요청을 받아들이고, HTML 문서와 같은 웹 페이지를 정적으로 처리해 반환
    • 단순히 저장되어있는 웹 페이지를 클라이언트로 전달하고, 클라이언트로 부터 컨텐츠를 전달받아 저장하거나 처리하는 역할
  • 웹 어플리케이션 서버 (WAS)
    • 프로그램 실행 환경과 데이터베이스 접속 기능 제공
    • 여러개의 트랜잭션 관리
    • 업무를 처리하는 비지니스 로직 수행
    • 웹 서버 + 웹 컨테이너
      • WAS가 웹 서버를 포함하는 개념이지만 둘이 같이 쓰는 경우가 있음
      • WAS가 할 일의 부담을 줄이기 위해
      • WAS의 설정파일을 외부에 노출시키지 않도록 하기 위해
    • Web Logic, Jeus, Tomcat, JBoss
  • 웹 컨테이너
    • JAVA 서블릿과 상호작용하는 WAS의 구성 요소
    • JSP와 서블릿을 실행시킬 수 있는 소프트웨어이며 서블릿 컨테이너 라고도 한다.
    • 클라이언트에서 요청을 하면 컨테이너는 HttpServletRequest, HttpServletResponse 객체를 생성햐며 post, get 여부에 따라 동적인 페이지를 생성
    • 서블릿의 생명주기를 관리한다.
      • 서블릿 클래스를 로딩하여 인스턴스화
        • 싱글톤으로 생성되므로 모든 클라이언트의 요청은 동일한 인스턴스에 접근
      • 초기화 메서드 (init) 호출
      • 요청이 들어오면 적절한 서블릿 메서드 호출
      • 서블릿 소멸 시 Garbage Collection 진행
      • JSP도 서블릿으로 변환함
    • 웹 서버에서 받응 요청을 분석하여 서블릿을 실행시키고, 서블릿에서는 웹 서버의 정보를 확인할 수 있도록 한다.
    • 통신지원
      • 소켓 연결, 포트 리스닝, 스트림 생성 등
    • 멀티 스레딩 지원
      • 컨테이너는 요청이 올 때 마다 새로운 자바 쓰레드 생성
      • 쓰레드 풀
    • 선언적 보안 관리, jsp 지원
    • 서블릿 수행 결과를 웹 서버에 전달하여 동적 페이지 제공

서블릿

  • 동적 웹 페이지를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술
  • 특징
    • 클라이언트의 요청에 대해 동적으로 작동하는 웹 컴포넌트
    • HTML을 사용하여 response
    • JAVA의 스레드를 이용하여 동작한다.
    • MVC 패턴에서 컨트롤러로 이용된다.
    • 서블릿 컨테이너를 통해 동작한다.
  • 동작
    1. 클라이언트 요청
    2. HttpServletRequest, HttpServletResponse 객체 생성
    3. Web.xml이 어느 서블릿에 대한 요청인지 탐색
    4. 해당하는 서블릿에서 service() 메서드 호출
    5. doGet() 또는 doPost() 호출
    6. HttpServletRequest, HttpServletResponse 객체 소멸
  • 생명주기
    • init() : 클라이언트에서 요청이 들어왔을 때 메모리에 해당 서블릿이 없는경우 호출, 처음 한번만 실행된다. 새로운 요청이 들어오는 경우 스레드가 생성되어 처음 생성된 인스턴스를 사용한다.
    • init() 이후 클라이언트의 요청에 따라 service() 메소드를 통해 doGet() 또는 doPost() 로 분기한다.
    • 컨테이너가 서블릿 종료 요청을 하면 destroy() 메소드로 종료한다.