My Boundary As Much As I Experienced

웹서버, 프론트 서버, 웹어플리케이션서버(WAS)의 차이점에 대해서 본문

Computer Basics/Network

웹서버, 프론트 서버, 웹어플리케이션서버(WAS)의 차이점에 대해서

Bumang 2024. 4. 23. 12:30
부정확함 주의!
막 네트워크 공부 시작한 신입 프론트엔드 개발자가 chatGPT와 여러 블로그들을 탐색하며 정리한 글이다.
자의적인 해석이 들어가 있을 수 있으며, 혹여 틀린 부분이 있다면 댓글로 알려주면 감사드리겠다.

 

웹서버와 프론트 서버가 다른건가? 웹어플리케이션서버(WAS)는 또 뭔데?

웹서버, 프론트 서버, 웹어플리케이션 서버... 사실 알다가도 모르겠는 개념들이다.

지금까지 프론트엔드 배포란 Vercel이나 Netlify, firebase hosting 등을 통해 앗싸리 해왔고 이걸로도 충분하다고 생각했었는데,

 

그러나 사수님께서 실제로 자신이 ec2 등의 클라우드 서버를 빌려 배포파일을 업로드 하는 경험을 해보란 조언을 해주셨

해보니 쉬울거라고 생각은 안 했지만, 훨씬 어려웠고, 알아야하는 개념도 많아 허들이 조금 있었다.

 

그 중에 오늘은 웹 서버와 프론트 서버, 웹 어플리케이션 서버에 대한 이야기를 해보려 한다.

 

웹서버란?

웹서버는 일반적으로 클라이언트(브라우저 등)로부터 HTTP 요청을 받아 정적 컨텐츠(HTML 파일, 이미지, CSS, JavaScript 파일 등)를 제공하는 서버이다. 가장 잘 알려진 웹서버 소프트웨어로는 Apache HTTP Server, Nginx 등이 있다.

 

사실 정적 컨텐츠를 제공하는 주체는 누구나 될 수 있다. 내 컴퓨터, 니 컴퓨터, 용식이 컴퓨터, AWS... 상관없이

사용자가 HTML, CSS, JavaScript 등을 제공해달라 하면 주는 역할을 하면 웹서버라고 할 수 있다.

웹서버를 너무 정확한 바운더리로 나누긴 힘들다는 뜻이다. 예를 들어 가장 유명한 웹서버인 Nginx도

정적 컨텐츠를 주는 용도로도 사용할 수 있지만, 그냥 로드밸런서로만 쓸수도 있다.

 

하여튼 각설하고 'HTTP요청을 받아 정적 컨텐츠를 사용자에게 제공한다'는 역할을 수행하면 웹서버라고 할 수 있다.

 

프론트 서버란?

프론트 서버라는 용어는 보통 웹 애플리케이션의 프론트엔드 측면을 처리하는 서버를 의미한다. 이는 사용자의 요청을 받아서 백엔드 서버로 전달하거나, 백엔드 서버에서 처리된 데이터를 클라이언트에게 전달하는 중계 역할을 할 수 있다. 때로는 로드 밸런서나 캐시 서버 등의 기능을 수행하기도 한다.

 

프론트 서버라고 하면 웹서버가 수행하는 정적파일 제공 외에도 백엔드 서버와의 통신, 처리까지 해주거나 혹은 로드 밸런서나 캐시 서버 등의 기능까지 해주는 것을 의미한다. 이것 또한 엄청나게 정확한 바운더리가 있는 용어는 아니다. 웹서버가 하는 일인 정적파일 제공 외에도 백엔드 통신, 캐싱 등의 여러 앞단의 일들을 처리해주는 서버를 프론트 서버라고 할 뿐이다. 이것도 개발자가 어떻게 구성하느냐에 따라 구조가 바뀔 수 있는 것이다. 그러나 대게 보통 사람들이 많이 사용하는 vercel이나 netlify 등도 프론트 서버의 일종이라 할 수 있다.

 

웹 어플리케이션 서버란?

웹 애플리케이션 서버(Web Application Server)는 말 그대로 웹 기반의 애플리케이션(API)을 실행하고 관리하는 서버를 의미한다. 이 서버는 클라이언트로부터의 요청을 받아 비즈니스 로직을 처리하고, 데이터베이스와의 상호작용을 통해 필요한 데이터를 조작하며, 그 결과를 클라이언트에게 다시 전송한다.

 

쉽게 러프하게 말하자면 백엔드 서버이다.

 

 

vercel이나 netlify 등의 배포 서비스를 사용하지 않는다면 프론트 배포를 위한 어떤 대안이 있을까?

나는 취준 미니프로젝트를 진행하며 거의 그냥 무지성으로 vercel이나 netlify를 이용해서 프론트를 배포해왔기 때문에 이를 이용하지 않는다면 어떻게 배포해야되는지 잘 모르는 상태였다. 그래서 프론트 배포를 위한 수단들이 추가적으로 뭐가 있는지 찾아보았다. 

 

  1. 전통적인 웹 호스팅 서비스 이용: 많은 웹 호스팅 회사들이 웹서버 공간을 제공하며, 여기에 정적 파일을 업로드하여 호스팅할 수 있습니다. 이 방법은 소규모 웹사이트나 비교적 단순한 프로젝트에 적합하다.
  2. 클라우드 스토리지 서비스 사용:
    • Amazon S3: AWS의 S3(Simple Storage Service)는 대용량의 데이터를 저장하고 웹을 통해 전 세계 어디서나 접근할 수 있도록 하는 스토리지 서비스이다. S3 버킷을 웹사이트 호스팅으로 구성하면, 정적 웹사이트를 호스팅할 수 있다.
    • Google Cloud Storage: Google Cloud의 Storage 서비스도 웹사이트의 정적 파일을 저장하고 공개적으로 접근 가능하게 설정할 수 있다.
    • Microsoft Azure Storage: Azure의 Blob Storage를 사용하여 정적 웹사이트를 호스팅할 수 있으며, 이 또한 전 세계의 데이터 센터를 통해 빠른 접근성을 제공한다.
  3. GitHub Pages: GitHub에서는 GitHub Pages 기능을 제공하여 사용자가 GitHub 리포지토리에 정적 웹사이트를 무료로 호스팅할 수 있다. 개인 당 한 서비스밖에 연동 못 한다.
  4. 자체 웹서버 설정: 자신의 서버에 웹서버 소프트웨어(예: Apache, Nginx)를 설치하고 구성하여 직접 정적 파일을 호스팅할 수도 있습니다. 이 방법은 완전한 제어가 필요한 경우나 학습 목적으로 적합할 수 있다.
  5. 기타 플랫폼 사용: Firebase Hosting, Surge, DigitalOcean Spaces 등 다양한 플랫폼들도 정적 사이트를 쉽게 배포하고 관리할 수 있는 서비스를 제공한다.

 

마치며

최근 나는 vercel 만능주의를 벗어나 프론트 배포 과정을 aws로 진행해보았다. EC2 instance를 만들어 apache서버를 연결하고 도메인까지 연결해보는 실습을 진행하였는데, 그 과정도 정리해서 이어서 포스팅할 예정이다. 앞서 말한 대로 부정확한 부분이 있다면 알려주면 감사하겠다.