inblog logo
|
vosw1
    Spring

    Tomcat을 사용한 통신 정리

    Jan 24, 2024
    Tomcat을 사용한 통신 정리

    Apache: 프로그램
    Tomcat : 애플리케이션
     
     
    notion image

    연결 순서

    1. 사용자 소켓이 웹 서버(Apache) 소켓에 연결을 요청함
        • 요청 프로토콜 : Get
        요청 시) header 데이터는 있으나 body 데이터는 없음
        요청 정보를 ..해서 다 볼 수 있음
        응답 시) body 데이터가 생김
        • 요청 내용 : localhost 8080/index
        uri
        프로토콜에 의해 요청 내용에 들어있는 내용을 제외하고도 많은 데이터들이 자동 전송됨
        • BufferedWriter에 담겨서 전송됨
        전송되는 데이터의 데이터 타입은 문자열!
         
    1. 웹 서버(Apache)의 리스너 포트(8080)가 요청을 감지
        • 랜덤으로 포트를 정해서 새로운 소켓이 생성되고 리스너 포트와의 연결이 끊김
        • 데몬 : 언제 요청이 올지 모르기에 계속 while문을 돌리면서 요청을 기다림
        • BufferedReader에 담김
        문자열을 파싱해서 자신의 object(객체)로 만들어야만 분석이 가능함
        클래스에 변수를 만들고 set에 객체를 저장
     
    1. 문지기를 만남
        • web.xml 파일을 보고 있음
        명령을 내릴 때 작성하고 문지기가 할 일이 적혀있음
        • 필터 역할을 함
        통과시킬지 돌려보낼지 결정함
        목적지가 없으면 인덱스를 알려줌
        ex) 중국 ID 다 차단 → 웹 서버에 중국 ID를 가진 사용자는 접근할 수 없음
        • 가공이 가능함
        stream 필터와 같은 것
        ex) 안녕 → 안녕! : 가공-느낌표 추가
         
    1. Apache에서 파일을 찾아줌
        • if문을 사용해서 파일 찾기는 Apache
        식별자 요청은 Tomcat 에게 위임
        프로그램마다 책임이 다르고 식별자 요청은 Tomcat의 책임
        Apache와 Tomcat 의 사이에도 OS를 거쳐 통신하기에 버퍼가 생김
        • 데이터를 관리하는 webapp이라는 폴더에서 파일을 찾음
        • 정적 페이지 : 동일한 내용
        • 식별자 요청(identifier request)
         
    1. Tomcat = Web Application Server(WAS)
        • 식별자 요청(identifier request) 내역을 파싱함
        • Tomcat이 분석할 수 있는 Java object로 만듦
        Java 언어를 사용함
        Java class가 컴파일이 되어야 실행되기에 컴파일러(Java)가 필요함
        • HttpServletRequest→ 요청 데이터를 담을 객체 생성
        • HttpServletResponse → 응답할 데이터를 만들어 담을 객체 생성
        BufferedReader는 HttpServletRequest와 연결 → 요청이 들어 있음
        BufferedWriter는 HttpServletResponse와 연결 → 비어있다가 코딩후 응답할 자료가 담김
        • 동적 페이지 : 요청에 대한 내용이 계속 바뀌는 것
        코딩 작업을 해야 만들 수 있음
        • Tomcat 의 역할
        1) 서버 소켓 만들기
        2) 반이중 소통 만들기
        3) 요청에 응답하는 구조 만들기
        4) 요청자에 따라 요청을 감시할 스레드 1개와 요청자마다 연결될 스레드가 1개씩 추가
        5) 몇 명이 접속해야 서버가 터지지 않고 유지되는지 알고 제한을 걸어줌
         
    1. Servlet class
        • Tomcat이 new해서 메모리에 띄워줌
        • Tomcat이 service라는 메서드를 실행
        필요한 파라미터 두 개(HttpServletRequest, HttpServletResponse)를 넣어줌
        개발자는 메서드 내부를 코딩하면 됨
        • Dispatcher 호출 → Dispatcher class 생성
        • 작업이 종료되면 메모리에서 사라짐
          • 끝나기 전에 BufferedWriter에 담아서 응답해야 함
        • Front Controller : 모든 컨트롤러들의 맨 앞에 있음
        • 사용자의 요청이 들어올 때마다 Servlet이 생성됨
          • 요청이 다르면 요청마다 스레드를 따로 가지고 있어야지 아니면 혼란이 생길 수 있음
             
    ** 다양한 요청이 가능할 경우)
    1) 요청 데이터를 모두 파싱해야함
    2) 코드가 엄청나게 지저분해짐
    ⇒ 레이어를 만들어 SRP의 원칙을 지킴
     
    ** 만약 특정 요청 내역이 특정 메서드를 실행하게 되어 있다면)
    1) 조건문 없이 바로 실행되어 분기가 가능
    2) 라우터를 설계 안하면 servlet이 늘어남
    ⇒ servlet을 늘리지 않고 하나로 모아서 if로 분기 처리!
    /* : 모든 요청을 다 받음
    요청이 들어올 때 요청자 마다 1:1대로 안내해주는 것이 아니라 1명이 전체를 안내함
    하나의 servlet에 요청을 다 보내서 분기 처리하기 좋음
    공통 로직 처리하기 좋음
    진짜 필요한 controller들을 실행시킴
    단! 코드를 다 짜놔야 가능함
    메모리가 너무 늘어나 부화가 많이 생김
    → 라우터가 무조건 필요함
    Front Controller로 하나로 모아서 라우팅 해야 함

    여기까지가 Apache, Tomcat이 해주는 일!
    ** if로 설계하는 방법은 기업마다 다 다르고 실수가 많이 발생할 수 있음
    그래서 자유도를 줄이고 일관성을 높임
    Spring. web이라는 Spring Framework에서 제공하는 웹 개발과 관련된 모듈의 이름
     
    1. Dispatcher(Servlet) class
        • 책임 : 라우팅 → Annotaion 보고

        여기까지가 Spring이 해주는 일!
         
        • 응답할 데이터를 BufferedWriter에 담아 전송함
        • controller에 요청
     
    1. Controller class
    • 에러가 뜨게 되면 요청자인 Dispatcher에게 책임을 위임함
    • reflection으로 만들면 동적 분석을 해주면서 메서드를 실행시켜줌
    • 매개변수에 HttpServletRequest를 적기만 하면 쓸 수 있음
     
    1. DAO
        • DB와 연결되어 있음
        • 요청 방식
        POST(Insert), PUT(update), GET(select), DELETE(delete)
     
     
     
     
    Share article

    vosw1

    RSS·Powered by Inblog