스프링 프레임워크/스프링 기본 개념 정리 및 기본 예제

Intellij 스프링 mvc 프로젝트 생성

edenDev 2023. 2. 7.

IntelliJ에서 스프링 MVC 프로젝트 생성하기

Intellij 에서는 STS(Spring Tool Studio)에서 지원 하는 것처럼 Spring MVC Project를 생성 하는 방법이 

따로 존재 하지는 않습니다. 

 

STS 에서 지원 하는 것 처럼 Spring MVC Project를 생성하고, 웹페이지에 hello world를 출력 하기 까지는 

아래와 같이 총 4가지의 단계를 거칩니다.

  • Maven module를 생성 한다.
  • 스프링 관련 설정, 디렉토리 생성 및 설정을 한다.
  • Tomcat Server 설정을 한다.
  • 기본/테스트 package 와 views 디렉토리를 생성한다

이렇게 설정을 하고 나면 아래와 같은 구조가 됩니다. 이제 마지막으로 HomeController 과 home.jsp 를 작성하고 나서 

tomcat server를 구동하게 되면 루트 웹페이지에서 hello world 라는 문구를 출력하게 된다.


1. Maven modile 생성하기

intellij 실행 후 초기 화면에서 새 프로젝트를 눌러주세요

왼쪽 제너레이터 부분에서 Maven 원형을 클릭하시고 원하시는 프로젝트 이름과 jdk 버전 확인하시고

Archetype: 부분에서 org.apache.maven.archetypes:maven-archetype-webapp 으로 셋팅 하시고 생성 버튼을 눌러주세요


2. Spring  관련 설정 수정 및 추가, 디렉토리 생성 및 Role 설정

# pom.xml : 프로젝트 정보 및 dependency 를 설정하는 xml 파일

 

properties : java, spring, aspectj, slf4j 버전을 기입해준다

1
2
3
4
5
6
<properties>
        <java-version>1.11</java-version>
        <org.springframework-version>5.2.3.RELEASE</org.springframework-version>
        <org.aspectj-version>1.8.5</org.aspectj-version>
        <org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
cs

dependency : maven 라이브러리를 추가해준다.

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
<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>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
 
 
        <!-- AspectJ -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>${org.aspectj-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>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${org.slf4j-version}</version>
            <scope>runtime</scope>
        </dependency>
        <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>
 
        <!-- @Inject -->
        <dependency>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
            <version>1</version>
        </dependency>
 
        <!-- Servlet -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </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>
 
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
</dependencies>
cs

plugins : <build></build> 태그 안에 추가해준다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<plugins>
            <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>
                    <compilerArgument>-Xlint:all</compilerArgument>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                </configuration>
            </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>
</plugins>
cs

 

# web.xml : 스프링과 관련된 설정 xml 파일의 경로 설정 및 dispatcher url 패턴 설정

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
<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >
 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 
    <display-name>Archetype Created Web Application</display-name>
 
    <!--DataSource, MyBatis 설정 xml 경로-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/applicationContext.xml</param-value>
    </context-param>
 
    <!--리스너-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
 
    <!--servlet dispatcher 설정 xml 경로-->
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring/dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
 
    <!--servlet mapping 설정-->
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
 
    <!--한글 인코딩 설정-->
    <filter>
        <filter-name>encoding</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>encoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
 
</web-app>
 
cs

# applicationContext.xml : 수정 사항 없음

 

# dispatcher-servlet.xmlMVC 관련 설정 추가

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
<?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">
 
    <!--스프링 MVC관련 설정만을 분리하기 위한 파일-->
 
    <!--애너테이션 자동 인식-->
    <annotation-driven />
 
    <!--정적 자원 : js, css, 이미지파일 등등-->
    <resources mapping="/resources/**" location="/resources/" />
    <resources mapping="/bower_components/**" location="/resources/bower_components/"/>
    <resources mapping="/plugins/**" location="/resources/plugins/"/>
    <resources mapping="/dist/**" location="/resources/dist/"/>
 
    <!--viewResolver : jsp-->
    <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>
 
    <!--base-package 속성 값에 해당하는 패키지 내부의 클래스들을 모두 조사-->
    <context:component-scan base-package="com.eden.diary" />
 
</beans:beans>
cs

# log4j.xml로그 설정파일

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
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
 
    <!-- Appenders -->
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p: %c - %m%n"/>
        </layout>
    </appender>
 
    <!-- Application Loggers -->
    <logger name="com.doubles.ex00">
        <level value="info"/>
    </logger>
 
    <!-- 3rdparty Loggers -->
    <logger name="org.springframework.core">
        <level value="info"/>
    </logger>
 
    <logger name="org.springframework.beans">
        <level value="info"/>
    </logger>
 
    <logger name="org.springframework.context">
        <level value="info"/>
    </logger>
 
    <logger name="org.springframework.web">
        <level value="info"/>
    </logger>
 
    <!-- Root Logger -->
    <root>
        <priority value="warn"/>
        <appender-ref ref="console"/>
    </root>
 
</log4j:configuration>
 
cs

3. Tomcat Server 설정

  1.  실행 > 구성 편집 > 새 구성요소 추가 > Tomcat Server > 로컬 선택
  2. 이름 : 서버 이름 (본인이 원하는걸로 지정)
  3. 서버 탭에서 설정 해야 될 것
  4. 애플리케이션 서버 (Tomcat 경로 설정) 
  5. 포트 : 8080 이지만 본인이 원하는 포트로 변경 (변경 안해도 됨)
  6. 배포 탭에서 설정 해야 될 것 (아키택쳐 -> war exploded 선택)


4. 그외의 설정들

  • WEB-INF\views : jsp 페이지가 위치할 디렉토리 생성
  • webapp\resources : 정적자원(js, css, 이미지 파일등)이 위치할 디렉토리 생성

5. HomeController.java / home.jsp 작성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Controller
public class HomeController {
    
    private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
    
    /**
     * Simply selects the home view to render by returning its name.
     */
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String home(Locale locale, Model model) {
        logger.info("Welcome home! The client locale is {}.", locale);
        
        Date date = new Date();
        DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
        
        String formattedDate = dateFormat.format(date);
        
        model.addAttribute("serverTime", formattedDate );
        
        return "home";
    }
    
}
 
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
    <title>Home</title>
</head>
<body>
<h1>
    Hello world!  
</h1>
 
<P>  The time on the server is ${serverTime}. </P>
</body>
</html>
 
cs

6. 서버 구동 후 확인

위와 같이 모든 설정을 마무리하고 서버 구동을 하고 아래와 같이 화면이 나오면 프로젝트 생성 성공입니다.

댓글