본문 바로가기
💻Information Security

웹 서버(Web Server)와 WAS(Web Application Server)

by Prof. Panda 2024. 1. 13.

Photo by Taylor Vick on Unsplash

웹 서버의 정의와 역할

웹 서버(Web Server)란 클라이언트의 요청을 받아서 서버 내의 자료를 제공해 주는 '서버'를 의미합니다. 클라이언트란 브라우저(Browser)라는 프로그램을 통해서 서버에 정보를 요청하고 받아서 열람하는 일반적인 사용자, 또는 브라우저 프로그램 자체를 의미합니다. 우리가 서버에 정보를 요청하고 정상적으로 자료(정보)를 받았기에 이렇게 웹페이지를 서핑하고 다닐 수 있는 것이라고 할 수 있습니다. '클라이언트'는 '브라우저'이고 브라우저에 정보를 전달할 수 있는 자료를 가지고 있는 곳을 '서버'라고 간단하게 정리할 수 있습니다.

  • 웹 서버의 역할
    • 클라이언트의 요청(URL)을 해석하여 수행
    • 정적 페이지 관리 및 전송
    • 동적 페이지의 경우 WAS에게 해석 요청

 

URL의 정의와 구성

클라이언트에서 서버에 '요청'을 보내기 위해서는 필요한 양식(규칙)이 있겠죠? 그런 일종의 양식을 URL(Uniform Resource Locator)이라고 합니다. '자료를 위치시키는 동일한 규격 또는 양식'이다라고 한국말로 풀어서 쓸 수 있겠습니다. 그런데, 이렇게 어렵게 말을 하지만 우리는 그냥 '링크의 형식이다'라고 생각하면 되겠습니다. 우리가 브라우저에서 링크를 통해 여기저기 정보를 요청하고 돌아다닐 수 있는 것은, 서버가 우리의 요청을 이해했기 때문입니다. 클라이언트는 정해진 URL을 통해 정확한 자료를 요청하고, 서버는 요청을 이해해서 부탁받은 자료를 전달해 주는 것입니다. URL의 구성은 아래와 같습니다.

[프로토콜]://[도메인/IP]:[포트]/[파일,자료]
https://panda-university.tistory.com/category/Information_security.html

[프로토콜] = https
[도메인/IP] = panda-university.tistory.com
[포트] = (별도 명시가 없으면) http는 80, https는 443
[파일,자료] = 'category' 폴더에 있는 'Information_security.html' 파일

위의 내용을 보면 기본적으로 URL은 프로토콜, 도메인(또는 IP), 포트(생략가능)와 파일의 위치를 가지고 있는 것을 볼 수 있습니다. 이 내용들은 포트를 제외하고 필수적으로 명시되어야 합니다. 포트의 경우도 HTTP 프로토콜이라면 80번 포트를 사용하고, HTTPS의 경우 443 포트를 기본적으로 사용합니다. 즉, 위의 예시에서는 HTTPS 프로토콜을 사용하기 때문에 'panda-university.tistory.com:443/category/...'에서 443이 생략된 것이라고 할 수 있습니다. 

 

WAS의 정의와 역할

WAS란 'Web Application Server'의 약자로 웹 서버 뒤에서 웹페이지를 '동적'으로 만들어서 웹 서버에게 전달해 주는 프로그램입니다. 서버 뒤에 설치된 데이터베이스(Database)와 연결해 주는 기능도 하고 있습니다. 웹 서버와 헷갈리기 쉽지만 '웹 응용 서버'와 '웹 서버'는 분명 기능이 다르지만, 그 둘은 거의 항상 같이 있기 때문에 '웹 서버'라고 한다면 '웹 응용 서버(WAS)'를 포함하는 것이 일반적입니다. 하지만 WAS의 존재를 생각하지 않고 웹 서버를 만든다면 '동적 페이지'를 만들지 못하거나 데이터베이스와 연결하지 못하는 등 명확한 한계가 있으며 여러 가지 기능이 작동하지 않을 수 있습니다. 

  • WAS의 역할
    • 웹 서버의 요청 수행 (동적 페이지 생성)
    • 데이터베이스 연결 및 질의 수행
    • 쿠키 생성 및 세션 관리 (인증과도 연관)

 

둘의 차이점과 관계

'웹 서버'와 '웹 응용 서버'는 이름이 비슷하고 클라이언트는 '웹 서버'와 소통을 하기 때문에 '웹 응용 서버'의 역할을 간과하기 쉽습니다. 개발에서 '프런트 엔드'와 '백 엔드'라는 말을 많이 들어보셨을 겁니다. 웹 서버가 프런트엔드, 웹 응용서버는 백엔드를 담당하고 있다고 할 수 있습니다. 맥도널드에 비유를 해보자면, 손님의 주문을 받는 '프런트(데스크)'가 곧 '프런트엔드'라고 할 수 있고, 음식을 바쁘게 조리하는 주방은 손님에게 잘 보이지 않는 '백엔드'라고 하면 이해가 쉽습니다. 이미 만들어진 음식만 파는 것이라면 주방이 필요 없이 '프런트'만 있으면 되겠지요? 손님이 음식을 요청하면 프런트에서는 이미 만들어진 음식을 손님에게 전달하는 것입니다. 하지만, 손님마다 다른 음식을 원하거나 더 맛있는 음식을 만들어야 한다면 아무래도 주방인 '백엔드'가 있는 것이 좋습니다. 결국에 손님에게 음식을 서빙하는 것은 '프런트'의 역할이기에 손님은 주방장의 노력을 모르거나 아예 존재 자체를 모를 수도 있겠네요. 너무나 슬프지 않나요?

Photo by Pylyp Sukhenko on Unsplash

 

정적 페이지와 동적 페이지

이제 마지막으로 정적 페이지와 동적 페이지의 차이점에 대해서 설명해 보겠습니다. 정적 페이지란 말 그대로 그대로인 페이지입니다. 하지만, 그렇다고 움직이지 않는 것은 아닙니다. 자바스크립트라는 프런트엔드에서 사용되는 언어로 움직이게끔 할 수 있거든요! 반대로, 동적 페이지란 매우 활동적인 느낌이 나지만 전혀 그대로이거나 재미없는 페이지일 수도 있습니다. 그렇다면 그 둘을 어떻게 분간할 수 있을까요? 다시 맥도널드로 돌아와 보겠습니다. 정적 페이지는 이미 만들어진 음식이라고 할 수 있습니다. 모두 똑같이 만들어졌고, 철수가 주문하든 영희가 주문하든 똑같은 레시피로 만들어진 똑같이 생긴 햄버거입니다. 하지만, 철수는 치킨샌드위치를 시키고, 영희는 핫스파이시 더블빅맥을 시킨다면, 주방에서는 똑같은 햄버거가 아니라 철수와 영희의 요청대로 치킨샌드위치와 핫스파이시 더블빅맥을 만들어서 줘야 합니다. 즉, 사용자의 요청이나 조건에 따라서 다른 모습(결과)이 나오는 것을 동적 페이지라고 할 수 있습니다. 나머지, 정적 페이지는 그런 기능이 없다고 생각하면 되겠지요? 잘 보이지는 않지만 우리의 입맛대로 맛있게 요리를 해주는 주방장님께 감사를 드리며 이만 포스트를 마치겠습니다.