[SPRING] <pom.xml> 정리

수경·2025년 3월 29일

SpringFrameWork

목록 보기
21/24
post-thumbnail
<modelVersion>4.0.0</modelVersion>
	<!-- Maven이 사용하는 POM(XML 파일)의 구조 버전을 정의,
 	4.0.0은 현재의 기본 값이므로 변경할 필요 없음 -->
	<groupId>com.test</groupId>
	<!-- 프로젝트가 속한 그룹을 식별하는 고유한 ID
	(예: com.test, org.springframework) -->
	<artifactId>pro13</artifactId>
	<!-- 프로젝트의 고유한 이름,배포된 JAR/WAR 파일의 이름
	(예: pro13, spring-web, hibernate-core) -->
	<name>pro13</name>
	<!--프로젝트의 이름을 지정-->
	<packaging>war</packaging>
	<!-- 빌드 후 생성될 아티팩트의 유형을 지정
	war: Web Application Archive (웹 애플리케이션 패키지)
	보통 Tomcat과 같은 웹 서버에서 실행. -->
	<version>1.0.0-BUILD-SNAPSHOT</version>
	<!-- 프로젝트 버전 -->

▶프로젝트 초기 설정 후 변경되지 않는 값

<properties>
		<java-version>1.6</java-version>
		<!-- 사용할 Java 버전 -->
		<org.springframework-version>4.1.1.RELEASE</org.springframework-version>
		<!--  Spring Framework의 버전 -->
		<org.aspectj-version>1.6.10</org.aspectj-version>
		<!-- Aop를 지원하는 라이브러리 -->
		<org.slf4j-version>1.6.6</org.slf4j-version>
		<!-- 로깅 구현체(Logback, Log4j 등)을 지원 -->
	</properties>

▶ 프로젝트에서 사용하는 라이브러리 버전을 관리
(예:
1)Spring
2)AspectJ ( AOP )
3)SLF4J ( Log4j ) 등,,


<!--Maven에서 의존성을 추가하는 항목-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${org.springframework-version}</version>
    <!-- ${org.springframework-version}을 사용하면 Spring Framework 버전이 4.1.1.RELEASE로 자동으로 설정 -->
    <exclusions>
      
        <!-- Commons Logging을 제외하고 SLF4J를 사용-->
        <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

애플리케이션 컨텍스트(Bean 관리)를 제공하는 핵심적인 부분.
이를 통해 Spring의 DI(Dependency Injection) 및 AOP(Aspect-Oriented Programming) 기능을 사용할 수 있게 됨.

MVC

<!-- Spring Web MVC  -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>

MVC 패턴 기반의 웹 애플리케이션 개발

  • 컨트롤러, 뷰 리졸버, 핸들러 매핑 등 웹 애플리케이션에서 자주 사용되는 기능들 제공

AOP

<!--aspectjrt 의존성-->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjrt</artifactId>
			<version>${org.aspectj-version}</version>
		</dependency>	
		
<!-- aspectjweaver 의존성-->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>${org.aspectj-version}</version>
		</dependency>
		
<!--aspectjtools 의존성-->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjtools</artifactId>
			<version>${org.aspectj-version}</version>
		</dependency>

aspectjrt
AOP의 실제 기능을 실행하는 역할.
이 라이브러리가 없으면 AOP의 기능을 사용할 수 없다.

aspectjweaver
AOP 관련 코드를 바이트코드에 삽입하는 역할
aspectjrt가 실행 시 동작하도록 하는 데 필요

aspectjtools
소스 코드에서 AOP 적용을 위한 컴파일을 수행하는 도구.
AOP를 적용한 클래스 파일을 생성하거나 변환한다.

로깅

  • 로깅 추상화 :"하나의 공통된 방법 = 통일된 방식"
    코드를 수정할 필요 없이 쉽게 변경이 가능 하다.
<!--jcl-over-slf4j 의존성-->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${org.slf4j-version}</version>
		</dependency>

<!--slf4j-api 의존성 -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>

<!--slf4j-log4j12 의존성-->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>

slf4j-api
slf4j-api 의존성만으로는 실제 로깅 동작이 이루어지지 않으며, 다른 로깅 라이브러리와(예: Logback, Log4j 등) 함께 사용해야 한다.

