티스토리 뷰
spring boot는 jar 파일 안에 embeded 된 서버와 application 코드가 들어있어서 별도의 서버연결과 설치가 필요하지 않다. (Self-contained Unit).
먼저, 작성한 소스코드들, 그리고 그렇게 Web 어플리케이션을 만들 수 있는 스텐다드한 구조를 결정하는 것이 Maven이다. 그것을 컴파일 해서 톰캣같은 WAS가 인식하도록 패키징 하는 설정을 pom.xml에 하게 되는데, 그러한 톰캣, Maven archetype, dependency 설정, configuration 설정 등 너무 복잡하고 신경 써야하는 것이 많은 세팅 단계를 간단하게 해 주는 것이 Spring boot이다.
1. WAR 파일과 JAR 파일의 차이점
JAR(Java Archive)의 이름에서도 알 수 있듯, 자바 어플리케이션이 동작 할 수 있도록 자바 프로젝트를 압축한 파일이다.
따라서 JRE로 실행 가능하다.
WAR(Web Application Archive)는 웹 어플리케이션 압축 포멧으로서, servlet 컨테이너에 배치 할 수 있는 압축 파일 포멧이다. 따라서 WAR는 웹 응용 프로그램을 위한 포맷이기 때문에, 웹 관련 자원만 포함하고 있으며 이를 사용하면 웹 어플리케이션을 쉽게 배포하고 테스트 할 수 있다. WAR은 JAR 포맷과 달리 WEB-INF및 META-INF 디렉토리로 사전 정의된 구조를 활용하며 WAR파일을 실행하려면 톰켓과 같은 WEB 또는 WAS가 필요하다.
2. SpringBoot에 대해서
위 WAR과 JAR의 차이점에 대해서도 말했듯, 이때까지 나는 spring을 학습 함에 있어, tomcat 서버를 연결해서 war 형태의 프로젝트를 실행해 왔었고, 설치되어 있는 톰캣이라는 서버에 war 파일을 여러개 올려 context path가 다른 maven 프로젝트 여러개를 돌릴 수 있었다.
SpringBoot도 app만 떼내어서 WAR 파일로 디플로이가 가능한데, WAR 파일에는 대신에 어플리케이션 코드만 포함되있지, 내장 서버는 포함되어 있지 않다.
정리하자면, Springboot는 jar, war 두 방식으로 모두 패키징 가능하다.
Springboot는 SpringMVC, REST 등을 대체하는 것이 아닌, 그 기술들을 백그라운드에서 이용하며 configuration을 최소화 시켜주는 것이지, 다른것으로 대체되거나 경쟁하는것은 아니다.
springboot는 특별한 IDE가 필요한 것도 아니며, 일반 Spring 코드보다 더 빨리 실행되는 것도 아니다.
3. Maven Wrapper 파일 (mvnw 파일)
springboot를 실행하면 mvnw, mvnw.cmd 파일이 있는데, 이 파일은 maven wrapper 파일로서 Maven 프로젝트를 실행 할 수 있게 해준다. Maven을 설치하거나 path에 위치시키지 않아도 되고, 만약 올바른 Maven 버전이 컴퓨터에서 발견되지 않는다면 자동으로 올바른 Maven 버전을 인터넷에서 다운해 Maven을 실행시킨다.
mvnw와 mvnw.cmd 파일의 차이는, mvnw는 linux/mac을 위한 파일로 shell script로 작성되어 있으며, mvnw.cmd는 cmd파일로 window을 위한 cmd 언어로 작성되어 있다.
pom.xml 파일은 spring Initializer 웹사이트를 통해서 입력했던 정보들을, dependency들을 포함하고 있다.
이 pom 파일안에 위에 plugin 설정또한 있는데, 이 <plugin>안에 설정되어 있는 plugin은 command line으로 부터 실행할 수 있는, 실행가능한 jar파일이나 war archive 파일로 패키지하는데 사용된다.
또한 이 plugin은 쉽게 application을 실행하는데 사용할 수도 있다.
4. Maven Lifecycle과 기본 명령어
Maven의 라이프사이클에는 8가지 스텝이 있다.
Validate, Compile, Test, Package, Integration test, Verify, Install과 Deploy
default maven 라이프사이클은 자바 프로젝트를 compiling, testing, building, installing 하는 8가지 주요 단계로 이루어져 있다.
1. Validate : 이 과정은 프로젝트 구조가 올바른지 확인한다. 예를들어 모든 dependencies가 다운되어 로컬 레포지토리에서 사용가능한지 확인한다.
2. Compile : 소스코드를 컴파일하고 .java 파일을 .class파일로 변환하여 클래스들을 target/classes폴더에 저장한다.
3. Test : 프로젝트에 대해서 유닛 테스트를 실행한다.
4. Package : 컴파일된 코드를 JAR나 WAR 포멧으로 패키징한다.
5. Integration test : 프로젝트에 대한 integration test를 진행한다.
6. Verify : 프로젝트가 유효하고 퀄리티 스텐다드에 부합하는지 부합하는지 확인하기 위해서 실행한다.
7. Install : 패키지된 코드를 local maven repository에 설치한다
8. Deploy : 패키지된 코드를 복사해 remote repository에 올림으로서 다른 개발자들과 공유하게 한다.
이 과정들은 명령어를 실행하기 위해서 순차적인 순서를 따른다. 만약에 n번째 step을 실행하면, n-1까지 실행된다. install을 실행하면 앞의 Validate ~ Verify 까지 모두 실행되고 실행되는 것이다.
Maven 명령어
- mvn clean : 프로젝트 클린하고 이전 빌드로 인해서 생성된 모든 파일을 제거한다.
- mvn compile : 프로젝트의 소스코드 컴파일한다.
- mvn test-compile : 테스트 소스코드를 컴파일한다.
- mvn test: 프로젝트 테스트 실행
- mvn package : jar나 war 파일로 프로젝트를 포멧시킨다.
- mvn install / mvn deploy : 위 설명과 같음.
* 일반적으로 위 명령어를 실행할때, mvn clean을 앞에 넣어서 이전 빌드로 인해 생성된 타겟 폴더가 새로운 빌드 실행하기 전에 삭제되도록 해준다. -> mvn clean install : 이전 빌드 생성 파일 삭제하고 새로 빌드해 install 까지 실행.
* -X 옵션을 추가해서 디버그 모드로 실행할 수도 있다. -> mvn -X install : 디버그 모드로 install 과정.
* 테스트를 실행하고 싶진 않지만 자바 프로젝트를 패키징하거나 install 하고 싶을 때 : -DskipTests를 마지막에 붙히면됨. e.g) mvn install -DskipTests
5. Springboot를 command line으로 실행하기
(1) java -jar 이름.jar 사용해 실행하기
- mvn package 나 ./mvnw package 통해서 target폴더 생성한 jar파일생성 후 실행. (jar 파일을 읽는 것임)
(2) mvnw spring-boot:run 통해서 실행하기
- mvnw는 위에서 말했듯, 해당 maven이 설치되어 있지 않은 상태에서 올바른 버전을 다운해서 실행하도록 도와준다. Maven이 설치되어 있거나 path에 있을때는, 필요가 없다.
일반적으로, maven 명령어를 실행하기 위해서는 다음과 같은 과정이 필요하다.
1) PATH에 자바가 실행가능하거나 JAVA_HOME을 설정하기
2) Maven Distribution 다운로드
3) maven distribution을 unzip해서 원하는 path에 배치하기.
4) maven / bin 디렉토리를 PATH 변수에 추가하기
그러면
$ mvn clean package와 같이 사용할 수 있다.
하지만 maven wrapper 파일이 있으면, 그냥 다음 명령어를 실행하면 된다.
윈도우) mvnw.cmd clean package
리눅스/맥) ./mvnw clean package
위와 같은 명령어들은 Maven을 설치하지 않고 mvn 명령어로 같은 방식으로 작동한다.
mvnw.cmd, mvnw 파일 생성하는 방법
: maven이 설치되어 있어야하고, $mvn wrapper:wrapper를 통해서 설정 가능.
Reference :
https://ifuwanna.tistory.com/224
https://www.geeksforgeeks.org/maven-lifecycle-and-basic-maven-commands/
https://springhow.com/maven-wrapper-explained/
'Programming > Spring & Hibernate' 카테고리의 다른 글
🥊 AOP를 활용해 중복코드를 제거해보자! (feat. AOP란?🤔) (1) | 2024.02.08 |
---|---|
Hibernate Advanced Mappings Overview (0) | 2021.03.04 |
Hibernate CRUD features: Create, Read, Update and Delete (0) | 2021.03.02 |
Hibernate Configuration with Annotations (0) | 2021.02.26 |
Hibernate Overview & Setting Up Development Environment (0) | 2021.02.26 |
- Total
- Today
- Yesterday