주제 간단하게 생각해 보기
처음 보는 입장에서 WAS(Web Application Server) , Web Server, Apache HTTP Server, Apache Tomcat 이 뭔지 도저히 알 수가 없습니다. (네. 제가 그렇습니다.) 그래서 '와 이거를 어떻게 쉽게 설명해야 하지'라는 생각이 들었고 일단 제가 이해한 내용을 좀 작성하고 싶었습니다.
메인 주제는 Apache Tomcat 이기 때문에 그것에 대해 먼저 설명해 보겠습니다.
Apache
웹 사이트와 웹 애플리케이션을 호스팅 하는 데 사용되는 웹 서버입니다. HTML, CSS 및 JavaScript와 같은 정적 콘텐츠를 처리하는 데 사용할 수 있습니다.
Tomcat
Java를 사용하여 작성된 웹 애플리케이션을 실행하기 위한 웹 애플리케이션 서버입니다. JSP, Servlet 및 JavaBeans와 같은 동적 콘텐츠를 처리하는 데 사용할 수 있습니다.
그림으로 설명을 보겠습니다.
작동 순서(Apache Tomcat이 하나의 프로그램이라 하기와 같이 표현)
- 브라우저(프런트엔드 서버)가 Apache Tomcat에 HTTP 요청을 보냅니다.
- Apache Tomcat은 요청을 분석하고 해당 서블릿을 호출합니다.
- 서블릿은 요청을 처리하고 HTTP 응답을 생성합니다.
- Apache Tomcat은 응답을 브라우저로 반환합니다.
- 브라우저는 응답을 수신하고 웹 페이지를 표시합니다.
작동 순서는 하나로 묶어서 표현했는데, 설명에는 둘을 나눠서 설명해 보겠습니다.
위에 그림을 보시면 Apache는 클라이언트의 요청을 받아 요청을 Web Container로 보내는 역할을 합니다. 예를 들어 클라이언트가 HTTP get 요청을 보냈을 때, 요청이 뭔지 확인하고 Web Container로 'get 요청이 왔네요!' 하고 보내주는 역할을 합니다.
Tomcat에서는 get 요청에 상응하는 Servlet(추후 설명 예정)을 호출하고 클라이언트에게 줄 HTTP 응답을 생성합니다.
그다음 생성한 응답을 Apache 쪽 Web Server로 보내 그 응답을 클라이언트에게 보내주는 과정입니다.
(제가 이해한 바로는 응답을 HTML코드로 변경해서 기존에 만든 HTML 코드와 연동하여 화면에 나타나게 해주는 것으로 알고 있습니다.)
간단하게 이렇게 이해를 해보았고 이제는 위의 세부주제에 대해 알아보도록 해보겠습니다.
Apache HTTP Server(Web Server)
Apache server는 Apache라는 비영리 재단에서 발표한 오픈소스 web server입니다.
그렇다면 웹 서버는 무엇인지 알아보죠.
Client에서는 미리 정해진 HTTP 규격에 맞게 Web server로 요청을 보냅니다. 요청받은 내용을 해석하고 그에 맞는 데이터 형식으로 보내주는 것을 Web Server가 해주는 것입니다.
요청을 데이터와 단순하게 매칭하고, 이를 HTTP에 맞게 돌려주면 되기 때문에, 이러한 과정을 Static(정적)인 웹서버라고 합니다.
HTML, CSS, 사진과 같은 별도의 데이터 수정 없이 반환되는 자료 형식들이 해당됩니다.
정해진 데이터만 가져와서 반환하면 된다는 점 때문에 처리 속도가 빠르며 트래픽의 과부하는 잘 처리할 수 있다는 장점이 있습니다.
HTTP를 정해진 약속대로 빠르게 처리해 주어 반환해야 하는 점 때문에 대부분이 C로 구현되어 있습니다.
Web Application Server (Servlet, Tomcat)
이 부분이 이해하기가 조금 어려웠는데 설명해 보겠습니다.
Web Server 만으로는 너무 한정적인 동작밖에 하지 못할 것입니다. 그저 데이터를 응답해 줘서 그대로 화면에 내보내는 것 밖에 안된다는 말입니다.
그래서 앞에서 설명한 작동 순서에서 HTTP 요청을 받아서 Web Container에 넘겨줘 동적인 웹처리를 하는 과정을 설명하려고 합니다.
Web Application Server는 일부 Web Server 기능과 Web Container로 함께 구성됩니다.
(WAS 내에 있는) Web Server는 HTTP 요청을 받아서 Web Container로 넘겨주고
Web Container에서는 내부 프로그램 로직의 처리에 따라서 데이터를 만들어서 (WAS 내에 있는)Web Server로 다시 전달합니다.
Java에서는 Web Container를 Servlet Container라고 부르고 내부 프로그램 로직을 Servlet이라고 부른다고 합니다. 어떨 때 사용이 되는지 예를 들어보면,
get 요청이 들어왔을 때 WAS가 없었을 때는 그냥 누구나 볼 수 있게 했다면, WAS를 이용하여 내부 로직을 통해 로그인한 사람만 보이게 만드는 코드를 만들어서 누구나 볼 수 없게 만들 수 있습니다.
Web Container(JAVA에서는 Servlet Container)를 통해 개발자는 로직에 집중할 수 있는 장점을 가졌습니다.
하지만, Apache Tomcat 이 WAS의 역할을 하고 있지만 완벽한 WAS 역할을 하고 있지 않다고 합니다.
분산 트랜젝션과 같은 기능들이 제외되어서 WAS로서 완벽한 역할을 하지 않는다고 합니다. (많이 어렵네요...)
소감
조금은 알 것 같지만 아직은 매우 정확하게 알지는 못하는 것을 인정합니다. 개발 공부를 하다 보면 추상적인 정보들이 너무 많아 이해가 잘 안 되는 부분이 많다고 느낍니다. 하지만 처음 봤을 때와 두 번째 봤을 때, 세 번째 봤을 때가 다 다르고 이해가 더 잘되더라고요. 인생에서 책을 읽을 때나 영화를 볼 때도 많이 볼 수록 더 많은 것이 보이게 되는 것처럼 말입니다.
개발 공부를 계속할 것이라면 너무 어렵다고 포기하지 말고 꾸준히 관심을 가져주고 사랑해 줘야 개발도 저희의 사랑에 감동을 받아 이해하게 하지 않을까요?
다음에는 tomcat apache 설정하는 것을 해볼 텐데요. 다행히도... MacOS와 Window 설정이 비슷해서 설명하기 수월할 것 같아요.
'코딩 개발' 카테고리의 다른 글
HTML 기본 문법 - (head, body, h, a, img, ol, ul, table tags) (0) | 2023.05.15 |
---|---|
Apache Tomcat & Eclipse 설정하기 (Window, macOS 공용) (1) | 2023.05.13 |
DB 정규화 (3) | 2023.05.03 |
Macbook 에서 AWS EC2 Window 원격 제어 (0) | 2023.05.02 |
Agile & Waterfall 개발 방식 (0) | 2023.04.02 |