jcl-over-slf4j
jcl-over-slf4j는 Commons Logging (JCL)을 SLF4J로 대체하는 라이브러리
JCL을 사용하는 코드에서 SLF4J를 통해 로깅을 처리할 수 있도록 해준다.

slf4j-log4j12
Log4j를 SLF4J와 연결해주는 역할(브리지 역할)
SLF4J와 Log4j 1.x를 통합하는 브리지

Log4j

  • Log4j는 실행 시 로깅을 담당하기 때문에, 컴파일할 때는 필요하지 않고 실행할 때만 필요하다.
		<!--  Log4j 의존성 -->
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.15</version>

▶ Log4j는 로깅을 위한 라이브러리로, 애플리케이션에서 로그 메시지를 기록하는 데 사용

exclusions

<exclusions>

<!--JavaMail API는 이메일 전송과 관련된 라이브러리-->
  <exclusion>
      <groupId>javax.mail</groupId>
      <artifactId>mail</artifactId>
  </exclusion>

<!--Java Message Service (JMS) 관련 라이브러리-->
  <exclusion>
      <groupId>javax.jms</groupId>
      <artifactId>jms</artifactId>
  </exclusion>

<!--Java Management Extensions (JMX)와 관련된 도구 라이브러리-->
  <exclusion>
      <groupId>com.sun.jdmk</groupId>
      <artifactId>jmxtools</artifactId>
  </exclusion>

<!-- JMX와 관련된 라이브러리-->
  <exclusion>
      <groupId>com.sun.jmx</groupId>
      <artifactId>jmxri</artifactId>
  </exclusion>

<!--scope 설정-->
	</exclusions>
			<scope>runtime</scope>
		</dependency>

</exclusions>

Log4j 를 사용할 때 불필요한 라이브러리 의존성을 제외하는 설정이다. 여기서는 JavaMail , JMS , JMX 와 관련된 라이브러리를 제외하고 있다.

  • 이러한 의존성들은 Log4j의 기본 라이브러리에는 필요하지 않기 때문에, 불필요한 종속성을 제거하여 프로젝트 빌드 크기를 줄이고, 불필요한 라이브러리 충돌을 방지한다.

Java Dependency Injection (DI)(의존성 주입)

<dependency>
    <groupId>javax.inject</groupId>
    <artifactId>javax.inject</artifactId>
    <version>1</version>
</dependency>

▶ javax.inject는 Java에서 의존성 주입을 지원하는 기본 API를 제공하는 라이브러리
▶1은 javax.inject API의 첫 번째 버전을 의미

Servlet

<!-- Servlet -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
			<scope>provided</scope>
		</dependency>

<!--JSP-->
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>jsp-api</artifactId>
			<version>2.1</version>
			<scope>provided</scope>
		</dependency>

<!--JSTL -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>

Servlet
Servlet 기능을 제공하는 라이브러리입니다. 이 라이브러리는 웹 애플리케이션에서 서블릿(Servlet)을 사용하기 위한 API를 제공

JSP(JavaServer Pages)
JSP 기능을 제공하는 라이브러리입니다. JSP 페이지를 처리하고 컴파일하는 데 필요한 API를 포함

JSTL(JavaServer Pages Standard Tag Library)
JSTL 라이브러리입니다. JSP에서 사용 가능한 표준 태그 라이브러리로, 반복문, 조건문, 포맷팅, XML 처리 등을 지원하는 여러 태그들을 제공

Spring AOP

AOP는 메서드 실행 전후의 로직을 분리하여 코드의 중복을 줄이고, 핵심 비즈니스 로직에 집중할 수 있게 해준다.

<!-- Spring-AOP -->

<!--spring-aop-->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>	

<!--cglib-->
		<dependency>
			<groupId>cglib</groupId>
			<artifactId>cglib</artifactId>
			<version>2.2</version>
			<type>jar</type>
			<scope>compile</scope>
		</dependency>

<!--aspectjweaver -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>${org.aspectj-version}</version>
		</dependency>

spring-aop(Aspect-Oriented Programming) 의존성
Spring에서 AOP를 지원하는 모듈입니다.
@Aspect , @Before , @After 등의 어노테이션을 사용하여 AOP를 손쉽게 적용
cglib
바이트코드 조작,동적 프록시 생성을 위한 라이브러리

  • scope: compile은 이 라이브러리가 컴파일 시점에 필요함을 나타냅니다. 즉, 애플리케이션이 실행될 때 이 라이브러리가 필요

