이전에서 배운 수업은 스프링 버전 3.0.2였는데 오늘부터는 4.0.4 버전을 사용할 것이다.
지금 포스팅하는 글은 STS3으로 STSMVC 스프링 + 메이븐 프로젝트 생성을 하고 구조확인을 하는 실습을 할 것이다.
1. STS(Spring Tool Suite) 다운로드 및 설정 + Spring Legacy Project 생성
STS를 다운로드 및 설정하기 전에 STS에 대해서 간단하게 설명하자면
STS는 이클립스 + 스프링 개발 전용 도구이다.
<버전>
STS4 - Spring Boot + 설치(플러그인)하면 다른 것으로도 spring 개발 가능
STS3 - Spring Boot / Spring Legacy(전통적인 방식)
수업은 STS3을 받아서 Spring Legacy로 한다고 하셨다.
Legacy 먼저 알아야 Spring Boot도 접근하기 쉽기 때문이라고 하신다.(시간도 부족..)
이제 본격적으로 다운로드 및 설정을 해보자
http://spring.io 접속 후 상단 메뉴에서 Projects -> Spring Tools4 들어가면 하단에 아래와 같은 배너(?)가 보이는데 거기서 Spring Tool Suite 3 wiki를 클릭하자
클릭했다면 아래 URL로 접속이 되어진다.
https://github.com/spring-attic/toolsuite-distribution/wiki/Spring-Tool-Suite-3
이클립스의 버전을 확인한 다음에 같은 버전의 STS를 다운 받아야한다.
이클립스 - help - About eclipse에서 확인할 수 있다.
본인이 사용하는 버전은 2021-06(4.20.0)인데 3.9.17 버전의 STS를 받으면 JDK 버전 문제로 에러 메시지가 뜬다. 그래서 spring-tool-suite-3.9.13.RELEASE-e4.16.0-win32-x86_64 을 사용!
(확장자가 dmg, gz는 리눅스이므로 패스하면된다..)
다운로드를 받은 후 압축을 풀어서 C드라이브에 넣어놨다.
sts-bundle\sts-3.9.13.RELEASE 경로로 들어가서
STS.exe를 보내기 -> 바탕화면 바로가기를 해주고 실행!
실행을 하면 아래와 같은 메시지가 뜨는데 버전 문제 때문에 계속할거냐고 물어보는 것이다.
이 메시지를 안보려면 버전을 맞춰서 다운로드 받아야하는데 JDK 버전 문제로 이 방법을 택했다..
주저말고 Continue 클릭!
로딩되는 화면이 보여지고 이클립스와 똑같이 생긴 STS 툴이 열린다.
열리면 window -> preferneces에서 encoding, font 확인 (아마 기존과 동일) Emmit은 설치 안되어 있다.
그 후에 우측 상단에 있는 Open Perspective를 눌러서 스프링 창으로 바꾼다.
Servers 탭에서 VMware는 삭제하자
그 후에 File -> New를 보면 메뉴가 달라져있다.
메뉴에서 Spring Starter Project는 Spring Boot 이고 Spring Legacy Project는 레거시 프로젝트이다.
수업은 레거시 프로젝트로 진행하기 때문에 Spring Legacy Project 클릭
프로젝트 이름 설정 후 Spring MVC Project 클릭하면
스프링 프로젝트로 MVC를 만들기 위해서 URL에서 필요한 것들을 다운로드 받겠다고 한다 Next 클릭을 하면 메시지가 하나 뜨는데 놀라지말자
Yes를 누르면 최상위 패키지를 달라고 한다.
패키지명이 전 세계 사람들과 중복이 되지 않게하려면 도메인을 주면된다.
수업에서는 org.doit.web 으로 주고 finish를 클릭(역으로 도메인을 준다고 생각하면 된다)
우측 하단에 다운로드가 되고 있는 것이 보여진다.
인터넷이 끊기거나 컴퓨터 용량이 부족하면 다운로드가 완벽하게 되지 않으니 주의하자!
다운로드가 다 된 후에 좌측에 Package Explorer를 보면 Spring MVC 메이븐 프로젝트가 보인다.
lib 폴더가 없다. 즉, pom.xml에서 관리를 한다는 것이다.
STS로 프로젝트를 만들면 JRE의 기본 버전은 1.6이다.
우리가 사용하는 JRE 버전으로 맞춰주어야 한다.
pom.xml 12라인에 스프링 프레임워크의 버전을 3.1.1 -> 4.0.4로 변경
<org.springframework-version>3.1.1.RELEASE</org.springframework-version>
<org.springframework-version>4.0.4.RELEASE</org.springframework-version>
빨간 색으로 표시한 부분은 메이븐 버전 확인하는 곳으로 수정하는 곳이고(필요하다면 수정하지만 오늘 수업에는 변경하지 않았다)
JRE 버전을 바꾸기 위해서 그 아래 source와 target을 1.8로 수정
pom.xml에 11라인에 자바 버전도 1.8로 수정
수정을 다 했다면 프로젝트 우클릭 -> Maven -> Update Project 클릭
JRE 버전이 1.8로 바뀐다.
pom.xml 코딩을 추가하면 원격저장소(centeral repository) 필요한 jar 파일들이 아래 경로에서 다운로드 받아지고 관리되어진다.
여기까지 STS3로 STSMVC 스프링 + 메이븐 프로젝트 생성을 한 것이다.
이제 MVC 구조를 확인해보자
3. STSMVC 스프링 메이븐 프로젝트의 MVC 구조 확인하기
front controller 확인하기 위해서 web.xml 확인
이전 프로젝트에서 빈 객체를 등록할 때 위의 설정대로라면
WEB-INF/appServlet-servlet.xml에서 찾는데 해당 프로젝트에는 appServlet-servlet.xml파일이 없다.
대신 init-param 태그를 사용해서 servlet-context.xml 파일을 찾으라고 한다.
공통 빈을 사용하기 위해서 부모-자식 계층도 설정되어 있는 상태이며 root-context.xml이 부모 계층이다.
이전 프로젝트와 비교해보면 아래와 같다.
dispatcher-servlet.xml 대신에 servlet-context.xml 사용
dispatcher-service.xml 대신에 root-context.xml 사용
이제 어떤 요청URL과 컨트롤러 메서드가 매칭이 되는지 확인해보자
org.doit.web 패키지 안에는 HomeController.java 가 있다.
/요청URL을 GET 방식으로 요청을 하여 View Name을 리턴해준다.
해당 View Name을 가지고 ViewResolver가 /WEB-INF/views/ViewName.jsp로 만들어준다.(/WEB-INF/views/home.jsp)
그 이유는 servlet-context.xml에 해당 설정 때문에 요청 View Name을 가지고 ViewResolver를 생성해주는 것!
[servlet-context.xml]
[HomeController.java]
servlet-context.xml 파일을 좀 더 살펴보면 컴포넌트 스캔 기능과 정적인 자원들을 resources 폴더에 넣는 것을 권장한다는 주석과 <resources> 태그가 있다.
여기서 한번 더 보고가자!
return "index.jsp"; => 처음에는 바로 jsp 응답
return "home.index"; => tiles-defs.xml에서 <definition name="home.index">으로 응답
return "home"; => 요청 View Name을 가지고 ViewResolver가 /WEB-INF/views/ViewName.jsp로 만들어준다.(/WEB-INF/views/home.jsp)
프로젝트를 새로 생성해서 시작할 것이라면 Servers에서 꼭 프로젝트를 Add and Remove 해주고 Clean 한 뒤에 꼭 START를 시켜주자!
위의 프로젝트를 실행시켜보고 싶다면 프로젝트 우클릭 -> Run As -> Run On Server로 실행시킬 수도 있고URL을 직접 입력해서 실행시킬 수도 있다.해당 프로젝트의 contextPath는 web이므로 localhost/web/을 입력해주면 home.jsp가 보여진다.
인코딩 문제로 한글이 깨져서 보인다면web.xml에서는 읽을 때 UTF-8로 읽도록 필터를 설정해 주었는데 응답할 때 encoding을 jsp 페이지에서 설정해주지 않아서 발생한다.
jsp 페이지에 꼭 charset=UTF-8로 설정해주자!
'TIL > Spring' 카테고리의 다른 글
[TIL] Maven(메이븐)과 Spring Tool Suite(STS) (0) | 2022.07.20 |
---|---|
[SIST] Spring_days08_Maven(메이븐) 빌드 도구 / STS툴로 메이븐 프로젝트 생성해보기 / 다이나믹 웹 프로젝트를 STS툴로 옮겨서 설정하기(Spring Legacy Project) (0) | 2022.07.20 |
[SIST] Spring_days07/08_스프링 타일즈(Tiles) (0) | 2022.07.20 |
[SIST] Spring_days07_스프링 트랜잭션 격리 레벨(Isolation) (0) | 2022.07.19 |
[SIST] Spring_days07_스프링 트랜잭션 전파방식(propagation) (0) | 2022.07.19 |