서버에 두 종류가 있다.
하나씩 살펴보자.
웹 서버는 클라이언트에서 요청을 받아 정적인 페이지를 제공한다.
정적인 페이지란 뭘까?
- 정적 페이지
- image, html, css, js 파일과 같이 컴퓨터에 저장되어 있는 파일들을 의미
- 요청에 맞는 항상 동일한 페이지를 반환
- 동적 페이지
- 들어온 요청에 맞게 동적으로 만들어진 페이지
- db, 서버 내 로직 등을 활용해 만들어진다.
만약 동적인 페이지 요청이 들어온다면 웹 어플리케이션 서버로 요청을 보낸다.
웹 서버에는 Apache Server, Nignx 등이 있다.
웹 어플리케이션 서버는 클라이언트에서 요청을 받아 동적인 페이지를 제공한다.
사실 웹 서버와 웹 컨테이너를 포함한 개념이다. 웹 서버와 같이 정적인 페이지를 제공할 수도 있고, 동적으로 db와 연결하여 여러 데이터를 활용해 페이지를 구성할 수도 있다.
웹 어플리케이션 서버로는 Tomcat, JBoss, Jeus 등이 있다.
- 웹 컨테이너?
웹 서버가 보낸 jsp, php, asp 등의 파일들을 실행하고 결과를 다시 웹 서버로 보내주는 역할을 한다.
정리하면 웹 어플리케이션 서버는 웹 서버, 혹은 클라이언트에서 요청을 받고 이것을 웹 컨테이너로 보내 로직을 수행하고 그 결과를 다시 클라이언트로 보내주는 역할이다.
-> 웹 서버와의 차이는 결국 어떤 컨텐츠를 제공하냐이다. (동적/정적)
웹 어플리케이션 서버가 웹 서버를 포함한다면 굳이 웹 서버를 써야하는 이유가 있는가?
그렇다.
위에서 아파치 등을 사용한다고 했는데 그동안의 nodejs 개발에서 그러한 것들을 사용한 적이 없었다. 왜 그럴까.
nodejs는 위의 ws와 was의 기능을 모두 담당한다. express를 통해 정적 파일을 제공하고 나머지가 언어 해석, db 연결 등을 담당한다.
그러나 nginx같은 웹 서버를 아예 사용하지 않는 건 아니다. 기업에서는 nginx나 apache 등을 활용해 보안상의 이점과 캐싱 등을 통해 속도 상의 이점을 갖는다고 한다.