안녕하세요. 스프링 첫 프로젝트를 만들어 보겠습니다.
여러가지 방법이 있겠지만 제가 익숙한 방법으로 진행하려고 합니다. 당연히 이게 최적의 방법은 아니겠죠.
제가 사용하는 IDE는 IntelliJ IDEA 입니다.
이클립스와 아마 크게 다를건 없을거 같습니다.
IntelliJ 실행 중에 File > New > Project... 를 하시거나 처음 시작하시는 분들은 첫 화면에서 Create New Project 를 선택하시면
Project의 종류, SDK, archetype을 선택할 수 있는 팝업이 나옵니다.
전 일단 Maven 으로 선택하고 archetype 은 maven-archetype-webapp 으로 선택했습니다.
기본적인 maven 프로젝트의 구조를 만들어 줍니다.
GroupId, ArtifactId는 원하시는 것으로 입력하시면 되구요.
Maven은 기본으로 선택한 것으로 하겠습니다.
Project name도 변경하시고 싶으면 변경하시면 되요.
그럼 이런 구조의 프로젝트가 생성 됩니다.
pom.xml 은 Maven 파일로 프로젝트의 dependency와 빌드를 설정해주는 파일입니다.
web.xml 을 프로젝트의 설정을 담당하는 파일입니다.
일단 프로젝트가 잘 만들어졌는지 tomcat 을 이용해 서버를 띄워 볼게요.
pom.xml 파일에 tomcat 을 설정하기 위한 build 를 추가해 줍니다.
소스 보기 |
소스 닫기
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
< 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 http://maven.apache.org/maven-v4_0_0.xsd" >
< modelVersion > 4.0.0< / modelVersion >
< groupId > com.chori.springStudy< / groupId >
< artifactId > springStudy< / artifactId >
< packaging > war< / packaging >
< version > 1.0-SNAPSHOT< / version >
< name > springStudy Maven Webapp< / name >
< url > http://maven.apache.org< / url >
< properties >
< spring.version > 4.3.9.RELEASE< / spring.version >
< / properties >
< dependencies >
< dependency >
< groupId > junit< / groupId >
< artifactId > junit< / artifactId >
< version > 4.12< / version >
< scope > test< / scope >
< / dependency >
< build >
< finalName > springStudy< / finalName >
< plugins >
< plugin >
< groupId > org.apache.tomcat.maven< / groupId >
< artifactId > tomcat7-maven-plugin< / artifactId >
< version > 2.2< / version >
< configuration >
< mode > war< / mode >
< port > 8080< / port >
< path > /< / path >
< charset > UTF-8< / charset >
< uriEncoding > UTF-8< / uriEncoding >
< / configuration >
< / plugin >
< / plugins >
< / build >
< / project >
cs
Run > Edit Configurations... 를 실행하구서 팝업 창에서 + 를 눌러 Maven 을 선택합니다.
그 다음에 tomcat 실행 명령어를 작성해주고 OK 버튼을 누릅니다. 이름은 자유롭게 만드세요~
그 후에 만들어 놓은 Configuration을 실행하면 서버가 시작 됐다는 로그를 확인 할 수 있어요.
브라우저를 열어서 로컬 서버에 접속을 해서 확인할 수 있어요. 여기서 뜨는 화면은 index.jsp 입니다.
자 그럼 스프링을 이용해서 Hello Spring을 보여주는 화면을 띄워봅시다.
먼저 pom.xml 에 스프링을 사용하기 위한 dependency 를 추가해줍니다.
dependency는 maven repository (https://mvnrepository.com )에서 검색해서 추가해주면 됩니다.
spring-webmvc 와 jstl 먼저 추가 해볼게요.
spring-webmvc 는 스프링을 사용하기 위해 추가한 것이고,
jstl 은 프론트에서 jsp를 사용하기 위해 JstlView를 viewClass로 지정하기 위해서 추가했습니다. (뭔가 설명이 많이 부족하군요...ㅠㅠ)
스프링을 사용하기 위해선 spring-webmvc 뿐만 아니라 다른 dependency들도 추가해줘야 하지만
등록된 라이브러리를 사용할 때 필요한 라이브러리를 maven이 전이적으로 추가해주기 때문에 결국 다른 라이브러리들도 함께 추가 됩니다.
그렇지만 저는 필요한 라이브러리들을 모두 dependency에 추가해 줄게요.
소스 보기 |
소스 닫기
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
< 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 http://maven.apache.org/maven-v4_0_0.xsd" >
< modelVersion > 4.0.0< / modelVersion >
< groupId > com.chori.springStudy< / groupId >
< artifactId > springStudy< / artifactId >
< packaging > war< / packaging >
< version > 1.0-SNAPSHOT< / version >
< name > springStudy Maven Webapp< / name >
< url > http://maven.apache.org< / url >
< properties >
< spring.version > 4.3.9.RELEASE< / spring.version >
< / properties >
< dependencies >
< dependency >
< groupId > junit< / groupId >
< artifactId > junit< / artifactId >
< version > 4.12< / version >
< scope > test< / scope >
< / dependency >
< dependency >
< groupId > org.springframework< / groupId >
< artifactId > spring-core< / artifactId >
< version > ${spring.version}< / version >
< / dependency >
< dependency >
< groupId > org.springframework< / groupId >
< artifactId > spring-context< / artifactId >
< version > ${spring.version}< / version >
< / dependency >
< dependency >
< groupId > org.springframework< / groupId >
< artifactId > spring-beans< / artifactId >
< version > ${spring.version}< / version >
< / dependency >
< dependency >
< groupId > org.springframework< / groupId >
< artifactId > spring-web< / artifactId >
< version > ${spring.version}< / version >
< / dependency >
< dependency >
< groupId > org.springframework< / groupId >
< artifactId > spring-webmvc< / artifactId >
< version > ${spring.version}< / version >
< / dependency >
< dependency >
< groupId > org.springframework< / groupId >
< artifactId > spring-expression< / artifactId >
< version > ${spring.version}< / version >
< / dependency >
< dependency >
< groupId > org.springframework< / groupId >
< artifactId > spring-aop< / artifactId >
< version > ${spring.version}< / version >
< / dependency >
< dependency >
< groupId > javax.servlet< / groupId >
< artifactId > jstl< / artifactId >
< version > 1.2< / version >
< / dependency >
< / dependencies >
< build >
< finalName > springStudy< / finalName >
< plugins >
< plugin >
< groupId > org.apache.tomcat.maven< / groupId >
< artifactId > tomcat7-maven-plugin< / artifactId >
< version > 2.2< / version >
< configuration >
< mode > war< / mode >
< port > 8080< / port >
< path > /< / path >
< charset > UTF-8< / charset >
< uriEncoding > UTF-8< / uriEncoding >
< / configuration >
< / plugin >
< / plugins >
< / build >
< / project >
cs
그리고 resources 에 spring 폴더를 만들고 applicationContext-application.xml 파일과 dispatcher-servlet.xml 파일을 생성할게요.
dispatcher-servlet.xml 에선 Controller를 component-scan을 하게하고 viewResolver를 넣고 applicationContext-application.xml 엔 application에 필요한 bean을 등록할 건데요.
지금은 applicationContext-application.xml엔 아무 것도 추가하지 않을거에요.
이 두 파일도 원하시는 이름으로 만드시면 됩니다.
dispatcher-servlet.xml
소스 보기 |
소스 닫기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
< ?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:context ="http://www.springframework.org/schema/context"
xsi:schemaLocation ="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" >
< context:component-scan base-package ="com.chori.springStudy" >
< context:include-filter type ="annotation" expression ="org.springframework.stereotype.Controller" / >
< / context:component-scan >
< bean id ="viewResolver" class ="org.springframework.web.servlet.view.UrlBasedViewResolver" >
< property name ="viewClass" value ="org.springframework.web.servlet.view.JstlView" / >
< property name ="prefix" value ="/WEB-INF/jsp/" / >
< property name ="suffix" value =".jsp" / >
< / bean >
< / beans >
cs
dispatcher-servlet.xml 에 component를 bean으로 등록하기 위해 component-scan 을 하는데 annotation이 Controller인 것들만 대상으로 하게하였고,
Url에 따라 view에 쓰이는 파일을 찾아가기 위해 UrlBasedViewResolver 를 사용하였고, jsp 로 쓰기 위해 viewResolver 의 viewClass 를 JstlView 로 넣어줬습니다.
prefix 를 /WEB-INF/jsp/ 로 했기 때문에 WEB-INF 밑에 jsp 폴더를 만들어야 해요.
applicationContext-application.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"
xsi:schemaLocation ="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd" >
< / beans >
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
< ?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"
id ="WebApp_ID" version ="2.5" >
< context-param >
< param-name > contextConfigLocation< / param-name >
< param-value > classpath:/spring/applicationContext-*.xml< / param-value >
< / context-param >
< servlet >
< servlet-name > action< / servlet-name >
< servlet-class > org.springframework.web.servlet.DispatcherServlet< / servlet-class >
< init-param >
< param-name > contextConfigLocation< / param-name >
< param-value > classpath:/spring/*-servlet.xml< / param-value >
< / init-param >
< / servlet >
< servlet-mapping >
< servlet-name > action< / servlet-name >
< url-pattern > *.do< / url-pattern >
< / servlet-mapping >
< listener >
< listener-class > org.springframework.web.context.ContextLoaderListener< / listener-class >
< / listener >
< welcome-file-list >
< welcome-file > index.jsp< / welcome-file >
< / welcome-file-list >
< / web-app >
cs
ContextLoaderListener 와 DispatcherServlet 은 각각 WebApplicationContext 를 만드는데,
ContextLoaderListener 에 의해서 만들진 context가 root context 이고 DispatcherServlet 에서 만들어진 context는 그 하위 context 가 됩니다.
root context에 등록 된 bean들이 공통 bean들이 되어 하위 context에서 등록된 빈들에서 참조가 가능해 집니다.
DispatcherServlet은 원하면 여러개를 만들 수 있는데 지금은 하나면 충분하기 때문에 하나만 만들었습니다.
ContextLoaderListener 에 사용하기 위한 설정 파일로 'applicationContext-' 로 시작하는 모든 xml 파일을 지정했고,
DispatcherServlet 의 context를 설정하기 위한 파일은 '-servlet' 으로 끝나는 모든 xml 파일을 지정해줬습니다.
방금 전에 만든 applicationContext-application.xml과 dispatcher-servlet.xml이 들어가겠네요.
url-pattern 은 .do 로 했습니다.
이제 Controller를 만들어 봅시다.
main 폴더 밑에 java 폴더를 만들고 java 폴더를 source folder 로 변경해줍시다.
그리고 아까 작성했던 GroupId 와 같이 package를 만들고 그 아래 hello package를 만들겠습니다. (꼭 그럴 필욘 없어요. 패키지를 다르게 하실 경우 dispatcher-servlet.xml 의 base-package 에 만드신 패키지대로 수정해 주세요.)
그럼 hello package 아래에 HelloController.java 를 추가하 후 코딩을 해보겠습니다.
소스 보기 |
소스 닫기
package com.chori.springStudy.hello;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/springStudy/hello" )
public class HelloController {
@RequestMapping("/helloMain" )
public void helloMain(Model model) {
System .out .println ("helloMain에 들어왔다!" );
model.addAttribute("name" , "chori" );
}
}
cs
이 클래스가 Controller라는 것을 알려주기 위해 class 상단에 @Controller 를 추가하고, 기본 url을 지정하기 위해 @RequestMapping 도 넣어줬습니다.
메소드를 하나 생성하고 이 메소드를 접근하기 위한 주소를 지정하기 위해 메소드 위에도 @RequestMapping 를 넣어줬습니다.
helloMain 메소드를 실행하기 위해선 http://localhost:8080/springStudy/hello/helloMain.do 로 접속해야 합니다.
프론트로 데이터를 보내주기 위해 model 에 key-value 형태로 attribute 를 추가해줬어요.
dispatcher-servlet.xml 에서 설정한 것 처럼 url에 따라서 WEB-INF/jsp/springStudy/hello/helloMain.jsp 파일이 실행되겠네요.
마지막으로 jsp 파일을 만들어 보겠습니다.
WEB-INF 밑에 jsp 폴더를 만들고 그 아래 springStudy 폴더, 그 아래 hello 폴더를 만든 후, hello 폴더 아래 helloMain.jsp 파일은 만들어 볼게요.
소스 보기 |
소스 닫기
<% @ page contentType= "text/html;charset=UTF-8" %>
< html >
< head >
< title > Title< / title >
< / head >
< body >
Hello Spring!! < / br >
안녕하세요!! ${name} 입니다.
< / body >
< / html >
cs
el 태그를 사용하여 controller에서 attribute에 추가한 name 의 값도 출력 해보겠습니다.
다시 서버를 재시작한 후에 브라우저에서 http://localhost:8080/springStudy/hello/helloMain.do 로 접속해 볼게요.
자 이제 스프링 프로젝트 개발을 시작할 준비가 되었습니다.
물론 프로젝트를 진행하기 위해선 더 많은 설정과 소스를 만들어야 하지만 이번엔 스프링 프로젝트의 첫 시작을 해봤습니다.
설명도 거의 없이 그냥 따라하기로만 진행 했고, 중간 중간 설명도 많이 부실하고 틀렸을수도 있지만
보시는 분들이 조금이나마 도움이 됐으면 좋겠네요.