서비스 규모를 생각해서 나중에 업그레이드 하더라도 낮은 것으로 하는 것이 좋겠다는 생각이 들어서 카페24 Tomcat JSP 호스팅을 사용했다.

 

Step1. 일단 배포하는 과정은 AWS 배포과정과 거의 동일하다. 


로그인 아이디는 카페24 호스팅 사이트 아이디와 로그인 비밀번호는 처음 등록한 FTP 비밀번호로 Putty에 등록한다는 것의 차이만 있을 뿐이다. 클라우드 서버를 이용한 배포와 달리 별도 서버 private key 등록은 필요없다.

 

내가 사용한 호스팅 상품은 별도의 재배포 비용이 발생하지 않고, 무료 도메인이 주어진다.

 

ROOT 내 기본 index.jsp 파일이 있음으로 무료 도메인으로 들어가서 화면에 '서비스 가입을 진심으로 축하드립니다'라는 문구가 뜨는지 확인해보자.

(크롬에서 자동으로 https://로 연결되므로 http://로 변경해줘야 한다.)

 

 

배포시 많이 사용하게 될 코드

카페24에 어차피 한 개의 프로젝트를 배포하므로 ROOT.war로 배포처리해서 별도로 server.xml은 수정하지 않았다.

// 톰캣 로그를 확인하기 위한 코드
tail -f tomcat/logs/catalina.out

// 톰캣 특정날짜(2022-02-18) 로그를 확인하기
vi tomcat/logs/catalina.2022-02-18.log

// 톰캣 server설정확인, / mapping 변경시 등
vi tomcat/conf/server.xml

// 톰캣 시작
./tomcat/bin/startup.sh

// 톰캣 중지
./tomcat/bin/shutdown.sh

 

카페24에 배포시 AWS에서는 아무 문제가 없었던 war파일에서 에러가 발생했고 몇 가지 기억을 위해 정리해보고자 한다.

1. LifeCycleException

java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[cdental].StandardHost[cdental.cafe24.com].StandardContext[]]
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:757)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:729)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
	at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:974)
	at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1850)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)

 

war 파일 압축을 풀고 tomcat으로 띄우는 과정에서 발생한 에러이므로 servlet, mapping, tomcat 등의 이슈인 것이라고 생각되서 관련된 부분이 제대로 설정되어 있는지 확인했다.

  • mapping issue가 발생한 것인지 확인했다. @RequestMapping 에서 연결한 url의 문제가 있을 수도 있다고 해서 mapping 주소 앞에 모두 '/' 처리를 해줬다.
  • 불필요한 캐시를 지움 Invalidate Caches
  • servlet mapping 부분에 오타가 있는지 확인
  • database가 sql-server임을 알도록 application.properties에서 등록
  • ojdbc jar 파일을 tomcat/lib에 추가

 

그래도 해결되지 않고 같은 오류가 발생했는데 원인은 spring-boot-starter-web에 포함된 spring-boot-stater-tomcat을 제외처리하는 것이었다. 스프링부트 내장 tomcat도 있고, 웹호스팅에 설치된 tomcat이 있기 때문이다. application.properties에서 아래 코드를 입력해서 내장 tomcat을 제외했다.

spring.main.web-application-type=none

2. java.lang.OutOfMemoryError: Java heap space

톰캣 heap 메모리가 부족하다는 에러가 발생했다. intelliJ내 build시 기본 heap size 변경으로 해결했다.Settings > Build, Execution, Deployment > Compiler 에서 Shared build process heap size를 기본 700에서 2000으로 변경해주었다.

 

Step2. 도메인을 연결하자!


 

배포는 성공했다. 

너무 UI가 기본이긴 하지만, 내부는 잘 꾸며두었다. 서비스 전 UI에 더 신경을 써야겠다.

 

여기서 고민을 한 부분은 로드밸런서가 필요한가이다.

서비스 사용인원이 다소 적은 편이고 일시에 집중될 가능성이 적어서 로드밸런서의 사용을 일단 피하기로 했다. 일부러 트래픽도 넉넉한 것으로 구매했다. 일단 테스트 서비스를 도입하고 난 뒤에 로드밸런서 연결여부를 확정하기로 했고, 기존에 AWS ACM과 RDS로 연결한 도메인을 cafe24로 등록했다.

 

Step3. 도메인 연결하기


번외 2에 이어서 이미 구입한 AWS 도메인을 카페24에 연결하고자 한다.

웹호스팅 페이지 왼쪽 하단에 있는 웹 호스팅 네임서버를 등록해준다. 그리고 웹 FTP에서 도메인 추가, 대표 도메인 설정을 하면 도메인 연결이 완료된다.

(AWS에서 네임서버는 Route53에 도메인>등록된 도메인 위치에 이름 서버에 등록해준다.)

 

Step4. DB 연결하기


웹 FTP에서 MySQL 외부 IP 접근설정을 추가해준다. 로컬에서 DB 관리를 하고 싶어서 로컬 IP와 서버에서 DB에 접근할 수 있어야 하므로 서버 IP를 등록해주었다.

 


국내 호스팅 업체를 알아보면서 느낀 점은 주로 PHP, TypeScript로의 웹 호스팅 상품은 많은데,

Java 기반 웹사이트를 호스팅하기 위해서는 내가 사용한 상품 외에 국내 호스팅 업체 상품 중에는 컨테이너 또는 클라우드 서버를 이용한 배포가 많다는 것을 알 수 있었다.

JSP는 확실히 intelliJ에서도 기본 지원되지 않고, 구글 검색을 해봐도 점차 줄어드는 추세가 된 것 같다. 나 역시 이번 프로젝트를 JSP 없이 Thymeleaf와 html으로 뷰단을 작성했다.

(하지만 Java를 지원하는 저렴한 국내 웹 호스팅이 없어 Tomcat JSP 서비스를 이용했다. 이전 번외에서 보다시피 국내 top3 웹 호스팅 업체만 분석했다.)

 

2022.02.07 - [Project/AWS RDS를 사용한 예약 프로그램 배포하기] - [예약프로그램] 번외. 현재 클라우드 컴퓨팅을 이용한 호스팅과 국내 호스팅 업체 선택

 

 

도움을 받은 사이트들:

cafe24 war파일 배포 방법

OKKY - 카페24 war 파일 배포 문제

[스프링부트] 프로젝트 카페24에서 호스팅하기

[JSP] 에러 심각: ContainerBase.addChild: start:

OKKY - 스프링부트 프로젝트를 톰캣 8.0으로 배포 시 오류

Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set

[spring] 스프링부트의 내장 WAS 이해와 응용

java.lang.OutOfMemoryError: Java heap space 오류 해결

[ Java _ Tomcat ] [에러] java.lang.OutOfMemoryError: Java heap space 해결하기. : 네이버 블로그

IntelliJ(with gradle) 에서 JAVA 개발환경 – Mayaul

 

댓글