aspectjweaver
이 라이브러리는 메서드에 대한 어드바이스(advice)포인트컷(pointcut)을 구현하여, 로직을 분리하고, 동적으로 적용할 수 있게 한다.

Spring JDBC

<!-- 스프링 JDBC -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>

▶ Spring JDBC는 데이터베이스와 상호 작용할 때 발생할 수 있는 boilerplate 코드(반복적인 코드)를 줄여주고, 데이터베이스 작업을 더 쉽게 처리할 수 있게 해주는 라이브러리
▶ Spring JDBC를 사용하여 데이터베이스와 상호 작용할 때 필요한 라이브러리

▶ JDBC의 복잡한 코드를 간소화하고, 데이터베이스 작업을 더 쉽고 일관성 있게 처리할 수 있도록 도와줍니다. 따라서, 데이터베이스 관련 작업을 할 때 효율적으로 사용할 수 있다.

Oracle JDBC 드라이버

Oracle 데이터베이스와 Java 애플리케이션 간의 연결을 설정하는 데 필요한 드라이버

<dependency>
    <groupId>com.oracle.ojdbc</groupId>
    <artifactId>ojdbc8</artifactId>
    <version>19.3.0.0</version>
</dependency>

▶ Oracle JDBC 드라이버는 Java 애플리케이션이 Oracle 데이터베이스와 JDBC(Java Database Connectivity)를 통해 연결하고 상호작용할 수 있도록 돕는 라이브러리

▶ Oracle 데이터베이스에 대한 SQL 쿼리 실행, 결과 수집, 트랜잭션 관리 등을 처리

▶ Java 애플리케이션에서 Oracle 데이터베이스와 연결하여 데이터를 조회하거나 조작할 수 있게 해준다.

MyBatis

MyBatis 는 SQL 매퍼 프레임워크로, SQL 쿼리와 Java 객체 간의 매핑을 쉽게 해주는 라이브러리

  • Spring 애플리케이션에서 MyBatis를 사용하려는 경우 필수적
  • MyBatisSpring 프레임워크를 통합하여, MyBatisSpring 애플리케이션에서 사용할 수 있도록 설정한다.
<!-- 마이바티스 -->

<!-- MyBatis 의존성-->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.4.6</version>
		</dependency>

<!--MyBatis-Spring 의존성-->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.3.2</version>
		</dependency>

MyBatis 의존성
MyBatis 의 핵심 기능을 제공하며, Java 객체와 SQL 쿼리 간의 매핑을 처리
MyBatis 는 Java 애플리케이션에서 SQL을 처리할 때, SQL 쿼리와 Java 객체 간의 변환을 자동으로 처리해주는 ORM(Object-Relational Mapping) 도구를 말한다.

MyBatis-Spring 의존성
Spring 프레임워크와 MyBatis를 통합하여, 트랜잭션 관리와 의존성 주입 등의 기능을 함께 사용할 수 있도록 도와준다.
SQL 매핑 기능을 Spring의 IOC 컨테이너와 트랜잭션 관리 시스템에 통합할 수 있다.

Lombok

Lombok은 Java에서 보일러플레이트 코드(예: getter/setter, toString, equals, hashCode 등)를 자동으로 생성해주는 라이브러리

  • 코드의 양을 줄이고, 가독성을 높일 수 있다.
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.30</version>
    <scope>provided</scope>
</dependency>

@Getter , @Setter , @ToString , @EqualsAndHashCode 와 같은 다양한 어노테이션을 사용하여 setter/getter, toString, equals, hashCode 메서드를 자동으로 생성할 수 있다.

scopeprovided 로 설정되어 있어, Lombok은 빌드 시에만 필요하며, 런타임에서는 필요하지 않는다.

Apache Tiles

Apache Tiles는 템플릿 기반의 뷰 시스템을 제공. 웹 애플리케이션에서 페이지 레이아웃을 일관되게 유지하면서 반복적인 부분을 재사용할 수 있도록 돕는다. Tiles는 페이지의 헤더, 바디, 푸터 등의 공통 부분을 별도로 정의한다.

