본문 바로가기
Spring

웹서버, 웹애플리케이션서버, CGI

by 밝지 2023. 5. 21.
728x90
반응형

 

 

 

웹서버(Web server)

HTTP 또는 HTTPS를 통해 웹 브라우저에서도 요청하는 HTML 문서나 오브젝트(이미지 파일 등)를 전송해주는 서비스 프로그램이다. 

  • HTTP 프로토콜을 기반으로 하여 클라이언트의 요청을 서비스
  • 정적인 컨텐츠 제공 (WAS를 거치지 않고 바로 자원을 제공)
  • 동적인 컨텐츠 제공을 위한 요청 전달 (클라이언트의 request -> WAS -> response를 클라이언트에 전달)
  • 예) Apache Server, Nginx, IIS(Windows 전용 웹 서버)

웹 서버가 필요한 이유?

  • 클라이언트(브라우저)는 HTML문서를 먼저 받고 그에 맞게 필요한 이미지 파일들을 다시 서버로 요청하여 받아온다. 이 때 Web Server를 이용하면 Application server까지 가지 않고 앞단에서 빠르게 보내줄 수 있다. 즉, Web Server에서 정적 컨텐츠를 처리하도록 기능을 분배하면 서버의 부담을 줄일 수 있다.
  • SSL에 대한 암복호화 처리를 Web Server에서 하면 보안을 강화할 수 있다.
  • Load Balancing을 위해 Web Server를 사용하면 여러 대의 WAS 연결이 가능하고, fail over(장애 극복), fail back 처리에 유리하다.
  • Web Server와 WAS를 분리하면 무중단 운영을 위한 장애 극복에 유리하다. 
  • 접근 허용 IP관리, 2대 이상의 서버에서 세션 관리도 Web Server에서 처리하면 효율적이다. 
  • Web Server를 WAS 앞에 두고 필요한 WAS들을 Web server에 플러그인 형태로 설정하면 더욱 효율적인 분산 처리가 가능하다.

 

 

 

웹애플리케이션서버

DB 조회 등 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위해 만들어진 appication server. HTTP를 통해 컴퓨터나 장치에 애플리케이션을 수행해주는 미들웨어(소프트웨어 엔진)이다. 웹 컨테이너 또는 서블릿 컨텐이너라고도 불린다. 즉, WAS는 JSP, Servlet 구동 환경을 제공한다. 

WAS = Web Server + Web Container

  • 프로그램 실행 환경 제공
  • DB 접속 기능 제공
  • 여러개의 트랜잭션 관리 
  • 업무를 처리하는 비즈니스 로직 수행
  • 예) Tomcat, JBoss, Jeus, Web Sphere 등

웹 애플리케이션 서버가 필요한 이유?

  • 웹 서버만을 이용한다면 사용자가 원하는 요청에 대한 결과값을 모두 미리 만들어 놓고 서비스를 해야하는데 자원이 부족하다.
  • WAS를 통해 요청에 맞는 데이터를 DB에서 가져와서 비즈니스 로직에 맞게 그 때 그 때 결과를 만들어 제공하면 자원을 효율적으로 쓸 수 있다. 
  • WAS가 웹서버의 역할도 수행 가능하지만, 단순한 정적 컨텐츠는 Web Server에서 빠르게 제공하는 것이 효율적이다.

 

 

 

CGI(Common Gateway Interface)

웹 서버에서 동적인 페이지를 보여주기 위해 임의의 프로그램을 실행할 수 있도록 하는 기술 중 하나. CGI는 어디까지나 인터페이스이며, 특정 플랫폼에 의존하지 않고, 웹 서버 등으로부터 외부 프로그램을 호출하는 조합을 가리킨다.

  • 웹 브라우저에서 HTML 폼을 통해 요청이 웹 서버로 전달
  • 웹 서버는 요청에 있는 주소가 CGI 프로그램에 대응되는지 확인
  • 대응되는 프로그램을 실행하여 환경 변수와 표준 입력 형태로 요청 전달 
  • 웹 서버는 CGI 표준 출력 내용을 응답으로 돌려줌

CGI의 단점? (왜 지금은 안쓰는지?)

  • 요청이 하나 들어올 때마다 프로세스가 하나씩 실행됨

But, 임의의 프로그램을 췝 서버에서 실행할 수 있다는 이유 때문에 CGI는 이런 저런 용도로 종종 쓰인다. 또한 어지간한 웹 서버는 CGI를 모두 지원한다. 

 

 

 

 

728x90
반응형

'Spring' 카테고리의 다른 글

jar xvf (jar 옵션)  (0) 2023.06.03
Gradle Wrapper (gradlew build)  (0) 2023.06.03
웹 서버 - 외장서버 vs 내장서버  (0) 2023.05.21
XSS Filter 적용하기 (lucy-xss-servlet-filter)  (0) 2023.04.25
application.properties VS application.yml  (0) 2023.04.24