<properties>
- 프로젝트에서 사용할 라이브러리의 버전을 정의하는 설정
- java-varsion : 1.8(Java 8)
- org.springframwork-version : 5.3.29
- aspectj-varsion : 1.9.19
- AspectJ : AOP(Aspect-Oriented Programming) 지원하는 라이브러리
- slf4j version : 2.0.7
- slf4j : 로그 기록을 위한 인터페이스를 제공하는 라이브러리
<dependency>
- 필요한 jar 파일을 자동으로 가져온다
- Meven에서 의존성을 정의할 때 사용하는 태그
- Spring의 spring-context 모듈을 프로젝트에서 사용할 수 있도록 설정합니다.
- <exclusions>: 특정 라이브러리를 제외하는 설정
<spring-context>
- Spring 프레임워크 관련 라이브러리임을 나타냅니다
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
<exclusions>
<!-- Exclude Commons Logging in favor of SLF4j -->
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
- <groupId>org.springframework</groupId>: Spring 프레임워크 관련 라이브러리
- <artifactId>Springdml spring-context</artifactId> 모듈은 애플리케이션의 컨텍스트(빈 관리, 의존성 주입 등)를 처리하는 핵심 모듈
- <exclusions> : 특정 라이브러리를 제외하는 설정
- Spring에서는 기본적으로 commons-logging을 사용하여 로그를 처리 하지만, 이 부분에서 slf4j를 사용하려는 목적으로 commons-logging을 제외하고 있습니다.
⇒Spring의 spring-context 모듈을 프로젝트에 추가하면서 ,기본적으로 포함한 commons-logging 라이브러리를 제외
<spring-webmvc>
- spring-webmvc 모듈을 사용하도록 설정
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
- <groupId>org.springframework</groupId> : Spring 관련 라이브러리을 나타냅니다.
- <artifactId>spring-webmvc</artifactId> : Spring의 spring-webmvc 모듈
- 이 모듈은 Spring MVC(Model-View-Controller)기능 제공하여 웹 애플리케이션 개발에 사용
⇒ Spring의 spring-webmvc모듈을 프로젝트에 추가하는 Maven 의존성 설정입니다.
< aspectjrt >
- aspenctjrt 모듈을 사용하도록 설정
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
- <groupId>org.aspectj</groupId> : AspectJ 라이브러리의 그룹 ID
- AspectJ : 관점 지향 프로그래밍(AOP)을 지원하는 프레임워크
- <artifactId>aspenctjrt</artifactId> : AspectJ의 런타임 라이브러리를 나타냅니다.
- 이 모듈은 AspectJ에서 관점(Aspect)과 조언(Advice)을 처리할 때 필요한 기본적인 런타임 지원을 제공합니다.
⇒ AspectJ 런타임 라이브러리인 aspectjrt를 프로젝트에 추가하는 Maven 의존성 설정입니다.
< Logging >
- slf4j와 log4j를 사용한 로깅 관련 의존성 추가
<slf4j-api>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${org.slf4j-version}</version>
</dependency>
- org.slf4j(Simple Logging Facade for Java) API를 프로젝트에 추가합니다.
- 라이브러리는 로깅을 추상화하여 여러 로깅 프레임워크를 사용할 수 있게 해줍니다.
<jcl-over-slf4j>
- JCL(Java Commons Logging) → slf4j
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
- org.slf4j:jcl-over-slf4j : 이 모듈은 Apache Commons Logging(JCL)을 slf4j로 리다이렉트 합니다.
- 기존 프로젝트가 JCL을 사용 중인 상황에서 slf4j를 사용하고 싶을때 jcl-over-slf4j 모듈을 사용합니다.
- JCL을 사용하는 코드가 있을 경우, slf4j를 통해 로깅을 처리하게 됩니다.
- <scope>runtime</scope> : 이 의존성은 런타임에만 사용되면, 컴파일 시에는 필요하지 않습니다.
"Apache Commons Logging(JCL)을 SLF4J로 리다이렉트한다"는 의미는,
JCL을 사용하는 기존 코드에서 발생하는 모든 로그가 slf4j를 통해 처리되도록 바꾸는 것을 말합니다.
즉, JCL이 아닌 slf4j가 로그 출력의 중심 역할을 하도록 설정하는 것입니다.
JCL와 slf4j 차이점
- JCL (Java Commons Logging) : 로깅에 사용되는 추상화 프레임워크 입니다.
- JCL을 사용하면 여러 로깅 프레임워크(Log4j, java.util.loggin 등) 중 하나를 선택하여 사용할 수 있습니다.
그러나, JCL은 과거에 종종 성능 문제와 충돌이 발생하는 단점이 있습니다.
- JCL을 사용하면 여러 로깅 프레임워크(Log4j, java.util.loggin 등) 중 하나를 선택하여 사용할 수 있습니다.
- slf4j (Simple Loggin Facade for Java) : JCL과 비슷한 목적의 로깅 추상화 라이브러리 이지만, 더 간단하고 일관된 방식으로 다양한 로깅 프레임워크를 지원합니다.
- slf4j는 성능이 뛰어나고, 현대적인 로깅 프레임워크와의 호환성이 더 좋습니다.
<slf4j-log4j12>
- slf4j → Log4j
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
- org.slf4j:slf4j-log4j12 : slf4j를 Lof4j 1.x로 연결하는 어댑터입니다.
- slf4j를 통해 로깅된 메시지는 Log4j를 사용하여 실제로 출력됩니다.
- <scope>runtime</scope> : 이 의존성은 런타임에만 사용되면, 컴파일 시에는 필요하지 않습니다.
<log4j>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
<exclusions>
<exclusion>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
</exclusion>
<exclusion>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jmx</groupId>
<artifactId>jmxri</artifactId>
</exclusion>
</exclusions>
<scope>runtime</scope>
</dependency>
- log4j:lo4j : Apache Log4j 1.x를 사용하는 의존성입니다.
- Log4j는 slf4j를 통해 실제 로그 기록합니다.
- <exclusions> : 불필요한 의존성(javax.mail,javax.jms,jmxtools,jmxri)을 제외합니다.
- 이러한 라이브러리들은 Log4j에서 사용되지 않으므로 제외되어 로드되지 않도록 설정합니다.
- <scope>runtime</scope> : 이 의존성은 런타임에만 사용되면, 컴파일 시에는 필요하지 않습니다.
⇒ slf4j와 Log4j를 사용하여 로깅 기능을 설정하는 Maven 의존성입니다.
slf4j 는 로깅 인터페이스를 제공하며, Log4j는 실제 로그 기록을 처리합니다.
jcl-over-slf4j는 Apache Commons Logging(JCL)을 slf4j로 전환하여 일관된 로깅 처리가 가능합니다.
<javax.inject>
- javax.inject 라이브러리를 의존성 추가하는 설정
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
- <groupId>javax.inject</groupId> : Java의 의존성 주입 관련 라이브러리인 javax.inject 의 그룹을 나타냅니다.
- <artifactId>javax.inject</artifactId> : javax.inject라는 라이브러리를 나타냅니다.
- 이 라이브러리는 Java에서 의존성 주입(Dependency Injection) 표준을 정의합니다.
- <version>1</version> : javax.inject 라이브러리의 첫 번째 릴리스 버전입니다.
- javax.inject 라이브러리는 의존성(Dependency Injection)과 관련된 표준 인터페이스들 제공합니다.
주로 사용되는 어노테이션은 다음과 같습니다.- @Inject : 의존성을 주입할 때 사용하는 어노테이션
- @Named : 의존성을 구체적으로 명시할 때 사용
- @Singleton : 해당 객체가 싱글턴(Singleton)으로 생성되도록 지정합니다.
<javax.servlet-api>
- javax.servlet-api 라이브러리 의존성 추가하는 설정
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
- <groupId>javax.servlet</groupId> : Java Servlet API를 제공하는 라이브러리의 그룹을 나타냅니다.
- <artifactId>javax.servlet-api</artifactId> : Java servlet API의 구현체를 나타냅니다.
- 이 라이브러리는 서블릿(웹 애플리케이션의 서버 측 컴포넌트) 관련 API를 정의합니다.
- Java EE의 서블릿 사양을 정의한 API입니다. 사용하여 HTTP 요청과 응답을 처리하는 서블릿 클래스를 작성할 수 있습니다.
- <version>4.0.1</version> : Java Servlet API의 4.0.1 버전의미
- 이는 servlet 4.0 규격에 해당하는 API 입니다.
- <scope>provided</scope> : 해당 라이브러리가 애플리케이션 서버 나 컨테이너(예 : Tomcat, Jetty)에서 제공된다는 것을 의미합니다.
- 즉, 애플리케이션이 빌드 되거나 배포될 때 이 라이브러리가 포함하지 않고, 애플리케이션 서버가 이를 제공합니다.
- 일반적으로 애플리케이션 서버가 이미 이 API를 제공하기 때문에, Maven 빌드 결과물에는 이 라이브러리가 포함되지 않으며, 서버 환경에서 자동으로 제공됩니다.
<JSP>
<JSP API>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
<scope>provided</scope>
</dependency>
- <groupId>javax.servlet.jsp</groupId> : JSP API를 제공하는 라이브러리 입니다.
- <artifactId>javax.servlet.jsp-api</artifactId> : JSP API를 정의하는 아티팩트 ID 입니다.
- <scope>provided</scope> : 해당 라이브러리가 애플리케이션 서버 나 컨테이너(예 : Tomcat)에서 제공된다는 것을 의미합니다.
- 즉, 애플리케이션이 빌드 되거나 배포될 때 이 라이브러리가 포함하지 않고, 애플리케이션 서버가 이를 제공합니다.
- 일반적으로 애플리케이션 서버가 이미 이 API를 제공하기 때문에, Maven 빌드 결과물에는 이 라이브러리가 포함되지 않으며, 서버 환경에서 자동으로 제공됩니다.
< JSTL >
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
- <groupId>javax.servlet</groupId> : JSTL (JSP Standard Tag Library)를 제공하는 라이브러리의 그룹
- <artifactId>jstl</artifactId> : JSTL을 정의하는 아티팩트 ID
- JSP 페이지에서 사용되는 표준 태그 라이브러리 제공합니다.
< JUnit >
- JUnit 라이브러리를 테스트 의존성을 추가하는 설정입니다.
- JUnit : Java의 단위 테스트 프레임워크로, 테스트 클래스와 메서드 정의하고 실행하는 데 사용
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
- <groupId>junit</groupId> : JUnit 라이브러리의 그룹 ID 입니다.
- <artifactId>junit</artifactId> : JUnit 라이브러리의 아티팩트 ID 입니다.
- <scope>test</scope> : Junit이 테스트 코드를 작성하고 실행 하는 데 사용되는 것을 의미 합니다.
- 즉, JUit 라이브러리는 애플리케이션의 메인 빌드에 포함되지 않고, 오로지 테스트를 실행하는 데만 사용됩니다.
- 이 라이브러리는 애플리케이션을 배포할 때 포함되지 않습니다.
< MyBatis >
< MyBatis >
- MyBatis 라이브러리를 의존성으로 추가하는 설정입니다.
- xml파일로 쿼리를 작성하게 해주는 라이브러리
- SQL 쿼리를 xml 파일로 정의하고 Java 객체와 매핑할 수 있게 해줍니다.
- 기본적으로 SQL 쿼리와 데이터베이스 상호작용을 보다 유연하게 관리 할 수 있도록 도와줍니다.
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.13</version>
</dependency>
- <groupId> org.mybatis </groupId> : mybatis 라이브러리의 그룹 ID 입니다.
- <artifactId> mybatis </artifactId> : mybatis 라이브러리의 아티팩트 ID 입니다.
< MyBatis-Spring >
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.1.1</version>
</dependency>
- <groupId> org.mybatis </groupId> : MyBatis-Spring 라이브러리의 그룹 ID 입니다.
- <artifactId> mybatis </artifactId> : MyBatis-Spring 라이브러리의 아티팩트 ID 입니다.
MyBatis-Spring 란?
- MyBatis-Spring 라이브러리는 Spring 프레임워크와 MyBatis를 통합하기 위한 라이브러리 입니다.
- 이 라이브러리를 사용하면 MyBatis와 Spring의 기능을 결합하여 트랜잭션 관리와 데이터베이스 자겅ㅂ을 보다 원할하게 처리할 수 있습니다.
- 주로 다음과 같은 기능을 제공
- 트랜잭션 관리 : Spring의 트랜잭션 관리 기능을 MyBatis와 통합하여, 데이터베이스 트랙잭션을 보다 효율적으로 처리할 수 있습니다.
- MyBatis 설정 : Spring의 설정 파일을 통해 MyBatis의 설정을 간편하게 관리 할 수 있습니다.
- DAO 통합 : Spring의 DAO 지원 기능을 사용하여 MyBatis 매퍼를 Spring 빈으로 통합 할 수 있습니다.
⇒ 두 가지 의존성은 MyBatis를 사용하여 데이터베이스와 상호작용하고, MyBatis-Spring을 통해 Spring 프레임워크와 MyBatis를 통합하여 보다 원할하게 데이터베이스 작업을 수행할 수 있게 해줍니다.
<Spring JDBC>
- Spring JDBC 라이브러리를 의존성으로 추가하는 설정입니다.
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
- <groupId>org.springframework</groupId>: Spring 프레임워크 관련 라이브러리
- <artifactId>spring-jdbc</artifactId> : Spring JDBC 모듈의 아티팩트 ID 입니다.
Spring JDBC란?
- Spring JDBC는 Spring 프레임워크의 모듈 중 하나로, 데이터베이스와 상호작용을 단순화하고 일관되게 만들어줍니다.
- JDBC 템플릿 : 복잡한 JDBC 코드(예: 데이터베이스 연결, 쿼리 실행, 예외 처리)를 간단하게 만들어주는 JdbcTemplate 클래스를 제공합니다. 이를 통해 코드의 중복을 줄이고, 예외처리를 일관되게 할 수 있습니다.
- 예외 변환: JDBC 관련 예외를 Spring의 데이터 액세스 예외로 변환하여, 더 유연한 예외 처리를 지원합니다.
- 데이터베이스 연결 : 커넥션 풀을 관리하고, 데이터베이스와의 연결을 효율적으로 처리합니다.
⇒ Spring의 JDBC 기능을 프로젝트에 추가하여, 데이터베이스와의 상호작용르 보다 효율적이고 간편하게 관리 할 수 있게 해줍니다. Spring JDBC를 사용하면 SQL 쿼리 실행 및 예외 처리를 단순화하고, 데이터베이스 작업을 일관되게 처리할 수 있습니다.
< commons-dbcp2 >
- Apache Commons DBCP 라이브러리를 의존성으로 추가하는 설정입니다.
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.7.0</version>
</dependency>
- <groupId>org.apache.commons</groupId> : Apache Commons 프로젝트 관련 라이브러리 입니다.
- <artifactId>commons-dbcp2</artifactId> : Apache Commons DBCP (Database Connection Pooling) 2.x 버전의 아티팩트 ID 입니다.
Apache Commons DBCP 란?
- Apache Commons DBCP는 데이터베이스 연결 풀을 관리하는 라이브러리 입니다.
- 연결 풀(connection pool)은 데이터베이스와의 연결을 미리 생성해두고 필요할 때 재사용할 수 있도록 관리하는 방식입니다.
- 이를 통해 데이터베이스와의 연결을 효율적으로 관리하고 성능을 향상 시킬 수 있습니다.
- DBCP의 주요 기능
- 연결 풀 관리 : 데이터베이스 연결을 미리 생성하고 풀에 보관하여, 필요할 때마다 새로 생성하지 않고 재사용할 수 있도록 합니다.
- 자동 커넥션 회수 : 사용이 끝난 커넥션을 자동으로 반환하여, 커넥션이 누수되지 않도록 관리합니다.
- 커넥션 설정 : 커넥션의 최대 수, 최소 수 , 유휴 시간 등을 설정하여 커넥션 풀의 성능을 조정할 수 있습니다.
- 자원 관리 : 커넥션을 효율적으로 관리하고, 시스템 자원을 절약합니다.
⇒ DBCP를 사용하면 데이터베이스와의 연결을 미리 생성해두고 필요할 때 재사용하여, 연결 생성과 해제의 오버헤드를 줄이고 데이터베이스 접근 성능을 개선 할 수 있습니다.
< log4jdbc-log4j2-jdbc4 >
- log4jdbc - log4j2 라이브러리를 의존성으로 추가하는 설정입니다.
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
<version>1.16</version>
</dependency>
- <groupId>org.bgee.log4jdbc-log4j2</groupId> : log4jdbc-log4j2 라이브러리의 그룹ID입니다.
- <artifactId>log4jdbc-log4j2-jdbc4</artifactId> : log4jdbc와 log4j2를 사용하는JDBC 드라이버 래퍼의 아티팩트 ID입니다.
log4jdbc-log4j2 란?
- log4jdbc-log4j2는 JDBC 호출을 로깅할 수 있게 해주는 라이브러리 입니다.
- 이 라이브러리를 사용하면 데이터베이스에 대한 SQL 쿼리와 업데이트를 로그로 기록 할 수 있습니다.
- 주로 SQL 쿼리 디버깅이나 성능 모니터링에 유용합니다.
- log4jdbc-log4j2의 주요 기능:
- SQL 로깅 : 데이터베이스와의 상호작용을 로그로 기록하여 실행된 SQL 쿼리와 파라미터 값을 확인할 수 있습니다.
- 실행 시간 측정 : 쿼리 실행 시간을 측정하여 성능 문제를 진단할 수 있습니다.
- 로그 포맷팅 : 로그 출력을 다양한 형식으로 포맷하여, 로그 파일이나 콘솔에서 보기 쉽게 제공합니다.
- 다양한 드라이버 지원 : 여러 JDBC 드라이버와 호환되며, 설정에 따라 드라이버의 호출을 감시할 수 있습니다.
⇒ log4jdbc와 log4j2를 사용하는 JDBC 드라이버 래퍼를 프로젝트에 추가하여 데이터베이스와의 SQL 상호작용을 로깅하고 디버깅할 수 있게 해줍니다. 이를 통해 실행된 SQL쿼리, 파라미터 , 쿼리 실행 시간 등을 기록하여 데이터베이스 성능 분석과 문제 해결에 유용합니다.
< ojdbc8 >
- ojdbc8 라이브러리를 의존성으로 추가하는 설정입니다.
<dependency>
<groupId>com.oracle.ojdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.3.0.0</version>
</dependency>
- <groupId>com.oracle.ojdbc</groupId> : Oracle JDBC 드라이버 라이브러리의 그룹 ID 입니다.
- <artifactId>ojdbc8</artifactId> : Oracle JDBC 드라이버의 아티팩트 ID 입니다.
ojdbc8
- Oracle 데이터베이스에 연결하기 위한 JDBC 드라이버입니다.
- 이 드라이버는 Java 8 이상에서 사용할 수 있도록 설계되었습니다.
- JDBC(Java Database Connectivity) 드라이버는 자바 애플리케이션이 Oracle 데이터베이스와 상호작용할 수 있게 해주는 소프트웨어 입니다.
- 주요기능 :
- JDBC API 지원 : JDBC API를 구현하여 표준 SQL 작업을 지원합니다.
- 성능 최적화 : Oracle 데이터베이스의 성능을 최적화하기 위해 Oracle에서 제공하는 기능을 지원합니다.
- 대규모 데이터베이스 지원 : 대규모 데이터베이스 작업과 트랜잭션을 지원합니다.
⇒ 이 의존성은 Oracle 데이터베이스와의 연결을 위한 JDBC 드라이버를 프로젝트에 추가합니다.
이를 통해 자바 애플리케이션에서 Oracle 데이터베이스와 연결하고, SQL쿼리를 실행하며, 데이터베이스 작업을 수행할 수 있습니다. ojdbc8은 Java8과 호환되며, Oracle의 최신 데이터베이스 기능을 지원합니다.
파일 업로드 및 이미지 처리 관련 라이브러리
<commos-fileupload>
- 파일 업로드 라이브러리
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
- commons-fileupload는 Java에서 파일 업로드 기능을 처리하는 라이브러리입니다.
- 주로 웹 애플리케이션에서 사용되며, 사용자로부터 업로드된 파일을 서버에서 처리하고 저장하는 기능을 제공합니다.
<imgscalr-lib>
- 이미지 처리 라이브러리
<dependency>
<groupId>org.imgscalr</groupId>
<artifactId>imgscalr-lib</artifactId>
<version>4.2</version>
</dependency>
- imgscalr-lib는 이미지 크기 조정 및 처리 작업을 간편하게 수행할 수 있는 라이브러리입니다.
- 이미지의 크기를 조정하거나 변환할 때 유용합니다.
- 비율 유지, 품질 조정 등의 기능을 지원합니다.
< thumbnailator >
- 이미지 처리 라이브러리
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.8</version>
</dependency>
- thumbnailator는 이미지의 썸네일을 쉽게 생성할 수 있는 라이브러리 입니다.
- 다양한 이미지 처리 기능을 지원하며, 이미지의 크기 조정, 자르기, 회전등을 간편하게 처리할 수 있습니다.
< lombok >
- Lombok 라이브러리를 프로젝트에 추가합니다.
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.32</version>
<scope>provided</scope>
</dependency>
Lombok의 역할
- Lombok은 자바에서 반복적인 코드(예: getter,setter,toString,equals,hashCode메소드 등)를 간편하게 작성할 수 있게 해주는 라이브러리 입니다.
- Lombok 주로 기능 :
- @Getter/@Setter : 필드에 대한 getter/setter 메소드를 자동으로 생성합니다.
- @ToString : 객체의 문자열 표현을 자동으로 생성합니다.
- @EqualsAndHashCode : equals() 및 hashCode() 메소드를 자동으로 생성합니다.
- @NoArgsConstructor / @AllArgsConstructor/ @RequiredArgsConstructor : 다양한 형태의 생성자를 자동으로 생성합니다.
- @Data : 위 기능을 종합적으로 제공하는 편리한 어노테이션입니다.
< jackson-databind >
- Jackson Databind 라이브러리를 프로젝트에 추가합니다.
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
Jackson Databind의 역할
- Jackson Databind는 JSON 데이터를 자바 객체로 변환하거나 자바 객체를 JSON 데이터로 변환하는 데 사용되는 라이브러리 입니다.
- Jackson 주요 기능 :
- JSON 데이터 직렬화 (Serializtion) : 자바 객체를 JSON 포맷으로 변환합니다.
- JSON 데이터 역직렬화(Deserialization) : JSON 데이터를 자바 객체로 변환합니다.
- 데이터 바인딩 : 자바 객체와 JSON 간의 매핑을 처리합니다.
- 주요 특징
- 유연한 데이터 바이딩 : Jackson은 POJO(Plain Old Java Object)와 JSON 간의 매핑을 유연하게 처리할 수 있습니다. 이를 통해 다양한 데이터 구조와 JSON 포맷을 쉽게 처리할 수 있습니다.
- 성능 : Jackson은 높은 성능을 제공하는 데이터바인딩 라이브러리로, 큰 JSON 데이터를 빠르게 처리할 수 있습니다.
- 유연성 : 커스터마이징 가능한 직렬화 및 역직렬화 기능을 제공하여 복잡한 데이터 구조를 처리할 수 있습니다.
- 플러그인 지원 : Jackson은 다양한 모듈과 플러그인을 지원하여 xml, yaml등 다른 데이터 포맷과의 변환도 지원합니다.
< Apache Commons IO>
- Apache Commons IO는 자바에서 파일 및 스트림 작업보다 효율적으로 처리할 수 있도록 돕는 유틸리티 라이브러리입니다.
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
Apache Commons IO의 역할
- Apache Commons IO는 자바에서 파일 및 스트림과 관련된 작업을 보다 쉽게 처리할 수 있게 해주는 유틸리티 라이브러리 입니다.
- 주요 기능 :
- 파일 및 디렉토리 작업 :
- 파일 복사, 이동, 삭제 등 파일 시스템 작업을 간편하게 처리 할 수 있는 유틸리티 메서드를 제공합니다.
- 디렉토리 및 파일 목록을 쉽게 가져올 수 있는 기능을 제공합니다.
- 스트림 처리 :
- 스트림과 리더/라이터의 작업을 간편하게 처리할 수 있는 클래스와 메서드를 제공합니다.
- 스트림에서 바이트를 읽고 쓰는 작업을 쉽게 처리 할 수 있습니다.
- 파일 입출력 :
- 파일을 읽고 쓰는 데 필요한 유틸리티 메서드를 제공합니다.
- 예를 들어, 파일의 내용을 문자열로 읽거나 문자열을 파일에 쓰는 작업을 쉽게 처리 할 수 있습니다.
- IO 예외 처리 :
- IO 작업 중 발생할 수 있는 예외를 처리하는 데 유용한 유틸리티 클래스를 제공합니다.
- 파일 필터링 :
- 특정 파일 패턴이나 조건에 따라 파일을 필터링할 수 있는 기능 제공합니다.
- 파일 및 디렉토리 작업 :
주요 클래스 및 메서드
- FileUtils : 파일과 디렉토리 작업을 위한 유틸리티 메소드를 제공하는 클래스
- 예: FileUtils.copyFile(sourceFile, destinationFile), FileUtils.deleteQuietly(file)
- IOUtils : 스트림과 리더/라이터 작업을 위한 유틸리티 메서드를 제공하는 클래스
- 예 : IOUtils.toString(inputStream, StandardCharsets.UTF_8),IOUtils.copy(inputStream, outputStream)
< Apache Tiles >
- Apache Tiles 라이브러리 중 하나의 tiles-jsp를 프로젝트에 추가합니다.
- Apache Tiles는 웹 애플리케이션에서 페이지 레이아웃과 UI 구성 요소를 관리하고 재사용할 수 있게 해주는 프레임워크 입니다.
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-jsp</artifactId>
<version>3.0.8</version>
</dependency>
Apache Tiles의 역할
- Apache Tiles는 자바 웹 애플리케이션에서 재사용 가능한 UI 구성 요소를 관리하고 조합하는 데 사용되는 템플릿 프레임워크입니다.
- tiles-jsp는 JSP (JavaServerPages)와 함께 Tiles를 사용하기 위한 모듈 입니다.
- 주요 기능 및 사용법 :
- 템플릿 기반 UI 구성 :
- Apache Tiles는 웹 페이지를 구성하는 데 필요한 다양한 UI 요소(헤더, 풋터, 사이드바 등)를 정의하고 관리 할 수 있도록 돕습니다. 이를 통해 페이지의 일관성과 재사용성을 높일 수 있습니다.
- 템플릿 상속 :
- JSP 페이지에서 Tiles 템플릿을 상속받아 공통 레이아웃을 재사용할 수 있습니다.
이를 통해 코드 중복을 줄이고 유지보수를 용이하게 합니다.
- JSP 페이지에서 Tiles 템플릿을 상속받아 공통 레이아웃을 재사용할 수 있습니다.
- 다양한 레이아웃 관리:
- 복잡한 레이아웃을 관리하고 조합하는 데 유용하며, 페이지의 특정 부분을 조정하거나 변경할 때 전체 페이지에 영향을 미치지 않도록 할 수 있습니다.
- 페이지 구성 요소의 재사용 :
- 공통 구성 요소를 정의하고 여러 페이지에서 재사용함으로써 개발 속도를 높이고, 일관된 사용자 경험을 제공할 수 있습니다.
- 템플릿 기반 UI 구성 :
주요 클래스 및 메서드
- TilesContainer : Tiles 의 컨테이너로 ,템플릿을 정의하고 페이지 요청에 맞게 적절한 템플릿을 제공하는 역할
- TilesRequestContext : Tiles 요청 컨텍스트로, JSP 페이지에서 Tiles의 기능을 사용할 때 필요한 정보를 제공합니다.
< Hibernate Validator >
- Hibernate Validator 라이브러리를 프로젝트에 추가합니다.
- 자바 객체의 유효성 검사를 처리하기 위한 표준 구현체입니다.
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.4.2.Final</version>
</dependency>
Hibernate Validator의 역할
- Hibernate Validator 는 Java 애플리케이션에서 객체 필드의 유효성 검사를 처리하는 Bean Validation의 구현체입니다.
- JSR-303 및 JSR-380 (Bean Validation 2.0) 명세를 따르며, 데이터 유효성 검증을 위한 강력하고 유연한 방법을 제공합니다.
- 주요 기능 :
- 어노테이션 기반 유효성 검사
- @NotNull, @Size, @Min, @Max 와 같은 어노테이션을 사용하여 필드나 메서드에 유효성검사 적용
- 커스텀 유효성 검사
- 어노테이션을 커스터마이징하여 고유한 유효성 검사 규칙을 정의할 수 있습니다.
- 예를 들어, 이메일 형식을 검증하는 커스텀 어노테이션을 만들 수 있습니다.
- 통합 사용 :
- Hibernate와의 통합을 통해 데이터베이스 레벨에서 유효성 검사를 수행할 수 있으면, JPA 엔터티와도 유효성 검사를 쉽게 통합 할 수 있습니다.
- 다양한 유효성 검사 어노테이션 :
- 기본 제공되는 어노테이션 외에도 ,@Email,@pattern 등의 복잡한 유효성 검사를 쉽게 적용할 수 있습니ㅏㄷ.
- 그룹을 통한 검증 :
- 유효성 검사를 그룹화하여 특정 상황에서만 유효성 검사를 실행할 수 있습니다. 이를 통해 다단계 검증이 가능합니다.
- 어노테이션 기반 유효성 검사
주요 클래스 및 메서드
- Validator : 유효성 검사 작업을 실행하는 객체
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<User>> violations = validator.validate(user);
- ConstraintViolation : 유효성 검사에서 발생한 오류 정보를 담고 있는 객체
< Spring Security >
- Spring Security 라이브러리를 프로젝트에 추가합니다.
- spring-security-web 과 spring-security-core 는 주로 인증과 권한 부여를 처리
- spring-security-config 는 보안 설정을 쉽게 할 수 있도록 돕습니다.
- spring-security-taglibs 는 JSP페이지와의 통합을 제공합니다.
< Spring Security Web >
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>5.8.6</version>
</dependency>
- 역할 : Spring Security의 웹 기반 보안 기능을 제공합니다. HTTP 요청에 대한 인증 및 권한 관리를 수행합니다.
- 주요 기능 : 웹 애플리케이션의 로그인/로그아웃, 세션 관리, URL 보호 등을 처리합니다.
< Spring Security Config >
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>5.8.6</version>
</dependency>
- 역할 : Spring Security의 설정을 도와주는 라이브러리입니다.
- 주요 기능 : xml이나 자바 기반의 설정을 통해 보안 규칙을 정의할 수 있도록 지원합니다.
< Spring Security Core >
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>5.8.6</version>
</dependency>
- 역할 : Spring Security의 핵심 기능을 제공합니다.
- 주요 기능 : 사용자 인증(Authentication) 및 권한 부여(Authorization)를 처리하며, 비밀번호 암호화, 역할 기반 접근 제어 등의 기능을 포함합니다.
< Spring Security Taglibs>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>5.8.6</version>
</dependency>
- 역할 : Spring Security와 JSP 태그 라이브러리를 연결하는 라이브러리 입니다.
- 주요 기능 : JSP 페이지에서 <Security:authorize>와 같은 태그를 사용하여 보안 설정을 템플릿 레벨에서 처리 할수 있게 해줍니다.
<AOP>
- AspectJ 라이브러리를 프로젝트에 추가하여 AOP 기능을 제공하기 위한 구성입니다.
- aspectjrt는 AspectJ의 런타임 지원을 제공하여 AOP 기능을 활성화합니다.
- aspectjweaver는 런타임에 위빙을 가능하게 하여, 프로그램 실행 중에 Aspect를 동적으로 삽입합니다.
- aspectjtools는 컴파일러 도구를 제공하여 AOP 코드를 빌드 및 관리할 수 있도록 지원합니다.
- 모두 AspectJ 기반의 AOP 기능을 구현하기 위해 필요하며, 프로젝트에서 횡단 관심사를 분리하는 데 유용합니다.
<aspectjrt>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
- 역할 : AspectJ의 런타임 라이브러리 입니다.
- 주요 기능 : AOP에서 정의된 Aspect(횡단 관심사)의 실행을 지원하는 데 필요합니다. 이를 통해 런타임에서 다양한 AOP 기능을 사용할 수 있습니다.
<aspectJ Weaver>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
- 역할 : AspectJ의 위빙(Weaving) 기능을 제공합니다.
- 주요 기능 : 위빙은 컴파일 시점, 로드 시점 또는 런타임에 클래스 파일에 Aspect를 삽입하는 과정입니다.
이 라이브러리는 런타임 위빙을 통해 클래스에 AOP를 적용할 수 있도록 돕니다.
<aspectJ Tools>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
- 역할 : AspectJ 관련 도구들을 제공합니다.
- 주요 기능 : 컴파일러 및 기타 AspectJ 관련 툴을 사용하여 Aspect코드를 빌드하고, 프로젝트에서 AOP를 쉽게 구성할 수 있게 합니다.
< json-simple >
- json-simple은 간단하고 가벼운 JSON파싱 및 생성 라이브러리 입니다.
- JSON 데이터를 다루기 위한 간단한 라이브러리인 json-simple을 프로젝트에 추가하는 역할을 하며, JSON파싱 및 생성을 손쉽게 할 수 있도록 도와줍니다.
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
- <groupId>com.googlecode.json-simple</groupId> : json-simple 라이브러리가 속한 그룹입니다.
- <artifactId>json-simple</artifactId> : json-simple 라이브러리 이름
주요 기능
- JSON 파싱 : 이 라이브러리는 문자열로 표현된 JSON 데이터를 Java 객체로 파싱하는 기능을 제공합니다.
- JSON 생성 : Java 객체를 JSON 형식으로 변환하여 쉽게 생성할 수 있습니다.
- 간결한 구조 : json-simple은 다른 JSON 라이브러리에 비해 가볍고 사용법이 단순하여 빠르게 JSON을 다룰 수 있는 장점이 있습니다.
<build>
- 프로젝트의 빌드 프로세스를 관리하고, 여러 플러그인을 사용하여 다양한 기능을 제공하는 내용을 포함하고 있습니다.
<maven-eclipse-plugin>
- 목적 : 이 플러그인은 Maven 프로젝트를 Eclipse 개발 환경에 맞춰 설정해줍니다.
<plugin>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.10</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>
- <additionalProjectnatures> : Spring Nature를 추가하여, Eclipse 에서 Spring 프로젝트로 인식되도록 합니다.
- <additionalBuildcommands> : Spring 빌더를 Eclipse 빌드 프로세스에 추가하여 Spring 구성 파일을 처리합니다.
- <downloadSources>true</downloadSources> : 라이브러리의 소스 코드를 다운로드하여 IDE에서 디버깅에 사용할 수 있습니다.
- <downloadJavadocs>true</downloadJavadocs> : Javadoc 문서를 다운로드하여 IDE에서 라이브러리의 API문서를 쉽게 참고 할수 있습니다.
< maven-compiler-plugin>
- Java 컴파일러 설정을 제어하는 플러그인
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>${java-version}</source>
<target>${java-version}</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
- <source>${java-version}</source> : 컴파일할 소스 코드의 Java 버전을 지정합니다.
- <target>${java-version}</target> : 컴파일된 바이트코드가 호환되는 Java 버전을 지정합니다.
- <compilerArgument>-Xlint:all</compilerArgument> : 컴파일러에 전달할 추가 인수로, -Xlint:all은 경고를 활성화여 코드 품질을 높이는 데 도움을 줍니다.
- <showWarnings>true</showWarnings> : 컴파일 경고 메시지를 출력하도록 설정합니다.
- <showDeprecation>true</showDeprecation> : 사용 중지된(deprecated) API 사용에 대한 경고를 표시합니다.
< exec-maven-plugin >
- Maven을 사용하여 Java 애플리케이션을 실행할 수 있게 해주는 플러그인입니다.
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<mainClass>org.test.int1.Main</mainClass>
</configuration>
</plugin>
- <mainClass>org.test.int1.Main</mainClass> : 실행할Java 클래스의 main 메서드를 지정합니다.
- org.test.int1.Main 클래스의 main 메서드가 실행됩니다.
'JAVA > 대덕인재대학교-최프' 카테고리의 다른 글
[Java]페이징 (제네릭) (0) | 2024.10.13 |
---|---|
봉사활동 카카오톡api (1) | 2024.10.10 |
환경설정 - servlet-context.xml : 스프링 웹(view) 설정 파일 (0) | 2024.09.23 |
환경설정 - root.context.xml : 스프링 설정 파일 (1) | 2024.09.09 |
환경설정 - web.xml : tomcat 서버의 설정 (1) | 2024.09.08 |