쿠버네티스로 WAS(Tomcat)와 DB(MariaDB)를 연동해 WEB-WAS-DB 3-Tier 아키텍처를 완성한다. 앞선 포스팅에서 만든 Tomcat의 Deployment·Service는 그대로 두고, index.jsp를 담은 ConfigMap을 MariaDB 연동 코드로 교체한 뒤 MariaDB 파드를 새로 생성하는 부분을 작성한다. 쿠버네티스에서 Deployment·Service·ConfigMap이 어떻게 맞물려 3-Tier를 이루는지 단계별로 살펴본다.
목차
이번 글은 도커로 구축한 3-Tier를 쿠버네티스로 옮기는 단계다. 도커 컴포즈로 같은 구성을 만드는 방법은 docker-compose로 Tomcat-MariaDB 연동에서 다뤘다.
MariaDB 파드 구성
MariaDB Deployment 작성
mariadb-deployment로 MariaDB 서버의 배포를 정의한다. mariadb:latest 이미지로 파드를 생성하고 3306 포트에서 데이터베이스 서비스를 제공하며, 레플리카는 1로 둔다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: mariadb-deployment
spec:
selector:
matchLabels:
app: mariadb000ex99
strategy:
type: Recreate
template:
metadata:
labels:
app: mariadb000ex99
spec:
containers:
- name: mariadb000con01
image: mariadb:latest
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "dbpassword"
- name: MYSQL_DATABASE
value: "my3tier000db"
- name: MYSQL_USER
value: "korjsh"
- name: MYSQL_PASSWORD
value: "dbpassword"
MariaDB 컨테이너는 env(Environment Variables)로 데이터베이스 설정을 구성한다. 각 환경 변수의 역할은 다음과 같다.
MYSQL_ROOT_PASSWORD: root 사용자의 비밀번호. 보안상 중요한 정보이므로 실제 운영 환경에서는 더 강력하고 안전한 비밀번호를 사용해야 한다.MYSQL_DATABASE: 컨테이너 시작 시 생성될 데이터베이스 이름(my3tier000db).MYSQL_USER: 애플리케이션이 사용할 DB 사용자 계정(korjsh). 이 사용자는 데이터를 조회·수정할 권한을 가진다.MYSQL_PASSWORD:MYSQL_USER에 대한 비밀번호. 사용자 인증에 사용되며, 마찬가지로 안전한 값을 선택해야 한다.
MariaDB Service 작성
mariadb-service라는 이름으로 MariaDB에 대한 쿠버네티스 서비스를 정의한다. MariaDB의 기본 포트인 3306을 지정해 클러스터 내부에서 DB에 네트워크로 접근할 수 있게 한다.
apiVersion: v1
kind: Service
metadata:
name: mariadb-service
spec:
selector:
app: mariadb000ex99
ports:
- port: 3306
targetPort: 3306 <-- 3306 포트에서 데이터베이스 서버에 대한 네트워크 액세스를 가능하게 함
Tomcat 연동 구성
Tomcat ConfigMap 작성
이전 포스팅에서 index.jsp를 ConfigMap으로 바꾼 것과 같은 원리로, 이번에는 MariaDB와 연동하는 JDBC 코드를 ConfigMap에 작성한다.
apiVersion: v1
kind: ConfigMap
metadata:
name: tomcat-index
data:
index.jsp: |
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="java.sql.*" %>
<html>
<head>
<title>WEB-WAS 연동 성공</title>
</head>
<body>
<h1>WEB-WAS 연동 성공</h1>
<p>이 페이지는 엔진엑스와 톰캣, MariaDB가 성공적으로 연동되었습니다.</p>
<%
try {
Class.forName("com.mysql.cj.jdbc.Driver");
String jdbcUrl = "jdbc:mysql://10.102.112.149:3306/my3tier000db";
String username = "korjsh";
String password = "dbpassword";
Connection conn = DriverManager.getConnection(jdbcUrl, username, password);
Statement stmt = conn.createStatement();
try {
ResultSet rs = stmt.executeQuery("SELECT * FROM your_table_name");
while (rs.next()) {
// Do something with the data from the database
}
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
stmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
%>
</body>
</html>
Tomcat 디플로이먼트
Tomcat 파드에 tomcat-index-volume을 정의해, 위 ConfigMap에서 작성한 index.jsp를 /usr/local/tomcat/webapps/ROOT/ 경로에 마운트한다. 이렇게 하면 ConfigMap에 정의한 사용자 정의 index.jsp가 웹 페이지로 표시된다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcat-deployment
spec:
selector:
matchLabels:
app: tomcat000ex99
replicas: 1
template:
metadata:
labels:
app: tomcat000ex99
spec:
containers:
- name: tomcat000con01
image: tomcat:latest
ports:
- containerPort: 8080
volumeMounts:
- name: tomcat-index-volume
mountPath: /usr/local/tomcat/webapps/ROOT/index.jsp
subPath: index.jsp
volumes:
- name: tomcat-index-volume <-- 볼륨 마운트
configMap:
name: tomcat-index
매니페스트 적용 및 연동 테스트
작성한 쿠버네티스 매니페스트 파일을 적용한다.
kubectl apply -f C:DockerANDk8skube_foldernginx-tomcat_v2_foldernginx-tomcat-deployment.yaml
앞선 포스팅에서 NginX의 노드 포트를 30080으로 설정했으므로, 브라우저에서 localhost:30080으로 접속해 테스트한다. 아래처럼 연동 성공 화면이 뜨면 3-Tier가 완성된 것이다.

정리
쿠버네티스로 3-Tier를 완성하는 핵심은 ① MariaDB를 Deployment·Service로 배포해 클러스터 내부에서 접근 가능하게 하고, ② index.jsp의 JDBC 연동 코드를 ConfigMap으로 관리하며, ③ 이 ConfigMap을 Tomcat 파드에 볼륨으로 마운트하는 것이다. 이로써 도커에서 쿠버네티스까지 이어진 WEB-WAS-DB 3-Tier 구축을 마무리한다.



💬 댓글 0