인프런 커뮤니티 질문&답변

유진이님의 프로필 이미지
유진이

작성한 질문수

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

웹 서버, 웹 애플리케이션 서버

WAS, WS 잘 이해가 안갑니다.

작성

·

1.6K

1

안녕하세요.

질문글도 모두 읽어 보았고, 댓글에 첨부해주신 링크를 포함해 검색도 해봤습니다. 하지만 용어로는 이해가 되는데, 실제로 와닿지가 않고 무엇을 의미하는지 모르겠어서 질문 남깁니다.

일단 대부분의 WAS, WS에 대해 정보를 제공하는 글들을 종합해보면 WAS는 WS + Container(Servlet, jsp 등 실행?)입니다. 그렇다면 클라이언트 - WS - WAS -DB 구조로 설계를 하면 결과적으로 WS가 두개 포함되는 것인가요? WS 그 자체와 WAS 안에 포함된 WS 이렇게 두개라는 생각이 듭니다. 

사실 앞의 질문은 제 궁금증에 핵심은 아닙니다. 실질적으로 와닿지 않아서 추측으로 한번 이야기 해보겠습니다. 기능이 하나도 없는 IntelliJ를 가정해보겠습니다. 그리고 여기다가 Apache라는 WS를 하나 깔았습니다. 그렇다면 우리는 Controller를 사용할 수 있나요? 아니면 WS만 존재하는 상황에서 Controller라는 Java 코드 자체를 사용할 수 없나요?

Controller를 만들 수 있다고 가정해 보겠습니다. 먼저 브라우저는 /welcome이라는 HTTP 요청을 보냅니다. 이 때, 깔려있던 WS인 Apache가 동작합니다. Apache는 Controller 코드에 /welcome에 해당하는 곳을 찾아서 index,html으로 페이지 이동을 시켜주겠죠.(이 부분을 페이지 이동이 아닌 서버에서 클라이언트로 html을 response 해준다라고 표현하는 것 같습니다.)

두번째로 WS인 Apache만 깔려있는 상태에서는 Controller, 아니 Java 코드 자체를 사용할 수 없다고 가정 해보겠습니다. 그렇다면 클라이언트는 /welcome이라는 HTTP 요청을 보낼 수 없겠죠. /index.html 이라는 HTTP 요청을 보내야할 것 같다고 추정됩니다. 다시 생각해보니 후자의 경우 Controller 및 Java코드를 쓸 수 없다면 Http요청 url을 받아줄 곳이 없기 때문에 /index.html이라는 HTTP 요청을 보낼 수는 없고, html 내에 location.href 등을 통해 직접적으로 페이지 이동만이 가능하지 않을까라는 생각이 듭니다. 이 때, Apache가 해당 HTTP 요청 or 직접적 페이지 이동 요청(무엇이 맞는지 모르겠습니다. 둘다 가능한지, 둘 중 하나만 가능한지)을 받아서 index.html 페이지를 띄워줍니다.(이 또한 페이지를 띄워주거나 페이지 이동한다는 개념을 WS가 html 파일을 클라이언트 쪽으로 response 해준다라고 하는 것 같습니다.)

물론 전자의 경우이든 후자의 경우이든 반환되는? index.html에는 html 태그, css파일, javascript, 이미지 등 우리가 정적 파일이라고 말하는 요소들로만 구성되어 있습니다. 즉, jstl, jsp 등의 서버 사이드 언어가 포함되지 않은 상태로, html tag와 이를 채우는 값들로 하드코딩 되어있는 파일입니다.

여기서 잠깐 질문을 정리해보겠습니다. 

1. 클라이언트 - WS - WAS - DB 구조로 설계한다면 WS는 두개 포함된 것인가? 만약 WS, WAS를 두대씩 사용한다면 WS는 총 4개가 되는 것인가?

2.  깡통 IntelliJ(메모장 느낌?)에 Apache WS를 깔았을 시 전자, 후자 중 알맞게 이해한 내용이 있는지?

