최근 학원에서 JSP로 CRUD를 본격적으로 시작하였다.
내용도 복잡해진 만큼 스터디그룹에서도 조금 더 어려운 내용으로 만들어 보기로 하여 멤버각자 프로그램을
만들어 보고 있다.
나는 이번기회에 프로그램도 만드는 김에 도커로 jdbc로 오라클 db가 연결된 tomcat서버에
만든 프로젝트를 올려보기로 했다.
이번 배포의 목적은 다음글에서 정리하기로 하고 외부 톰캣서버(AWS와 같은 환경)에
톰캣 jdbc를 연동시켜 보겠다.
우선 알아야할 것은 도커는 공인 ip와 서브 ip로 나뉜다.
자세히 공부한 것이 아니라 이번에 서버를 구축하면서 알게 된 선에서 말하겠다.
공인 ip는 통신사에서 부여되는 ip이며 서브(sub) ip는 간단히 말하면 가상 ip와 같은 개념이다.
당연한 말이지만 도커에서는 컨테이너를 만들면 서브(내부)ip가 각각 부여된다.
같은 서버에서 2개의 서버를 연결시키려고 할 때 외부ip로 접속하려고 하면 당연히 접속되지 않을 것이다.
도메인으로는 접속하면 도메인주소는 불러올 수 없다는 에러가 난 것을 봐서는 DNS서버 자체를 불러올수 없는 것
같았다.
그렇기에 무조건 도커 내에서 서로 서버를 동기화시키려면 내부 ip끼리 연결시켜줘야 한다. 당연히 그러기 위해서는
각각의 서버세팅이 필요하다.
우선 톰캣서버의 세팅을 보자
메인서버의 ssh에 접속하여 아래 명령어를 입력하면
docker ps
실행 중인 컨테이너 정보가 뜰 것이다. 그중 컨테이너의 id를 복사하여 아래 명령어를 넣으면
docker exec -it [도커 컨테이너 id] bash
컨테이너 서버에 접속이 된다.
/usr/local/tomcat/conf#
위 방법으로 톰캣서버에 접속을 했다면 위 경로로 들어가서
web.xml과 context.xml을 수정해줘야 한다.

web.xml은 내용이 많다. 그러니 다른 거 보지 말고 가장 아래로 내려가
resource-ref부터 4줄을 입력한다.

이게 가장 중요할 것이다. jdbc서버를 여기서 지정해줘야 한다.
다른 것 다 따랐으면 되지만 url은 반드시 개인도 커의
docker inspect [오라클 컨테이너 id]
위 명령어를 이용해서 ip address를 반드시 확인해야 한다.
이렇게 수정을 했으면 톰캣설정은 끝이다.
필요한 설정인지는 모르겠지만 jdbc를 사용한다면 ojdbc.jar 파일을 이클립스 프로젝트의 lib폴더에 넣어놨을 것이다.
그 jar파일을 서버에 넣고(WAR파일을 배포하면 압축 풀림) 톰캣 bash에 접속한 다음 lib폴더에 복사해 준다.
반드시 이클립스에서 잘 작동되는지 확인하고 서버에 넣기를 바란다.
다음은 오라클설정이다.
오라클 설정을 제대로 하지 않으면
가장 대표적인 오류로
caused by: java.net.connectexception: connection refused
connection refused, socket connect lapse
java.sql.sqlrecoverableexception: io error: the network adapter could not establish the connection
이렇게 세 가지가 있다.
위에서부터 살펴보면 connection refused는 서버가 접속을 거부했다는 건데
포트나 내부 ip가 잘못되었을 때 이렇게 뜬다.
외부 ip로 접속하면 당연히 신호조차도 가지 않는다.
두 번째는 같은 맥락이다.
이번 오류를 찾아낼 때 가장 큰 단서가 된 것은 세 번째 오류이다.
network adapter colud not establish the connection 즉 네트워크 어뎁터의 연결이 구축되지 않았다
추론해 보면 오라클의 어떤 네트워크 설정이 설정되어 있지 않아서 접속이 거부되고 있다는 것으로 추측하였고
그것이 정답이었다.
일단 docker ps로 컨테이너 id를 찾고
su oracle
오라클에 접속 한 다음 위 코드로 oracle계정으로 로그인한다
cd $ORACLE_HOME
그리고 오라클의 HOME주소로 이동한다
/opt/oracle/product/18c/dbhomeXE/network/admin
이어서 위 주소(서버마다 18c부분과 dbhomeXE의 이름은 다름)로 이동하여
listener.ora와 tnsnames.ora 파일을 수정해줘야 한다.
# listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = XE)
(ORACLE_HOME = /opt/oracle/product/18c/dbhomeXE)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
)
)
listener.ora에서 만약 본인이 17~21c버전이라면 위 코드를 복붙하고 위 ORACLE_HOME의 경로와
HOST의 ip주소(오라클 내부 ip)만 수정해도 문제없을 것이다.
다음은 tnsnames.ora이다
이 파일은

