WeSeong Log in
← Back to posts
WEB

3Tier, Nginx(WEB), Tomcat(WAS)

3Tier, Nginx(WEB), Tomcat(WAS)

다음 글 예고... 🫠 3Tier의 완성을 위해 기존의 Nginx서버와 Tomcat서버에 DB서버를 연동하려고 합니다.


Ⅰ. 개요

3Tier 구조에 대해 알아본다. 3Tier는 일반적으로 WEB서버 - WAS서버 - DB서버로 구성된다. 서비스를 제공할 때 이 기본 골격은 바뀌지 않으나 아키텍쳐(Architecture)에 따라 세세한 구성, 환경 설정은 바뀔 수 있다. 실습 과정으로 Nginx서버를 구축하고 Web서버로서 동작시킨다. Nginx서버가 정상적으로 작동하면 Tomcat을 바탕으로 WAS서버 설치를 진행한다. Nginx서버와 Tomcat서버 연동한 후 WEB서버에 접속 시 WAS서버가 연결되는지 확인한다.



Ⅱ. 3Tier


https://docs.aws.amazon.com/ko_kr/whitepapers/latest/serverless-multi-tier-architectures-api-gateway-lambda/three-tier-architecture-overview.html

3Tier 구조는 위의 사진을 보면 하나의 서비스를 제공할 때 세 개의 서버가 동작하는 구조를 의미한다. 기본적으로 클라이언트(Client)에게 직접적으로 보여주는 프론트엔드의 작업이 이뤄지는 WEB서버와 클라이언트가 서비스를 이용할 때, 특정 동작을 수행하게 하거나 데이터베이스와 연동하여 원하는 정보를 클라이언트에게 보여주는 WAS서버가 있다. WAS서버는 DB서버 기반으로 데이터베이스를 조회하거나 데이터를 삽입하거나 수정, 삭제 등의 작업도 수행할 수 있다. DB서버는 데이터를 보관하는 데이터베이스이다. 서비스를 제공할 때 이 기본 골격은 바뀌지 않으나, 아키텍쳐(Architecture)에 따라 어떤 정책으로 서비스가 제공될지에 대한 세부적인 사항은 변동될 수 있다.


아키텍쳐(Architecture)란? 시스템 구성과 동작 원리를 나타내고 구성 요소 간의 관계 및 시스템 외부 환경과의 관계를 묘사하는 것, 시스템 구성 요소에 대한 설계 및 구현을 지원하는 수준을 기술하는 것 등의 개념이다. 이렇게 얘기하면 분명 이해가 어려울 것이다. 조금 더 간단하게 얘기하자면, 우리가 하나의 웹사이트를 만들 때, 디자인은 어떻게 할거고 회원가입할 때 개인정보는 어디까지 받을 것인지, 특정 게시판은 권한을 일반 회원, 비회원 등에게 어디까지 줄 것인지, 쇼핑몰의 경우 후기는 누가 남길 수 있으며, 비회원으로 주문할 수 있는지, 없는 지 등 특정 웹사이트의 목적에 맞춰 전체적으로 어떻게 서비스가 제공되고 보여지며, 관리할 것인지 구성하는 것이 아키텍쳐라고 생각하면 좋다. 아키텍쳐만 해도 정말 많은 종류가 있으며, 많은 부분을 공부해야될 정도로 넓다. 더 알고 싶은 부분은 검색해보길 권장한다.


즉, 사용자가 네이버 주소를 입력하고 접속했을 때, WEB서버의 IP 주소로 접근한다(우리가 단순히 www.naver.com 이라고 입력하게 되더라도 안보이는 곳에서 DNS서버를 통해 네어버의 WEB서버에 접근하는 것이다.). WEB서버는 WAS서버를 연결해주는 역할을 하고 있기 때문에, WAS서버에서 제공하는 다양한 서비스를 우리가 요청할 때마다 불러와준다. 예를 들어, 우리가 로그인을 할 때, WAS서버에서 구현된 로그인 관련 서비스를 불러와주거나 네이버에서 뉴스, 쇼핑, 스포츠 탭을 눌러 관련 서비스를 제공받을 때도 마찬가지로 WAS서버에서 구현된 그 서비스들을 WEB서버가 불러와준다. 결국, WAS서버는 실질적 서비스 제공자인 셈이다. 하지만, 로그인할 때의 회원 정보나, 검색할 때 나타나는 다양한 정보, 뉴스, 쇼핑 상품 등의 방대한 데이터는 WAS서버가 가지고 있는 것이 아닌 DB(데이터베이스)서버가 가지고 있다. 그래서 WAS서버는 DB서버와 연결되어 제공하는 서비스에 맞는 데이터를 조회하고 가져온다. 또 하나의 예를 들어, 이렇게 블로그에 글을 남기는 경우 WAS서버는 DB서버에 새롭게 등록한 블로그 글을 데이터로 저장, 수정, 삭제를 요청할 수 있다. DB서버는 실제 저장, 수정, 삭제를 수행하고 데이터를 보관하게 된다. DB서버는 우리가 웹사이트에서 만날 수 있는 수많은 데이터들이 저장되어 있는 곳이라고 생각하면 된다.


