쿠버네티스로 WAS-DB 연동 및 3-Tier 완성

목차

쿠버네티스로 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 WAS-DB 연동 성공 화면

정리

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

참고 자료

💬 댓글 0

💬 댓글을 남기려면?
첫 댓글을 남겨보세요 ✨

이 콘텐츠가 도움이 됐나요?

누스쿨 커뮤니티에서 더 많은 커리어 전략을 나눠요