남들은 쉽게 해결하던데 나는 이틀이나 걸렸다!
그래도 결국 해결책을 찾긴 찾았기에 적어보기로 한다.
결과적으로 sts / 스프링부트 / 자바8 / 타임리프 / 마리아DB / JPA / gradle / yml 을 이용하였다.
카페 24의 Tomcat JSP호스팅 비즈니스 를 사용했고
서버 환경 버전에는
이렇게 세가지가 있다. 버전 선택은 이 글을 끝까지 읽고 본인이 원하는것으로 선택하면 될 것이다.
나는 자바11버전이 익숙해서 자바11버전으로 개발 후 톰캣10을 이용해 배포하려고 했었다.
해결하고 나니 별거 아닌 문제들이였지만 그 당시의 나는 꽤 스트레스를 받았다. 인터넷으로 하라는대로 하는데 안되니까 ㅎ
bulid.gradle 파일안에 플러그인에 [ id 'war' ] 를 추가하여 war 파일을 만들 수 있게 설정해주자.
plugins {
id 'java'
id 'war'
id 'org.springframework.boot' version '2.7.8'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
bulid.gradle 파일안에 dependencies 에 작성해준다. (war 사용시에만 가능)
providedRuntime는 runtime 시에만 실행되고 실행환경에서 제공되는 dependency를 설정한다.
메이븐에서는 아래를 추가해준다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
sourceCompatibility = '1.8'
// 자바 8버전의 경우 '1.8'
// 자바 11버전의 경우 '11'
// 자바 17버전의 경우 '17' 을 입력해준다.
main class가 있는 곳 하위에 컨트롤러가 잘 들어가있는지도 확인하자
이런식으로 메인클래스가 있는 패키지 하위에 컨트롤러가 위치해야 한다.
또한 메인클래스에 SpringBootServletInitializer를 상속해주자.
@SpringBootApplication
public class 메인클래스명 extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
// TODO Auto-generated method stub
return builder.sources(메인클래스명.class);
}
public static void main(String[] args) {SpringApplication.run(메인클래스명.class, args);}
}
https://blog.itcode.dev/posts/2022/02/12/tomcat-9-and-10
결론적으로 톰캣10버전에서는 javax 를 인식하지 못하기때문에 war 파일을 webapps가 아닌 webapps-javaee 로 담아 실행하면 되는것같다. 실행해보지는 않았다.
나의 경우에는 자바11로 개발 당시 javax를 이용해 코드를 작성했고 그걸 톰캣10버전에 webapps에 올리다보니 404에러가 계속 발생하였다.
자바17을 사용하면 javax가 아닌 jakarta*를 자동으로 사용한다.
spring:
datasource:
1 ) url: jdbc:mariadb://카페24 호스팅아이디.cafe24.com:3306/카페24 호스팅아이디
2 ) url: jdbc:mariadb://localhost:3306/카페24 호스팅아이디
username: 카페24 호스팅아이디
password: DB비밀번호
driver-class-name: org.mariadb.jdbc.Driver
yml파일에 디비를 연동해야한다.
1) 로컬(내 컴퓨터) 에서 사용하는 url 경로이다.
2) 배포(카페24서버)에 올릴때 사용하는 url 경로이다.
프로젝트 오른쪽마우스 클릭 -> run As ->run configurations -> Gradle Task 더블 클릭
이렇게 창이 열린다.
Gradle Tasks에 Add 버튼을 눌러 task가 생기면 클랙해서 war로 변경해준다.
그 후에 Working Directory에 workspace를 등록해 내가 war파일로 만들 프로젝트를 선택해준다
프로젝트를 선택하면 run 버튼이 활성화되고 run 버튼을 클릭하게되면 war파일이 생성된다.
프로젝트\build\libs 안에 war 파일이 만들어져 있다.
file zila를 사용해 서버에 war 파일을 올려준다.
다운받은 후 실행한 뒤 버튼을 클릭하여 서버에 연결해준다.
아이디와 비밀번호 입력 후 연결해준다
톰캣 하위의 webapps 파일에 ROOT.war 파일을 넣어준다.
드래그 앤 드롭으로 가능하다.
ROOT.war를 넣으면 톰캣이 자동으로 압축을 풀어준다. 당장 ROOT파일이 보이지 않아도 만들어져있으니 당황하지 말자.
PuTTy를 이용하여 서버를 재시작한다.
서버를 재 시작해야 ROOT파일이 제대로 열린다.
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
카페24도메인을 입력한다. [ 카페24ID.cafe24.com ]
open을 입력하면
창이뜨고 login as : 카페24 아이디 (엔터)
비밀번호 하라고 나오는데 키보드를 입력해도 보이는것은 없다. 그래도 잘 입력되고 있으니 괜찮다.
비밀번호를 여러번 틀려도 기회를 계속 주니 걱정하지말고 입력하자!
완료되면 로그인한 날짜와 시간이 나온다.
~/tomcat/bin/shutdown.sh // 서버종료
~/tomcat/bin/startup.sh // 서버시작
차례로 입력해주면 서버가 종료됐다 재시작 되며 ROOT.war 파일을 인식해
카페24도메인에 접속이 가능해진다!