<!-- 타일즈 관련 라이브러리 -->
<!-- tiles-core-->
		<dependency>
			<groupId>org.apache.tiles</groupId>
			<artifactId>tiles-core</artifactId>
			<version>2.2.2</version>
		</dependency>

<!--tiles-jsp-->
		<dependency>
			<groupId>org.apache.tiles</groupId>
			<artifactId>tiles-jsp</artifactId>
			<version>2.2.2</version>
		</dependency>

<!-- tiles-servlet-->
		<dependency>
			<groupId>org.apache.tiles</groupId>
			<artifactId>tiles-servlet</artifactId>
			<version>2.2.2</version>
		</dependency>

tiles-core
Apache Tiles의 핵심, 기본 라이브러리
이 라이브러리를 통해 Tiles의 기본적인 설정과 기능을 사용할 수 있다.
예를 들어, 페이지 레이아웃을 구성하는 데 필요한 필수 기능들이 포함된다.
tiles-jsp
JSP 파일 내에서 Tiles를 사용할 수 있도록 지원하는 추가 기능을 제공
JSP 뷰 템플릿을 사용하는 웹 애플리케이션에서 사용된다.

tiles-servlet
Tiles를 서블릿 환경에서 사용하기 위한 라이브러리
Tiles의 서블릿 컨텍스트와 통합을 위한 설정 및 도구들을 제공

파일 업다운 관련

파일 업로드와 관련된 작업은 웹 애플리케이션에서 자주 사용된다.

예를 들어, 프로필 사진 업로드, 문서 업로드, 이미지 업로드 등의 기능을 구현할 때 사용한다.


<!-- commons-fileupload -->
	<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.2.1</version>
		</dependency>

<!-- commons-io -->
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>1.4</version>
		</dependency>

commons-fileupload
파일 업로드 처리:
파일 업로드 기능을 제공

Multipart HTTP 요청을 처리할 수 있도록 도와줍니다. Multipart 요청은 일반적으로 파일 업로드에 사용되는 HTTP 요청 형식

commons-fileupload 라이브러리를 사용하면, 사용자가 업로드하는 파일을 서버 측에서 처리하고 저장하는 작업을 손쉽게 구현할 수 있다.

commons-io
파일 읽기/쓰기:
입출력(I/O) 작업을 간편하게 처리할 수 있도록 돕는 다양한 유틸리티 클래스를 제공

파일 처리, 스트림 관리, 디렉토리 탐색 등 I/O 작업을 쉽게 할 수 있게 해주는 유틸리티가 포함되어 있다.

commons-io 라이브러리는 파일을 읽고 쓰는 작업을 간편하게 만들어준다. 파일을 스트림으로 읽고 쓰는 작업을 효율적으로 처리할 수 있다.

Thumbnailator(썸네일)

Thumbnailator는 이미지 리사이즈와 썸네일 생성을 매우 간편하게 처리할 수 있는 라이브러리이다. 이미지 크기를 조정하거나 웹 애플리케이션에서 큰 이미지 대신 작은 썸네일을 사용하여 페이지 로딩 속도를 개선할 수 있다.

<!-- 썸네일 이미지 -->
		<dependency>
			<groupId>net.coobird</groupId>
			<artifactId>thumbnailator</artifactId>
			<version>0.4.8</version>
		</dependency>

썸네일 이미지 생성 :
큰 이미지를 빠르게 로드할 수 있도록 작은 이미지(썸네일)를 만들어 사용할 수 있습니다.

다양한 이미지 포맷 지원 :
PNG, JPEG, GIF...

이미지 리사이즈:
이미지 크기를 조정

Java email

javax.mail-api와 com.sun.mail 라이브러리는 Java에서 이메일을 보내고 받을 때 필요한 API와 구현체를 제공한다.

<!-- Java email 관련 -->
	<!-- javax.mail-api: Java 이메일 관련 API -->
<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>javax.mail-api</artifactId>
    <version>1.5.4</version>
</dependency>

<!-- com.sun.mail: 실제 이메일 기능을 제공하는 구현체 -->
<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.5.3</version>
</dependency>

javax.mail-api 의존성
이메일 관련 API를 제공
이메일 기능을 제공하는 실제 구현체는 포함하지 않습니다. 하지만 API 인터페이스를 제공하여 이메일 기능을 구현할 수 있게 도와준다.