HOST 2개의 ip만 오라클 내부 ip로 바꿔주면 끝이다.
그다음 아래 명령어를 입력하고
bin/sqlplus / as sysdba
SQL문으로 들어가서
connection과 각종 권한을 주면 된다.
이렇게 톰캣 jdbc연동방법을 정리해 보았다.
정리해 보면 간단해 보이지만 이 중 하나의 설정만 빠져도
수도 없이 에러메시지가 떴었다.
3일 동안 정말 스트레스를 받아가면서 알아낸 정보다.
이제 Spring을 공부할 때까지 서버설정을 만 질 일은 없으니
jsp파일이 완성될 때마다 올려보고 이상이 없나 테스트를 해 볼 생각이다.
그럼 서버는 당분간 마무리하는 걸로 하고 여기서 마치겠다.
'개인 서버(도커등)' 카테고리의 다른 글
국비교육생 추천!! 스프링 프레임워크 + 깃허브액션 CI/CD 파이프라인 배포 (2) (깃허브 액션 구성) (0) | 2023.10.03 |
---|---|
국비교육생 추천!! 스프링 프레임워크 + 깃허브액션 CI/CD 파이프라인 배포 (1) (공부일지, gradle빌드) (2) | 2023.10.03 |
시놀로지 도커 Tomcat8.5 서버구축 (0) | 2023.05.07 |
도메인을 시놀로지 Web Station의 하위폴더에 연결하기 (0) | 2023.04.23 |
도커 오라클 리눅스 18c 샘플스키마 설치 (0) | 2023.04.19 |
최근 학원에서 JSP로 CRUD를 본격적으로 시작하였다.
내용도 복잡해진 만큼 스터디그룹에서도 조금 더 어려운 내용으로 만들어 보기로 하여 멤버각자 프로그램을
만들어 보고 있다.
나는 이번기회에 프로그램도 만드는 김에 도커로 jdbc로 오라클 db가 연결된 tomcat서버에
만든 프로젝트를 올려보기로 했다.
이번 배포의 목적은 다음글에서 정리하기로 하고 외부 톰캣서버(AWS와 같은 환경)에
톰캣 jdbc를 연동시켜 보겠다.
우선 알아야할 것은 도커는 공인 ip와 서브 ip로 나뉜다.
자세히 공부한 것이 아니라 이번에 서버를 구축하면서 알게 된 선에서 말하겠다.
공인 ip는 통신사에서 부여되는 ip이며 서브(sub) ip는 간단히 말하면 가상 ip와 같은 개념이다.
당연한 말이지만 도커에서는 컨테이너를 만들면 서브(내부)ip가 각각 부여된다.
같은 서버에서 2개의 서버를 연결시키려고 할 때 외부ip로 접속하려고 하면 당연히 접속되지 않을 것이다.
도메인으로는 접속하면 도메인주소는 불러올 수 없다는 에러가 난 것을 봐서는 DNS서버 자체를 불러올수 없는 것
같았다.
그렇기에 무조건 도커 내에서 서로 서버를 동기화시키려면 내부 ip끼리 연결시켜줘야 한다. 당연히 그러기 위해서는
각각의 서버세팅이 필요하다.
우선 톰캣서버의 세팅을 보자
메인서버의 ssh에 접속하여 아래 명령어를 입력하면
docker ps
실행 중인 컨테이너 정보가 뜰 것이다. 그중 컨테이너의 id를 복사하여 아래 명령어를 넣으면
docker exec -it [도커 컨테이너 id] bash
컨테이너 서버에 접속이 된다.
/usr/local/tomcat/conf#
위 방법으로 톰캣서버에 접속을 했다면 위 경로로 들어가서
web.xml과 context.xml을 수정해줘야 한다.

