-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathpom.xml
More file actions
197 lines (176 loc) · 8.93 KB
/
pom.xml
File metadata and controls
197 lines (176 loc) · 8.93 KB
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
<?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>
<!-- =====================================================
프로젝트 기본 정보 (Group / Artifact / Version)
Maven이 프로젝트를 식별하는 좌표(Coordinates)입니다.
===================================================== -->
<groupId>kr.ac.hansung.cse</groupId>
<artifactId>helloSpringMVC</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- WAR 패키징: 외부 Tomcat에 배포하기 위해 WAR 형태로 빌드합니다.
Spring Boot 없이 순수 Spring MVC를 사용하는 핵심 설정입니다. -->
<packaging>war</packaging>
<name>helloSpringMVC</name>
<properties>
<!-- Java 21 (LTS) 사용 -->
<!-- release: source+target+시스템모듈 위치를 한 번에 설정 (빌드 경고 방지) -->
<maven.compiler.release>21</maven.compiler.release>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 주요 라이브러리 버전 관리 - 한 곳에서 일괄 관리하기 위해 properties에 선언 -->
<spring.version>7.0.0</spring.version>
<thymeleaf.version>3.1.3.RELEASE</thymeleaf.version>
<hibernate.version>7.0.0.Final</hibernate.version>
<mysql.version>9.1.0</mysql.version>
<!-- Tomcat 11은 Servlet 6.1 스펙을 구현합니다 -->
<jakarta.servlet.version>6.1.0</jakarta.servlet.version>
</properties>
<dependencies>
<!-- =================================================
1. Spring MVC (웹 계층)
DispatcherServlet, @Controller, @RequestMapping 등
MVC 패턴 구현의 핵심 라이브러리입니다.
================================================= -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- =================================================
2. Spring ORM (데이터 접근 계층)
Spring과 JPA/Hibernate를 연동해 주는 브릿지입니다.
LocalContainerEntityManagerFactoryBean,
JpaTransactionManager 등을 제공합니다.
================================================= -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- =================================================
3. Thymeleaf (뷰 엔진)
서버 사이드 HTML 템플릿 엔진입니다.
thymeleaf-spring6 아티팩트가 Spring 6/7 모두 지원합니다.
================================================= -->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring6</artifactId>
<version>${thymeleaf.version}</version>
</dependency>
<!-- =================================================
4. Hibernate Core (JPA 구현체)
JPA 표준 명세를 실제로 구현하는 ORM 프레임워크입니다.
hibernate-core 에 jakarta.persistence (JPA API)가
내장되어 있어 별도 의존성 불필요합니다.
================================================= -->
<dependency>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<!-- =================================================
5. MySQL JDBC 드라이버
Java 애플리케이션 ↔ MySQL 데이터베이스 연결
================================================= -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- =================================================
6. Jakarta Servlet API
DispatcherServlet은 HttpServlet을 상속합니다.
scope=provided: Tomcat이 이미 제공하므로 WAR에 포함 안 함.
================================================= -->
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>${jakarta.servlet.version}</version>
<scope>provided</scope>
</dependency>
<!-- =================================================
7. Jakarta Validation API (Bean Validation)
@NotBlank, @Min 등 유효성 검사 어노테이션 지원
================================================= -->
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>3.0.2</version>
</dependency>
<!-- =================================================
8. Hibernate Validator (Bean Validation 구현체)
================================================= -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>8.0.1.Final</version>
</dependency>
<!-- =================================================
9. SLF4J + Logback (로깅)
Spring 내부 로깅도 SLF4J를 사용하므로 필수입니다.
================================================= -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.4.14</version>
</dependency>
<!-- =================================================
10. Lombok
getter/setter/생성자/toString 등 반복 코드를
어노테이션으로 자동 생성합니다.
scope=provided: 컴파일 시에만 필요하며 런타임에는 불필요합니다.
================================================= -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.38</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- Maven WAR 플러그인: web.xml 없이 빌드 허용 (Java Config 방식) -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.4.0</version>
<configuration>
<!-- WebAppInitializer.java가 web.xml 역할을 대체하므로
web.xml 파일 없이도 빌드되도록 설정합니다. -->
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
<!-- Maven Compiler 플러그인: Java 21 소스/바이트코드 호환성 설정
시스템 JDK 버전과 무관하게 Java 21 문법/API만 사용하도록 제한합니다. -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.12.1</version>
<configuration>
<!-- release: source + target + 시스템모듈 위치를 한 번에 설정 -->
<release>21</release>
<encoding>UTF-8</encoding>
<!-- -parameters: 생성자/메서드의 파라미터 이름을 바이트코드에 포함시킵니다.
Spring 7.x의 @ModelAttribute가 생성자 바인딩 시 파라미터 이름을
리플렉션으로 읽어야 하므로 이 옵션이 없으면 예외가 발생합니다. -->
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
<!-- Lombok 어노테이션 프로세서 등록 -->
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.38</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
<!-- WAR 파일 이름 설정: ROOT.war → Tomcat ROOT 컨텍스트로 배포 -->
<finalName>ROOT</finalName>
</build>
</project>