※ 간단하게 설명한 3Tier이기 때문에, 관련 내용은 더 많이 있다. 네트워크 아키텍쳐나 방화벽 등 보안은 어떻게 구성할 것이고 여러 대의 WAS서버와 WEB서버의 연결은 어떻게 할 것인지 등 추가적인 내용은 앞으로 공부하며 더해갈 예정이다.



Ⅲ. Nginx

실습에 들어가기 전에, 간단한 명령어 들을 알면 좋다.

명령어

기능 설명

sudo apt install nginx(패키지명)

관리자 권한으로 패키지를 설치한다.

sudo apt remove nginx

관리자 권한으로 설치한 패키지를 삭제한다.

sudo systemctl stop nginx(서버)

관리자 권한으로 구동한 서버를 멈춘다.

sudo systemctl start nginx

관리자 권한으로 서버를 구동한다.

sudo systemctl restart nginx

관리자 권한으로 서버를 재구동한다.

sudo systemctl enable nginx

관리자 권한으로 서버를 시작 프로그램(윈도우의 시작 프로그램과 유사하다.)으로 등록한다.

sudo systemctl disable nginx

관리자 권한으로 서버를 시작 프로그램에서 제거한다.

서버를 설치하고 삭제하거나 구동과 재구동, 멈춤과 관련된 시스템 명령어들이다. 알아두면 유용하게 쓰인다.

WEB서버로 가장 많이 쓰이는 Nginx을 설치하고 3Tier 구축 실습을 해볼 예정이다. Tomcat도 있긴 한데, 각각 장단점이 있다. 간단히 얘기하자면, Nginx의 경우 트래픽이 모였을 때 성능이 Tomcat보다 우세하다. Tomcat은 서브 프로젝트가 굉장히 많아, 기능이나 모듈 확장면에서 강점이 있다.


  1. Nginx서버를 설치한다.

  • sudo apt update

  • sudo apt install nginx



※ nginx서버를 설치하는 순간 systemctl(시스템 명령어)로 제어할 수 있게 등록되고 서버가 자동으로 시작되어 있다. 'netstat -anp | grep nginx'로 조회해보면 나온다.


2. Nginx 서버 접속해보기

파일 구조를 떠올려보면 /etc 는 보통 설정 파일 /var 는 보통 데이터 파일이나 로그 파일이 들어간다. Nginx 서버에서도 마찬가지로 /etc/nginx에는 설정 파일이 /var/www/html에는 구현 소스 파일이 들어간다.


여기서 설정 파일은 /sites-available/default로 들어가면 자세한 내용을 볼 수 있다.


이 부분은 나중에 WAS서버와 연동할 때 필요한 설정을 등록할 때 다시 볼 예정이다.


/var/www/html에 이제 index.html 파일을 만들어 실제로 WEB서버로 접속해볼 예정이다. 이 경로로 간 다음에 vi편집기를 사용하여 index.html을 만들어주고 안에 내용은 간단하게 작성해본다.


이런 식으로 작성했는데, 여기서 팁이 있다면 vim 패키지를 설치하면 vi 편집기를 훨씬 더 편하게 사용할 수 있다. 혹은

cat > 파일명
cat >> 파일명

파일 내용을 볼 때 활용하는 'cat' 명령어를 이용해서 '> 파일명' 을 입력해주면 해당 파일명으로 된 텍스트 파일을 생성할 수 있다. 만약 같은 파일명의 경우 '>' 이 경우에는 내용이 덮어쓰기가 되고 아래의 '>>'의 경우에는 내용이 추가가 된다.


