웹 서버와 WAS

Violet_Evgadn·2023년 5월 1일
0

Linux

목록 보기
29/34

웹 서버와 WAS

웹 서버란?

웹 서버란 HTTP 프로토콜을 기반으로 정적 컨텐츠를 제공하는 서버를 말한다.

클라이언트가 웹 브라우저에서 HTTP 요청을 서버 측에 보내면 웹 서버는 HTTP 응답으로 정적 컨텐츠를 제공하게 된다.
여기서 정적 컨텐츠란 특별한 로직 없이 즉시 응답 가능한 컨텐츠인 HTML, CSS, Javascript, 이미지 파일 등을 의미한다.

웹 서버의 대표적인 예시로는 Apache, Nginx, GWS(Google Web Server), Microsofrt IIS가 있다.

  • Apache : 가장 안정적이고 유명한 웹 서버
  • Nginx : 로드 밸런싱에 강점을 지니며 빠른 속도로 사용량을 늘리고 있는 웹 서버

추가로 웹 서버에서는 "APM"과 "LAMP"라는 용어가 존재하는데 그 의미는 아래와 같다.

  • APM : Apache(웹 서버) + PHP(프로그래밍 언어) + MariaDB(DB)
  • LAMP : Linux(OS) + APM

WAS란?

인터넷을 사용할 때 정적 파일만 받아 오기에는 한계가 존재한다.

예를 들어 구글을 사용할 경우 검색어를 입력하여 그 결과값을 받아올 텐데 구글 측에서 모든 검색 결과에 대한 HTML 문서를 만들어 놓진 않았을 것이다.

WAS란 DB 조회나 비즈니스 로직 처리를 요구하는 동적 컨텐츠를 제공하기 위해 만들어진 Application 서버이자 미들웨어이다.

만약 동적 컨텐츠에 대한 요청이 왔다면 웹 서버는 이를 WAS에게 전달하고 WAS에서 처리한 결과를 클라이언트에 전달해 주는 중간 다리 역할을 수행하는 것이다.

WAS는 분산 트랜잭션, 보안, 메시징, 쓰레드 처리 등으로 웹 서버 기능들을 구조적으로 분리하여 처리하고자 하는 목적으로 제시되었다.
또한 WAS는 동적인 요청 처리를 위해 비즈니스 로직을 수행해야 하며 이를 위해 DB 서버와 같이 동작하는 경우가 많다.

WAS는 JSP, Servlet 구동환경을 제공해 주기 때문에 서블릿 컨테이너나 웹 컨테이너로도 불리며 대표적으로 Apache의 Tomcat, RedHat의 JBoss, IBM의 WebSphere 등이 존재한다.

웹 서버와 WAS를 분리해야 하는 이유

WAS는 DB 서버와 통신하며 Web Container의 역할을 수행할 수 있지만 동시에 Web server의 역할도 수행할 수 있다.
즉, WAS로 웹 서버의 정적 컨텐츠를 처리하는 웹 서버의 역할까지 수행시킬 수 있는 것이다.

그렇다면 왜 굳이 웹 서버와 WAS는 분리되어 운영되어야 할까?
크게 4가지 이유가 존재한다.

속도 증가

WAS는 DB 조회 및 비즈니스 로직을 처리해야 하는 만큼 로직 처리에도 자원을 소모해야 한다.
즉, 부하가 많이 가는 서버라는 것이다.

이런 상황에서 웹 서버에서 처리할 수 있는 단순 정적 컨텐츠 처리까지 맡게 된다면 부하가 커져 속도가 느려질 것이다.

보안 강화

웹 서버에서 SSL에 대한 암호화 및 복호화 처리를 할 수 있다.

즉, 웹 서버에서 암호화된 데이터를 받아 복호화 한 뒤 WAS에 전달하거나 데이터를 암호화하여 클라이언트에게 보낼 수 있으므로 보안적으로 강화된 서비스 제공이 가능하다.

로드 밸런싱을 통한 부하 감소

웹 서버와 WAS를 분리하여 사용할 경우 로드 밸런싱을 통해 1개의 웹 서버에 여러 개의 WAS를 연결할 수 있다.

이렇게 여러 개의 WAS를 사용하는 대용량 웹 애플리케이션의 경우 WAS가 분리되어 있기 때문에 무중단 운영이 가능하며 트래픽이 많을 경우에도 적절히 트래픽 분배가 가능해지므로 서버 부하를 감소시킬 수 있다.

여러 웹 애플리케이션 서비스 가능

웹 서버에서는 PHP를 사용할 수 있고 WAS에서는 Java나 Python을 사용할 수 있다.

이렇게 2개 이상의 웹 애플리케이션 서비스를 사용하는 것이 빈번한 일은 아니지만 일단 다양성이 넓어진다는 장점도 가지고 있다.


웹 서버 설치 및 운영

1. Apache2, PHP, MariaDB 설치

sudo apt-get install -y apache2 php php8.1-mysql mariadb-server 

2. httpd 활성화

# httpd 시작
sudo systemctl start apache2

# 리눅스가 재부팅 되어도 httpd가 계속 Active(활성화) 상태가 되도록 설정
sudo systemctl enable apache2

