나만의 서버를 만들기 위한 WAS 이론

manNomi·2024년 8월 13일

WEB

목록 보기
2/9
post-thumbnail

WAS란 무엇인가 ?

동기

서버를 만들어 연결하는 기회가 생겨 WAS에 대해 공부 할 기회가 생겼다 .

WAS를 공부하던중 WAS와 WEB SERVER의 차이를 명확히 이야기 하지 못하는 나를 보고 제대로 공부하기 위해 정리하게 되었다


첫번째로 서버를 만든다고 생각해보자

서버는 주로 TCP 통신으로 이루어진다 . 그렇다면 WEB 서버는 어떨까?

웹서버는 HTTP 통신을 통해서 만들어진다 . 서버와는 통신방식이 다르다

따라서 웹 서버를 사용하기 위해서는 크게 두가지 방법이 있다

  1. 직접 HTTP를 설치
  2. WAS를 이용

직접 HTTP 설치하는 방법은 어떨까 ?

→ 서버 설정 및 구성 , 보안문제 , IP설정 관리 및 유지보수 , 트래픽 관리 등 다양한 이유로 서버를 공부하는 사람에게는 불리한 조건이 많다

그렇다면 WAS 는 어떨까 ?

→ WAS는 *서드파티 프로그램이다

→ WAS에는 WEB SERVER 가 내장되어있기에 설치하는 것만으로도 서버를 WEB SERVER로 변경해준다

*서드파티 프로그램 : 윈도우의 카카오톡 같이 운영체제라는 플랫폼을 이용하는 소프트웨어를 말한다

우리는 학습의 목적이기에 WAS를 통해 나만의 서버를 만들어 보도록 하자


WAS

웹 애플리케이션 서버(WAS, Web Application Server)란 무엇일까?

웹 서버 + 웹 컨테이너

인터넷 상에서 HTTP를 통해 사용자 컴퓨터나 장치에 애플리케이션을 수행해 주는 미들웨어(소프트웨어 엔진)

→ 즉 인터넷 상에서 http 통신을 통해 어플리케이션을 수행해주는 장치이다

WAS 주요 기능은 뭐가 있을까

  1. 프로그램 실행 환경 및 DB 접속 기능 제공

    → 여러 웹 어플리케이션이 실행되는 환경을 제공 / DB 서버와 연결 통한 접속 기능

  2. 여러 트랜잭션 관리 기능

    → 트랜잭션 : 데이터베이스의 변화를 주는것

    → WAS는 트랜잭션 관리 및 일관성 , 오류 발생시 롤백 등의 기능 제공

  3. 업무 처리 비즈니스 로직 수행

    → 앱의 핵심인 비즈니스 프로세스 포함 / 고객관리 , 주문 처리 등

위와 같은 기능을 하는 WAS의 종류는 아래와 같다

WAS 종류 : Tomcat, JBoss 등


사실 서버를 만드는데 있어 WEB SERVER 만 있어도 문제가 없다 .

하지만 WAS를 쓰는 이유가 있을까?

WAS가 필요한 이유

아래 그림을 보면 이해가 빠르다

웹 서버는 정적 컨텐츠만을 관리한다 . 이를 통해 기능을 분배해서 서버의 부담을 줄여주는 것이다


WAS를 더 자세히 이해하기 위해 WAS를 이루고 있는 WEB SERVER 와 WEB Container에 대해서 알아보자

WEB


■ 웹서버(WEB)란?

  • 웹 서버(소프트웨어): 웹 브라우저 클라이언트로부터 HTTP요청을 받아들이고, HTML문서와 같은 웹 페이지에서 흔히 찾아 볼 수 있는 자료 콘텐츠에 따라 HTTP에 반응하는 컴퓨터 프로그램

웹서버는 말 그대로 작성된 html페이지 등을 네트워크망에 종속되지 않고, 웹서비스를 할 수 있도록 하는 어플리케이션

  • 웹 서버(하드웨어): 위에 언급한 기능을 제공하는 컴퓨터 프로그램을 실행하는 컴퓨터

웹 컨테이너란, JSP와 Servlet을 실행시킬 수 있는 SW를 웹 컨테이너라고 한다.

JSP와 서블릿은 뭐길래 웹컨테이너를 필요로 할까

  1. servlet → 자바를 웹앱에서 쓰기 위해 만든 API

    서블릿 → 자바 언어로 html 개발 하기 위해 만든 API(라이브러리, 클래스 들)

JSP → 서블릿의 단점을 보완하고자 만든 서블릿 기반 스크립트 기술

jsp → HTML 내부에 자바 코드를 삽입하는 방식

