docker-compose로 Tomcat-MariaDB 연동

목차

docker-compose로 Tomcat과 MariaDB를 연동해 WEB-WAS-DB 3-Tier 아키텍처를 완성한다. 앞서 만든 WEB-WAS 연동 구성에 MariaDB 컨테이너를 추가하고, depends_on으로 서비스 의존성을 지정한 뒤 index.jsp에 JDBC 코드를 넣어 DB까지 연결한다. 사용한 버전은 Tomcat 10.1.17, MariaDB 11.2.2(latest) 컨테이너다.

시작하기 전에 WEB(NginX·Apache 등)과 WAS가 먼저 연동되어 있어야 한다. WEB-WAS 연동은 docker-compose로 NginX – Tomcat 연동에서 다뤘다.

연동에 사용할 컨테이너 정보

docker-compose.yml에 Tomcat과 MariaDB를 연동하는 부분을 추가한다. Tomcat에는 MariaDB에 대한 의존 관계를 지정한다.

항목항목 이름
의존관계depends_onmariadb000ex02
docker-compose Tomcat depends_on 설정

MariaDB 컨테이너 설정 정보는 다음과 같다.

항목 항목 이름
이미지 이름imagemariadb:latest
DB 관련 정보environment
Mysql 컨테이너 이름servicesmariadb000ex02
MYSQL 데이터베이스 이름MYSQL_DATABASEMyDB
MYSQL 사용자MYSQL_USERkorjsh
Mysql 비밀번호MYSQL_PASSWORD1234
포트 번호 설정ports3306:3306
연결 네트워크networksnetwork01

docker-compose.yml 파일 수정하기

기존 NginX-Tomcat 구성에 MariaDB 컨테이너를 추가하고, Tomcat에 depends_on을 넣는다.

version: '3'
services:
  nginx000ex02:
    image: nginx:latest
    volumes:
      - C:Users정순호Documents3tier-foldernginx.conf:/etc/nginx/nginx.conf
    ports:
      - "80:80"
    networks:
      - network02
  tomcat000ex02:
    image: tomcat:latest
    volumes:
      - C:Users정순호Documents3tier-folderwebappsindex.jsp:/usr/local/tomcat/webapps/ROOT/index.jsp
    ports:
      - "8080:8080"
    networks:
      - network02
    depends_on:
      - mariadb000ex02
  mariadb000ex02:
    image: mariadb:latest
    environment:
      MYSQL_ROOT_PASSWORD: myrootpass
      MYSQL_DATABASE: my3tier000db
      MYSQL_USER: korjsh
      MYSQL_PASSWORD: dbpassword
    ports:
      - "3306:3306"
    networks:
      - network02
networks:
  network02:

index.jsp에 JDBC 코드 작성

depends_on으로 서비스 간 의존성을 지정했으면, index.jsp에 JDBC 코드를 삽입해 MariaDB와 연동한다. 여기서는 DB 컨테이너는 생성하되 테이블은 만들지 않으므로, 테이블이 없는 경우를 대비한 예외 처리를 넣었다.

<%@ 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://mariadb000ex02: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>

작성을 마쳤으면 docker-compose 파일을 다시 실행한다.

docker-compose -f pathofdocker-compose.yml up
docker-compose로 WEB-WAS-DB 연동 완료 화면

정리

이렇게 docker-compose로 WEB-WAS-DB까지 연동하는 3-Tier 아키텍처를 이전보다 간편하게 구축했다. 핵심은 ① MariaDB 컨테이너를 같은 네트워크에 추가하고, ② Tomcat에 depends_on으로 의존 관계를 지정하며, ③ index.jsp의 JDBC URL 호스트를 MariaDB 컨테이너 이름으로 지정하는 것이다. 같은 3-Tier 구성을 쿠버네티스로 옮기는 방법은 쿠버네티스로 WAS-DB 연동 및 3-Tier 완성에서 이어진다.

💬 댓글 0

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

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

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