# httpd 상태 확인
systemctl status apache2

3. MariaDB 활성화

# mariadb 시작
sudo systemctl start mariadb

# 리눅스가 재부팅 되어도 mariadb가 계속 Active(활성화) 상태가 되도록 설정
sudo systemctl enable mariadb

# mariadb 상태 확인
systemctl status mariadb

4. 웹 서버 작동 확인

echo '<h1> Hello World!</h1>' > /var/www/html/index.html

여기서부터는 Root 계정으로 로그인한 뒤 수행하자.
정석대로라면 Root 계정에서 /var/www/html에 대한 접근 및 작업 권한을 유저에게 줘야 하는데 이는 꽤 귀찮은 작업이기 때문이다.

웹 서버의 정적 파일의 기본 경로는 "/var/www/html"이다.

이전에 네트워크에 대해 설명할 때 말했지만 일반적으로 웹 서버는 기본 문서로써 "index.html"을 반환해 주므로 index.html에 기본적인 HTML 코드를 넣어준 뒤 리눅스에서 http://localhosthttp://127.0.0.1/으로 접속해 보자.

위에서 입력한 대로 Hello World!라는 구문이 떴음을 볼 수 있고, 이는 웹 서버가 정상적으로 동작한다는 것을 의미한다.

5. PHP 모듈 정상 가동 확인

echo '<?php phpinfo(); ?>' > /var/www/html/phpinfo.php

http://localhost/phpinfo.phphttp://127.0.0.1/phpinfo.php으로 접속해 아래와 같은 창이 뜨면 PHP 모듈이 정상 가동한다는 의미이다.

6. 외부에서 웹 서비스로 접근 가능하도록 설정

웹 서버의 가장 중요한 설정은 "일반 사용자들도 웹 서버에 접근할 수 있어야 한다"라는 부분이 아닐까 싶다.
이를 위해서 다른 클라이언트가 HTTP나 HTTPS 프로토콜을 활용해 리눅스에 접근하여 웹 서버에 접근할 수 있도록 설정해줘야 한다.

# 방화벽에서 http 및 https 접근을 허용
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https

# 변경한 방화벽 설정 적용
firewall-cmd --reload

마지막으로 ip addr을 통해 리눅스 IP Address를 알아본 뒤 Window 브라우저에서 이를 입력하여 웹 서버에 접근 가능한지 확인해 보자.


WAS 설치(Tomcat)

1. OpenJDK 설치

Tomcat 설치 및 구동에는 Java가 설치되어 있어야 한다.
따라서 먼저 OpenJDK를 설치하도록 하자.

sudo apt-get install openjdk-11-jdk

설치가 완료되었다면 java -version 명령어를 통해 자바가 잘 설치되었는지 확인해 보자.

2. 리눅스에서 Tomcat 파일 다운로드

Tomcat 설치 링크

리눅스 서버에 설치할 것이므로 Core > tar.gz 파일을 다운로드하면 된다.

3. 다운로드 한 압축 파일 풀어주기

tar -zxvf apache-tomcat-8.5.88.tar.gz

필수는 아니지만 Tomcat은 리눅스 서버 전체에서 활용하는 WAS이므로 /usr/local/lib 같은 공유되는 디렉터리에 이동시켜 놓는 것을 추천한다.

4. 모든 사람이 사용할 수 있도록 설정

웹 서버에 모든 사람이 접근 가능하도록 설정했듯 Tomcat 또한 모든 사람이 사용 가능하도록 설정해줘야 한다.
이를 위해 /etc/profile을 수정해줘야 한다.

vi /etc/profile을 통해 VIM 에디터로 파일 수정창에 들어간 뒤 마지막 부분에 아래 구문을 추가해준다.
(Apache Tomcat 버전이나 경로를 자신의 환경에 맞도록 바꿔주자)

CATALINA_HOME=/usr/local/lib/apache-tomcat-8.5.88
PATH=$PATH:$CATALINA_HOME/bin
export CATALINA_HOME  

이후 source /etc/profile을 통해 변경한 설정을 적용하자.

또한 모든 사람이 접근할 수 있도록 방화벽 설정도 수행해줘야 할 것이다.
일반적인 HTTP 통신은 "8080" 포트로 접근하기 때문에 TCP 8080 포트를 열어주면 된다.

# TCP 8080 포트 방화벽에서 열어주기
firewall-cmd --permanent --zone=public --add-port=8080/tcp
  
# 수정한 방화벽 설정 적용
firewall-cmd --reload

5. Tomcat 시작

압축을 푼 Tomcat 디렉터리에 bin 디렉터리가 존재한다.
그곳에 존재하는 startup.sh를 실행시키면 Tomcat을 시작시킬 수 있다.

이후 리눅스에서 localhost:8080으로 접속하여 아래와 같은 창이 나오면 성공이다.

이후 Windows에서 리눅스 아이피 주소에 :8080을 붙여 접속했을 때 동일한 창이 나오면 성공이다.

  • Tomcat 종료 : [Tomcat 설치 경로]/bin에서 shutdown.sh를 실행하면 됨
profile
혹시 틀린 내용이 있다면 언제든 말씀해주세요!

0개의 댓글