[Java]Apache? Tomcat?? 둘이 무슨 차이지?
😀서론
학교에서 php를 하고, 회사에서 spring boot + jsp를 사용하면서
아파치 톰캣을 자연스럽게 사용하게 되었다.
하지만, 사용하는 동안 이게 도대체 무엇이길래 웹을 할 때 많은 곳에서 사용하는지?
이게 정확히 무엇을 해주는건지?
에 대해 많은 궁금증을 가지면서 하다가 이번 기회에 공부를 하면서 정리를 해본다.
아파치(Apache)
(아파치 검색을 해보면 AH-64(아파치) 헬기가 가장 많이 나오길래 한번 가져와봤습니다..)
우리가 흔히 아파치라고 부르는 것은 Apache HTTP Server를 의미하는 데
이는 오픈 소스 소프트웨어 그룹인 아파치 소프트웨어 재단(Apache Software Foundation, ASF)에서
만든 웹서버 프로그램이다.
1998년 6월에 처음 세상에 공개가 되었고,
오픈소스를 통해 많은 개발자들에 의해 개발이 이루어졌으며, 이루어져가고 있는 상태이다.
그러면 웹서버(http server)는 무엇인가에 대해 궁금해질 것이다.
💻웹서버
웹서버는 하드웨어와 소프트웨어 두 분야에서 다른 의미로 부른다.
1. 하드웨어
웹 서버 소프트웨어와 웹 사이트의 구성 요소 파일을 저장하는 컴퓨터를 의미한다.
(예 : HTML 문서, 이미지, CSS 스타일 시트 및 JavaScript파일)
2. 소프트웨어
보통 HTTP 서버를 의미한다.
HTTP 서버는 URL(웹주소) 및 HTTP(프로토콜 주소)를 이해하는 소프트웨어이다.
HTTP 서버는 저장하는 웹 사이트의 도메인 이름을 통해 액세스 할 수 있으며 이러한 호스팅 된 웹 사이트의 콘텐츠를 최종 사용자의 장치로 전달한다.
브라우저는 웹 서버에서 호스팅 되는 파일이 필요할 때마다 HTTP를 통해 브라우저에 파일을 요청한다.
요청이 올바른 웹서버(하드웨어)에 도달하면 HTTP서버(소프트웨어)가 요청을 수락하고 요청된 문서를 찾은 다음에 HTTP를 통해 브라우저로 다시 보낸다.
(서버가 요청된 문서를 찾지 못하면 대신 404 응답을 반환하게 된다.)
아파치 서버
결국 아파치서버란 클라이언트에서 요청하는 HTTP요청을 처리하는 웹서버를 의미한다.
이는 정적타입(HTML, CSS, 이미지 등)의 데이터만을 처리하기 때문에 톰캣이란 것이 등장한 것 같다.
톰캣(Tomcat)
톰캣 WAS(web application server) (컨테이너, 웹 컨테이너, 서블릿 컨테이너로도 불림)
톰캣 또한 아파치 소프트웨어 재단에서 후원을 하고 있으며, 오픈소스로 개발이 되고 있다.
JAVA EE 기반으로 만들어졌으며, JSP와 Servlet을 구동하기 위한 서블릿 컨테이너 역할을 수행한다.
아파치서버와는 다르게 DB연결, 다른 응용프로그램과 상호 작용 등 동적인 기능들을
사용할 수 있다.
컨테이너(container)
동적인 데이터들을 가공하여 정적인 파일로 만들어주는 모듈
서블릿(servlet)
클라이언트의 요청을 받고 요청을 처리하여 결과를 클라이언트에게 제공하는 자바 인터페이스.
java.servlet.package에 정의된 인터페이스로서 서블릿의 라이프 사이클을 위한
세 가지 필수적인 메소드들을 정의한다.
- init()
- service()
- destory()
서블릿 컨테이너(servlet container)
- 서블릿들을 모아 관리
- 새로운 요청이 들어올 때마다 새로운 스레드를 생성
- 작업이 끝난 서블릿 스레드 자동 제거
WAS(wab application server)
DB 처리, 로직 처리를 요구하는 동적타입을 제공하는 소프트웨어 프레임워크를 의미한다.
기본적으로 사용되는 기능 3가지는 아래와 같다.
- 프로그램 실행 환경과 데이터베이스 접속 기능을 제공한다.
- 여러 개의 트랜잭션을 관리한다.
- 업무를 처리하는 비즈니스 로직을 수행한다.
🤔아파치 톰캣으로 부르는 이유?
기본적으로 위처럼 아파치와 톰캣의 기능은 나뉘어져 있지만,
톰캣 안에 있는 컨테이너를 통해 일부 아파치의 기능을 발휘하기 때문에
보통 아파치 톰캣으로 합쳐서 부르곤 한다.
요약
아파치
- 아파치 소프트웨어 단체
아파치 서버
- 정적인 파일 처리해주는 웹 서버 (80 포트)
톰캣
- DB처리와 같은 동적인 기능들을 가공하여 HTML파일로 만들어 클라이언트에게 제공(8080 포트)
참고
https://developer.mozilla.org/en-US/docs/Learn/Common_questions/What_is_a_web_server
https://namu.wiki/w/아파치 HTTP 서버
https://developer.mozilla.org/en-US/docs/Learn/Common_questions/What_is_a_web_server
https://wodonggun.github.io/wodonggun.github.io/study/아파치-톰캣-차이.html