Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/
티스토리 뷰
3Tier
기본적으로 3Tier는 Presentation, Application 그리고 Data Tier로 나뉜다.
여기서 웹서비스라면 Presentation Tier는 Web server로, Application Tier는 WAS(Web Application Server)로 대표된다.
Data Tier는 주로 RDBS처럼, 웹 개발 중에 자연스럽게 분리되는데 문제는 Web server와 WAS이다.
검색하는 여러 장점이 있더라도 Web server와 WAS를 굳이 다른 서버로 분리할 필요가 있을까?
WAS의 Nginx나 Apache가 Web server의 역할도 수행해도 문제가 없어 보이기도 한다.
실제로 PHP의 대표적인 웹 서비스 오픈소스인 워드 프레스는 web server와 WAS가 하나로 합쳐진 2 Tier로 서비스를 제공한다. 워드 프레스가 굉장히 인기 있는 웹 서비스 프로젝트인 것을 생각해 보면, 2Tier로도 충분히 웹서비스는 동작시킬 수 있는 것은 확실하다.
왜 Webserver와 WAS가 분리될까?
그럼에도 Web server가 WAS와 분리가 필요한 이유는 3Tier가 웹서비스를 기능별로 분리하기 때문이라 생각한다.
Web server는 접속자 누구에게나 동일한 정적 컨테츠/페이지를 제공하고,
WAS는 접속한 유저에 따라 로직을 수행하여 다른 동적인 컨텐츠/페이지를 제공해야 한다.
물론 WAS도 기능적으로 충분히 정적 컨텐츠를 제공할 수 있다.
하지만, WAS는 동적인 처리를 진행하기 때문에 필연적으로 CPU와 Memory 부하가 커지게 된다.
반면 Web server는 단순히 요청에 따른 콘텐츠만 제공해 주면 되기 때문에, 굉장히 간단히 요청들을 처리할 수 있다.
따라서 CPU와 Memory가 굉장히 적다.
지표로 확인하기
실제로 모니터링 지표를 통해 확인해보았다.
1. Web server(Nginx)
0.25 vCPU, 0.5GB RAM Fargate에 3000명 동시 접속 테스트
메인 페이지의 요청에서, Webserver는 사실상 CPU만을 활용하고 있다.
2. WAS(Apache2 + PHP)
0.25 vCPU, 0.5GB RAM Fargate에 512명 동시 접속 테스트
더 적은 동접자 수에도 WAS는 동적인 페이지의 요청으로 인해 CPU 그리고 Memory를 상당히 많이 사용하고 있다.
Nginx와 Apache2를 비교하는 것은 적절하지 않을 수 있지만, 확실한 것은 Web server와 WAS에게 가해지는 부하가 다르다는 것이다.
이런 상태에서 만약 WAS가 정적 콘텐츠까지 제공한다고 생각해 보자.
WAS로 가해지는 부담은 커지고, 더 쉽게 서버가 다운될 것이다.
하지만 Web server가 분리되면서 WAS는 동적 로직 처리에 집중할 수 있고, 이를 위한 하드웨어 스펙도 적절히 세팅해 줄 수 있을 것이다.
이러한 케이스처럼 Web server와 WAS가 분리되면서 얻을 수 있는 장점이 큰 경우 3Tier전략이 적절할 수 있다.
반면, 정적 콘텐츠가 적거나 S3와 같은 외부 스토리지나 CDN 서비스에서 바로 제공할 수 있다면 2Tier로도 충분히 서비스를 운영할 수 있을 것이다.
전적으로 판단은 워크로드가 어떠냐에 따라 달라질 수 있고, 3Tier만이 정답인 것도 아니다.
'개발 > 기타' 카테고리의 다른 글
리눅스에서의 APT, YUM, DNF의 차이 (0) | 2024.08.19 |
---|---|
Hypervisor의 overcommit (0) | 2024.07.20 |
SQL과 데이터베이스 (0) | 2024.01.25 |
[Github Actions] paths 로 폴더 별로 트리거 하기 (0) | 2023.11.18 |
Slack bot으로 유저에게 1:1 DM 보내기 (0) | 2023.10.21 |