처음엔 IDE 내부에 있는 Console 창에 뜨는 출력 결과만 봐도 좋았다.
그러다 html과 jsp를 사용하니 로컬서버를 통해 웹을 출력하는 것 까지 배우게 되었다.
그러다 보니 욕심이 생겼다.
문득 든 생각은 localhost 라는 것 자체가 자신의 내부 ip를 사용한다는 것인데,
이 내부 ip를 외부ip로 실행을 시키고 그 ip로 도메인을 받게 된다면 주소창에 localhost가 아닌
흔한 www.@@@.@@@ 같은 주소로도 실행할 수 있지 않을까? 라는 생각을 했다.
평소에 IT 기기에 관심이 많아 NAS라는 것을 알고 있다.
쉽게 말해 개인용 웹하드이다.
이 웹하드는 특정 주소를 통해 외부에서 파일을 접근 할 수 있도록 해준다.
그리고 리눅스 기반이고 Docker 또한 사용이 가능한 것을 알고 있었다.
하지만 Docker를 사용해 볼 기회도 없었을 뿐더러 개념 조차 없었다.
처음엔 내 JDK와 tomcat 버전에 맞게끔 빌드를 하여 Docker 이미지화 하여 불러오도록 하려고 했지만
이미 많은 고수분들이 만들어논 이미지가 많이 배포가 되어있는 상황이라 컨테이너 이미지는 다른 분들 것을
사용하는 것으로 합의봤다.
도커를 실행하면 레즈스트리에서 검색이 가능한데 내가 사용하는 버전인 tomcat9를 검색하였더니
jdk와 tomcat9버전이 같이 이미지화 되어있는 것이 많았다.
이렇게 되면 내가 따로 환경변수 설정을 할 필요도 없을 것 같고 tomcat9와 jdk11 기반 이미지를 다운받았다.
이미지를 다운받고 그 이미지를 기반으로 컨테이너를 생성해준다.
그 후 만들어진 컨테이너를 실행하기만 해도 jdk11과 tomcat이 실행이 되는 것이다.
내부 ip로 접속해보면 에러페이지가 반겨준다. 404에러다
이유는 ? 당연히 Tomcat ROOT 경로에 읽어들일 아무 파일이 없어서 뜬 오류다
하단에 확인해보면 Apache Tomcat/9.0.21 버전을 사용한다는 것을 봐서는
서버는 성공적으로 실행된 것을 확인 할 수 있다.
사실 중요한건 지금부터다. 리눅스에 익숙하시거나 Docker를 많이 사용해보신 분들은 당연히 알겠지만 ..
이 땐 bash 명령어를 아주 조금만 알아두면 좋다.
만들어진 tomcat 컨테이너를 선택하고 세부사항을 클릭하게 되면
다음과 같이 해당 컨테이너에 접근이 가능해진다. 이 때 우리는 컨테이너 자체에 명령을 원하는 것이 아니기 때문에
좌측 상단에 생성을 클릭하게 되면 실행되고 있는 tomcat 서버 설정에 대한 명령을 할 수 있다.
( 적어도 내가 해보면서 이해를 한 것은 이정도라 설명이 정확하지 않을 수 있다. )
실행이 된 것은 보면 root 권한으로 tomcat에 대한 접속을 한 것을 확인 할 수 있다.
해당 경로에 있는 파일목록들을 보기 위한 명령어인 ' ls ' 를 입력하면
다음과 같이 익숙한 이름이 보일 것이다. webapps이다.. Eclipse 프로젝트를 만들 때 webapps 를 보았다
해당 폴더로 이동하기 위한 ' cd ' 명령어로 webapps 폴더 안으로 이동해보자
webapps로 이동 후 ' ls ' 를 쳐보니 아무파일도 존재하지 않아 뜨지 않는 것을 볼 수 있다.
위에 페이지로 접속했을 때 오류가 뜨는 이유였던 것이다.
그럼 webapps 에 파일을 넣어주면 읽을 수 있다는 소리다.
그 전에 우리는 Docker에게 webapps경로에 있는 파일을 마운트하라는 명령을 해주어야한다.
실행시켜져 있던 Docker 컨테이너를 중지하고 해당 컨테이너를 클릭 후 편집을 눌러준다.
다음과 같은 설정들을 할 수 있는데 포트 설정은 말 그대로 포트설정이다.
톰캣의 기본포트는 8080이라 컨테이너 포트를 바꾸게 되면 톰캣이 못읽을 것 같아서 8080을 그냥 할당해주었고,
로컬 포트는 외부에서 접속할 때 사용하는 포트를 사용해주면 되고 자동으로 하게 되면 컨테이너를 재시작 할 때마다 새로 할당을 해주어서 고정적으로 포트넘버를 적어주는 것이 좋다.
ex ) 로컬포트 : 8888 / 컨테이너포트 : 8080 (고정추천)
이제 위에서 언급했듯, 어느 경로의 파일을 불러올지 지정을 해주는 과정을 진행할 것이다.
폴더 추가를 선택한 뒤 .war 파일 혹은 다른 .html 파일을 넣을 로컬경로 폴더를 추가해주면 다음과 같이
파일/폴더에 내 공유폴더인 docker/Test 경로에 있는 파일들을 base로 지정한 설정이 만들어진다.
이렇게 내 로컬폴더를 결정해주었으면 tomcat이 읽는 마운트 경로를 작성해주면 된다.
아까 우리가 webapps를 읽게끔 했으니 /usr/local/tomcat/webapps 를 작성
그러면 docker/Test 안에 있는 파일을 tomcat / webapps를 통해 실행하는 설정이 완료되었다.
그 후 docker / Test 폴더에 배포할 프로젝트인 test9.war 파일을 넣고 설정을 끝낸 Docker 컨테이너를 실행하게 되면
아까와 다르게 webapps에 내가 넣은 test9.war 파일을 읽은 것을 확인 할 수 있다!
여기까지 왔으면 반 이상 끝난 것이다.
그 후 docker/Test 폴더로 이동해보면
압축이 풀린 것처럼 test9라는 폴더가 생겼고
다음과 같이 내가 배포한 파일들이 잘 들어온 것을 확인할 수 있다.
그러면 이제 접속이 될까!?
로컬ip주소:포트/index.jsp 에 접속해보자.
ex) 192.168.0.xxx:8888/index.jsp
똑같이 404에러.. 톰캣은 정상적으로 실행되었고 .war파일도 읽어서 해석 할 수 있는데 왜 안뜨는지 구글링을 통해
tomcat 실행확인용 예시를 보니 폴더명이 ROOT인 폴더를 넣었던 것을 확인할 수 있었다.
그렇다면 tomcat은 ROOT폴더 안에 있는 파일들을 읽는 것이지 않을까? 하고 test9폴더 이름을 ROOT로 변경해보았다.
다음과 같이 ROOT로 변경 후 컨테이너 재실행
현재 index.jsp로 접속하면 login.do로 이동되게끔 설정하였기 때문에 index.jsp가 아닌 login.do인 url 주소를 보고 있다.
jsp파일도 잘 읽어왔고 CSS나 JS같은 것도 잘 적용이 된 것을 확인했다.
이 마운트설정과 톰캣의 실행구조를 잘 모르다보니 이 화면을 보는 것만 하는데도 꽤 많은 시간이 걸렸다..
배운것은 tomcat은 실행 시 ROOT 폴더에 파일을 바라보게끔 한다는 것..?
그런데 여기서 끝이 아니였.. 결국 제 기능을 다 사용하려면 DB를 연결해야하는데 DB 연결 때문에 엄청 고생했는데
유입이 많거나 궁금한 사람이 생기면 공개글로 작성하고 관심 없으면 비공개글로 기록글 남겨놓으려고 한다.
'개발자노트 > 혼자 끄적끄적' 카테고리의 다른 글
리액트 - 범위 슬라이더 (0) | 2023.03.28 |
---|---|
인텔리제이 커뮤니티 ( IntelliJ Community) 에서 스프링부트 + npm + node.js + 리엑트 환경 실행 (0) | 2023.01.04 |
기술면접 준비 각 키워드 (0) | 2022.10.30 |
Docker - Tomcat에 SSL 인증서 적용 (.key) , 역방향 프록시 (0) | 2022.10.19 |
Docker Oracle 연결하기 (0) | 2022.10.10 |