웹서버와 애플리케이션 서버
웹 서버
인터넷 상에서 웹 브라우저 클라이언트로부터 HTTP 요청을 받아들이고, HTML 문서와 같은 웹 페이지, 그림, css, js 등을 보내주는 역할을 하는 서버. 대 다수의 웹 서버는 PHP, ASP 등의 서버 사이드 스크립트 언어를 지원합니다.
웹 서버에는 아파치, nginx, IIS 등이 있습니다.
웹 애플리케이션 서버(Web Application Server, WAS)
인터넷 상에서 HTTP를 통해 사용자 컴퓨터나 장치에 Application(신청)을 수행해주는 미들웨어 입니다.
PHP, JSP 등의 웹 언어로 작성된 웹 애플리케이션을 서버단에서 실행 한 후 실행 결과값을 사용자에게 넘겨주게 되고, 브라우저가 결과를 해석해 화면에 표시합니다. 이 서버는 동적 서버 콘텐츠를 수행하는 것으로 일반적인 웹 서버와 구별이 되며, 데이터베이스 서버와 같이 수행됩니다.
웹 애플리케이션 서버는 세 가지 기능이 제공됩니다.
- 프로그램 실행 환경과 데이터 베이스 접속 기능 제공
- 여러 개의 트랜잭션을 관리
- 업무를 처리하는 비지니스 로직 수행한다
서버를 확장(Scale out)하는 법
하나의 서버를 사용해서 서버를 운영하는 방법은, 웹 서버만을 이용해서 서버를 운영할 수 있는데, 사용자가 점차 늘어날 시 서버를 어떻게 확장하면 좋을 지 알아보자.
- 웹 서버와 웹 어플리케이션 서버를 분리해서 운영한다.
- 즉, 동적 콘텐츠와 정적 콘텐츠를 분리해서 관리한다.
- DB 서버를 분리한다.
- DB를 관리하는 서버를 따로 분리한다.
- DB 읽기 전용 서버(Slave Server), DB 쓰기 전용 서버(Master Server)를 따로 분리한다. 둘 다 읽고 쓰기용으로 하지 않는 이유는 사용자가 동시에 DB에 쓰기 명령을 실행했을 때 중복 데이터가 발생하지 않게 하기 위해서이다. 읽기 전용 서버는 쓰기 전용 서버에서 계속해서 DB 데이터를 복제해 동기화시켜야 한다.
- DB 서버를 더욱 확장하려면, DB 작업에 부담이 많은 읽기 전용 서버(Slave Server)를 늘린다
- 만약 Master Server가 한계가 올 경우 Master를 분리하는 샤딩(Sharding) 이라는 기법을 쓰는데, 그 정도로 거대한 서비스를 만들 일은 많이 없으니 아직은 몰라도 될듯하다.
- 웹 애플리케이션을 분리한다.
- 두 대의 웹 서버를 사용하고 DNS 서버를 이용해 부하를 분산시킨다. (Round-Robin)
- 서로 다른 IP를 사용자가 접속할 때 마다 DNS가 알려줘서 각기 다른 웹서버로 접속하게 하는 방법
- 로드 밸런서(Load Balancer)를 사용한다.
- Load: 시스템에 걸리는 부하
- Balancer: 부하를 분배해 주는 장비, 소프트웨어이거나 전용 장비일 수 있다.
- 모든 트래픽을 받아서, 상황에 따라(컴퓨터가 죽거나, 한 쪽의 서버가 부하가 적거나 할 때) 부하를 분산할 수 있게 해주는 장비
- 클라우드 컴퓨팅을 사용한다.
- 로드 밸런서가 트래픽에 따라서 컴퓨터를 자동으로 늘려줘서 부하를 분산 시켜준다.
위의 6단계가 모두 적용된 그림은 다음과 같다.
출처 –
위키백과 : https://ko.wikipedia.org/wiki/%EC%9B%B9%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98%EC%84%9C%EB%B2%84
생활코딩 : https://opentutorials.org/course/1688/9506