IT/Project

Cafe24로 Java Spring Boot 프로젝트 배포하기

iamhyeon 2025. 3. 17. 15:37

2025.03.16 - [IT/IT] - 웹 어플리케이션 : 웹 서버, WAS, 웹 컨테이너

 

웹 어플리케이션 : 웹 서버, WAS, 웹 컨테이너

🖥️ 정적 페이지  Static Pages- 데이터베이스에서 정보를 가져오거나 등 별도의 서버에서의 처리가 없어도, 사용자들에게 보여줄 수 있는 페이지.- 어떠한 사용자가 오던간에 동일한 페이지

iamsh.tistory.com

 

Cafe24

- 웹 호스팅 서비스를 제공하는 플랫폼으로, 웹사이트를 운영할 수 있도록 서버 공간을 대여해주는 서비스

- 웹 호스팅 (Web Hosting) 제공  :  서버를 직접 구축하지 않고, 웹사이트를 운영할 수 있도록 지원

- PHP, JSP, Java 기반 서비스 지원 

- Tomcat(Web Container)을 기본적으로 제공  :  Java 기반 웹 어플리케이션을 실행할 수 있는 환경 제공

 

웹 호스팅 대표 사이트

https://hosting.cafe24.com/ 

 

 

Tomcat

- Apache 소프트웨어 재단의 웹 어플리케이션 서버 (Web Application Server, WAS)

- Java 서블릿을 실행시키고 JSP코드가 포함되어 있는 동적 웹 페이지를 구동시켜주는 프로그램

- Java 기반 웹 어플리케이션을 실행하는 웹 컨테이너

- Servlet과 JSP를 실행할 수 있다 

- Java 웹 어플리케이션을 실행할 수 있는 서버 역할을 한다 


 

➡️ Spring Boot 프로젝트 배포 과정 ⬅️

 

 

📁 build.gradle

 

✅ build.gradle 파일의 plugins에 id 'war' 를 추가한다

 

- Spring Boot 프로젝트를 배포할 때, 실행 파일을 만들려면 JAR 또는 WAR 파일로 패키징해야 한다
- JAR (Java Archive) 파일
   - 일반적인 Java 프로그램 실행 파일
   - Spring Boot 내장 Tomcat 포함 → 서버 없이 독립 실행 가능
- WAR (Web Application Archive) 파일
   - 웹 애플리케이션 배포용 파일
   - Tomcat과 같은 웹 컨테이너가 필요함
   - web.xml 또는 SpringBootServletInitializer가 포함됨
=> JAR: 단독 실행 가능 (Spring Boot 내장 Tomcat 포함)
=> WAR: 웹 컨테이너(Tomcat)에서 실행됨 (Cafe24 같은 호스팅 환경에 적합)

 

- Cafe24에서는 Tomcat(Web 컨테이너)가 미리 설치되어 있기 때문에 Spring Boot 내장 Tomcat을 사용할 수 없다
   → 따라서 WAR 파일을 만들어서 Cafe24의 Tomcat에서 실행해야 한다

✅ build.gradle 파일에 드래그한 부분을 추가한다

 

providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
- 이 설정은 Spring Boot 애플리케이션을 WAR 파일로 패키징할 때, Tomcat을 'providedRuntime'으로 설정하는 역할을 한다
- Spring Boot는 기본적으로 내장된 톰캣을 사용하여 애플리케이션을 실행한다
- WAR 파일로 패키징할 경우, 호스팅 서버의 톰캣이 애플리케이션을 실행하게 된다 
- 내장 톰캣을 포함할 필요가 없고, 서버에서 제공하는 톰캣을 사용해야 한다
- providedRuntime으로 설정하면 빌드할 때는 Tomcat이 포함되지 않지만, 실행할 때는 서버에서 제공하는 톰캣을 사용하게 된다
- providedRuntime을 사용하면 불필요한 Tomcat 라이브러리가 포함되지 않아 WAR 파일 크기가 작아진다 

bootWar { ... } 설정
- Spring Boot에서 WAR 파일을 빌드할 때 사용하는 설정
archiveBaseName = 'ROOT'
   - WAR 파일의 기본 이름을 "ROOT"로 설정
   - Tomcat에서는 기본적으로 ROOT.war라는 이름의 파일을 루트 경로 (/)에 자동 배포
   => 즉, http://mydomain.com 으로 접속할 수 있다

   => ROOT.war로 설정하면 서브경로 없이 바로 실행 가능하다
   - 만약 파일명이 myapp.war라면 http://mydomain.com/myapp이 된다
- archiveFileName = 'ROOT.war'
   - 생성되는 파일 이름을 ROOT.war로 설정
   - 보통 build/libs 폴더에 생성된다
