프로필

프로필 사진
Popomon
Frontend Developer
(2020/12 ~)

    카테고리

    포스트

    [Backend/Spring] 4. 메이븐 패키지 설치 (pom.xml)

    2021. 2. 17. 10:49

    꿈가게: To Do List - iOS

    꿈가게: To Do List - Android

    목차

    1. 이클립스에 스프링 개발환경 설치 후, 프로젝트 생성하기

    2. 톰캣 다운로드 후 이클립스에 불러오기

    3. 이클립스에서 톰캣으로 프로젝트 실행시키기

    4. 메이븐 패키지 설치 (pom.xml)

    5. root-context/servlet-context/web 설정파일 작성하기

    6. MySQL 설치하기

    7. 마이바티스 설정하기

    8. 스프링 시큐리티 설정하기

    9. 로그인/회원가입


    # 데이터베이스 드라이버 (MySQL, Oracle)

    데이터베이스에 맞게 드라이버의 패키지를 추가해줍니다. 다음 코드는 MySQL과 Oracle 기준으로 드라이버 패키지를 작성하였습니다.

     

    <!-- Database Driver - MySQL -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.17</version>
    </dependency>
    
    <!-- Database Driver - Oracle -->
    <dependency>
      <groupId>com.oracle</groupId>
      <artifactId>ojdbc6</artifactId>
      <version>12.1.0.1</version>
    </dependency>

     


    # 스프링 시큐리티

    스프링에서 제공하는 인증 관련 패키지입니다. 상당히 유용하고, 거의 대부분의 프로젝트가 도입하고 있기 때문에 쓰는 것을 추천합니다.

     

    <!-- Spring Security 4.x -->
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-web</artifactId>
      <version>${org.springframework.security-version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-config</artifactId>
      <version>${org.springframework.security-version}</version>
      </dependency>
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-taglibs</artifactId>
      <version>${org.springframework.security-version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-test</artifactId>
      <version>${org.springframework.security-version}</version>
      <scope>test</scope>
    </dependency>

     


    # 마이바티스

    요즘에는 JPA, Spring JPA 를 사용하는 프로젝트가 점점 늘어나고 있지만 아직 기존의 프로젝트는 직접 쿼리를 작성하는 마이바티스를 사용하는 곳이 많습니다. 따라서 업무를 위해서 학습을 한다면 마이바티스를 추천합니다.

     

    <!-- Mybatis -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.3</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>2.0.3</version>
    </dependency>

     


    # 로깅을 위한 패키지

    개발하는 동안 데이터베이스의 쿼리를 로그로 확인하기 위해서 필요한 패키지들입니다. 커넥션풀, 마이바티스 로그, slf4j 로깅 패키지들... 입니다.

     

    <!-- DBCP -->
    <dependency>
      <groupId>commons-dbcp</groupId>
      <artifactId>commons-dbcp</artifactId>
      <version>1.4</version>
    </dependency>
    
    <!-- Mybatis Log -->
    <dependency>
      <groupId>org.lazyluke</groupId>
      <artifactId>log4jdbc-remix</artifactId>
      <version>0.2.7</version>
    </dependency>
    
    <!-- Logging -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>${org.slf4j-version}</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>jcl-over-slf4j</artifactId>
      <version>${org.slf4j-version}</version>
      </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>${org.slf4j-version}</version>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>

     


    # 파일 업로드

    파일 업로드를 위한 패키지 입니다. 파일 업로드가 필요없는 프로젝트는 ... 별로 없겠죠? 따라서 필수로 추가해 주어야 하는 패키지 입니다.

     

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

     


    # JSON 데이터 처리

    JSON 데이터를 처리하기 위해서 필요한 패키지입니다. Map, List 객체와 JSON 문자열을 자유롭게 변환할 수 있습니다.

     

    <!-- JSON Data -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.10.1</version>
    </dependency>
    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.8.2</version>
    </dependency>

     


     

    # 테스트

    프로젝트 코드를 테스트하기 위한 패키지입니다. 정말 유용한 패키지인데 개발기간이 너무 짧아서 안쓰는 경우가 더 많기에 아쉬운 패키지들입니다 ...

     

    <!-- Test -->
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-core</artifactId>
      <version>2.21.0</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>

     


    # 스프링 프레임워크

    스프링 프레임워크입니다! 웹 프로젝트를 위한 패키지들을 꼭 추가해야 합니다.

     

    <!-- Spring Framework 4.x -->
    <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>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${org.springframework-version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${org.springframework-version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${org.springframework-version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${org.springframework-version}</version>
    </dependency>

     


    # 서블릿

    마지막으로 프로젝트를 생성하면 기본적으로 추가가 되어있는 서블릿입니다.

     

    <!-- Servlet (Tomcat 6.0 까지 호환) -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <scope>provided</scope>
      <version>2.1</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>

     


    # 전체 코드

    메이븐 패키지를 전부 추가한 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 https://maven.apache.org/maven-v4_0_0.xsd">
    
    	<!-- 패키지 정보 -->
    	<modelVersion>4.0.0</modelVersion>
    	<groupId>com.study</groupId>
    	<artifactId>testapp</artifactId>
    	<name>test-project</name>
    	<packaging>war</packaging>
    	<version>1.0.0-BUILD-SNAPSHOT</version>
    
    	<!-- 공용 프로퍼티 -->
    	<properties>
    		<java-version>1.8</java-version>
    		<org.springframework-version>4.3.25.RELEASE
    		</org.springframework-version>
    		<org.springframework.security-version>4.2.17.RELEASE
    		</org.springframework.security-version>
    		<org.slf4j-version>1.7.30</org.slf4j-version>
    	</properties>
    
    	<repositories>
    		<repository>
    			<id>oracle</id>
    			<name>ORACLE JDBC Repository</name>
    			<url>http://maven.jahia.org/maven2</url>
    		</repository>
    	</repositories>
    
    	<!-- 사용할 라이브러리 -->
    	<dependencies>
    
    		<!-- Database Driver - MySQL -->
    		<dependency>
    			<groupId>mysql</groupId>
    			<artifactId>mysql-connector-java</artifactId>
    			<version>8.0.17</version>
    		</dependency>
    
    		<!-- oracle -->
    		<dependency>
    			<groupId>com.oracle</groupId>
    			<artifactId>ojdbc6</artifactId>
    			<version>12.1.0.1</version>
    		</dependency>
    
    		<!-- Mybatis Log -->
    		<dependency>
    			<groupId>org.lazyluke</groupId>
    			<artifactId>log4jdbc-remix</artifactId>
    			<version>0.2.7</version>
    		</dependency>
    
    		<!-- Spring Security 4.x -->
    		<dependency>
    			<groupId>org.springframework.security</groupId>
    			<artifactId>spring-security-web</artifactId>
    			<version>${org.springframework.security-version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.security</groupId>
    			<artifactId>spring-security-config</artifactId>
    			<version>${org.springframework.security-version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.security</groupId>
    			<artifactId>spring-security-taglibs</artifactId>
    			<version>${org.springframework.security-version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.security</groupId>
    			<artifactId>spring-security-test</artifactId>
    			<version>${org.springframework.security-version}</version>
    			<scope>test</scope>
    		</dependency>
    
    		<!-- JWT -->
    		<dependency>
    			<groupId>io.jsonwebtoken</groupId>
    			<artifactId>jjwt</artifactId>
    			<version>0.9.1</version>
    		</dependency>
    
    		<!-- Mybatis -->
    		<dependency>
    			<groupId>org.mybatis</groupId>
    			<artifactId>mybatis</artifactId>
    			<version>3.5.3</version>
    		</dependency>
    		<dependency>
    			<groupId>org.mybatis</groupId>
    			<artifactId>mybatis-spring</artifactId>
    			<version>2.0.3</version>
    		</dependency>
    
    		<!-- Spring Framework 4.x -->
    		<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>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-webmvc</artifactId>
    			<version>${org.springframework-version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-jdbc</artifactId>
    			<version>${org.springframework-version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-tx</artifactId>
    			<version>${org.springframework-version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-test</artifactId>
    			<version>${org.springframework-version}</version>
    		</dependency>
    
    		<!-- DBCP -->
    		<dependency>
    			<groupId>commons-dbcp</groupId>
    			<artifactId>commons-dbcp</artifactId>
    			<version>1.4</version>
    		</dependency>
    
    		<!-- FileUpload -->
    		<dependency>
    			<groupId>commons-io</groupId>
    			<artifactId>commons-io</artifactId>
    			<version>2.0.1</version>
    		</dependency>
    		<dependency>
    			<groupId>commons-fileupload</groupId>
    			<artifactId>commons-fileupload</artifactId>
    			<version>1.4</version>
    		</dependency>
    
    		<!-- Servlet (Tomcat 6.0 까지 호환) -->
    		<dependency>
    			<groupId>javax.servlet</groupId>
    			<artifactId>javax.servlet-api</artifactId>
    			<version>3.1.0</version>
    			<scope>provided</scope>
    		</dependency>
    		<dependency>
    			<groupId>javax.servlet.jsp</groupId>
    			<artifactId>jsp-api</artifactId>
    			<scope>provided</scope>
    			<version>2.1</version>
    		</dependency>
    		<dependency>
    			<groupId>javax.servlet</groupId>
    			<artifactId>jstl</artifactId>
    			<version>1.2</version>
    		</dependency>
    
    		<!-- Test -->
    		<dependency>
    			<groupId>org.mockito</groupId>
    			<artifactId>mockito-core</artifactId>
    			<version>2.21.0</version>
    			<scope>test</scope>
    		</dependency>
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<version>4.12</version>
    			<scope>test</scope>
    		</dependency>
    
    		<!-- Logging -->
    		<dependency>
    			<groupId>org.slf4j</groupId>
    			<artifactId>slf4j-api</artifactId>
    			<version>${org.slf4j-version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.slf4j</groupId>
    			<artifactId>jcl-over-slf4j</artifactId>
    			<version>${org.slf4j-version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.slf4j</groupId>
    			<artifactId>slf4j-log4j12</artifactId>
    			<version>${org.slf4j-version}</version>
    		</dependency>
    		<dependency>
    			<groupId>log4j</groupId>
    			<artifactId>log4j</artifactId>
    			<version>1.2.17</version>
    		</dependency>
    
    		<!-- JSON Data -->
    		<dependency>
    			<groupId>com.fasterxml.jackson.core</groupId>
    			<artifactId>jackson-databind</artifactId>
    			<version>2.10.1</version>
    		</dependency>
    		<dependency>
    			<groupId>com.google.code.gson</groupId>
    			<artifactId>gson</artifactId>
    			<version>2.8.2</version>
    		</dependency>
    	</dependencies>
    
    	<build>
    		<defaultGoal>install</defaultGoal>
    		<sourceDirectory>src/main/java</sourceDirectory>
    		<testSourceDirectory>src/test/java</testSourceDirectory>
    		<outputDirectory>${project.basedir}/target/classes</outputDirectory>
    		<finalName>ROOT</finalName>
    		<plugins>
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-war-plugin</artifactId>
    				<version>2.3</version>
    			</plugin>
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-compiler-plugin</artifactId>
    				<version>2.5.1</version>
    				<configuration>
    					<source>${java-version}</source>
    					<target>${java-version}</target>
    					<encoding>UTF-8</encoding>
    					<compilerArgument>-Xlint:all</compilerArgument>
    					<showWarnings>true</showWarnings>
    					<showDeprecation>true</showDeprecation>
    				</configuration>
    			</plugin>
    		</plugins>
    	</build>
    </project>
    

     

     

    고생하셨습니다!!