개발관련/용어

웹서버와 앱서버, WAS / 차이

고통받는다 2023. 7. 1. 20:18

개발자 단독방에서 어떤 분께서 교육 프로그램 면접에서 웹서버와 앱 서버가 뭔지 말하고 그 두 개의 차이를 말해봐라라는 면접 질문이 나왔다고 하셔서 저런 면접 문제도 내는구나 싶어서.. 해당 내용을 정리하게 되었습니다.

 

웹서버?

 

웹서버에 대해 찾아보면 공통적으로 이런 말을 하고 있습니다.

  • 웹서버는 HTTP를 이용하여 클라이언트와 서버의 통신을 의미합니다.
  • HTTP Request를 받고 HTML, CSS, JS, Image 등 정적인 정보를 반환하는 역할을 합니다.
  • 동적인 자원을 웹 컨테이너로 넘겨주고 웹 컨테이너에서 처리한 결과를 다시 받아 브라우저에 제공하는 역할을 합니다.

 

내용을 좀 더 쉽게 풀어쓸까요?

네이버라는 웹페이지가 있습니다.

지금 저기에 나오는 모든 정보들 (Ex. 이미지, 동영상 기타 등등... ) 은 어떻게 클라이언트에 표시가 되고 있을까요?

Flow는 다음과 같습니다.

클라이언트에게서 정보를 들고와라 라는 Request를 받습니다. 웹서버는 중간에서 이 응답을 받고 파일서버나 다른 정보들이 있는 서버 쪽에 Request 요청을 던지고 Response를 받은 후 다시 그걸 클라이언트에서 Response로 넘겨줍니다.

그렇게 여러 이미지들, 동영상들이 클라이언트 쪽에 표시가 되는 것이죠.

그림으로 표현하면

이렇게 되는 것이죠.

이 그림으로 알 수 있는 건 웹서버란 클라이언트와 데이터 소스 사이에 위치하며 요청과 응답을 처리하는 중간자 역할을 한다고 이해할 수 있습니다.

웹서버 왜 씀? 이점이 뭐가 있음?

 

 

1.

먼저 인터넷이라는 건 혼자서 쓰는 게 아닙니다. 세계의 수많은 사람들이 동시에 접속하는 형식입니다.

그렇다면 당연히 웹사이트도 여러 사람이 동시에 접속하게 되는 것이겠죠?

만약 웹 서버가 존재하지 않는다면 각 클라이언트들이 알아서 자원에 접근을 해야 할 겁니다.

그 방법에는 프로세스와 스레드 방법이 존재하는데

프로세스를 사용할 시 자원의 소모가 상당히 큽니다. 때문에 많은 클라이언트가 접속하게 된다면 서버에 과부하를 주기 성능이 떨어지게 됩니다.

스레드 방법을 이용할 시 프로세스보다 빠르고 자원 소모가 적다는 장점이 있으나.

공유 자원에 대한 동기화 문제가 발생합니다.

또한 스레드 생성 및 제거에 대한 오버헤드가 존재하기 때문에 적절한 스레드 사용이 필요합니다. (난이도 상승)

웹서버를 이용하게 되면 이런 동시성의 문제를 해결할 수가 있습니다.

2.

다음으로 웹서버는 정적 파일을 제공하는데 특화되어 있는 시스템이기 때문에 정적 파일을 처리할 때 빠른 속도를 가집니다.

이는 곧 웹사이트의 성능을 향상시키는 데 도움이 됩니다.

3.

웹 사이트는 수많은 사람들이 접속하는 공간입니다.

때문에 경우에 따라 회원가입과 로그인을 요구하는 서비스들이 있을 것이고... 회원가입과 로그인을 하기 위한 내용에는 민감한 정보들이 담겨 있을 것입니다.

이 내용들이 외부 해커들에게 노출이 된다면.... 정말 난리가 나겠죠?

때문에 보안 문제에 대해 정말 신경을 많이 써야 합니다.

웹 서버는 이런 보안 기능을 제공하는 경우가 많습니다.

Https를 지원하여 데이터 전송 시 암호화를 지원하거나 웹 애플리케이션 방화벽 등을 통해 보안에 강화된 대응을 제공할 수 있습니다.

따라서 웹서버는 다수의 사용자를 처리할 수 있으며, 정적 파일 처리에 빠르고, 보안 기능을 제공하는 등 여러 가지 이점이 있기 때문에 사용합니다.

웹서버의 대표적인 예로는

Apache Http Server, Nginx, Microsoft IIS, Google Web Server 등이 존재합니다.

앱 서버?

 

 

우선 확실하게 할 게 있습니다.

Application Server와 Web Application Server (일명 WAS)를 완전히 같다고 하는 분들이 많으신 거 같습니다.

하지만 이건 완전히 오해입니다.

정말 팩트 체크를 하자면 Application Server 과 WAS는 비슷하지만 두 개가 완전히 같냐?라고 한다면 절대 아닙니다.

