"메타 코딩" 최주호님의 "스프링부트 개념 정리(이론)" 강의를 계속해서 학습중에 있다.
본 시리즈는 강의를 기반으로 하여 작성되었다.
이번 강의부터는 본격적으로 SpringBoot의 동작원리에 대해서 학습하게 되었다.
스프링부트는 톰캣을 따로 설치할 필요 없이 바로 실행이 가능하다는 특징이 있다.
톰캣에 대해 이야기하기 전에 HTTP 통신에 대해서 먼저 알 필요가 있다.
✨HTTP 통신의 특징✨은 다음과 같다.
정리하자면 바로 Stateless 방식의 문서 전달 (정적) 통신이라는 점에 있다.
Http 통신에 관하여 구글링을 하던 중, "hanamon" 님의 블로그에서 다음의 재미있는 비유를 보았다.
결국, 정리하자면
위키백과에 검색해보면 '아파치 소프트웨어 재단에서 개발한 서블릿 컨테이너 (또는 웹 컨테이너) 만 있는 웹 애플리케이션 서버'라고 나와있다.
웹 서버는 위에서 언급했던 것처럼 클라이언트와 서버 간의 통신을 통해 동작한다. 클라이언트는 URL과 IP 주소 등을 통해 서버에 특정 자원을 요청(request) 하게 되고, 서버는 이것을 보고 이에 응답(response) 하며 작동하게 된다.
다음 그림을 보자.
이처럼 아파치는 웹 서버의 일종이다. 단순히, 정적타입(html, javascript, css)의 데이터를 client가 요청한다면 이에 응답할 때는 아파치가 동작하며 웹 서버의 역할을 한다.
그러나, 만약 . jsp
와 같은 자바 코드를 요청하게 된다면...?
웹 서버는 이것을 이해할 수 없을 뿐더러 이에 응답하여 자바코드를
전송한다 한들 웹브라우저 조차 전송받은 내용을 나타내지 못할 것이다.
따라서, 아파치는 톰캣으로 이 코드를 보낸다. 톰캣에 내장된 Web Container는 JSP, Servlet 을 구동할 수 있는 환경이 있기 때문에 동적 data를 처리할 수 있다.
결론적으로 톰캣은 .jsp
와 같은 자바 코드를 컴파일해서 .html
로 번역해서 클라이언트에게 제공해주는 역할을 한다.
요약하면,
아파치 서버 : 정적 파일을 처리하는 웹 서버.
톰캣 : 동적 기능들을 가공. HTML로 변환하여 클라이언트에게 전달.