티스토리 뷰
SPRING INITIALIZR 웹페이지에서 입력할 수 있는 정보 중 Project Metadata 가 있습니다. 생성된 프로젝트 분석 에서 기본값으로 프로젝트를 생성했을 때 대부분의 정보가 pom.xml 에 기입되고 src/ 디렉토리 하위에 package 구조를 구성할 때에도 이용된다고 하였습니다.
Metadata 을 아래와 같이 변경한 뒤 새롭게 프로젝트 파일을 생성하여 다운로드 해보겠습니다. Packaging 은 추가적으로 생성되는 파일이 존재하기 때문에 따로 설명을 하겠습니다.
프로젝트를 생성하면 아래와 같은 URL 을 호출하여 프로젝트 파일을 다운로드 받을 수 있게 됩니다. URL 주소를 보면 입력한 값들이 변수값으로 전달됨을 알 수 있습니다.
생성된 프로젝트 파일도 metadata_change.zip 입니다. Artifact 값을 압축파일명으로 사용한다는 것을 알 수 있습니다.
파일의 압축을 풀어 생성된 디렉토리와 파일을 보면 Metadata 가 어떠한 곳에 영향을 미치는지 확인할 수 있습니다.
1. 디렉토리, 파일 구조
Group 와 Artifact 가 합쳐져서 Package 가 되었고, Name 이 Application 의 Class 명(= java 파일명)에 영향을 미쳤음을 알 수 있습니다. 만약 Name 이 Artifact 와 동일하게 metadata_change 였다면 생성되는 Class 는 MetadatachangeApplication 이 아니라 MetadataChangeApplication 이 될 것입니다.
2. pom.xml
변경된 메타데이터에 의해 pom.xml 은 아래와 같이 변경된 정보가 입력되어 있습니다.
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zepinos.example</groupId> <artifactId>metadata_change</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>metadatachange</name> <description>Demo project for Spring Boot Metadata Change</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>10</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
<groupId> 나 <artifactId> 와 같이 SPRING INITIALIZR 의 입력항목과 거의 유사한 Element 에 값이 변경되어 있음을 확인할 수 있습니다.
아래 diff 을 보면 어떠한 부분이 영향을 받게 되는지 더 잘 알 수 있을 것입니다.
3. Packaging
앞에서 메타데이터 중 Packaging 은 추가적인 파일이 생성된다고 하였습니다. 그래서 위의 메타데이터에서 Packaging 만 Jar 에서 War 로 변경한 뒤 비교를 해보겠습니다.
먼저 디렉토리와 파일을 보면 프로그램 소스에 ServletInitializer.java 파일이 추가되었고, src/main/resources 에 static/ 와 templates/ 디렉토리가 추가되었습니다. 그리고 pom.xml 파일의 내용이 변경되었음을 알 수 있습니다.
ServletInitializer.java 파일의 내용은 아래와 같습니다.
package com.zepinos.example.metadata_change; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; public class ServletInitializer extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(MetadatachangeApplication.class); } }
SpringBootServletInitializer 을 상속받아 configure() 을 재정의 하였습니다. 이름만 봐도 대충 감이 오는데, 바로 WAS 에 war 파일을 배포할 때 Spring Boot 의 내용을 Servlet 으로 초기화(Initialize)해주는 역할을 하는 파일입니다. 기존의 Jar 프로젝트로 생성했을 경우 일반 애플리케이션용 혹은 내장 WAS 을 이용해 웹서버를 실행하고 서비스를 제공하는 형태인데 반해, War 프로젝트로 생성할 경우 위와 같이 WAS 에 배포(deploy)될 때 Spring Boot 애플리케이션을 Servlet 으로 등록하여 서비스 될 수 있도록 제공됩니다.
그리고, 웹서비스 용도로 War 프로젝트로 만들었기 때문에 Servlet 의 결과를 보여줄 VIEW 영역이 저장되는 공간이 필요합니다. static/ 디렉토리에는 css, js, html 와 같은 정적 파일을 저장하는 용도이고 templates/ 디렉토리에는 Spring Boot 가 지원하는 템플릿(Template) 파일을 저장하는 용도입니다. Spring Boot 는 기본적으로 JSP 을 view 로 사용하는 것을 지양하고 Thymeleaf, Freemarker 등의 템플릿을 제공하고 있습니다.
마지막으로 pom.xml 에서는 아래의 이미지와 같이 웹과 관련된 내용이 추가됩니다. Maven 의존성에서 spring-boot-starter 대신 spring-boot-starter-web 으로 변경하고 tomcat 도 추가합니다. spring-boot-starter-web 은 spring-boot-starter 뿐만 아니라 웹사이트를 구축하기 위한 기초적인 라이브러리를 의존관계로 포함하고 있습니다.
'Programming > Spring Boot 시작하기' 카테고리의 다른 글
IntelliJ IDEA 에서 프로젝트 개발 환경 구성 (0) | 2018.09.04 |
---|---|
IDE 프로젝트 파일 생성 (0) | 2018.09.04 |
Dependencies 선택 (0) | 2018.09.04 |
생성된 프로젝트 분석 (2) | 2018.09.04 |
Spring Boot 프로젝트 생성 (0) | 2018.09.04 |
- Total
- Today
- Yesterday
- docker
- 워드프레스
- java config
- proxmox
- couchbase
- RestTemplate
- 내장 WAS
- 외장 WAS
- 페이징
- Spring MVC
- Spring
- SI
- 시니어 프로그래머
- manjaro
- 프로젝트 규모
- paging
- boot
- Redmine
- 도입기
- 엘지
- Phabricator
- Spring Boot
- OracleJDK
- KDE
- messages.properties
- 클라우드플레어
- NoSQL
- git
- Nas
- jooq
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |