Skip to content

프로그램 설명

park.sung kyun edited this page Nov 19, 2019 · 10 revisions

프로그램 설명

  1. 구성도

    • 이 프로그램은 크게 Server 부분과 Context 부분으로 나눈다. Server 부분은 웹 서버 자체에 대한 부분이고, Context 부분은 요청을 처리하는 데 사용되는 버퍼 또는 주간 상태값을 저장하는 곳이다. Server 부분은 요청을 처리는 역할을 하는 Processor 부분과 각각의 호스트의 리소스를 관리하는 Host 부분으로 되어있다.
  2. 모듈 설명

    • Server : 웹 서버 자체를 가리키는 모듈로, HTTP 요청을 처리하는 Processer 부분과 각 가상 호스트를 담당하는 Host 클래스를 가진다.

      • Processor : HTTP 요청을 처리하는 모듈을 기능별로 나눠서 모듈화 한 부분이다.

        • Client-Listener : 클라이언트로부터 연결이 있을 때 이를 처리한다.
        • SSL-Handshaker : SSL 연결에서 Handshaking 작업을 처리한다.
        • Request-Receiver : 클라이언트로부터 보내진 데이터를 헤더까지 파싱하여 요청 객체를 만든다.
        • Body-Receiver : 요청을 처리하다가 요청 분문이 필요할 때 본문을 받는다.
        • Request-Performer : 요청을 처리하여 응답 객체를 만든다.
        • Reply-Sender : 응답을 클라이언트로 보낸다.
        • Proxy-Connector : AJP, HTTP Server에 연결한다.
        • Ajp-Proxier : Ajp Server(TOMCAT)와 연결의 요청/응답을 중계한다.
        • HTTP-Proxier : HTTP Server와 연결의 요청/응답을 중계한다.
      • Host : 각각의 가상 호스트에 대한 정보와 리소스들을 저장한다.

        • Resource : 루트 디렉토리 안에 디렉토리와 파일에 대한 정보를 관리한다. 각 리소스는 설정된 필터 객체를 관리한다.
      • Context : 위에 설명한 Processor 모듈에서 필요한 버퍼 객체나 중간 상태 등을 저장한다.

        • Client-Connection : 클라이언트와 연결을 처리할 때 필요한 것들을 저장한다.
        • Ajp-Proxy-Connection : Ajp Server(Tomcat)와 연결을 처리할 때 필요한 것들을 저장한다.
        • Http-Proxy-Connection : HTTP Server와 연결을 처리할 때 필요한 것들을 저장한다.
        • Request : 처리과정에서 만들어진 요청 객체다.
        • Reply : 처리과정에서 만들어진 요청 객체다.
  3. 흐름도

    • 클라이언트에서 접속이 오면 Client-Listener가 접속을 받아드리고(Accept) Context 객체를 생성한 후, Context 객체를 Request-Receiver로 보낸다. Request-Receiver는 클라이언트로 부터 들어오는 데이터를 파싱하여 요청(request)을 만든다. 요청을 만들어지면, 요청을 Context 객체에 넣어 Request-Performer로 보낸다. Request-Performer는 요청의 성격을 파악하고, 요청을 수행(Perform)하여 응답(Reply)을 만든다. 만들어진 응답은 Context 객체에 넣어져 Reply-Sender로 보내진다. Reply-Sender는 리소스 파일을 읽어서 응답 바이너리를 만들어서 BufferSender에게 보낸다. 이것이 일반적인 HTTP 요청의 처리 순서이다.
Clone this wiki locally