공부 자료/Spring

[Spring] IntelliJ에서 Spring Framework Project 생성 및 설정(Maven)

희희웃는청바지 2023. 11. 1. 12:26

 

Maven 프로젝트 생성을 이용해
Spring Framwork 프로젝트 생성하기

 

인텔리제이에서 Spring Framework 프로젝트 생성하는 방법을 알아보고자 한다

 

기존에는 Spring Boot만 사용하여 start.spring.io 사이트를 이용해 스프링 프로젝트를 설정 후 다운받아 사용하거나

spring Initializr를 이용해 프로젝트를 생성했는데,

Spring Framework 프로젝트는 이러한 기능이 없기 때문에 Maven 프로젝트를 통해 스프링을 구현하고자 한다

 

 

https://kcode-recording.tistory.com/76

 

[Spring Boot] Spring Boot 스타터 사이트(자주 이용)

https://start.spring.io >>해당 사이트로 이동하면 Spring Boot 스프링 프로젝트 다운이 가능 [사용 방법] 1. Project 선택 : Maven / Gradle은 필요한 라이브러리를 땡겨서 오고 빌드를 하는 라이프 사이클까지

kcode-recording.tistory.com


[Maven 프로젝트 생성]

 

1. 인텔리제이를 통해 New Project를 클릭해 Maven Archetype을 선택

 

2. Name, Location을 설정한 후 아래와 같이 설정

    1) JDK : 11 Version

    2) Catalog : Internal (기본)

    3) Archetype : org.apache.maven.archetypes:maven-archetype-webapp

    4) Version : 1.0

 

3. Advanced Settings는 그대로 유지

 

4. create를 클릭

: 프로젝트가 생성되면서 다양한 것들이 build 되기 시작되면서 아래와 같은 폴더 구조가 생성된다

 


 

[Tomcat 설정]

1. web.xml과 index.jsp 삭제

: 이 두 파일은 추후 다시 설정할 것이기 때문에 삭제 후 아래에서 생성 예정

 

2. 왼쪽 상단에서 Edit Configurations 클릭 (검색도 가능)

 

3.  Add new Configurations를 통해 톰캣 추가

 

4.  톰캣 설정 진행

    - IntelliJ Ultimate 버전의 경우에는 Tomcat Server가 존재하지만, 만약 기본 버전이라면 Smart Tomcat 을 플러그인에서 설치 후 사용 가능

    - Tomcat server를 다운받아 압축을 해제한 다음 톰캣 폴더 자체를 등록 (등록 시 폴더를 열어서 등록해야 등록이 정확히 됨)

    - Context path 의 경우 프로젝트 이름이 적혀 있지만 main path에 아무것도 하기 위해 / 만 path로 설정

 

 *Smart Tomcat 플러그인 설치 : Settings >> Plugins >> Smart Tomcat 검색 및 설치

   

5.  Ok 클릭 - Configuration이 Current file에서 톰캣으로 변경되었다면, 톰캣 설정 완료

 


 

[Spring Framework 설정]

 

톰캣까지 등록했다면 이제 거의 다 끝!

이제는 xml만 생성하고 폴더 구조만 생성해주면 끝인데 그것은 아래와 같다

 

1. java 폴더 생성 및 폴더 구조 생성

 1) java 폴더 생성

  : main에서 Directory를 생성할 때 기본 Directory가 아닌 java Directory를 생성

 2) 폴더 구조 생성

 : com 폴더 구조를 생성 (폴더명의 경우 자유)

* 폴더 구조는 servlet-context.xml에서 설정한 패키지와 동일해야 함

 

2. root-context.xml / servlet-context.xml / web.xml 폴더를 생성 및 설정

[코드 출처] https://github.com/codingrecipe1/springframework_setting

 

[root-context.xml]

더보기
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:jdbc="http://www.springframework.org/schema/jdbc"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
</beans>

 

[servlet-context.xml]

더보기
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:beans="http://www.springframework.org/schema/beans"
             xmlns:context="http://www.springframework.org/schema/context"
             xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <annotation-driven />

    <!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
    <resources mapping="/resources/**" location="/resources/"/>

    <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
    <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <beans:property name="prefix" value="/WEB-INF/views/" />
        <beans:property name="suffix" value=".jsp" />
    </beans:bean>

    <!-- 프로젝트 패키지이름 확인 -->
    <context:component-scan base-package="com.codingrecipe.springEx2" />

</beans:beans>

 

[web.xml]

더보기
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
      /WEB-INF/root-context.xml
    </param-value>
  </context-param>

  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/servlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>

  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

</web-app>

 

3. pom.xml에서 dependency를 설정

더보기

properties 아래에 dependency 입력

아래에서 필요한 라이브러리 찾아서  dependencies 안에 입력하면 됨

https://mvnrepository.com/

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
    <java-version>11</java-version>
    <org.springframework-version>5.3.20</org.springframework-version>
    <org.slf4j-version>1.7.25</org.slf4j-version>
  </properties>

  <dependencies>
    <!-- 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>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${org.springframework-version}</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>
      <scope>runtime</scope>
    </dependency>

    <!-- @Inject -->
    <dependency>
      <groupId>javax.inject</groupId>
      <artifactId>javax.inject</artifactId>
      <version>1</version>
    </dependency>

    <!-- javax.servlet-api -->
    <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>
      <version>2.1</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>

    <!-- data base -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.22</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.6</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.2</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${org.springframework-version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.tomcat</groupId>
      <artifactId>tomcat-dbcp</artifactId>
      <version>9.0.31</version>
    </dependency>

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

    <!-- Lombok -->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.12</version>
      <scope>provided</scope>
    </dependency>

    <!-- json -->
    <dependency>
      <groupId>com.googlecode.json-simple</groupId>
      <artifactId>json-simple</artifactId>
      <version>1.1.1</version>
    </dependency>
    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.8.2</version>
    </dependency>
    <!-- jackson-core -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.9.2</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <finalName>mvc_test</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>11</source>
          <target>11</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

 

 

[Test 해보기]

1. java 파일 밑에 HomeController 생성

@Controller
public class HomeController {
    @GetMapping("/")
    public String index(){
        return "index";
    }
}

 

2. index.jsp를 WEB-INF 아래 생성

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>index</title>
</head>
<body>
    <h2>hello spring framework!!</h2>
</body>
</html>

 

 

창이 바로 뜨는 것이 아닌 아래 localhost:8080을 통해 접속하면 아래와 같이 나오는 것을 확인할 수 있는데, 확인이 잘 된다면 성공!