0. 들어가며
지난 포스팅에서 VM에 Tomcat 서버를 구축해 보았습니다. 이번 포스팅은 Tomcat 서버를 외부에서 접근할 수 있도록 구성한 후, Jenkins를 통해 웹 애플리케이션을 배포하고, 배포된 웹 페이지에 접속해 보는 과정을 다뤄보겠습니다. 아직 Tomcat 서버가 준비되지 않았다면 아래의 이전 포스팅 링크를 참고하여 구축 후 이번 포스팅 내용을 따라 해 보는 것을 추천드리겠습니다.
[Ubuntu 20.04] Tomcat 서버 구축 - 1편 : https://tech-recipe.tistory.com/4
[Ubuntu 20.04] Tomcat 서버 구축 - 1편
0. 들어가며 최근에 CI/CD에 관한 강의를 듣고 있습니다. Jenkins를 활용해 CI/CD 파이프라인을 구축하는 과정에 웹 서버로 Tomcat을 사용하게 되어 이를 구축하게 되었습니다. 처음에는 컨테이너로 구
tech-recipe.tistory.com
1. Jenkins - Tomcat 서버 구현 Architecture
지난 포스팅에서도 말씀드렸지만, CI/CD 학습에 필요한 실습 환경을 구성하기 위해 Tomcat 서버를 구축하게 되었습니다. 제가 듣고 있는 강의에서는 로컬 환경에 Docker를 사용하여 컨테이너 형태로 Jenkins 서버와 Tomcat 서버를 구동하고 웹 애플리케이션을 배포해 보는 정도로 실습을 진행하고 있습니다. 그러나 제가 가진 장비들을 활용하여 Jenkins 서버와 Tomcat 서버를 분리하여 구축한다면 좀 더 의미 있는 실습이 될 것 같아 아래와 같은 구조로 실습 환경을 구성해 보려고 합니다.
사실 위의 [그림 1]과 같은 환경이, 실제 CI/CD 방법론을 택하여 애플리케이션을 운영하는 환경과 유사한지는 잘 모르겠습니다. 아마도 더욱 복잡한 환경이 아닐까 생각합니다. 다만 로컬 환경에서 실습을 진행하는 것보다는, 실제 외부에서 접근할 수 있도록 서비스를 구축해 보는 것이 조금 더 실전적인 방식이 아닐까 하여 위와 같은 환경을 구축해 보려고 합니다. 작업 순서는 아래와 같습니다.
- ipTIME 공유기 관리 페이지 접속하여 외부 20188번 포트를 내부 VM의 8080번 포트로 포트포워딩 하도록 설정
- Tomcat 서버의 tomcat-user.xml 파일에 사용자 정보를 입력하여 Jenkins 서버에서 애플리케이션을 배포할 수 있도록 준비
- Jenkins 서버에서 프로젝트를 생성한 후, 생성한 프로젝트의 설정 탭 > 빌드 후 조치 메뉴의 '빌드 후 조치 추가' 드롭 다운 메뉴 클릭하여 'Deploy ear/ear to a container' 선택
- WAR/EAR files 필드에 배포할 .WAR 파일에 대한 정보 입력한 후 Containers 필드에 'Add Container' 드롭 다운 메뉴 클릭하여 'Tomcat 9.x Reomote' 선택
- Cridentials 필드에 'Add' 버튼 클릭 후 앞선 2번 단계에서 설정한 Tomcat 서버 사용자에 대한 정보를 입력하고 선택한 후, Tomcat URL 필드에 Tomcat 서버의 URL과 ipTime 공유기의 외부 포트 번호인 20188 입력
- 프로젝트 빌드를 통해 Jenkins에서 Tomcat 서버로 애플리케이션이 잘 배포되는지 확인
2. 애플리케이션 배포 환경 구성 작업
Step 1. ipTIME 공유기 포트포워딩 설정
이제, 본격적인 구성 작업에 들어가 보도록 하겠습니다. 가장 먼저 ipTIME 공유기의 설정 페이지에 접속합니다.(참고로 본 포스팅에 사용된 공유기 모델명은 ipTIME AX2004BCM입니다.) 일반적으로 ipTIME 공유기의 설정 페이지는 웹 브라우저 주소창에 192.168.0.1을 입력하면 접근할 수 있습니다.
[사진 1]의 로그인 화면에서 로그인을 하고 나면 [사진 2]의 창이 뜨게 됩니다. 처음 확인 해야 할 부분은 [그림 2]의 우측 하단의 내용입니다. 현재 공유기가 제공받은 공인 IP 주소와 공유기의 펌웨어 정보가 나와 있습니다.(그래서 모자이크 처리를 했습니다.) 이후에 언급하겠지만, 공인 IP를 알아야 외부에서 Tomcat 서버로 접근이 가능하기 때문에 따로 메모를 해 두셔야 합니다.
참고 : 저는 ISP로 SK Broadband를 사용합니다. 요즘엔 보통 인터넷을 사용하면 모뎀을 주게 되는데 이 모뎀이 공유기 역할을 하기도 합니다. 제가 제공받은 모뎀은 공인 IP 주소를 받아서 내부에 사설 IP 주소를 제공하는 것이 기본 설정으로 되어 있었습니다. 이렇게 하면 ipTIME 공유기의 포트포워딩 기능을 제대로 사용할 수 없기 때문에 설정을 좀 바꾸어야 합니다. 저는 모뎀이 공인 IP 주소를 바로 ipTIME 공유기의 외부 IP 주소로 전달하도록 설정했습니다. 해당 설정은 ISP 마다 제공하는 모뎀과 방식이 다를 수 있으므로 확인이 필요합니다.
관리도구 페이지로 이동하여 왼쪽의 고급 설정 > NAT/라우터 관리 > 포트포워드 설정 메뉴로 이동합니다.
[사진 3]에서 보는 바와 같이 포트포워딩 규칙을 생성합니다. 빨간 네모를 친 칸에 각각의 값을 넣어 주면 됩니다. 우선 '규칙 이름'은 말 그대로 포트포워딩 규칙의 이름으로 이해할 수 있는 이름을 입력합니다. '내부 IP 주소'는 Tomcat 서버의 IP 주소로 앞선 포스팅에서 VM을 생성하고 부여해준 IP 주소를 말합니다. '외부 포트'는 ipTIME 공유기가 외부에 노출하게 될 포트 번호로 Jenkins 서버에서 해당 포트를 통해 Tomcat 서버에 접근하게 될 것입니다. '내부 포트'는 VM이 노출하고 있는 포트 번호로 Tomcat의 기본 포트 번호인 8080으로 지정해 주겠습니다. 이렇게 하고 오른쪽 아래의 '적용' 버튼을 눌러 규칙을 추가합니다.
Step 2. Tomcat 서버 사용자 정보를 입력
다음으로 Tomcat 서버의 사용자 정보 파일을 편집합니다. /etc/tomcat9 경로에 tomcat-users.xml 파일을 vim 편집기로 열어 아래와 같은 내용을 입력합니다.
sudo vim /etc/tomcat9/tomcat-users.xml
#tomcat-users.xml 파일에 아래 내용을 입력
<role rolename="manager-script"/>
<user username="deployer" password="P@ssw0rd" roles="manager-script"/>
username과 password 값은 이후 단계에서 사용하게 되는데, Jenkins 서버에서 Tomcat 서버에 애플리케이션을 배포하기 위한 권한을 획득하기 위해 사용됩니다. 본 포스팅에는 username은 deployer로, password는 P@ssw0rd!이후 Tomcat 서버의 서비스를 재시작하여 입력한 사용자 정보가 업데이트되도록 합니다.
sudo systemctl restart tomcat9
Step 3. Jenkins 프로젝트에서 배포 대상을 Tomcat 서버로 설정
다음 단계는 Jenkins 설정으로, 애플리케이션 소스코드를 사용하여 빌드 작업을 실행한 후 이를 배포할 대상을 설정하는 과정입니다. 우선 Jenkins에서 프로젝트를 생성합니다. 생성된 프로젝트 페이지로 이동하면 화면 왼쪽에 '구성' 메뉴가 있습니다. 이를 클릭하고 스크롤을 아래로 드래그하면 '빌드 후 조치' 필드가 나타납니다. 이 필드에 Tomcat 서버에 대한 정보를 입력하여 배포 대상을 설정해 줍니다.
위와 같이 Tomcat 서버의 설정을 진행해 줍니다. 'Add Contianer' 드롭다운 메뉴에서 Tomcat 9.x Reomte를 선택하고 각 필드를 채워 넣습니다. 앞선 단계에서 설정한 Tomcat 사용자 정보(username : deployer / password: P@ssw0rd!)를 입력해 줍니다. TomcatURL 필드에는 공유기가 제공받은 공인 IP 주소와 포트번호를 입력합니다.("http://공인 IP 주소:포트번호"와 같은 형식으로 실제 환경에 맞춰 입력하면 됩니다.) 설정을 완료하고 왼쪽의 지금 빌드 버튼을 클릭하면 빌드가 진행되고 정상적으로 Tomcat 서버에 .war 파일을 배포하는 것을 볼 수 있습니다.
본 포스팅에서는 Jenkins 설정에 대해서 상세하게 설명하지 못한 부분이 많습니다. 이에 관한 내용은 따로 포스팅을 통해 설명드리도록 하겠습니다.
Step 4. 웹 애플리케이션 작동 상태 확인
이제 배포를 완료한 웹 애플리케이션이 잘 작동하는지 확인해 볼 차례입니다. 모바일을 사용하여 인터넷 구간을 통해 배포한 애플리케이션에 잘 접근이 되는지 확인해 보겠습니다. 핸드폰의 크롬 브라우저에 http://공인 IP 주소:20188/webapp을 입력하면 아래와 같은 화면을 확인할 수 있습니다.
참고로 저는 ipTIME 공유기에서 제공하는 DDNS 기능을 사용하고 있어 공인 IP 뿐만 아니라 URL을 통해서도 접속이 가능합니다. 위에 보이는 [사진 8]은 URL을 통한 애플리케이션 접속이 성공한 모습입니다.
지금까지 두 건의 포스팅을 통해 Tomcat 서버를 구축하고 Jenkins로 웹 애플리케이션을 배포, 인터넷 구간을 통한 접속까지 확인해 보았습니다. 기존에 알고 있었던 DDNS나 포트포워딩의 개념을 실제 애플리케이션 배포에 적용해 볼 수 있어서 상당히 재미있는 시간이었습니다. 또한, 아직 배워야 할 것이 많지만 CI/CD의 개념을 조금이나마 이해할 수 있는 실습이었습니다. 이 포스팅을 보시는 분들에게도 도움이 되셨길 바랍니다.
그럼 여기서 포스팅을 마치도록 하겠습니다. 감사합니다.
'System > System & Service' 카테고리의 다른 글
OPNsense로 방화벽 구축하기 [3편] (0) | 2025.03.08 |
---|---|
OPNsense로 방화벽 구축하기 [2편] (0) | 2025.02.25 |
OPNsense로 방화벽 구축하기 [1편] (0) | 2025.02.15 |
[Ubuntu 20.04] Tomcat 서버 구축 - 1편 (0) | 2023.08.10 |
[Ubuntu 20.04] OpenVPN을 활용한 VPN 서비스 구축 (2) | 2023.06.30 |