Spring ํ๋ก์ ํธ๋ฅผ ๋ง๋ค ๋ Type์ Maven์ผ๋ก ์ค์ ํ๋ค.
๊ทธ๋ ๋ค๋ฉด Maven์ ๋ญ๊น?
Maven
Maven์ ํ๋ก์ ํธ๋ฅผ ๊ด๋ฆฌํ๊ณ ๋น๋์ ๋์์ ์ฃผ๋ ๋๊ตฌ์ด๋ค.
๊ทธ๋ฆฌ๊ณ Maven์ ํ๋ ์์ํฌ์ด๋ค.
(ํ๋ ์์ํฌ๋ผ ์ ํด์ง ๋์ ๋ฐฉ์์ด ์๋ค.(LifeCycle)
LifeCycle์ ๋ํ ๋ด์ฉ์ ์ถํ ๋ค๋ฅธ ๊ฒ์๊ธ์์ ๋ค๋ฃจ๋๋ก ํ๊ฒ ๋ค.)
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ์์ํฌ์ ๊ณตํต์ ๊ณผ ์ฐจ์ด์
"๋ด๊ฐ" ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ถ๋ฅด๋ ๊ฒ์ด๊ณ "ํ๋ ์์ํฌ"๊ฐ ๋๋ฅผ ๋ถ๋ฅด๋ ๊ฒ์ด๋ค.
velog.io
์์ธํ ์ค๋ช ์ ํ๊ธฐ์ ์์, ๋น๋์ ๋ํ ๊ฐ๋ ์ ์ดํดํ๊ณ ์ ํ๋ค.
๋น๋๋?
๋น๋ : ๊ฐ๋ฐ์๊ฐ ์์ฑํ ์์ค์ฝ๋๋ฅผ ์คํ ๊ฐ๋ฅํ ํ๋ก๊ทธ๋จ์ผ๋ก ๋ณํํ๋ ๋จ๊ณ
์ด๋ฌํ ๋ณํ๋ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉ์๊ฐ ์คํํ๊ฑฐ๋ ๋ฐฐํฌํ ์ ์๋ค.
๋น๋ ๋๊ตฌ๋?
์ํํธ์จ์ด ๊ฐ๋ฐ ๊ณผ์ ์์ ์์ค ์ฝ๋๋ฅผ ์ปดํ์ผํ๊ณ , ์์กด์ฑ์ ๊ด๋ฆฌํ๊ณ , ํ ์คํธ ๋ฐ ๋น๋ ํ๋ก์ธ์ค๋ฅผ ์๋ํํ๋ ๋๊ตฌ์ด๋ค.
์ด ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ํจ์จ์ ์ผ๋ก ํ๋ก์ ํธ๋ฅผ ๋น๋ํ๊ณ ๊ด๋ฆฌํ ์ ์๋ค.
์๋ฅผ๋ค์ด Maven, Gradle, Ant๊ฐ ์๋ค.
Maven
๋ค์ Maven์ผ๋ก ๋์์๋ณด์.
Maven์ ํ๋ก์ ํธ๋ฅผ ๊ด๋ฆฌํด์ฃผ๊ณ ๋น๋ํด์ฃผ๋ ๋๊ตฌ์ด๋ค.
Maven ํ๋ก์ ํธ ๊ตฌ์กฐ
my-project/
|-- src/
| |-- main/
| | |-- java/ # Java ์์ค ์ฝ๋
| | |-- resources/ # ๋ฆฌ์์ค ํ์ผ (ํ๋กํผํฐ, ์ค์ ํ์ผ ๋ฑ)
| |-- test/
| |-- java/ # ํ
์คํธ์ฉ Java ์์ค ์ฝ๋
| |-- resources/ # ํ
์คํธ ๋ฆฌ์์ค ํ์ผ
|-- target/ # ๋น๋ ๊ฒฐ๊ณผ๋ฌผ ์ ์ฅ ํด๋
|-- pom.xml # ํ๋ก์ ํธ ์ค์ ํ์ผ
Maven ํ๋ก์ ํธ ๊ตฌ์กฐ๋ ์์ ๊ฐ์ด ๋์ด ์๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด ๋๊ตฌ๊ฐ ์ ํ์ํด์ก์๊น? ์ด ๋๊ตฌ๊ฐ ์ ๋ง๋ค์ด์ก์๊น?
โ๊ถ๊ธ์ฆโ
โถ๏ธ ์ฐ๋ฆฌ๋ ์ด๋ค ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ ๋ ๋ชจ๋ ์ฝ๋๋ฅผ ์ง์ ๋ค ์์ฑํ์ง ์๋๋ค.
๊ธฐ์กด์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ธ์ ์ฌ์ฉํ๋ค.
์๋ฅผ ๋ค์ด ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ ๊ฐ๋ผ๋ฉด ๊ด๋ฆฌํ๊ธฐ ์ฌ์ธ ๊ฒ์ด๋ค.
ํ์ง๋ง ์ฌ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ญ ๊ฐ๊ฐ ๋๋ค๋ฉด? ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ด๋ ค์์ง ๊ฒ์ด๋ค.
(๋ฒ์ ๊ด๋ฆฌ, ๋ค์ด๋ก๋ ๊ด๋ฆฌ ๋ฑ๋ฑ)
๊ทธ๋์ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ด๋ฆฌํด ์ค Maven ๋๊ตฌ๊ฐ ๋ฑ์ฅํ ๊ฒ์ด๋ค.
Maven์ pom.xml์ด ์๋๋ฐ pom.xml ํ์ผ์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ๋ฏธ๋ฆฌ ์ค์ ํด๋๋ฉด,
Maven์ด ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋คํธ์ํฌ๋ฅผ ํตํด์ ๋ค์ด๋ก๋ํด ์ค๋ค.
๊ทธ๋ ๋ค๋ฉด, pom.xml์ด๋?
pom.xml (Proejct Object Model)
Maven ๊ธฐ๋ฐ ํ๋ก์ ํธ์์ ์ฌ์ฉํ๋ ์ค์ ํ์ผ.
ํ๋ก์ ํธ์ ์ ๋ณด, ์์กด์ฑ ๊ด๋ฆฌ, ๋น๋ ์ค์ ๋ฑ์ 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.6</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>springapp1-1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>springapp1-1</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
์๋ ์์ ์ spring boot ์ฒ์ ๋ฐฐ์ธ ๋ ๋ง๋ ํ๋ก์ ํธ์ 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">
<!-- ํ๋ก์ ํธ ์ ๋ณด -->
<groupId>com.example</groupId>
<artifactId>my-project</artifactId>
<version>1.0.0</version>
<!-- ์์กด์ฑ ๊ด๋ฆฌ -->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.9</version>
</dependency>
<!-- ... ๋ค๋ฅธ ์์กด์ฑ ... -->
</dependencies>
<!-- ํ๋ฌ๊ทธ์ธ ์ค์ -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<!-- ... ๋ค๋ฅธ ํ๋ฌ๊ทธ์ธ ... -->
</plugins>
</build>
<!-- ... ๋ค๋ฅธ ์ค์ ... -->
</project>
<modelVersion></modelVersion>
Mven์ ๋ชจ๋ธ ๋ฒ์ ์ ์๋ฏธํ๋ค.
์ฆ, pom.xml์ ๋ฒ์ ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
<groupId></groupId>
์๋ณํ ์ ์๋ ID๋ฅผ ์ง์ ํ๋ ๊ณณ
ํ๋ก์ ํธ๋ฅผ ์์ฑํ ๊ทธ๋ฃน๋ช ์ผ๋ก ์ ์์์ ํ์ฌ, ๋จ์ฒด ๋ฑ์ ์๋ณํ๊ธฐ ์ํ ๊ฒ.
<artifactId></artifactId>
์ด ํ๋ก์ ํธ์ ๊ณ ์ ID๋ฅผ ์๋ฏธํ๋ค.
์๋ฌธ์๋ก๋ง ์์ฑํด์ผ ํ๋ค.
<version></version>
ํ๋ก๊ทธ๋จ์ ๋ฒ์ ์ ์๋ฏธํ๋ค.
<packaging></packaging>
ํจํค์ง ์ข ๋ฅ๋ฅผ ์ค์ ํ๋ ๊ณณ
๋ณดํต zip, jar, war๋ก ์ค์ ํ๋ค.
<name></name>
ํ๋ก์ ํธ์ ์ด๋ฆ์ ์ค์ ํ๋ ๊ณณ
<dependencies></dependencies>
์ด ํ๊ทธ ์์ ์ฌ๋ฌ ๊ฐ์ <dependency></dependency>๋ฅผ ์ ์ํ๋๋ฐ, ์ด <dependency>๋ฅผ ๋ฌถ์ด์ฃผ๋ ํ๊ทธ๋ผ๊ณ ํ ์ ์๋ค.
<dependency></dependency>
ํ๋ก์ ํธ์ ์์กด๊ด๊ณ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์ ํ์ฌ ๋ฑ๋กํ๋ ํ๊ทธ์ด๋ค.
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.11.5</version>
<scope>runtime</scope>
</dependency>
<scope></scope>
๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ด์ฉ๋๋ ๋ฒ์๋ฅผ ์ง์ ํ๋ ๊ฒ.
์ xml์ ์๋ฅผ ๋ค๋ฉด, runtime ํ ๋๋ง ์ฌ์ฉํ๊ฒ ๋ค๊ณ ์ง์ ํ ๊ฒ์ด๋ค.
<profiles></profiles>
์ด ํ๊ทธ๋ <profile>ํ๊ทธ๋ฅผ ๋ฌถ์ด์ฃผ๋ ์ญํ ์ ํ๋ค.
<profile></profile>
ํ๋ก์ ํธ๋ฅผ ๋ก์ปฌ / ๊ฐ๋ฐ / ์ด์์ ๋ฐ๋ผ์ pon.xml์ url์ ์ค์ ํ ์ ์๋๋ก ํด์ฃผ๋ ๊ณณ์ด๋ค.
์ฐธ์กฐํ ๊ธ
https://goddaehee.tistory.com/199
[Maven] Maven ์ด๋? (์ ์, ์์ )
[Maven] ๋ฉ์ด๋ธ ์ด๋? (์ ์, ์์ ) ์๋ ํ์ธ์. ๊ฐ๋ํฌ ์ ๋๋ค. ์ด๋ฒ ํฌ์คํ ์ [ ๋ฉ์ด๋ธ ์์๋ณด๊ธฐ ] ์ ๋๋ค. : ) 1. ๋น๋ (Build) #1 ๋น๋๋? - ์์ค์ฝ๋ ํ์ผ์ ์ปดํจํฐ์์ ์คํํ ์ ์๋ ๋ ๋ฆฝ ์ํํธ์จ
goddaehee.tistory.com
[์คํ๋ง(Spring)] pom.xml์ ๊ตฌ์กฐ
pom.xml์ Maven ๊ตฌ์กฐ์์ Maven์ ์ค์ ์ ํ ์ ์๋ ๊ณณ์ด๋ฉด์, ๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก Maven์ด ๊ด๋ฆฌ๋ฅผ ํ๋ค. ๊ทธ๋์, pom.xml์ ์ด Maven์ ๋น๋ํ ์ ์๋๋ก ์ค์ ํ๋ ๋น๋
yongku.tistory.com