2025.03.16 - [IT/IT] - 웹 어플리케이션 : 웹 서버, WAS, 웹 컨테이너
웹 어플리케이션 : 웹 서버, WAS, 웹 컨테이너
🖥️ 정적 페이지 Static Pages- 데이터베이스에서 정보를 가져오거나 등 별도의 서버에서의 처리가 없어도, 사용자들에게 보여줄 수 있는 페이지.- 어떠한 사용자가 오던간에 동일한 페이지
iamsh.tistory.com
Cafe24
- 웹 호스팅 서비스를 제공하는 플랫폼으로, 웹사이트를 운영할 수 있도록 서버 공간을 대여해주는 서비스
- 웹 호스팅 (Web Hosting) 제공 : 서버를 직접 구축하지 않고, 웹사이트를 운영할 수 있도록 지원
- PHP, JSP, Java 기반 서비스 지원
- Tomcat(Web Container)을 기본적으로 제공 : Java 기반 웹 어플리케이션을 실행할 수 있는 환경 제공
웹 호스팅 대표 사이트
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 서비스 결제
✅ 웹호스팅 > 개발 언어별 호스팅
✅ 비즈니스 선택
<= 웹, 트래픽 용량 고려
- 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 비밀번호) )
- 인증 완료 후 접속 성공
👩🏼💻 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://도메인주소 로 접속해서 프로젝트가 제대로 실행되는지 확인.