앞의 포스트에서 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 run 명령으로 tomcat 이미지를 최초 실행시켜 컨테이너를 만든다.
옵션으로 백그라운드 실행 ( -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 에 설정되어 있다.
없으니…만들어 준다. ( 왜 없지??? )
테스트 용으로 접속 시간을 알려주는 JSP 소스를 기본페이지 파일명인 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 다.
Oracle 12c 버전의 JDBC Driver를 다운로드 받아 아래화면처럼 Tomcat Container 내 CATALINA_HOME/lib에 복사해 넣는다. (다운로드는 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