Tomcat / Node.js

YW K·2023년 4월 12일

Others

목록 보기
3/3

웹 서버란?

같은 컴퓨터도 서비스를 해주느냐 제공받느냐에 따라 서버와 클라이언트로 나뉜다. 그렇다면 웹 서버란 무엇일까? 서버란 어떤 컴퓨터로 하여금 서버 역할을 하도록 도와주는 소프트웨어를 ~서버라고 부르기도 한다. 따라서 백엔드 개발자가 어떤 서버를 개발한다고도 한다.

다시 말해 클라이언트가 서버에 요청(request)을 하면 그 요청을 받아 정적 컨텐츠 제공 요청에 대해 가장 앞에서 처리한다.

웹 서버 기능

Http 프로토콜을 기반으로, 클라이언트의 요청을 서비스하는 기능을 담당한다.

  • 정적 컨텐츠 제공 - WAS를 거치지 않고 바로 자원 제공
  • 동적 컨텐츠 제공을 위한 요청 전달 - 클라이언트 요청은 WAS에 보내고, WAS에서 처리한 결과를 클라이언트에게 전달

🔑 추가설명

아파치 등의 프로그램을 통해서 어떤 폴더를 개방하여 포함된 HTML 등의 파일들로 웹사이트를 제공할 수 있는 것이다. 서버에 정해진 사이트 주소로 접속하면 그 파일들을 꺼내 웹사이트를 띄우게끔 하는데 이렇게 되면 이들은 '정적 웹'이다.

정적 웹은 블로그 페이지나 회사 소개 페이지처럼 그 안의 내용들이 바뀔 일이 없는 페이지들을 고정된 HTML, CSS, 자바스크립트로 제공하는 말하자면 완제품들을 갖다놓은 편의점 진열대라고 볼 수 있다.

반면, 동적 웹이란 게시판 페이지처럼 항상 같은 내용이 뜨는 게 아닌 사이트들을 말한다. 누가 새로 글을 올리거나 댓글을 달면 사이트 내용이 변경되니까 고정된 HTML 파일을 진열해서 제공할 수 있는 게 아니다. 데이터베이스에 있는 데이터들이나 어떤 변수들에 따라서 사용자가 접속할 때마다 그때그때 페이지 내용이 만들어져 오는 것이다.

마치 요리사가 바로바로 음식을 만들어주는 식당같은 것이다. 이러한 동적 웹을 제공하는 것도 웹서버의 고유 역할로 정의해야 할지는 애매하지만 아파치의 모듈로 가능하다. 즉 아파치랑 MySQL과 연동시켜서 동적인 PHP 웹사이트를 제공하는 방식이 있다.

웹 서버 종류 : Apache, Nginx 등

🔔 웹 사이트가 서비스될 때 필요한 것들이 무엇이 있을까?

웹 사이트는 크롬, 엣지와 같은 브라우저에서 돌아가는데 그 브라우저가 읽을 수 있는 HTML, CSS, 자바스크립트와 같은 파일들과 각종 이미지, 기타 여러 데이터들을 갖다가 서버에서 사용자의 컴퓨터로 보내줄 수 있어야 한다.

즉 이 파일들은 원래 서버 컴퓨터에 저장되어 있는데 이 서버에 특정 폴더 디렉토리에 이것들을 넣어두면 이 폴더를 외부에서 접근 가능하도록 개방해 서버에 지정된 웹사이트 주소로 접속하면 이것들을 받아갈 수 있도록 하는 것이 바로 웹 서버의 기본적인 역할 중 하나이다.

WAS란?

Web Application Server의 약자로 DB 조회 및 다양한 로직 처리 요구시 동적인 컨텐츠를 제공하기 위해 만들어진 애플리케이션 서버를 말한다. 즉 HTTP를 통해 애플리케이션을 수행해주는 미들웨어이다.

WAS는 웹 컨테이너 혹은 서블릿 컨테이너라고도 불린다.

  • 컨테이너란 JSP, Servlet을 실행시킬 수 있는 소프트웨어이며, 즉 WAS는 JSP, Servlet 구동 환경을 제공해준다.

🎀 WAS의 역할

WAS = Web Server + Web Container

WAS의 주요 기능

1) 프로그램 실행 환경 및 DB 접속 기능 제공
2) 여러 트랙잭션 관리 기능
3) 업무 처리하는 비즈니스 로직 수행