ServletJSP
자바 코드로 구현 , 컴파일 및 배포 필요서블릿에 비해 배우기 쉬움
HTML 태그로 문자열(””) 스크림 처리 필요<%%> 통해 자바코드 사용
코드 수정시 다시 컴파일 및 배포HTML처럼 태그 사용해 JAVA코드도 가능

WAS와 WEB에 대해서 간단히 알아보았으니 둘의 차이에 대해 알아보자

1. 웹 애플리케이션 서버(WAS)

  • 역할: 동적 콘텐츠 처리
    • 애플리케이션 로직을 통해 동적인 페이지 생성한다
    • 데이터베이스와 상호작용 및 복잡한 비즈니스 로직을 처리한다
  • 내부 웹 서버 기능: 정적 콘텐츠를 제공할 수 있습니다.
    • HTML, CSS, JavaScript 파일 등의 정적 콘텐츠도 처리할 수 있는 웹 서버 기능을 내장하고 있습니다.

2. 웹 서버

  • 역할: 정적 콘텐츠 처리
    • HTML, CSS, 이미지 파일 등 정적인 파일을 클라이언트로 전달합니다.
  • 예시: Apache HTTP Server, Nginx 등

위의 설명처럼 WAS는 웹서버의 기능을 포함하고 있으며 웹서버와 WAS는 역할이 다르다는 것을 알 수 있다 .

그렇다면 WAS만 쓰면 되겠다.

→ 절대 아니다

WAS와 WEB 을 사용하는 경우는 다음과 같다

  • 단독 WAS 사용: WAS가 정적 콘텐츠와 동적 콘텐츠 모두를 처리합니다.
    • tomcat만으로 웹 구성 백엔드와 프론트엔드가 조합된 방식
  • 웹 서버 + WAS:
    • 웹 서버(예: Nginx, Apache HTTP Server)가 앞에 위치

    • 정적 콘텐츠를 빠르게 처리, 요청을 라우팅하여 동적 콘텐츠는 WAS로 전달

    • 이점:
      - 성능 최적화: 정적 콘텐츠를 빠르게 제공하고, WAS의 부담을 줄입니다.
      - 보안 강화: 웹 서버에서의 보안 설정으로 공격 surface를 줄일 수 있습니다.
      - 확장성 향상: 웹 서버와 WAS를 분리하여 시스템을 확장하기 용이

      → 프론트엔드와 백엔드가 같이 작동하는 방식

      흔히 우리가 아는 백엔드와 프론트엔드를 나눠 개발하는 방식이 위와 같다 .

위의 장점들을 조금더 상세히 알아보자

WAS와 WEB SERVER를 같이 쓰는 이유

보통 웹 서비스는 아래의 그림처럼

Client  ↔ Web Server ↔  WAS  ↔   DB 이런식으로요청 , 응답을 주고 받는다.

1. 성능 향상

  • 정적 콘텐츠 처리 최적화: 웹 서버는 이미지, CSS, JavaScript 등 정적 콘텐츠의 처리에 최적화
  • 서버 전문화
    • 웹 서버 - 정적컨텐츠
    • 웹 애플리케이션 서버(WAS) - 동적 콘텐츠를 처리
  • 결과 : 전체 서비스의 성능이 향상됩니다.

2. 캐싱 및 압축

  • 캐싱: 웹 서버는 정적 리소스에 대한 요청을 캐시하여 반복 요청에 대한 응답 속도를 높입니다.
  • 압축: 웹 서버는 전송할 데이터의 압축을 통해 네트워크 대역폭 사용을 줄입니다.
  • 결과: 사용자에게 더 빠른 응답을 제공할 수 있습니다.

3. 로드 밸런싱

  • 역할: 웹 서버는 로드 밸런서 역할을 하여 들어오는 요청을 여러 백엔드 웹 애플리케이션 서버에 분산시킵니다.
  • 결과: 서버 부하가 줄어들고, 전체 서비스의 처리량이 높아지며, 가용성이 향상됩니다.

4. 보안

  • 네트워크 격리: 웹 서버는 리버스 프록시 또는 DMZ(비무장 지대) 역할을 하여 외부와 내부 네트워크를 격리합니다.
  • 보안 강화: 공격자가 직접 웹 애플리케이션 서버에 접근하는 것을 방지하여 보안 수준을 높입니다.
  • SSL/TLS 지원: 웹 서버에서 HTTPS를 통한 암호화된 연결을 지원하여 데이터 전송 속도를 높이고, 더 안전한 데이터 통신을 제공합니다.

이처럼 장점이 많기 때문에 사용하게 된다

위의 나온 리버스 프록시 개념에 대해 조금만 알아보고 마치도록 하자


