Docker에 Tomcat 설치하고 Oracle 12c 연결하기

앞의 포스트에서 CentOS 7에 Docker를 설치하고 Apache Image를 Pull 하여 설치했다. 그리고 테스트 용 HTML 파일을 Apache Image 안으로 복사한 뒤 다른 PC에서 웹브라우저를 이용해 테스트 용 HTML 파일이 잘 호출되는 것을 확인했다.

이번엔 Apache와 연동할 WAS인 Tomcat을 설치하고 역시..이전에 다른 서버에 설치해 둔 Oracle 12c와 연동하는 테스트까지를 포스팅 한다.

Tomcat 역시 Docker 이미지가 제공된다. 그리고 이 톰캣 내부에는 Java Runtime까지 포함되어 있어 별도로 Java를 설치할 필요가 없다.

docker pull 명령으로 tomcat 가장 최근버전(배포되는)을 가져와 설치한다.

docker pull 명령으로 tomcat 이미지 설치하기
docker pull 명령으로 tomcat 이미지 설치하기

이미지만 가져와 설치한 것이지 컨테이너가 생성된 것은 아니다. docker run 명령으로 tomcat 이미지를 최초 실행시켜 컨테이너를 만든다.

docker run 명령으로 최초 실행시켜 컨테이너 만들기
docker run 명령으로 최초 실행시켜 컨테이너 만들기

옵션으로 백그라운드 실행 ( -d ), 호스트의 8080 포트와 컨테이너의 8080 포트를 연결시켜주고 ( -p 8080:8080 ) 컨테이너의 이름을 tomcat-taeho ( –name tomcat-taeho )로 지정한다. 마지막의 tomcat 은 다운로드 받아 설치한 이미지의 이름이다.

이제 생성된 Docker Container인 tomcat-taeho에 docker exe 명령을 이용해 Shell로 접속해 본다.

실행중인 도커 컨테이너에 쉘로 접속하기
실행중인 도커 컨테이너에 쉘로 접속하기

기본적으로 Tomcat에서 Apache의 DocumentRoot에 해당되는 경로는 는 톰캣이 설치된 경로의 webapps 아래의 ROOT 라는 폴더다. 이 설정은 conf 디렉토리에 있는 server.xml 에 설정되어 있다.

Tomcat의 기본 DocumentRoot 경로
Tomcat의 기본 DocumentRoot 경로

없으니…만들어 준다. ( 왜 없지??? )

테스트 용으로 접속 시간을 알려주는 JSP 소스를 기본페이지 파일명인 index.jsp에 넣어 호스트 컴퓨터에서 만들어준다.

Tomcat 접속 테스트 용 index.jsp
Tomcat 접속 테스트 용 index.jsp

호스트에 생성한 index.jsp를 docker cp 명령을 이용해 Tomcat 도커 컨테이너 내부의 DocumentRoot에 해당하는 appBase 또는 docBase에 복사해 넣는다.

관련 server.xml의 설정은 아래표를 보고 공부해야 한다.

그리고 웹 브라우저를 통해 index.jsp가 잘 호출되고 실행되는지 확인해 본다.

접속 시간이 잘 표시되는 것을 알 수 있다.

Tomcat Container에 접속한 쉘에서 env 명령을 실행해보면 Tomcat Version과 Java Version을 확인할 수 있다.

그리고 java -version 명령을 실행하면 자세한 Java 환경 정보를 알 수 있다.

다음은 이전에 다른 서버에 설치해 둔 Oracle 12c와의 JDBC 접속을 테스트할 차례다.

일단 Oracle12c의 JDBC 드라이버를 아래의 경로에 복사해 넣어야 한다. 이 경로는 env 명령을 실행하면 변수 중 CATALINA_HOME 이라는 변수가 갖고 있는 경로 아래의 lib 다.

tomcat의 jdbc 드라이버 파일이 위치해야 하는 경로(CATALINA_HOME/lib)
tomcat의 jdbc 드라이버 파일이 위치해야 하는 경로(CATALINA_HOME/lib)

Oracle 12c 버전의 JDBC Driver를 다운로드 받아 아래화면처럼 Tomcat Container 내 CATALINA_HOME/lib에 복사해 넣는다. (다운로드는 Oracle 12c JDBC Driver 공식 다운로드 페이지인 여기에서)

Oracle 12c JDBC Driver 복사해 넣기
Oracle 12c JDBC Driver 복사해 넣기

그리고 Tomcat과 Oracle이 잘 연결되는지를 테스트할 JSP 소스페이지도 Tomcat Container의 ROOT 폴더에 복사해 넣는다.

이 소스는 다음과 같다. 이 소스는 인터넷에서 쉽게 검색을 통해 얻을 수 있다. (출처 : https://infotake.tistory.com/71)

<%@ page language=”java” contentType=”text/html; charset=UTF-8″ pageEncoding=”UTF-8″

%><%@ page import=”java.sql.*, java.util.*”

%><html>

<head>

<title>JSP Oracle, JDBC 예제</title>

<meta http-equiv=”Cache-Control” content=”no-cache”/>

<meta http-equiv=”Expires” content=”0″/>

<meta http-equiv=”Pragma” content=”no-cache”/>

</head>

<body>

<%

     Connection conn = null;

     try {

          String DB_HOST = “jdbc:oracle:thin:@192.168.219.53:1521:mypdb”;

          // 아이피, 포트, 서비스(SID) 정보를 수정, PDB인 경우 PDB명

          String DB_USER = “mypuser01”; // 아이디(유저) – 11g 이상시 대소문자 구분 확인

          String DB_PASS = “oracle123”; // 패스워 – 11g 이상시 대소문자 구분 확인

          Class.forName(“oracle.jdbc.driver.OracleDriver”);

          conn = DriverManager.getConnection(DB_HOST, DB_USER, DB_PASS);

          out.println(“연결성공!”);

} catch (ClassNotFoundException e) {

          out.println(“연결 드라이버 없음”);

} catch (SQLException e) {

          out.print(“연결실패 : “);

          if(e.getMessage().indexOf(“ORA-28009”) > -1)

                  out.println(“허용되지 않는 접속 권한 없음”);

          else if(e.getMessage().indexOf(“ORA-01017”) > -1)

                  out.println(“유저/패스워드 확인”);

          else if(e.getMessage().indexOf(“IO”) > -1)

                  out.println(“IO – 연결확인!”);

     else

          out.println(“기본 연결확인!”);

} finally {

     if(conn != null)

            conn.close();}

%>

</body>

</html>

그리고 웹브라우저에서 oracle 접속 테스트 용 JSP 페이지를 호출한다.

접속에 실패하면 소스 상에서 볼 수 있듯 각 단계별로 원인을 찾기 쉽도록 다른 에러메시지를 출력하도록 하고 있다.

만약 에러가 발생한다면 oracle 12c의 listener.ora 파일에서 아래의 노란색 점선 상자의 내용을 추가하고 리스너를 재구동한 뒤 접속해봐야 한다.

#tomcat_oracle_연동 #tomcat_oracle_jdbc

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Scroll to Top