른록노트

[NetBeans로 Spring MVC 게시판 만들기] 2. 프로젝트 환경 구성(#2) 본문

Web/[Spring]

[NetBeans로 Spring MVC 게시판 만들기] 2. 프로젝트 환경 구성(#2)

른록 2017. 7. 20. 00:00

안녕하세요 른록입니다.

이제 스프링이 시작되는 순서를 알아보고

필요한 설정들을 해보아요~

테이블도 등록해야 하니 Mysql을 미리 준비해 주세요


[계획]

1. 소개(개념)

-1. Spring FrameWork MVC
-2. NetBeans

2. 프로젝트 환경 구성
-1. Maven
-. POM.xml

-2. Web.xml과 ApplicationContext,dispatcher_servlet.xml

-. Mybatis(Mysql)

-. Log4j


3. 프로젝트 진행

-1. 게시판 리스트 보기

-2. 게시판 글 작성

-. HandlerMethodArgumentResolver

-3. 게시판 글 상세 조회

-4. 게시판 글 수정

-5. 게시판 글 삭제


[NetBeans로 Spring MVC 게시판 만들기] 2. 프로젝트 환경 구성(#2)

-2. Web.xml과 ApplicationContext,dispatcher_servlet.xml


지금 설명해드릴 부분은 스프링의 시작순서입니다.

프로젝트가 실행되면 web.xml이 제일 먼저 읽혀집니다.

그리고 web.xml에 작성된 코드대로 동작합니다.



1) Web.xml

주석을 통해 간단한 코드 설명을 하겠습니다.

(주석 단축키는 Ctrl+Shift+C 입니다.)

(+참고로 줄 자동정렬 단축키는 Alt+Shift+f, 자동 import는 Ctrl+Shift+i 입니다.)

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
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    <context-param>
        <!--프로젝트를 실행했을때 가장먼저 실행하는 Context입니다.-->
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
<!--    이 녀석이 총괄책임자라고 할 수 있는 dispatcher 녀석입니다. 아래 url-pattern에
        부합하는 요청은 모두 이녀석이 관리한다라는 뜻 입니다.-->
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.htm</url-pattern>
    </servlet-mapping>
    
    session은 서버와 클라이언트 사이의 연결을 말합니다.
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    
    <!--프로젝스 시작시 열리는 페이지-->
    <welcome-file-list>
        <welcome-file>redirect.jsp</welcome-file>
    </welcome-file-list>
</web-app>
 
cs



이제 Web.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
43
44
45
46
47
48
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
         version="2.5">
    <!--utf-8 문자를 읽기위해 필터를 추가한 것입니다.-->
    <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>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
    <!--ContextLoaderListener 사용으로 제일 첫 실행 Context 설정-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
    <!--dispatcher-servlet이름을 appServlet으로 명명해주고 dispatcherServlet라고 선언-->
    <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/dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <!--url패턴을 /로 하여 모든 요청을 다 appServlet이 받게 끔 하였습니다.-->
    <servlet-mapping>
        <servlet-name>appServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>
cs


즉 프로젝트가 시작되면 Web.xml -> applicationContext.xml -> 

dispatcher-servlet.xml이 실행됩니다.


중요한 부분은 <url-pattern>/</url-pattern> "/" context의 이하 모든 요청은 다

appServlet(즉 dispatcher-servlet)으로 가게 설정해 놨습니다.


(context-path는 META-INF -> context.xml에서 설정할 수 있습니다.)


2) applicationContext.xml

(이클립스에선 root-context 이렇게 생성됩니다. 솔직히 이름은 마음대로 하신후

설정만 제대로 해주시면 됩니다. 그래도 다른사람들을 위해 맞춰주셔야 합니다.)


beans태그로 이루어진 xml파일입니다.


저는 처음에 이 부분에서 엄청 해맸었는데요, 예전엔 복붙만 해서 사용법도 제대로 몰랐었는데 이번에 공부하면서 알게 되었습니다.
간단히 beans에 대해 알려드리겠습니다. 


제일 윗줄에 <beans xmlns="http://www.springframework.org/schema/beans" 

여기에 url 제일 마지막 /beans에 주목하셔야 합니다.

이 얘긴 즉, beans 를 네임스페이스로 사용한다는 얘깁니다.


즉 무슨얘기냐 만약 

<beans xmlns="http://www.springframework.org/schema/beans" 로 맨 윗줄에 정의되어 있으면 기본 namespace를 beans로 사용하겠다는 것이기 때문에 beans에 속하는 것들은 앞에 명시를 하지 않아도 됩니다. 하지만

<beans:beans xmlns="http://www.springframework.org/schema/mvc" 로 시작할경우 기본 namespace를 mvc로 사용하겠다고 정의하기때문에 이럴 경우 beans에 속하는 것은 <beans: 로 시작하는 식으로 명시해줘야 합니다.

(참고:beans:bean과 beans의 차이 https://okky.kr/article/240080)


다음 아래를 보시면 DB 정보를 입력하는 부분이 주석처리 되어 있습니다.


저희는 Mysql를 사용하겠습니다. DB생성부분은 나중에 포스팅 하도록하겠습니다. 우선 스프링을 중심으로 포스팅 하기때문에 다 준비됐다 생각하고 Table을 하나 생성하겠습니다.(저도 학교에서 oracle을 써서 mysql은 저도 배워가고있습니다.)


1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE TB_BOARD
(
    board_num int(5unsigned not null auto_increment,
    parent_num int(5unsigned not null,
    title varchar(100not null,
    contents varchar(4000not null,
    hit_cnt int(5unsigned not null,
    del_gb varchar(1default 'N' not null,
    crea_date timestamp not null default CURRENT_TIMESTAMP,
    crea_id varchar(30not null,
    PRIMARY KEY (board_num)
)charset=utf8;
 
cs

테이블을 생성해주셨으면 다시 applicationContext로 돌아가서 

DB를 설정하겠습니다.

1) WEB-INF에 마우스 오른쪽 버튼 클릭후 등록 정보 파일을 생성해 주세요


2) 자신의 db정보를 입력해 주세요


3) 주석을 해제해 주시면 property를 사용할 수 있습니다.


이제 여기서부턴 log4j에 대해 배울것입니다.

log4j라이브러리는 sql처리시 쿼리와 결과등을 console로 바로 볼 수 있는 라이브러리입니다. Eclipse에서는 자동으로 파일이 생성되지만 Netbeans에선 따로 설정을 해줘야 합니다. 라이브러리는 이미 pom에 등록해 놓았고 이제 차근차근 따라해주시기 바랍니다.


1) 다른소스 resources에 생성해 주셔야합니다. 꼭 입니다~


2) 일므도 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
43
<?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">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %5p [%c] %m%n" />
        </layout>   
    </appender>
    
    <appender name="console-infolog" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %5p %m%n" />
        </layout>   
    </appender>
    
    
    <!-- Application Loggers -->
    <logger name="com" additivity="false">
        <level value="debug" />
        <appender-ref ref="console"/>
    </logger>
    
    <!-- Query Loggers -->
    <logger name="jdbc.sqlonly" additivity="false">  
        <level value="INFO"/>  
        <appender-ref ref="console"/>  
    </logger>
    
    <logger name="jdbc.resultsettable" additivity="false">  
        <level value="INFO"/>  
        <appender-ref ref="console"/>  
    </logger>  
 
    <!-- Root Logger -->
    <root>
        <priority value="off"/>
        <appender-ref ref="console" />
    </root>
    
</log4j:configuration>
 
cs


간단히 설명해드리겠습니다. Appender는 로그를 보여주는곳

그리고 logger들은 어떤 로그를 보여줄건지 설정해주는겁니다.


<!-- Application Loggers --> 아래에 등록된 logger는 이제 

url이 들어올 때 그걸 캐치해서 보여주는 역할을 할겁니다.

여기서 <logger name=" " > <-- 이 name 부분에는 해당프로젝트의 상위 패키지를 적어주시면 그 부분을 인식합니다 (저는 이 부분을 몰라서 왜 안뜨지하고 고생했습니다)


Query Logger는 말그대로 SQL문을 사용할 때 로그가 찍히게 끔 설정 해주었습니다.


이제 Query Logger를 사용하기위해 아까 applicationContext로 돌아가서 설정해 주겠습니다. 아래의 코드를 복붙해 주시면 됩니다.


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
<?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:p="http://www.springframework.org/schema/p"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
       http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">
 
 
    <!-- ADD PERSISTENCE SUPPORT HERE (jpa, hibernate, etc) -->
    
    <bean id="propertyConfigurer"
           class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
           p:location="/WEB-INF/jdbc.properties" />
    <!--
<bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource"
    p:driverClassName="${jdbc.driverClassName}"
    p:url="${jdbc.url}"
    p:username="${jdbc.username}"
    p:password="${jdbc.password}"/>-->
    
    <bean id="dataSourceSpied" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
     
    <bean id="dataSource" class="net.sf.log4jdbc.Log4jdbcProxyDataSource">
        <constructor-arg ref="dataSourceSpied" />
        <property name="logFormatter">
            <bean class="net.sf.log4jdbc.tools.Log4JdbcCustomFormatter">
                <property name="loggingType" value="MULTI_LINE" />
                <property name="sqlPrefix" value="SQL         :  "/>
            </bean>
        </property>
    </bean>
   
         
</beans>
 
cs


dataSource에 log를 설정한 걸 보실 수 있습니다.



<--------------------------------------------------------------------------------------->


- 프로젝트 환경 구성은 할게 많기 때문에 글이 너무 길어지게 되었습니다.

  다음 포스트에서 이어서 Application log설정 부터 진행하겠습니다.


(처음 포스팅을 해보는데 한 포스팅 하는데 시간이 엄청 소비되네요, 그리고 제가 필력이 딸려서 읽으시는데 불편하실까 염려되네요 아무튼 감사합니다~)

반응형
Comments