프로젝트 배포 방법
스프링 프로젝트를 배포하는 방법은 여러 가지가 있습니다. 일반적으로는 다음과 같은 단계를 따르면 됩니다:
- 프로젝트 빌드: 먼저, 스프링 프로젝트를 빌드해야 합니다. 일반적으로 프로젝트 빌드 도구인 Maven 또는 Gradle을 사용합니다. 프로젝트를 빌드하면 실행 가능한 JAR 파일 또는 WAR 파일이 생성됩니다.
- 프로젝트 구성: 프로젝트를 배포하기 전에 해당 환경에 맞게 프로젝트를 구성해야 합니다. 이는 데이터베이스 연결 설정, 서버 포트 설정 등을 포함합니다. 개발 환경과 운영 환경의 설정이 다를 수 있으므로 주의해야 합니다.
- 서버 선택: 프로젝트를 배포할 서버를 선택해야 합니다. 스프링 애플리케이션은 다양한 서버에서 실행될 수 있습니다. 예를 들어, Apache Tomcat, Jetty, 또는 Spring Boot의 내장 웹 서버를 사용할 수 있습니다.
- 서버에 배포: 빌드된 JAR 파일 또는 WAR 파일을 선택한 서버에 배포합니다. 이를 위해 서버에 SSH(보안 셸) 등을 사용하거나, 배포 도구를 활용할 수 있습니다.
- 서버 설정: 배포한 애플리케이션을 실행하기 위해 서버 설정을 확인해야 할 수도 있습니다. 예를 들어, 서버 포트를 열고 방화벽을 설정해야 할 수 있습니다.
- 서비스 실행: 배포된 애플리케이션을 서버에서 실행합니다. 서버의 로그를 확인하며 문제가 있는지 점검합니다.
- 도메인 연결: 프로젝트를 도메인에 연결하여 외부에서 접근할 수 있도록 설정합니다. 이를 위해 DNS 설정을 변경하거나, 프록시 서버를 사용할 수 있습니다.
- 모니터링 및 유지보수: 프로젝트가 정상적으로 배포되었다면, 이후에도 모니터링과 유지보수를 위해 로그를 확인하고, 시스템 리소스 사용량을 모니터링하는 등의 작업이 필요합니다.
빌드 (Build)
.java 파일을 .class 파일로 컴파일하고, 기존의 파일 저장 형식을 개발형 디렉토리 구조에서 배포용 디렉토리 구조로 만들고, 최종 결과물로 .war 혹은 .jar 확장자를 가진 실행 가능한 배포 파일을 생성하기 위해 수행하는 모든 과정을 말한다.
이 과정에서 테스트 & 테스트 커버리지 체크, 코드 품질 체크와 같은 추가적인 작업도 끼워넣을 수 있다.
배포 (Deploy)
자바 웹 프로젝트를 서버에 올려 작동 가능한 상태로 만드는 것을 말한다.
개발 환경에서만 사용되던 의존성이나 소스코드의 주석과 같은 부분은 보통 배포 과정에서 제거되고, 이용자가 최적의 환경에서 최적의 속도로 이용할 수 있도록 만들어진다.
패키징 유형
패키징이란 보통 프로젝트 실행에 필요한 모든 파일을 한데 묶어 구성하는 것을 말한다.
Package (archive)
프로젝트 배포에 필요한 .war 혹은 .jar 파일을 만드는 것을 말한다.
Maven 프로젝트의 package 라이프사이클을 실행하면 .war 혹은 .jar 파일이 생긴다.
https://jake-seo-dev.tistory.com/123
배포방법
1. tomcat을 설정하여, war파일을 올리면 자동적으로 배포되도록 한다.
- 서버 설정파일에서 별도로 설정해주고, 웹프로젝트를 war로 추출한다.
2. 소스파일 경로에 수정한 파일만을 반영하고, 서버를 재실행한다.
- war로 추출하고 수정된 파일만을 서버에 반영한다. 이후 서버를 재실행한다.
3. 자동 배포 프로그램을 사용한다.
- war로 추출할 필요 없이, git과 같은 소스코드 버전관리 시스템과 젠킨스와 연동하여 자동 배포한다.
아파치(apache)란?
세계에서 가장 많이 쓰는 웹 서버중 하나이며, 아파치 소프트웨어 재단에서 관리하는 HTTP 웹 서버이다.
Apache는 Apache재단에서 만든 HTTP서버로 워낙 다양한 추가기능에, 구축이 쉽다는 이유 때문에 많이 쓰고 있다. 대부분의 중소기업들은 무료이기 때문에 많이 쓰인다.
톰캣이란(Tomcat)?
톰캣은 아파치 소프트웨어 재단의 웹 어플리케이션 서버(와스)로서,
자바 서블릿을 실행키고 JSP코드가 포함되어 있는 웹 페이지를 만들어준다.
자바 서블랫과 JSP 규격의 '참조용 구현'으로 평가되고 있는 톰캣은, 개발자들의 개방적 협력 작업의 산물로 바이너리 버전과 소스코드 버전 둘 모두를 아파치 웹 사이트에서 얻을 수 있다.
즉, 톰캣은 웹 서버에서 넘어온 동적인 페이지를 읽어들여 프로그램을 실행하고 그 결과를 다시 html로 재구성하여 아파치에게 되돌려 준다.
톰캣은 자체적으로 보유하고 있는 내부 웹 서버와 함께 독립적으로 사용될 수도 있지만 아파치나 넷스케이프 엔터프라이즈 서버, IIS등 다른 웹서버와 함께 사용될 수도 있다. 톰캣을 실행시키기 위해서는 JRE 1.1이상에 부합되는 자바 런타임 환경이 필요하다.
JDK는 JRE를 포함할 뿐만 아니라 컴파일러(javac), javadoc, jar 등 개발에 유용한 도구들을 포함하고 있다. 따라서 자바 프로그램을 개발하기 위해서는 JDK를 다운로드하여야 한다. 결론은 JRE는 자바 실행환경이고, JDK는 자바 개발 도구라는 것이다.
빌드 관리 도구
메이븐과 그레이들
빌드 도구란?
소스코드에서 애플리케이션을 생성하면서 여러가지 외부 라이브러리를 사용하는데, 빌드 관리도구는 사용자가 관리할 필요 없이 필요한 라이브러리들을 자동으로 관리한다.
(1) Maven의 정의
Maven은 Java 전용 프로젝트 관리 도구로, Lifecycle 관리 목적 빌드 도구이며, Apache Ant의 대안으로 만들어졌다.
Maven은 아파치 라이센스로 배포되는 오픈 소스 소프트웨어이다.
Maven의 특징
- Lifecycle 관리 도구로, 정해진 Lifecycle에 의하여 작업을 수행하며, 전반적인 프로젝트 관리 기능을 포함하고 있다.
pom.xml로 라이브러리 관리 - Maven은 필요한 라이브러리를 pom.xml에 정의한다. 이를 프로젝트 모델링이라고 한다.
- 플러그인을 통한 전역적인 재사용: Maven은 빌드에 대한 대부분의 책임을 각 플러그인에 위임한다. 이러한 플러그인들은 Maven저장소(Repository)에 저장되어 진다.
Maven 설정파일
👉 setting.xml
- 메이븐을 빌드할 때 의존 관계에 있는 라이브러리와 플러그인을 중앙저장소→로컬저장소(개발자 PC)로 다운로드하게 되어있다. 그리고 로컬저장소의 기본 위치는USER_HOME/.m2/repository인데, setting.xml를 통해 원하는 로컬 저장소의 경로를 지정 및 변경할 수 있다.
👉 pom.xml
- root에 존재하는 xml파일로, 프로젝트마다 1개씩 가지고 있다. 필요한 라이브러리를 pom.xml에 정의하면, 해당 라이브러리 실행, 설치에 필요한 다른 라이브러리까지 관리하고 네트워크를 통해서 자동으로 다운받아준다.
1) Gradle의 정의
Maven을 대체할 수 있는 프로젝트 구성 관리 및 범용 빌드 툴이며, Ant Builder와 Groovy script를 기반으로 구축되어 기존 Ant의 역할과 배포 스크립의 기능을 모두 사용가능하며 스프링부트와 안드로이드에서 사용된다.
빌드 속도가 Maven에 비해 10~100배 가량 빠르며, Java, C/C++, Python 등을 지원한다.
❓ Groovy
Groovy는 JVM에서 실행되는 스크립트 언어이다. JVM에서 동작하지만 소스코드를 컴파일할 필요 없다. Java와 호환되며, Java class file들을 Groovy class로 사용 가능하다.
Java 문법과 유사하여 빌드 처리를 관리할 수 있다.
(2) Gradle 특징
- 가독성이 좋다 : 코딩에 의한 간결한 정의가 가능하므로 가독성이 좋다.
- 재사용에 용이 : 설정 주입 방식(Configuration Injection)을 사용하므로 재사용에 용이하다.
- 구조적인 장점 : Build Script를 Groovy 기반의 DSL(Domail Specific Language)를 사용하여 코드로서 설정 정보를 구성하므로 구조적인 장점이 있다.
- 편리함 : Gradle 설치 없이 Gradle wrapper를 이용하여 빌드를 지원한다.
- 멀티 프로젝트 : Gradle은 멀티 프로젝트 빌드를 지원하기 위해 설계된 빌드 관리 도구이다.
- 지원: Maven을 완전 지원한다.
(3) Maven vs Gradle
- 스크립트 길이와 가독성 면에서 gradle이 우세하다.
- 빌드와 테스트 실행 결과 Gradle이 더 빠르다
gradle은 캐시를 사용하므로 테스트 반복 시 실행 결과 시간의 차이가 더 커진다. - 의존성이 늘어날 수록 스크립트 품질의 차이가 커진다.
Maven은 멀티 프로젝트에서 특정 설정을 다른 모듈에서 사용하려면 상속 받아야하지만, gradle은 설정 주입 방식을 사용하므로 멀티 프로젝트에 적합하다.
📎 Gradle 설정파일
👉 setting.gradle
- 프로젝트 구성을 설정할 때 작성하는 파일이다. 보통 프로젝트간의 의존성 및 서브프로젝트, 교차 프로젝트 같은 멀티 프로젝트를 구성할 때 사용한다. 단, 싱글 프로젝트의 경우에는 생략이 가능하다.
👉 build.gradle
- 간단하게, 빌드에 대한 모든 기능을 정의하는 파일이다.프로젝트에서 사용하는 환경 설정, 빌드방법, 라이브러리 정보 등을 기술함으로서 빌드 및 프로젝트의 관리환경을 구성한다.
'기술면접준비' 카테고리의 다른 글
자바 버전 정리 - 8, 11, 17 (0) | 2023.08.02 |
---|---|
자바스크립트 ES6(ECMAScript ) 문법 (0) | 2023.08.01 |
페이지 로딩속도 개선 방법 (0) | 2023.07.31 |
스프링프레임워크와 스프링 부트의 차이점 (0) | 2023.07.27 |
SSR(서버 사이드 렌더링) VS CSR(클라이언트 사이드 렌더링) (0) | 2023.07.25 |
댓글