WS WAS 니가먼데,,

suran choi·2022년 11월 15일
0

멀티캠퍼스를 수료하면서 진행한 프로젝트 당시
항상 Django + Nginx + uWSGI를 사용해 외부 배포를 해왔지만 배포 성공에만 급급해왔던 것 같아, 개념 정리를 하고자 포스팅합니다.

본 포스팅에서는 WS와 WAS의 개념 및 둘의 차이에는 무엇이 있는지에 중점을 두고 이야기가 전개되니 참고하세요!




0. 들어가며

외부 배포를 설명하기 전에 저와 같은 인터넷 사용자들이 "www.google.com" 사이트를 어떻게 볼 수 있는지를 말해보고자 합니다.

  1. 클라이언트가 서버에게 "www.google.com" 사이트 줘! 라는 요청(=request)을 보냅니다.
  2. 서버는 클라이언트로부터 HTTP요청을 받고, 구글 사이트에 해당하는 HTML 문서 등의 웹페이지를 반환(= 응답)해준다.

여기서 기억해야할 부분은, 클라이언트는 서버에게 요청을 하는 쪽이고 서버는 이 요청을 받아 클라이언트에게 응답을 하는 쪽이라는 겁니다. 이제 우리는 클라이언트가 요청자이고 서버가 응답자라는 선수 지식이 생기게 됩니다.

위에서 말한 요청을 응답해주는 서버는 웹서버입니다. 웹서버가 무엇인지는 다음 목차에서 알아보겠습니다.




1. WS (Web Server)

우선 위의 그림에서 본 것처럼 웹서버는 클라이언트(브라우저)에서 요청한 HTTP 요청을 처리하여 클라이언트에게 응답합니다.

아래와 같은 HTML, CSS 등의 정적 파일을 클라이언트에게 전달해주는 역할을 합니다.

<h1>Hello, world!</h1>

정적 파일이란?

  • 말 그대로 사용자의 요청에 따라 달라지지 않는 파일들을 말합니다.




2. WAS (Web Application Server)

웹서버에서 알아보았다면 이제 WAS에 대해 알아볼 차례입니다. 웹서버와 같이 WAS 또한 HTTP 요청을 받을 수 있으며, 정적 파일 및 동적 파일을 같이 제공할 수 있습니다.

예를 들어 achacha라는 분실물 검색 사이트가 있다고 가정하였을 때, 사용자가 "지갑"이라는 키워드를 검색하면 지갑에 해당하는 DB만을 추출하는 과정이 필요할 것입니다.

이와 같이 사용자 요청에 따라 DB 조회나 로직 처리를 해서 변동 가능성이 있는 것들을 동적 파일이라고 하는 데 WAS는 동적 파일을 제공해줍니다.

동적 파일

  • 사용자 요청에 따라 바뀔 수 있는 파일들을 말합니다.
  • DB 조회나 어떤 로직 처리를 해야 하는 경우를 의미합니다.

WS가 왜 필요한디

여기서 우리는 WAS가 정적 파일 및 동적 파일를 전부 제공할 수 있는데 WS의 필요성이 있는가라는 의문점이 들수도 있겠습니다.

1. 서버 분산을 위해서


우리가 WAS가 정적 파일 및 동적 파일을 전부 처리할 수 있다고 WAS에게 정적 파일 및 동적 응답이 필요한 파일들을 전부 맡겨버리면???

WAS에게 과부하가 올 것입니다.

따라서 기본적으로는 WS에는 정적 파일을 처리하도록 맡기고 WAS에는 동적 파일을 처리하도록 부탁하여 서버 부하를 방지하는 편이 서버 관리에 효과적입니다.




2. 로드밸런싱을 위해서

이번에는 멀티캠퍼스에서 프로젝트로 진행한 아차차(ACHACHA) 서비스를 예로 들어보겠습니다..^^ 아차차가 세상을 지배한다.


우리의 아차차가 서비스도 좋기 때문에 사람들이 어느 정도 유입된다고 칩시다.
아주 흥나는 일이죠!

그런데 아차차 서비스가 너무너무너무 좋기 때문에 우리의 귀여운 서버가 감당하기 힘들 정도로 사람들이 유입된다면?
서버는 점차 과부하가 오고 간혹 혼자 다운될 수도 있겠죠 ,,,

그래서 팀 아차차의 개발자 중 한 명이 서버의 하드웨어 성능을 늘리자! 라는 제안을 합니다.

즉, 서버 Scale up을 하자는 소리인데, 메모리 늘리고, CPU 늘리고, 하드디스크 용량 늘려서 사람들을 감당하자는 의견입니다. 여기서 문제는 서버 스케일 업을 하기에는 메모리에 꽂을 수 있는 소켓이 한정적이이며 비용적 한계도 있기 때문에 Scale up에도 한계가 있습니다.

그래서 나온 것이 서버 Scale out입니다. 이는 서버 자체의 크기를 키우는 것 보다 서버를 여러 대 사용하여 작업량을 분산시키겠다는 것입니다.

서버가 여러 대로 증가하다보니, 서버에게 요청을 분산시켜주는 무언가가 필요한데 그것이 바로 로드밸런서이며 웹서버가 그 역할을 수행해줍니다.




3. 보안을 위해서

또한, 앞서 말했듯이 WAS는 요청에 의해 DB 조회와 같은 중요한 정보가 담긴 역할을 수행하기 때문에, WAS 앞단에 WS(사진 상 Nginx)를 두어 외부에서 공격을 받더라도 DB나 로직 정보가 담긴 WAS까지 영향을 미치지 않도록 할 수 있습니다.




마무리

정리하면서 WAS의 구조는 물론이고 웹서버의 여러 가지 역할을 알 수 있는 시간이었습니다. 이외에도 웹서버에는 Health Check를 통해서 서버가 잘 동작하고 있는지 확인할 수 있는 등 여러 역할이 있다고 하니 실습할 수 있었으면 정말정말 좋을 것 같습니다!!

실습이 짱이다!




References

[10분 테코톡] 👳‍♂️ 알리의 Web Server vs WAS

[10분 테코톡] 🐿 제이미의 Forward Proxy, Reverse Proxy, Load Balancer

https://juneyr.dev/nginx-basics

0개의 댓글