🌟 리버스 프록시란

  • 프록시 : 인터넷 접속시 보안상의 문제로 통신이 불가할때 중계자로 통신을 수행하는 기능을 프록시라함
  • 프록시 서버 : 중계가 가능한 서버를 프록시 서버라고 한다
    • 포워드 프록시 인터넷 ↔ 클라이언트
      • 클라이언트와 인터넷 사이에서 중계 역할을 함.
      • 클라이언트의 IP 주소를 서버에 숨겨 보안 강화.
      • 접근 제어 및 미디어 스트리밍 지원.
    • 리버스 프록시 인터넷 ↔ 백엔드
      • 인터넷과 백엔드 서버 사이에서 중계 역할을 함.
      • 로드 밸런싱을 통해 요청을 여러 서버로 분배.
      • 캐싱을 통해 접속 속도 향상.
      • 서버의 민감한 정보를 숨겨 보안 강화.

포워드 프록시

클라이언트 정보가 서버에 노출되지 않도록 한다. → 클라이언트 와 인터넷 사이 위치하기에

서버로부터 받은 html, css, js 등과 같은 정적파일을 캐싱하여 응답 성능을 높이고 서버의 부하를 줄이는 기능도 한다. 그외에도 내부망의 프록시를 통해서 특정 주소에 대한 액세스 차단 등을 할수도 있다.

리버스 프록시

리버스 프록시는 요청을 대신 받아서 다양한 서버들에게 요청을 전달 분산 → 로드밸런싱

이를 통해 프록시 서버에 암호화를 설정이나 여타 서버 공격들이 실제 서버가 아닌 프록시 서버를 공격하도록 함으로써 서버들을 보호할 수 있다.


우리가 사용한 아파치 톰캣은 그럼 뭘까?

Apache HTTP Server (아파치 웹 서버) = 아파치

  • 역할: Apache HTTP Server(일반적으로 "아파치"라고 부름)는 웹 서버이다. → 주로 정적인 콘텐츠(HTML, CSS, 이미지 등)를 클라이언트(브라우저)에 제공하는 역할을 합니다.

Apache Tomcat (톰캣)

  • 역할: Tomcat은 Apache Software Foundation에서 제공하는 웹 애플리케이션 서버(Web Application Server, WAS)즉 WAS다 → 자바 서블릿과 JSP(JavaServer Pages)를 실행할 수 있는 환경을 제공 (WEB CONTIANER 기능)
  • 기능: Tomcat은 동적인 콘텐츠(자바 서블릿 및 JSP로 생성된 콘텐츠)를 처리합니다. 이를 통해 서버 측에서 동적으로 생성된 페이지를 클라이언트에게 제공할 수 있습니다.
  • 특징: Tomcat은 일반적으로 웹 컨테이너라고 불리며, Java 기반의 웹 애플리케이션을 실행하고 관리하는 역할을 합니다.

즉 아파치 = 웹서버

톰캣 = 웹 컨테이너

아파치 톰캣 = WAS


HTTP 8080 포트를 사용한 이유

  1. 프록시 서버 및 애플리케이션 서버:
  • 프록시 서버나 애플리케이션 서버에서 주로 8080 포트를 사용합니다. 예를 들어, Apache Tomcat 같은 애플리케이션 서버는 기본적으로 8080 포트를 사용하도록 설정되어 있습니다.
    • 개발 및 테스트용으로 80번과 충돌이 없고 유사한 8080을 주로 사용

* 동적 콘텐츠의 정의

동적 콘텐츠는 사용자의 요청에 따라 서버에서 실시간으로 생성되는 콘텐츠를 말합니다. 이는 다음과 같은 과정을 포함할 수 있습니다:

  1. 서버 측 로직 처리: 사용자의 요청에 따라 서버에서 애플리케이션 로직이 실행됩니다. 예를 들어, 사용자의 로그인 상태를 확인하거나, 요청에 따라 맞춤형 페이지를 생성하는 과정입니다.
  2. 데이터베이스 통신: 대부분의 동적 콘텐츠는 데이터베이스와의 상호작용을 포함합니다. 예를 들어:
  3. 동적 콘텐츠 생성: 서버 측에서 처리된 데이터와 로직을 바탕으로 HTML 페이지를 동적으로 생성하거나, JSON/XML 데이터를 생성하여 클라이언트에 전송합니다.

위와 같이 웹 이론의 기초가 되는 WAS에 대해서 알아보았다

나중에는 서버를 처음으로 만들어보고자 하는 사람을 위해 글을 써보도록 하겠다 .

profile
weapp개발자

0개의 댓글