ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스프링(Spring) 개발 - (6) 프로젝트 생성 및 개발 시작
    Spring 2014.07.10 23:58

    이번글부터는 지난글까지 이야기했던 기본프로젝트를 이용하여, 실제 프로젝트에서 사용할 수 있는 구조 및 아키텍처를 이야기합니다. 

    스프링에서 제공하는 다양한 모듈들, 예를 들어 인터셉터, 로깅, 트랜잭션, 익셉션 및 MyBatis 연동 등 프로젝트 의 전반적인 아키텍처 및 스프링 모듈을 하나씩 추가할 예정입니다. 


    이번글에서는 지난글에서 생성했던 first 프로젝트의 구조를 변경하고 기초적인 설정에 대해서 이야기하는데, 처음에는 구조가 굉장히 복잡하게 느껴집니다. 

    가능한 복잡한 구조를 풀어서 설명하고, 왜 그런 구조가 필요한지에 대한 이유를 설명하겠습니다. 


    ----------------------------------------------------------------------------------------------------

    1. 프로젝트의 구조

    지난글에서 생성했던 first 프로젝트는 스프링 (maven을 이용한) 기본 프로젝트였다. 따라서, 프로젝트의 구조나 설정 등에 미흡한 부분이 많았다.

    지금부터 first 프로젝트를 이용하여 우리가 최종적으로 만드려고 하는 프로젝트의 구조로 변경한다.




    이 first 프로젝트가 우리가 최종적으로 완성하려고 하는 프로젝트의 구조이다. (여기에 기능들이 추가 될 수 있다.) 맨 처음 만들었던 first 프로젝트와 비교하면 그 구조가 상당히 복잡해지고, 여러가지 설정등이 추가된 것을 알 수 있다.


    이 구조에 대한 설명은 first 프로젝트를 위와 같은 구조로 바꿔가면서 하나씩 설명을 진행하도록 하겠다.


    2. index.jsp 추가

    기존에는 프로그램을 실행하면 기본적으로 views 폴더에 있는 home.jsp가 실행되었다. 

    그렇지만 우리가 어떠한 웹사이트를 들어가면 보통 index.jsp (또는 php, html 등 종류는 여러가지가 있을 수 있다.)가 실행된다. 

    home.jsp가 실행되는것은 우리가 제어하기도 힘들고, 앞으로 개발할 구조에도 맞지않기 때문에, 웹사이트가 최초 보여주는 index.jsp를 추가하려고 한다.


    src/main/webapp 디렉토리 밑에 index.jsp를 만들자.


    1. webapp 우클릭 > new > JSP File을 선택


    New에서 보여지는 목록이 위 사진과 다를 수 있다. 이러한 경우 이클립스 설정을 바꿔준다. 

    http://addio3305.tistory.com/40 를 참고하여 구성을 바꾸면 된다.


    2. index.jsp 라는 이름으로 jsp 파일 생성. 

    index.jsp가 호출되었다는 것을 보기 위해, index.jsp의 body 안에 "This is index.jsp!"를 추가한다.


    <body>
        <h1>This is index.jsp.</h1>
    </body>
    


    3. web.xml 설정 변경

    이제 서블릿 설정을 통해서, 이 프로젝트가 시작되면 index.jsp를 호출하도록 바꾸겠다.

    web.xml에 다음의 내용을 추가한다.

    <?xml version="1.0" encoding="UTF-8"?>
    <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">
    	
    	<welcome-file-list>
    		<welcome-file>index.jsp</welcome-file>
    	</welcome-file-list>
    

    이 위치는 web.xml의 <web-app></web-app> 태그 사이에 존재하면 된다. 즉, 이 태그는 web.xml의 아무곳에서나 선언하면된다. 여기서는 web.xml 맨 위에 위치하도록 하였다.


    4. 실행시켜보자.

    서버를 실행시키고, 브라우저의 주소창에 http://localhost:8080/first/ 를 입력한다. 

    다음과 같이 나오면 정상적으로 설정이 완료된 것이다.


    - 이클립스의 콘솔창에서 아무런 에러 없이, 서버가 실행되는 모습- 



    - index.jsp가 정상적으로 호출된 모습 -

    모두 정상적으로 동작하는것을 확인하자.


    3. 서블릿 설정 변경

    서블릿(Servlet)이란 간단히 말해서 자바에서 동적 웹 프로젝트를 개발할 때, 사용자의 요청과 응답을 처리해 주는 역할을 한다. 서블릿에 대한 설명은 많은곳에서 찾을 수 있으니 여기서는 자세한 설명은 넘어가려고 한다.

     보통 스프링에서는 servlet 설정이 .do로 되어있는데, 현재 기본 프로젝트에서는 .do로 되어있지 않다. 따라서, 서블릿 설정을 간단히 바꿔주려고 한다.

    web.xml을 열어보면 다음과 같은 부분이 있다.

     
    <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/spring/appServlet/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>
    

    이를 다음과 같이 바꾼다.


    <servlet>
            <servlet-name>action</servlet-name>
            <servlet-class>
                org.springframework.web.servlet.DispatcherServlet
            </servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>
                	/WEB-INF/config/*-servlet.xml 
                </param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
            <servlet-name>action</servlet-name>
            <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    

    여기서 볼 것은 <url-pattern>*.do</url-pattern> 부분이다.

    이는 앞으로 서블릿에 어떠한 요청을 할 때, .do를 통해서만 요청을 전달하고, 다른 방식의 요청, 예를 들어 .html의 직접적인 호출등은 이제 허락되지 않는다.


    그 다음 확인할 부분은 contextConfigLocation의 설정이다. 

    기존에는 dispatcher 의 설정인 contextConfigLocation이 /WEB-INF/spring/appServlet/servlet-context.xml에 존재하였는데, 이를 /WEB-INF/config/action-servlet.xml로 변경하고, 인터셉터(Intercepter)도 추가하려는 목적이다. 인터셉터에 대한 설명은 다음 글에서 하려고 한다.


    마지막으로, <context-param>을 수정한다.

    <context-param>에서 설정되어있던 root-context.xml은 모든 서블릿과 필터에서 사용되는 루트 스프링 컨테이너에 대한 설정이다(The definition of the Root Spring Container shared by all Servlets and Filters)

    이 root-context.xml은 추후 다른곳에서 설정될 예정이므로 <param-value></param-value>안에 있던 /WEB-INF/spring/root-context.xml 부분은 다음과 같이 지운다.

    <context-param>
    	<param-name>contextConfigLocation</param-name>
    	<param-value></param-value>
    </context-param>
    


    여기까지 완료한 web.xml은 다음과 같다.

    소스보기


    4. contextConfigLocation 변경

    3. 서블릿 설정 변경에서 기존의 servlet-context.xml의 이름을 action-servlet.xml로 바꾸고, 위치도 바꾸었다. 설정파일은 변경되었으니, 이제 실제 소스를 바꾸려고 한다. 


    1. 위에서 설정한것처럼 /WEB-INF 디렉토리 밑에 config 라는 폴더를 만든다.

    /WEB-INF 디렉토리 우클릭 -> new -> Folder 선택


    2. config 폴더를 생성한다.


    그럼 다음과 같은 폴더구조를 가진다.

    3. /WEB-INF/spring/appServlet 디렉토리에 있는 servlet-context.xml을 복사해서, /WEB-INF/config 폴더에 붙여넣고, 이름을 action-servlet.xml로 변경한다.


    4. /WEB-INF/에 있는 spring이라는 디렉토리를 삭제한다.


    댓글 76

    • 이전 댓글 더보기
    • 스프링초보 2015.12.23 20:55

      잘따라오다가 여기서막히네요 ㅜㅜ
      프로젝트 생성하면
      spring 3.1.1
      jdk 1.6으로 생성되는데
      그냥 buildpath가서 스프링4랑 jdk1.8 로 버전 바꿔도 되나요???

      그리고 프로젝트생성할댸
      spring project는 없고 spring legacy project 있는데 이걸로 만드면되나요?

      • Favicon of https://addio3305.tistory.com BlogIcon 카루시에라 2015.12.23 20:00 신고

        제 글은 Spring 3.2.4를 기준으로 작성했기 때문에 Spring 4.x 버전이랑 다른 부분도 있을겁니다. JDK 역시 1.7이 기준이구요.
        만약 변경하시려면 buildpath와 pom.xml에서 다 바꿔주시는게 좋습니다.

        그리고 STS가 업데이트 되면서 바꼈네요.
        Spring Legacy Project를 선택하시면 제 글과 같은 구성이 됩니다.

    • Favicon of https://repacat.tistory.com BlogIcon 레파캣 2016.01.10 22:30 신고

      index.jsp 추가하고 welcom-file 설정했는데 home.jsp 불러오는 이유는 아무래도 servlet-context.xml 이 작용을 해서 그런거 같습니다. "3. 서블릿 설정 변경" 까지 하고 나니 index.jsp 가 뜨네요.

      • 23남준호 2016.01.11 17:05

        저도 서블릿 설정변경까지 하고 나니 해결했습니다.

      • 명낄로이 2017.01.03 01:24

        위치를 바로 잡으니 되네요

        WebContent
        |-- META-INF
        |-- WEB-INF
        | `-- web.xml
        `-- index.jsp

    • luke 2016.01.25 23:38

      스프링(Spring) 개발 - (6) 프로젝트 생성 및 개발 시작
      강의 내용을 보면
      =====================================
      여기까지 완료한 web.xml은 다음과 같다.

      <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>
      <!-- /WEB-INF/config/action-servlet.xml,
      /WEB-INF/config/interceptor-servlet.xml -->
      </param-value>
      </init-param>
      =====================================
      위에 <param-valeue>를 /WEB-INF/config/*-servlet.xml 로 작성해야 하는지.
      아니면 위와 같이 주석처리하고 공란으로 해야 하는지 문의 드립니다.

    • 궁금점 2016.01.29 14:07

      http://localhost:8080/first/ 에서 first 가 기본으로 설정되는, 세팅부분을 알 수 있을까요?

      그냥 http://localhost:8080 로 하고싶은데 무조건 first가 들어가면

      first / second로 나누고 싶어도 나눌수가 없어서요.

      무조건 처음에 프로젝트명으로 나오게 되어야하는건가요?

      • 김서민 2016.02.03 15:59

        그건 해당 프로젝트가 올라가있는 서버를 더블클릭해보면
        포트 설정 및 타임아웃 설정 등등 서버 설정에 관하여 확인할 수 있는데요.
        오버뷰 말고 밑에 Modules로 변경하여 보면
        현재 올라가있는 모듈을 확인하실 수 있어요.
        보면 Path 부분에 /프로젝트명 이렇게 들어가있으실겁니다.
        여기를
        / 으로 바꾸게되면
        http://localhost:8080 으로 접속하시는거죠.

        두번째 방법으로는 (사실 첫번째와 같습니다.)
        직접 xml파일에서 수정하시는 방법이구요.

        server.xml 파일을 여셔서 (해당프로젝트)
        <Context docBase="프로젝트명" path="/프로젝트명"

        이런부분이 있는데 마찬가지로
        <Context docBase="프로젝트명" path="/"
        으로 설정해주시면 원하시는데로 접속이 되실거에요.

        1,2번 둘다 같은작업이고 1번은 UI적으로 지원을 하는거구요.
        답변이 되었으면 좋겠습니다

    • 궁금점 2016.02.04 11:39

      답변 감사드립니다. 완벽하게 이해했습니다. 혹시 다음에 기회되신다면 maven profile 강좌도 올려주실수있으신가요?? 혹은 spring 3.1 부터 지원되는 spring profile 도 좋을 것 같습니다.
      dev, alpha, real 이런 환경별로 배포하고 싶을때, 어떻게 해야할지 알고 싶습니다.

    • 와초보다 2016.03.24 10:10

      Package Explorer를 보시면 어떻게 줄일 수 있나요?
      src/main/javar 밑에 com.company.first 일반적인데, 님께서 보여주신 이미지는 first만 보이게 되어 있습니다.
      어떻게 하면 그렇게 나올 수 있나요?

      • Favicon of https://addio3305.tistory.com BlogIcon 카루시에라 2016.07.17 22:38 신고

        Package Explorer 탭 오른쪽에 보면 ▽ 요런 버튼이 있을겁니다.
        클릭하시고 중간보다 약간 밑에 Package Presentation > Hierarchical 선택하시면 됩니다.

    • 김민주 2016.03.30 22:24

      정말 대단하세요.. 덕분에 스프링 프레임워크 입문하고 있습니다.. ㅠㅠ

    • 안짜장 2016.08.31 09:23

      내가 본 최고의 설명문서입니다. 감동입니다.

    • 여기너무쩌러 2016.10.27 16:39

      진짜고맙습니다. java jsp입문서겨우공부하고
      spring시작하는데 너무 막막했는데 진짜 여기 좋은거같아요 잘배우고갑니다!

    • ssso 2016.11.10 10:31

      좋은 글 감사합니다~ 그런데 web.xml에서 <!-- Processes application requests --> 부분에 <url-pattern>을 .do 말고 모든 형식으로 받도록 <url-pattern>/*</url-pattern>이렇게 지정하였는데 에러가 납니다. 혹시 왜 그런지 여쭤봐도 될까요?

    • 뒹구르르 2017.01.23 14:30

      감사합니다. 잘 봤습니다^^설정부분은 이해가 가지 않아 그냥 가져다가 쓸 뿐이였는데 이 글로 이해가 되었습니다~^^

    • hwan 2017.03.28 16:36

      정말 존경스럽네요 주인장님. 첫장부터 지금까지 재미있게 따라하고있습니다. 감사합니다 ^^

    • ansam 2017.05.09 18:18

      최고의 설명입니다.
      내가 웬만해서 댓글 안다는데..안달수가 없네요.
      시간내주시면 술이라도 한잔 대접하고싶습니다.

    • 2017.05.17 09:21

      비밀댓글입니다

    • 수고하십니다. 2017.09.04 13:51

      2번까지 잘 따라가고 있었는데 그 localhost:8080/first/를 치면 index.jsp 글이 나오던걸 다시 home.jsp글이 나오게 하는 방법이 궁금합니다.

      • 2018.02.26 13:46

        web.xml 파일의 <welcome-file-list>
        태그안의 welcome-file에 home.jsp

        출처: http://addio3305.tistory.com/39?category=772645 [흔한 개발자의 개발 노트]

    • Favicon of https://gabrielyj.tistory.com BlogIcon Gabriel_YJ 2018.01.14 01:58 신고

      근 2달 동안 스프링 구조에 대해서 헤매고 있었는데 덕분에 정말 잘 이해 했습니다 !! 감사합니다 !!
      그리고 해당 내용 저를 위한 정리를 저 블로그에 할 예정인데 출처는 꼭 남기겠습니다 !

      • dasol 2018.02.26 13:45

        web.xml 파일의 <welcome-file-list>
        태그안의 welcome-file에 home.jsp

    • Favicon of https://prettywho.tistory.com BlogIcon 푸른하늘댁 2018.02.18 18:24 신고

      잘 보고 공부하고 있습니다 ! 감사합니다 !

    • segrob 2018.11.16 16:08

      설명 감사히 잘 읽었습니다! 궁금한것이 있는데요, config 폴더의 위치와 xml 파일들의 위치는 실제로 스프링 mvc가 동작하는 방식에 맞춘 설계인가요? 아니면 어디에 있던 path만 잘 설정해주면 동작하는것인가요?

    • Favicon of http://bsbmanager.cafe24.com/main.jsp BlogIcon 어이 2018.12.21 10:24

      web.xml에

      <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>


      추가했음에도 불구하고 index.jsp이 실행되지않습니다
      기존에 실행됬던 home.jsp으로 여전히 실행됩니다

      sts자체를 다시 실행해도 톰캣서버를 재시작해도 clean을 누르고 실행해도 저 글처럼 정상적으로 되지가 않아요

      • 이썬 2019.03.21 14:16

        xml에 추가한 welcome-file-list 삭제하시고,
        webapp 폴더 선택해서 마우스우클릭, jsp파일 만들고, 띄어보세요 그럼 index.jsp페이지가 띄어질거에요~

    • 이썬 2019.03.21 14:17

      카루님 ㄳㄳ 합니당ㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇ

Designed by Tistory.