TIL - [DAY 5] 톰캣이란?

jihan kong·2022년 5월 19일
0

Spring Boot 개념정리

목록 보기
5/6
post-thumbnail

"메타 코딩" 최주호님의 "스프링부트 개념 정리(이론)" 강의를 계속해서 학습중에 있다.
본 시리즈는 강의를 기반으로 하여 작성되었다.
이번 강의부터는 본격적으로 SpringBoot의 동작원리에 대해서 학습하게 되었다.


SpringBoot의 동작 원리

1. 내장 톰캣(Tomcat)을 가진다.

스프링부트는 톰캣을 따로 설치할 필요 없이 바로 실행이 가능하다는 특징이 있다.

톰캣에 대해 이야기하기 전에 HTTP 통신에 대해서 먼저 알 필요가 있다.
HTTP 통신의 특징✨은 다음과 같다.

  1. 클라이언트와 서버로 이루어진 통신
  2. 무상태 프로토콜(Stateless)
  3. 비 연결성(Connectionless)

정리하자면 바로 Stateless 방식의 문서 전달 (정적) 통신이라는 점에 있다.

  • A와 B는 클라이언트, C는 서버이다.
  • A는 C에게 "a.txt"라는 파일을 요청. C는 A에게 "a.txt"라는 파일을 응답해주고 있다.
  • C는 클라이언트 A와 B의 상태를 보존하지 않고 있다. (Stateless)
  • 따라서 C는 클라이언트의 현재 요청만 처리할 뿐, 다음의 요청까지 기억하고 있지는 않다.

Http 통신에 관하여 구글링을 하던 중, "hanamon" 님의 블로그에서 다음의 재미있는 비유를 보았다.

(출처 : https://hanamon.kr/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-http-http%EB%9E%80-%ED%8A%B9%EC%A7%95-%EB%AC%B4%EC%83%81%ED%83%9C-%EB%B9%84%EC%97%B0%EA%B2%B0%EC%84%B1/)

결국, 정리하자면

  • 상태 유지 : 중간에 다른 점원으로 바뀌면 안됨. 항상 같은 서버가 유지되어야 하며 서버에 장애가 생긴다면 치명적
  • 무상태 : 중간에 다른 점원으로 바뀌어도 됨. 아무 서버나 호출해도 되고 서버에 장애가 생겨도 다른 서버에서 응답을 전달하면 된다.

서두가 길었다. 그렇다면, 도대체 요녀석.. 톰캣은 무엇일까?

위키백과에 검색해보면 '아파치 소프트웨어 재단에서 개발한 서블릿 컨테이너 (또는 웹 컨테이너) 만 있는 웹 애플리케이션 서버'라고 나와있다.

웹 서버는 위에서 언급했던 것처럼 클라이언트와 서버 간의 통신을 통해 동작한다. 클라이언트는 URL과 IP 주소 등을 통해 서버에 특정 자원을 요청(request) 하게 되고, 서버는 이것을 보고 이에 응답(response) 하며 작동하게 된다.


다음 그림을 보자.

이처럼 아파치는 웹 서버의 일종이다. 단순히, 정적타입(html, javascript, css)의 데이터를 client가 요청한다면 이에 응답할 때는 아파치가 동작하며 웹 서버의 역할을 한다.


그러나, 만약 . jsp 와 같은 자바 코드를 요청하게 된다면...?

웹 서버는 이것을 이해할 수 없을 뿐더러 이에 응답하여 자바코드를
전송한다 한들 웹브라우저 조차 전송받은 내용을 나타내지 못할 것이다.

따라서, 아파치는 톰캣으로 이 코드를 보낸다. 톰캣에 내장된 Web Container는 JSP, Servlet 을 구동할 수 있는 환경이 있기 때문에 동적 data를 처리할 수 있다.

결론적으로 톰캣은 .jsp 와 같은 자바 코드를 컴파일해서 .html 로 번역해서 클라이언트에게 제공해주는 역할을 한다.

요약하면,

아파치 서버 : 정적 파일을 처리하는 웹 서버.
톰캣 : 동적 기능들을 가공. HTML로 변환하여 클라이언트에게 전달.

profile
학습하며 도전하는 것을 즐기는 개발자

0개의 댓글