- archiveVersion = '0.0.1'
   - WAR 파일의 버전을 0.0.1로 설정
   - 하지만 ROOT.war로 설정했기 때문에 실제 파일 이름에는 버전이 붙지 않는다

 

bootWar.enabled = true
- Spring Boot의 bootWar 작업을 활성화하여 Spring Boot 스타일의 WAR 파일을 생성한다
- Spring Boot의 내장 실행 환경(예: org.springframework.boot.loader.Launcher)을 포함한 독립 실행 가능한 WAR 파일을 생성할 수 있다

war.enabled = false
- 기본적인 Java EE 표준의 war 패키징을 비활성화한다
- war 플러그인은 일반적으로 서블릿 컨테이너(Tomcat, WildFly, WebLogic 등)에서 실행될 WAR 파일을 만들 때 사용된다 
- Spring Boot 스타일이 아닌, 전통적인 WAR 파일을 만들지 않도록 설정하는 것


 

📁 *Application.java

 

✅ *Application.java 파일에 SpringBootServletInitializer 상속

 

SpringBootServletInitializer
- Spring Boot에서 WAR 파일을 생성하고 외부 Tomcat(WebLogic, JBoss 등)에 배포할 때 필요한 클래스
- SpringBootServletInitializer를 상속하면 Spring Boot 애플리케이션을 기존의 서블릿 기반 애플리케이션처럼 동작할 수 있도록 설정할 수 있다
- Spring Boot의 내장 톰캣을 사용하지 않고, web.xml 없이 애플리케이션을 실행할 수 있게 해준다

- 일반적으로 main() 메서드를 실행하면 Spring Boot가 내장된 웹 서버(Tomcat 등)를 사용하여 자동으로 애플리케이션을 실행한다
- WAR 패키징 시에는 서블릿 컨테이너(Tomcat, WebLogic 등)에서 실행되므로, 내장 서버를 사용할 수 없다.
- SpringBootServletInitializer를 상속하여 외부 서블릿 컨테이너 환경에서 실행될 수 있도록 설정해야 한다.

 

configure() 메서드

- 서블릿 컨테이너에서 실행될 때 호출된다
- SpringApplicationBuilder를 사용하여 애플리케이션의 진입점을 설정한다
- 이 코드가 없으면 외부 WAS에서 Spring Boot 애플리케이션을 실행할 수 없다

- 내장 톰캣을 사용하지 않고, 기존 서블릿 컨테이너에서 실행하는 Spring Boot 애플리케이션을 만들 때 필수적인 설정이다

 


 

📁 applicaton.properties

 

✅ applicaton.properties  설정 변경

 

파랑색: 로컬환경 ❘ 빨간색: 웹 호스팅 환경

 데이터베이스 접속 정보 변경

- spring.datasource.password  <=  `FTP,SSH,DB 비밀번호`

 

파랑색: 로컬환경 ❘ 빨간색: 웹 호스팅 환경
✅ 원격 호스팅 서버에 업로드 디렉토리 만들기

 업로드 이미지 경로 변경


 

📁 logback-spring.xml

 

파랑색: 로컬환경 ❘ 빨간색: 웹 호스팅 환경
✅ 원격 호스팅 서버에 로그 디렉토리 만들기

 로그 경로 변경

- 일반적으로 웹 호스팅 환경에서는 절대 경로를 사용하는 것이 좋다

- LOG_PATH   <=   /`아이디`/`로그 디렉토리`


✅ 프로젝트 패키징 

- 이전에 깔아뒀던 VSCode 익스텐션

- Gradle 프로젝트를 관리하고 빌드 작업을 수행하기 위해 사용하는 익스텐션
- Gradle 탭 열기: GRADLE PROJECTS 섹션에서 프로젝트를 확장
  Tasks > build > bootWar를 클릭하여 작업 실행

Spring Boot 애플리케이션의 WAR 파일 생성

- 프로젝트를 패키징하여 배포 가능한 WAR(Web Application Archive) 파일을 생성하는 과정

 

다른방법)  터미널에서 Gradle 명령어 실행
- 프로젝트의 루트 디렉토리로 이동
- 다음 명령어 실행

[mac]
./gradlew bootWar

[windows]
./gradlew.bat bootWar

 

 

- 빌드 과정: Gradle은 프로젝트의 소스 코드, 리소스 파일, 의존성 등을 컴파일하고 패키징한다
- WAR 파일 생성: libs 디렉토리에 WAR 파일이 생성된다. ⬇️

 


 

✅ cafe24 서비스 결제

 

https://hosting.cafe24.com/

✅ 웹호스팅 > 개발 언어별 호스팅

✅ 비즈니스 선택

<= 웹, 트래픽 용량 고려