com.sun.mail 의존성
구체적인 로직을 구현한 클래스들을 포함하고 있다.
javax.mail-api가 인터페이스를 제공하면, com.sun.mail은 그 구현체이다.

JSON

Jackson 라이브러리는 Java와 JSON 간의 데이터 변환을 쉽게 처리할 수 있게 해주는 도구

<!-- JSON 처리 라이브러리: Jackson -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.5.4</version>
</dependency>

com.fasterxml.jackson.core:
core 는 Jackson의 핵심 모듈로, JSON 데이터를 직렬화하고 역직렬화하는 기능을 제공합니다.

jackson-databind:
jackson-databind 는 객체 매핑 라이브러리이다. 이 모듈은 JSON 데이터를 Java 객체로 변환하거나, Java 객체를 JSON으로 변환하는 데 사용된다.

즉, jackson-databind직렬화(Serialization)역직렬화(Deserialization)를 처리하는 핵심적인 역할을 한다.

JSON ?

JSON (JavaScript Object Notation)은 데이터를 주고받을 때 자주 사용되는 형식을 말한다. 키와 값의 쌍으로 데이터를 저장한다.

  • JSON은 데이터를 저장하거나 서버와 클라이언트 간에 정보를 주고받을 때 사용하는 형식이다.

  • 사람이 읽고 쓰기 쉬운 형식이어서 쉽게 이해할 수 있다.

  • 웹에서 서버와 클라이언트 간 데이터를 주고받을 때, JSON이 많이 사용된다.

  • 예) 웹 서비스, REST API 응답

Jackson의 역할

1. 직렬화(Serialization):

Java 객체를 JSON 형식으로 변환하는 작업이다. 예를 들어, 서버에서 JSON 형식으로 데이터를 응답할 때 사용된다.

2. 역직렬화(Deserialization):

JSON 형식의 데이터를 Java 객체로 변환하는 작업이다. 예를 들어, 클라이언트에서 JSON 형식으로 요청을 보낼 때 서버에서 이를 처리하기 위해 Java 객체로 변환한다.

JSON 구조

  • 객체: 중괄호 {} 안에 키-값 쌍을 정의

  • 배열: 대괄호 [] 안에 값의 목록을 정의

Meven 프로젝트 기본 생성

Maven 프로젝트가 Eclipse에서 정상적으로 동작하고, 개발 과정에서 편리하게 컴파일하고 실행 및 테스트할 수 있도록 돕는다.

JUnit

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.7</version>
    <scope>test</scope>
</dependency>

▶ JUnit는 테스트를 위한 라이브러리

<scope>test</scope> 는 이 의존성이 테스트 실행 시에만 사용되고, 배포 시에는 포함되지 않음을 의미

Maven Eclipse Plugin

<plugin>
    <artifactId>maven-eclipse-plugin</artifactId>
    <version>2.9</version>
    <configuration>
        <additionalProjectnatures>
            <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
        </additionalProjectnatures>
        <additionalBuildcommands>
            <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
        </additionalBuildcommands>
        <downloadSources>true</downloadSources>
        <downloadJavadocs>true</downloadJavadocs>
    </configuration>
</plugin>

maven-eclipse-plugin 은 Eclipse IDE에서 Maven 프로젝트를 쉽게 관리하고 빌드할 수 있도록 도와준다.

Maven Compiler Plugin

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.5.1</version>
    <configuration>
        <source>1.6</source>
        <target>1.6</target>
        <compilerArgument>-Xlint:all</compilerArgument>
        <showWarnings>true</showWarnings>
        <showDeprecation>true</showDeprecation>
    </configuration>
</plugin>

maven-compiler-plugin 은 자바 코드 컴파일을 담당한다.
-Xlint:all은 컴파일 시 경고를 모든 경고에 대해 표시하게 하고, showWarningsshowDeprecationtrue 로 설정하여 경고와 사용 중단된 코드에 대한 경고를 출력한다.

Exec Maven Plugin

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.2.1</version>
    <configuration>
        <mainClass>org.test.int1.Main</mainClass>
    </configuration>
</plugin>

org.test.int1.Main 클래스의 main 메서드를 실행하도록 설정되어 있다.
이 부분은 주로 애플리케이션을 실행하는 데 사용된다.

profile
개발 공부중•••

0개의 댓글