이제 만들어 둔 index.html 파일의 내용이 Nginx서버에 접속했을 때 잘 나오는지 확인할 차례이다. 위에서 알려준 'netstat -anp | grep nginx'를 통해 서버가 LISTEN 상태인지 확인 후 맞다면 바로 접속해보는데,


'ifconfig'를 통해 나온 해당 IP 주소로 접속하면 된다. 들어가보면,



잘 나오는 모습을 볼 수 있다!


※ TIP으로 HTTP 응답 관련해서 볼 수 있는 상태코드를 공유하고자 한다. 간단히 정리한 것이므로 자세한 부분은 찾아보길 권장한다.

상태코드

상태설명

100번대

클라이언트가 서버에 요청을 보낸 상태로 서버도 요청을 기다리고 있다.

200번대

클라이언트와 서버가 정상적으로 통신했을 때 볼 수 있다.

300번대

클라이언트는 요청을 마치기 위해 추가 작업(리다이렉션)이 필요하다라는 의미로 서버가 요청한다.

400번대

클라이언트가 서버에서 해당하는 리소스를 받을 수 없을 때 나타난다.

500번대

서버 자체에 오류가 있다는 걸 의미한다.



Ⅳ. Tomcat

이어서 Tomcat을 설치해서 WAS서버로 활용하는 실습을 시작하려고 한다. Tomcat설치의 경우 약간 복잡해보이는 면이 있지만, 실제로 크게 어렵지 않다.

Apache Tomcat® - Apache Tomcat 9 Software Downloads


우선 위에 Tomcat 웹페이지에서 tar.gz파일을 받아준다. 최신 버전이 9.0.82인데 그 외에 버전도 웹페이지에서 다운받을 수 있다. 설치해야하는 파일의 경로는 프로그램 설치 관련 디렉토리인 /usr/local 안에 'wget'명령어로 다운받아주면 된다. /usr/local 경로로 이동 후 wget으로 받은 tomcat파일을 압축을 풀면


이렇게 들어가 있을 것이다. 파일명은 압축 푼 그 상태로 놔둬도 되고 자유롭게 바꿔도 된다.


안에 들어가보면 이렇게 있을 텐데, /conf는 설정 관련 디렉토리, /lib는 라이브러리가 모여있는데 나중에 DB서버 연결을 위한 Connector를 이 경로에 설치해 둘 예정이다. /webapps 디렉토리는 JSP, CSS, HTML 등 웹서비스 관련 파일을 등록하는 곳이다. 그 다음 JAVA 언어를 설치해준다.

sudo apt install openjdk-17-jdk

자바 17버전을 설치해준다. 최근에 스프링 프레임워크도 17버전 이후를 지원하고 있고 8버전의 경우 지원기간이 얼마남지 않아 17버전으로 많이 작업하고 있다고 생각한다. 이제 Tomcat서버를 구동해서 정상적으로 작동하는지 알아보려면 /usr/local/apache-tomcat-9.0.82/bin 경로로 들어가 startup.sh 스크립트 파일을 실행시켜주면 된다. Tomcat은 'apt' 명령어로 설치한 게 아닌 별도로 설치했기 때문에, 자동으로 서버가 시작되지 않는다.


서버 종료는 shutdown.sh 스크립트 파일을 실행시켜주면 된다.


정상적으로 구동하고 서버가 LISTEN 상태인 걸 확인할 수 있다. Tomcat의 경우 기본 포트가 8080이다. 알아두면 좋다.


그러면 이제 Tomcat 서버의 IP 주소와 8080 포트 번호로 접속해서 정상적으로 작동하는 걸 확인하면 이제 WEB서버와 연결하기 위해 Nginx서버/etc/nginx/sites-available/default 설정 파일을 수정해준다.


이렇게 proxy_pass와 index.jsp를 추가해주고 'sudo systemctl restart nginx'를 해주고 WEB서버 IP 주소로 접속하면,



Tomcat(WAS)서버와 연결이 잘 된 모습을 볼 수 있다!!!



후기

WEB서버와 WAS서버를 설치하고 연결하는 과정은 어렵지 않았다고 생각합니다. 이후에 포스팅 할 DB서버가 조금 까다로워지기 때문에, 이렇게 다시 구축하면서 포스팅한 것처럼 처음부터 다시 해보면서 공부해볼 예정입니다.😄