📚 그렇다면 웹 서버와 WAS를 구분하는 이유는?

웹 서버에서는 정적 컨텐츠만 처리하도록 기능 분배를 하여 서버 부담을 줄인다. 따라서 웹 서버만으로는 사용자가 원하는 요청에 대한 결과값을 모두 미리 만들어놓고 서비스하기에는 자원이 절대적으로 부족하다.

반면, WAS는 이를 통해 요청에 맞는 데이터를 DB에서 가져와 비즈니스 로직에 맞게 그때그때 결과를 만들고 제공하면서 자원을 효율적으로 사용할 수 있다.

🔥 정리하자면, 자원 이용의 효율성 및 장애 극복, 배포 및 유지 보수의 편의성 때문에 웹 서버와 WAS를 분리해서 사용한다.

🙄Tomcat과 Node.js는 무엇이 다를까?

(1) Tomcat

요즘은 스프링 부트에 톰캣이 내장되어 있기 때문에 직접적으로 많이 접하진 않지만 Java와 JSP로 만든 웹 또는 API 애플리케이션을 실행할 때 Tomcat과 같은 Web Application Server(WAS)가 사용된다.

이는 동적 사이트를 좀 더 전문적으로 처리해준다고 생각하면 된다. 아파치와 같은 웹 서버도 PHP와 같은 분식 종류는 요리할 수 있지만, 스프링과 같은 고급한정식으로 넘어가면 톰캣과 같은 WAS의 전문 요리사의 손길이 필요하다.

  • ⚡ 쉽게 말해, 방문자들을 이 웹 서버가 응접실에서 접대하도록 하고 그 뒤에서 WAS와 같은 전문 요리사가 요리하고 있는 것으로 비유할 수 있다. 따라서 톰캣이 스프링과 같은 고난도 요리를 해주고 이걸 아파치가 손님들에게 서빙을 하는 그림이다.

    사실 Tomcat 등의 WAS들도 방문자들에게 직접 동적으로 요리해낸 동적 웹을 서빙하여 갖다줄 수도 있고, 진열되어 있는 정적 리소스들을 건네주는 일을 할 수는 있다. 즉 아파치 없이 톰캣만으로도 웹사이트를 제공이 가능하다.

👀 그런데 왜 그렇게 하지 않을까?

웹 서버가 기본적으로 정적 또는 가벼운 동적 리소스를 제공하는 역할 이외에 다양한 기능을 제공하기 때문이다. 특히 웹 서버가 여러가지 보안 기능을 제공하기 때문에 무엇을 사용해서 웹이나 API를 만들든 그 앞단에는 웹 서버를 두어 방문객을 맞도록 한다.

> 정리하자면, 웹 서버와 WAS의 역할이 겹치는 부분도 있지만, 각자가 특화된 부분을 활용하여 보안과 운영에 웹 서버가 집중하고 WAS는 뒤에서 동적 요소를 만들어내는 데 집중한다.

(2) Node.js

Node.js는 톰캣과 스프링보다 뒤에 개발되었기 때문에 이러한 Tomcat과 Spring의 구조를 보고 올인원으로 관리자가 내장되어 있는 구조로 만들었다고 생각하면 된다. 따라서 전체적인 틀을 보면 Node.js = Tomcat(WAS) + Spring과 같다고 보면 된다.

Proxy

프록시 서버란? 클라이언트가 자신을 통해 다른 네트워크 서비스(Node.js, Spring, WAS)에 간접적으로 접근할 수 있게 하는 컴퓨터 시스템이나 응용프로그램을 일컫는다.

중계자(관리자)로서 로드밸런지, Reverse Proxy, 캐싱 등의 작업을 수행한다.

(1) Reverse Proxy

클라이언트에게서 서버의 정보를 감추는 작업

클라이언트와 WAS 사이의 중계자로서 둘 사이의 통신을 담당한다. 리버스 프록시서버를 통해 응답을 내려주기 때문에 실제 서버의 정보를 알 수 없게 된다.

(2) Forward Proxy

서버에게서 클라이언트를 감추는 작업

요청받는 서버는 포워드 프록시 서버를 통해서 요청을 받기에 클라이언트의 정보를 알 수 없게 된다.

참고 : https://developer-ping9.tistory.com/245
https://gyoogle.dev/blog/web-knowledge/Web%20Server%EC%99%80%20WAS%EC%9D%98%20%EC%B0%A8%EC%9D%B4.html etc

0개의 댓글