이유는 간단합니다.

Application Server가 WAS보다 더 상위의 개념이기 때문입니다.

즉 Application Server가 있고 WAS는 그 Application Server의 종류 중 하나인 겁니다.

하위개념인데 상위개념과 완전히 같다!!라고 한다면 그건 잘못된 것이죠.

이 두 개를 같은 용어라고 지칭하게 된 이유가... 옛날에 JAVA 시장이 급성장하게 되고 많은 개발자들이 사용하면서 이런 관습이 생겨난 거 같습니다.

특히나 한국은 아직까지도 JAVA 시장이 크다 보니... WAS = Application Server라고 하시는 분들이 많은 것 같습니다.

https://en.wikipedia.org/wiki/Application_server

 

Application server - Wikipedia

From Wikipedia, the free encyclopedia Server that hosts applications An application server is a server that hosts applications[1] or software that delivers a business application through a communication protocol.[2] An application server framework is a ser

en.wikipedia.org

 

즉... 결론을 말하면 한국에서는 Application Server를 WAS (Web Application Server)라고 지칭하고...

영어권이나 다른 해외에서는 AS (Application Server)라고 구분해서 지칭합니다.

그리고 재미있는 건 WAS는 Web Application Server라 안 하고 IBM에서 개발한 WebSphere Application Server 지칭한다고 문서에 기록되어 있다..

자! 너무 서론이 길었습니다. 그래서 Application Server는 무엇이냐?

앱 서버는 클라이언트와 데이터베이스 서버 사이에서 동작하며, 다양한 애플리케이션 컴포넌트들을 실행하고 관리하는 소프트웨어입니다.

좀 어렵죠?

추가적으로 예시를 들어보겠습니다.

다들 인터넷 뱅킹 아시죠?

은행에 가지 않고도 계좌 잔액조회, 입금 등의 기능을 하는 아주 유용한 기능입니다.

각 은행마다 이런 인터넷 뱅킹 웹사이트는 다 만들어 놨습니다.

하지만 이런 금융 관련 기능들은 단순한 HTML과 JS로는 처리하기가 매우 어려운 기능입니다.

이를 처리하기 위해서는 서버 측에서 더 많은 로직들이 필요합니다.

(생각해 보면 이런 민감한 정보를 단순 로직으로 처리할 리가 없겠죠?)

이때 필요한 게 앱 서버인데

앱 서버는 이런 로직을 처리하고, DB와의 통신 등 다양한 기능을 제공하여 웹 브라우저에서 실행되는 웹 애플리케이션의 기능을 확장하는 역할을 합니다.

즉 정리하면 앱 서버는 웹 브라우저에서 실행되는 웹 애플리케이션의 백 앤드 부분으로, 사용자 인증, 데이터 처리, 비즈니스 로직 등 다양한 기능을 제공하여 웹 애플리케이션의 기능을 보완하고 확장합니다.

이걸 그림으로 표현하면 다음과 같이 됩니다.

눈치채셨나요? 위의 웹서버와 형태가 매우 유사합니다.

웹서버는 앱 서버 안에 존재

 

 

그렇습니다. 그렇게 보이는 이유는 웹서버가 AS 안에 포함되어 있기 때문이죠.

웹 컨테이너가 뭐냐?라고 하시는 분들을 위해 잠깐 설명드리면

동적인 웹 애플리케이션을 실행하기 위한 서비스를 제공하는 기능을 합니다. (동적 콘텐츠 처리를 함)

대표적으로 Apache Tomcat, Jetty, JBoss 가 있습니다.

즉 정적인 동작을 하는 웹서버, 동적인 작동을 하는 웹 컨테이너가 AS에 존재하게 되는 것이죠.

앱 서버의 대표적인 예로는

JBoss, IBM WebSphere, Oracle WebLogic, GlassFish 등이 있습니다.

JBoss는 웹 컨테이너라면서요?

 

맞습니다 JBoss는 웹 컨테이너로 분류되지만 Java EE의 구현체인 JBoss는 AS의 역할을 수행할 수 있기 때문에 AS로도 사용할 수 있습니다.

그래서 웹서버와 앱 서버의 차이는?

 

위의 내용을 종합해 보면 웹서버는 정적 파일처리 역할만 수행하지만 앱 서버는 정적 파일처리 역할을 하는 웹서버와 동적 콘텐츠를 처리하는 웹 컨테이너가 존재하기 때문에 둘 다 처리할 수 있다는 차이점이 있습니다.

그럼 두 가지 역할을 하는 앱 서버를 사용하는 것이 항상 옳은 선택?

 

앱 서버가 두 가지 역할을 하기 때문에 유리해 보이는 것이 사실입니다.

하지만 모든 것을 할 수 있다는 말을 돌려 말하면 그만큼 많은 자원을 소모한다는 소리입니다.

나는 동적인 콘텐츠를 사용할 필요도 없는데?라고 한다면 웹서버만 사용하는 것이 더 효율적입니다.