HTTP 요청과 응답 - 실습

SOLEE_DEV·2023년 1월 5일
0

1. HTTP 요청 작동 원리

1) 원격 프로그램을 브라우저로 url을 입력해서 호출하면
톰캣이 HttpServletRequest 객체를 만듦

2) 요청한 정보를 해당 객체에 담음

3) 해당 객체를 main 메소드 매개변수로 넘겨줌
public void main(HttpServletRequest request)
=> 톰캣이 해당 객체를 만들고 요청 정보를 담아서 매개변수로 전달해줌
=> java YoilTeller [매개변수1, 매개변수2, ...]

※ 메소드의 매개변수는 원하는대로 적을 수 있고 스프링이 알아서 적어줌
※ 스프링에 필요한 것만 매개변수로 적어주면 매개변수에 해당하는 객체, 값을 보내줌!

4) request 객체를 이용해서 요청 url 정보를 얻음

2. HttpServletRequest의 메서드


1) http : getScheme()
2) 52.78.190 : getServerName()
3) :8080 : getServerPort()
4) /ch2 : getContextPath()
5) /requestInfo : getServletPath()

  • 1 ~ 5) : getRequestURL()
  • 4 ~ 5) : getRequestURI()
    6) ?year=2021&month=10&day=1 : getQueryString() = 추가 데이터
  • 쿼리스트링 : 값을 전달할 때 사용 (& 표시를 구분해서 name=value 형태로 값을 보냄)
    ex) ?year=2021 // String year = request.getParameter("year")

cf)
1) Enumeration enum = request.getParameterNames();
// Enumeration (old) == Iterator (new)
2) Map paramMap = request.getParameterMap();
// 쿼리스트링을 key - value 형태의 Map으로 반환해줌
3) String[] yearArr = request.getParameterValues("year");
// name의 이름이 같을 경우!

3. 클라이언트와 서버

(역할에 따른 구분)

  • 클라이언트 : 서비스를 요청하는 App
  • 서버 : 서비스를 제공하는 App
  • 프로그램을 실행
    -> 결과가 형태의 문서로 return됨 (Text문서 문자열)
    -> 브라우저에게 전달해주면 브라우저가 html 태그를 요소별로 구조화해서 보여줌
    -> out.println() 으로 출력!

4. 서버의 종류

  • 종류 : 어떤 서비스를 제공하느냐에 따라서 달라짐.

    1) Email Server
    2) File Server
    3) Web Server (80 // 생략가능) : 브라우저를 통해 받을 수 있는 모든 서비스를 제공!

    • 한 대의 PC에 서버가 여러 개면 어떤 서버를 제공할지 알 수 없음
      따라서, port번호를 같이 써줘야 함 (ip = 대표 전화번호 / port = 내선번호 // 서버와 바인딩되어있음 [listening])
    • well-known port : 0 ~ 1023 / 그 외 ~ 65535까지 사용 가능!

5. 웹 애플리케이션 서버(WAS)

  • 정의 : 웹을 서비스하는 서버 (프로그램을 서비스!)
    = 서버에 프로그램을 설치해놓고 클라이언트가 해당 프로그램을 사용할 수 있게 하는 것!
    = 만든 프로그램을 원격으로 제공할 수 있게 함
    (과거엔 클라이언트에 프로그램을 설치했었음 = 업데이트 문제 존재)

6. Tomcat의 내부 구조

  • 클라이언트가 브라우저를 통해 요청을 보내면 Server(Tomcat)에서 대기 중인 스레드 풀에서 응답을 접수.
    • server
      - service
      • Connector (HTTP1.1, HTTP2, AJP)
      • Engine(Catalina)
        • Host (도메인네임이 다른 n개 호스트 가능 / www.fastcampus.co.kr ...)
        • Context(/event, 하나의 Web App로써 별도의 Web App [하나의 sts프로젝트, 서로 영향을 주지 않는 독립적인 공간에서 동작함]) = 스프링 프로젝트
        • servlet (작은 서버 프로그램 = controller, /event/list)
          => 그래서 하나의 호스트에 별도의 웹 어플리케이션을 설치해줄 수 있음

7. 스레드 풀

  • 여러 스레드를 만들어놓고 있다가 요청이 오면 작업하고 있지 않은 스레드가 바로 작업을 받아서 수행~!
    ex) 스레드 풀 > 커넥터 (HTTP11 프로세서) > 엔진 > 호스트 > 컨텍스트 > 필터 (서블릿 전처리) > 디스패처 서블릿 > 컨트롤러 > main() 호출!
  • http11 프로세서에서 request, response 객체를 만들어서 다음으로 전달해줌!
profile
Front-End Developer

0개의 댓글