본문 바로가기
Memo/우테코 4기

[우테코] 톰캣 구현 미션 학습 로그

by 연로그 2022. 9. 29.
반응형

목차

  1. 요구사항
  2. 학습 내역
    • 톰캣을 쓰는 이유
    • 입출력과 버퍼
    • catalina vs coyote
    • 스레드 풀 설정
  3. 추가 미션
    • HTTP 활용하기
    • Thread 활용하기

 


1. 요구사항 🍳

미션 수행 내역은 깃허브 레포지토리에 branch 별로 분류해두었습니다.

 

🥚 1단계

  • http://localhost:8080/index.html 페이지에 접근 가능하다.
  • 접근한 페이지의 js, css 파일을 불러올 수 있다.
  • uri의 QueryString을 파싱하는 기능이 있다.

 

🥚 2단계

  •  HTTP Reponse의 상태 응답 코드를 302로 반환한다.
  •  POST로 들어온 요청의 Request Body를 파싱할 수 있다.
  •  로그인에 성공하면 HTTP Reponse의 헤더에 Set-Cookie가 존재한다.
  •  서버에 세션을 관리하는 클래스가 있고, 쿠키로부터 전달 받은 JSESSIONID 값이 저장된다.

 

🥚 3단계

  •  HTTP Request, HTTP Response 클래스로 나눠서 구현했다.
  •  Controller 인터페이스와 RequestMapping 클래스를 활용하여 if절을 제거했다.

 

🥚 4단계

  • Executors로 Thread Pool 적용
  • 동시성 컬렉션 사용하기

 


2. 학습 내역 🔮

 

💜 톰캣을 쓰는 이유

 태초의 웹 어플리케이션을 상상해보자.. 처음부터 끝까지 하나하나 구현해야 했을 것이다. 헤더를 해석하고 로직을 수행하고 응답메시지를 생성하는 등 과정이 포함됐을 것이다. 필요한 비즈니스 로직만 작성할 수 있도록 도와주는 역할이 필요했다. 이로 인해 서블릿이 등장하였고 URL이 호출되면 서블릿 코드를 실행시켜주었다. HttpServletRequest, HttpServletResponse를 이용해 HTTP 요청이나 응답 정보도 편리하게 사용할 수 있게 되었다.

 

 이런 서블릿을 더욱 편하게 사용하기 위해 서블릿 컨테이너가 등장했다. 서블릿 객체를 생성하고 초기화, 호출, 종료 등 생명주기를 관리해주는 등 여러 지원을 해준다. 이 서블릿 컨테이너의 대표적인 예제로는 Tomcat이 있다.

 

 

💜 입출력과 버퍼

👉 https://yeonyeon.tistory.com/267

 

[Java] 입출력(I/O)과 버퍼(Buffer)

서론  ByteArrayOutputStream과 BufferedOutputStream의 차이점에 대한 질문을 받았다. 내가 Java의 입출력 시스템과 buffer에 대한 이해도가 떨어진다는 상태를 자각하게 되었다. 이를 공부하는 내용을 작성하

yeonyeon.tistory.com

 

 

💜 catalina vs coyote

 이번 미션에서 구현한 내용은 모두 catalina와 coyote 라는 패키지 내에서 이루어졌다. 실제 톰캣에서도 존재하는 패키지인데 이 둘의 역할에 대해서 간단하게 찾아보았다.

apache tomcat github

 

  • catalina: tomcat의 서블릿 컨테이너
  • coyote: HTTP 1.1 및 2 프로토콜을 웹 서버로 지원하는 Tomcat용 커넥터

 

Tomcat의 Architecture는 Service, Engine, Host, Connector 등 다양한 구조를 갖고 있는데 여기서 catalina는 Engine, coyote는 Connector에 해당한다. 공식 문서의 설명을 간단하게 번역해보았다.

 

  • Engine
    • 커넥터로부터 받은 모든 요청을 수신 및 처리 후 응답 전달
  • Connector
    • 클라이언트와 통신 처리
    • 한 톰캣에는 여러개의 커넥터가 존재할 수 있음

 

참고 
- https://en.wikipedia.org/wiki/Apache_Tomcat#Catalina
- https://tomcat.apache.org/tomcat-10.0-doc/architecture/overview.html

 

 

💜 스레드 풀 설정

👉 Thread Pool 이해하기

 

[Java] Thread Pool 이해하기

📚 함께 읽으면 좋은 글 프로세스와 스레드 Thread 이해하기 📑 목차 Green Thread vs Native Thread Java는 어떤 스레드를 사용하는가 Thread Pool 💥 Green Thread vs Native Thread 🔸 Green Thread = Virtual..

yeonyeon.tistory.com

 


3. 추가 미션 📬

 

📧 HTTP 활용하기

👉 https://github.com/yeon-06/jwp-hands-on/pull/1

 

[220902] HTTP 활용하기 by yeon-06 · Pull Request #1 · yeon-06/jwp-hands-on

0단계 - 휴리스틱 캐싱 제거하기 HTTP 응답 헤더에 Cache-Control가 없어도 웹 브라우저가 휴리스틱 캐싱에 따른 암시적 캐싱을 한다. 의도하지 않은 캐싱을 막기 위해 모든 응답의 헤더에 Cache-Control:

github.com

 

📧 Thread 활용하기

👉 https://github.com/yeon-06/jwp-hands-on/pull/2

 

[220905] Thread 활용하기 by yeon-06 · Pull Request #2 · yeon-06/jwp-hands-on

0단계 - 스레드 이해하기 다음 순서로 학습 클래스의 테스트를 통과시켜보자. ThreadTest SynchronizationTest ThreadPoolsTest 1단계 - 동시성 이슈 확인하기 스레드를 다룰 때 어떤 상황이 발생할 수 있을지

github.com

 

(+)

몇 주 전에 진행한 미션인데 여유가 없어 이제야 정리하게 되었다😭

반응형