- Tomcat 10부터는 Servlet 5.0과 Jakarta EE 9 표준을 지원한다.
- 기존 Java EE API가 Jakarta EE로 변경되었으며, 이를 지원하는 최신 버전의 WAS(Web Application Server)가 필요하다
- Spring Boot 3는 Jakarta EE 9 이상을 요구하기 때문에, Tomcat 10이 적합하다

 

- Spring Boot 3부터는 Servlet 5.0 이상이 필요하다
- JSP 3.0 및 Servlet 5.0을 선택하면, 최신 Spring Boot 환경과 원활한 연동이 가능하다
- Servlet 5.0은 비동기 프로세싱 및 보안 개선이 이루어진 버전이기 때문에, 성능 및 안정성이 향상된다

 

- Spring Boot 3는 Java 17 이상을 요구한다
- 최신 Java 버전에서는 가비지 컬렉션(GC) 성능 개선 및 보안 패치가 이루어져 더욱 안정적이다
- JDK 17은 LTS(Long-Term Support, 장기 지원) 버전이므로 유지보수 측면에서 유리하

 

- MariaDB는 MySQL과 호환성이 뛰어난 오픈소스 데이터베이스이다

- UTF-8을 지원하므로 다국어 데이터 처리 및 웹 애플리케이션에서의 호환성이 뛰어나다
- MariaDB 10.1은 비교적 안정적인 버전이며, 기본적인 트랜잭션 관리 및 성능 최적화 기능을 제공한다

 

결제 후, 정보 확인

✅ 나의서비스관리 > 서비스 접속관리 > 서비스 접속정보

 

✅ 원격 서버 접속

ssh `아이디`@`도메인주소` -p`포트번호`

- ssh : SSH 프로토콜을 사용하여 원격 접속을 수행하는 명령어

- 기본포트인 경우 "-p포트번호" 생략 가능

 

더보기
더보기

SSH(Secure Shell)란?
- SSH(Secure Shell)는 네트워크를 통해 원격 컴퓨터에 안전하게 접속하는 프로토콜이다
- 인터넷 환경에서 데이터를 암호화하여 안전한 원격 접속을 제공하며, 주로 서버 관리 및 파일 전송 등에 사용된다

 

보안성이 높다
- 암호화된 데이터 전송을 사용하여 패스워드, 명령어, 파일이 유출되지 않는다
- 해커가 네트워크 패킷을 감청(스니핑)하더라도 내용을 알아볼 수 없다

 

원격 서버에 접속 가능하다
- 인터넷이 연결된 상태에서 어디서든 서버를 관리할 수 있다
- 웹 호스팅, 클라우드 서버(AWS, Google Cloud, Azure 등)에서 필수적으로 사용된다

 

파일 전송 지원
- SCP(Secure Copy), SFTP(Secure File Transfer Protocol) 등을 이용하여 파일을 주고받을 수 있다

 

포트 포워딩 가능
- 터널링(Tunneling) 기능을 제공하여, 원격 서버의 포트를 로컬에서 사용할 수 있다 

SSH 접속 과정
- 명령어 실행 → SSH 클라이언트가 원격 서버에 접속 요청
- 비밀번호 입력 요청    ( password :  비밀번호 : (FTP,SSH,DB 비밀번호) )
- 인증 완료 후 접속 성공


 

https://filezilla-project.org

👩🏼‍💻 FileZilla
- FileZilla는 FTP(File Transfer Protocol), SFTP(Secure File Transfer Protocol) 및 FTPS(FTP Secure) 를 지원하는 무료 오픈소스 파일 전송 클라이언트 및 서버 소프트웨어이다 
- 원격 서버와 로컬 컴퓨터 간에 파일을 손쉽게 전송할 수 있다.

 

✅ FileZilla 로 원격 서버에 파일 전송하기 

 

✅ 서버 연결하기 

호스트 : iamhyeon97315@sonystore.shop (아이디@도메인주소)

사용자명 : iamhyeon97315 (아이디)

비밀번호 : (FTP,SSH,DB 비밀번호)

포트 생략가능

입력 후, 빠른 연결 클릭

 

✅ ROOT.war 배포

- /tomcat/webapps/ 디렉토리에 파일 전송

- Tomcat 서버가 웹 애플리케이션을 배포(deploy)하는 기본 폴더
- Tomcat이 실행될 때, 이 폴더 안의 .war 파일을 자동으로 압축 해제(Deploy) 하여 실행한다
- 기본적으로 webapps 폴더에 .war 파일을 넣으면, Tomcat이 이를 인식하고 해당 애플리케이션을 자동으로 실행한다 

 

✅ (FileUpload)에 프로젝트에 필요한 이미지 등의 파일들 전송

 

✅ DB 백업하여 원격 서버에 넣기

 

✅ 원격 서버에서 DB 복원하기

 

✅ 원격 서버에서 DB 확인 


 

✅ http://도메인주소  로 접속해서  프로젝트가 제대로 실행되는지 확인.

 

 

반응형