이렇게 정리할 수 있겠습니다. 

이어서 다시 깡통 IntelliJ에서 모든 것을 지우고 WAS인 Tomcat을 깔아 보겠습니다. 그렇다면 우리는 Controller를 포함한 Java 코드를 사용할 수 있으며, servlet, jsp, thymleaf 등을 사용할 수 있습니다. 또 Http 요청을 동적으로 작성해서 보낼 수도 있습니다. 

구체적으로 예를 들면, 클라이언트는 /member/{id}라는 http 요청을 보냅니다. 이 때, WAS인 Tomcat안에 포함된 WS가 해당 요청을 확인합니다. 확인해보니 member 하위에 붙는 {id}는 동적 요소입니다. 따라서 WAS 안에 포함된 Container로 보냅니다. 이 후 동작은 잘 모르지만 쭉 logic이 실행되고  DB에서 해당하는 값을 select 해올 수 있습니다. 즉, 어떤 id가 들어왔느냐에 따라 다른 결과를 출력하죠. 두번 째는 html파일에 타임리프를 사용하거나, jsp를 사용하거나, jstl을 사용하거나 하는 것이 가능해집니다. 물론 WAS는 WS를 가지고 있기 때문에 html, js, 이미지 등의 정적 파일도 관리 가능합니다.  그냥 WAS Tomcat이 존재하므로써 우리가 현재 인텔리제이에서 사용하는 모든 것들이 가능합니다. (스프링 등의 프레임워크 등의 기능을 말하는 것이 아닌 logic, db 등 처리 후 화면을 던져주는 것들)

3. 사실 WAS를 사용할 때, 설명을 구체적으로 하지 못하겠습니다. 제가 궁금한 점을 확실하게 기재하지는 못했지만 이와 같이 동작하는 것이 맞는지 궁금합니다. 즉, 인텔리제이에 작성한 코드들이 실행되고, 클라이언트에서 들어온 HTTP 요청에 따라 시작돼 응답하는 순간까지 모두 Tomcat이라는 WAS 서버가 하는 역할이라고 볼 수 있다가 맞는 말일까요?

4. 클라이언트 - WS - WAS - DB 구조에서 클라이언트에서 요청이 들어왔을 때, WS와 WAS는 실질적으로 무슨 처리를 하는 것인가요? 

4-1. HTTP 요청이 아닌 단순 html 파일에서 location.href 등으로 페이지 이동을 직접 선언 했을 때, 요청된 페이지가 정적 페이지라면 WS가 처리한다.

4-2. WS도 Java 코드. Controller 등을 사용할 수 있다. 따라서 HTTP 요청이 왔을 때, Controller에서 확인한 후 단순 페이지 이동이나 정적 파일만을 응답한다면, WAS가 아닌 WS에서 처리한다. 

4-3. 4-1번이 맞는지, 4-2번이 맞는지 모르겠습니다만 4-2번맞다고 가정했을 시, Controller에서 확인해봤더니 동적 파일로 이동하거나 동적 파일을 응답해주거나 추가적인 로직을 실행해야 하거나 DB와 연관된 작업일 경우 WS는 WAS가 일을 처리할 수 있도록 넘긴다.

쓰다보니 글이 길어졌습니다. 틀린 내용도 많을 것이고 잘 정리되지 않았지만 도움 요청 드려봅니다.

감사합니다. 

답변 1

0

Apache와 Tomcat 혹은 웹 서버와 WAS는 어떻게 다를까? (tistory.com)
위의 글을 참고하시면 도움이 되지 않을까 합니다!

김영한님의 프로필 이미지
김영한
지식공유자

bji1527님 감사합니다^^

좋은 강의 올려주시는 영한님께 오히려 감사합니다ㅎㅎ

유진이님의 프로필 이미지
유진이

작성한 질문수

질문하기