web.xml은 내용이 많다. 그러니 다른 거 보지 말고 가장 아래로 내려가
resource-ref부터 4줄을 입력한다.

이게 가장 중요할 것이다. jdbc서버를 여기서 지정해줘야 한다.
다른 것 다 따랐으면 되지만 url은 반드시 개인도 커의
docker inspect [오라클 컨테이너 id]
위 명령어를 이용해서 ip address를 반드시 확인해야 한다.
이렇게 수정을 했으면 톰캣설정은 끝이다.
필요한 설정인지는 모르겠지만 jdbc를 사용한다면 ojdbc.jar 파일을 이클립스 프로젝트의 lib폴더에 넣어놨을 것이다.
그 jar파일을 서버에 넣고(WAR파일을 배포하면 압축 풀림) 톰캣 bash에 접속한 다음 lib폴더에 복사해 준다.
반드시 이클립스에서 잘 작동되는지 확인하고 서버에 넣기를 바란다.
다음은 오라클설정이다.
오라클 설정을 제대로 하지 않으면
가장 대표적인 오류로
caused by: java.net.connectexception: connection refused
connection refused, socket connect lapse
java.sql.sqlrecoverableexception: io error: the network adapter could not establish the connection
이렇게 세 가지가 있다.
위에서부터 살펴보면 connection refused는 서버가 접속을 거부했다는 건데
포트나 내부 ip가 잘못되었을 때 이렇게 뜬다.
외부 ip로 접속하면 당연히 신호조차도 가지 않는다.
두 번째는 같은 맥락이다.
이번 오류를 찾아낼 때 가장 큰 단서가 된 것은 세 번째 오류이다.
network adapter colud not establish the connection 즉 네트워크 어뎁터의 연결이 구축되지 않았다
추론해 보면 오라클의 어떤 네트워크 설정이 설정되어 있지 않아서 접속이 거부되고 있다는 것으로 추측하였고
그것이 정답이었다.
일단 docker ps로 컨테이너 id를 찾고
su oracle
오라클에 접속 한 다음 위 코드로 oracle계정으로 로그인한다
cd $ORACLE_HOME
그리고 오라클의 HOME주소로 이동한다
/opt/oracle/product/18c/dbhomeXE/network/admin
이어서 위 주소(서버마다 18c부분과 dbhomeXE의 이름은 다름)로 이동하여
listener.ora와 tnsnames.ora 파일을 수정해줘야 한다.
# listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = XE)
(ORACLE_HOME = /opt/oracle/product/18c/dbhomeXE)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
)
)
listener.ora에서 만약 본인이 17~21c버전이라면 위 코드를 복붙하고 위 ORACLE_HOME의 경로와
HOST의 ip주소(오라클 내부 ip)만 수정해도 문제없을 것이다.
다음은 tnsnames.ora이다
이 파일은

HOST 2개의 ip만 오라클 내부 ip로 바꿔주면 끝이다.
그다음 아래 명령어를 입력하고
bin/sqlplus / as sysdba
SQL문으로 들어가서
connection과 각종 권한을 주면 된다.
이렇게 톰캣 jdbc연동방법을 정리해 보았다.
정리해 보면 간단해 보이지만 이 중 하나의 설정만 빠져도
수도 없이 에러메시지가 떴었다.
3일 동안 정말 스트레스를 받아가면서 알아낸 정보다.
이제 Spring을 공부할 때까지 서버설정을 만 질 일은 없으니
jsp파일이 완성될 때마다 올려보고 이상이 없나 테스트를 해 볼 생각이다.
그럼 서버는 당분간 마무리하는 걸로 하고 여기서 마치겠다.
'개인 서버(도커등)' 카테고리의 다른 글
국비교육생 추천!! 스프링 프레임워크 + 깃허브액션 CI/CD 파이프라인 배포 (2) (깃허브 액션 구성) (0) | 2023.10.03 |
---|---|
국비교육생 추천!! 스프링 프레임워크 + 깃허브액션 CI/CD 파이프라인 배포 (1) (공부일지, gradle빌드) (2) | 2023.10.03 |
시놀로지 도커 Tomcat8.5 서버구축 (0) | 2023.05.07 |
도메인을 시놀로지 Web Station의 하위폴더에 연결하기 (0) | 2023.04.23 |
도커 오라클 리눅스 18c 샘플스키마 설치 (0) | 2023.04.19 |