티스토리 뷰

반응형

SPRING INITIALIZR 웹페이지에서 입력할 수 있는 정보 중 Project Metadata 가 있습니다. 생성된 프로젝트 분석 에서 기본값으로 프로젝트를 생성했을 때 대부분의 정보가 pom.xml 에 기입되고 src/ 디렉토리 하위에 package 구조를 구성할 때에도 이용된다고 하였습니다.

Metadata 을 아래와 같이 변경한 뒤 새롭게 프로젝트 파일을 생성하여 다운로드 해보겠습니다. Packaging 은 추가적으로 생성되는 파일이 존재하기 때문에 따로 설명을 하겠습니다.



프로젝트를 생성하면 아래와 같은 URL 을 호출하여 프로젝트 파일을 다운로드 받을 수 있게 됩니다. URL 주소를 보면 입력한 값들이 변수값으로 전달됨을 알 수 있습니다.

http://start.spring.io/starter.zip?type=maven-project&language=java&bootVersion=2.0.3.RELEASE&baseDir=metadata_change&groupId=com.zepinos.example&artifactId=metadata_change&name=metadatachange&description=Demo+project+for+Spring+Boot+Metadata+Change&packageName=com.zepinos.example.metadata_change&packaging=jar&javaVersion=10&autocomplete=&generate-project=

생성된 프로젝트 파일도 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 뿐만 아니라 웹사이트를 구축하기 위한 기초적인 라이브러리를 의존관계로 포함하고 있습니다.




반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
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 31
글 보관함