ViewResolver 설정은 src/main/resources -> application.properties (1) 에 설정함
뷰리졸버 설명을 하기 전에 컨트롤러 먼저 생성하자
<< 컨트롤러 생성 >>
com.example.demo.chapter02 -> ViewTestController 클래스 추가 후 아래 코드 입력
package com.example.demo.chapter02;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class ViewTestController {
@RequestMapping(value="/chapter02/jsp1", method = RequestMethod.GET)
public String jsp1() {
return "index";
}
@GetMapping("/chapter02/jsp2")
public String jsp2() {
return "chapter02/some";
}
}
<< 코드 설명 >>
(1). @이 붙었으므로 애너테이션으로 Controller 애너테이션은 해당 클래스를 컨트롤러로 만들어줌
컨트롤러는 클라이언트의 요청을 받아 요청을 처리할 서비스 메서드를 호출함
그리고 서비스 메서드가 반환한 처리 결과에 따라서 클라이언트에게 적절한 결과를 응답함
(2), (3). RequestMapping, GetMapping 애너테이션은 클라이언트의 요청을 처리할 메서드에 붙는 애너테이션
@RequestMapping 애너테이션은 value, method 속성을 사용함
value 속성은 "해당 경로로 요청이 들어왔을 때" 로 해석할 수 있음
method 속성은 "해당 요청 방식으로 요청이 들어왔을 때" 로 해석할 수 있음
따라서 value, method 속성을 연결해 해석하면 "http://localhost:8080/chapter02/jsp1 로 GET 방식 요청이 들어왔을 때 jsp1 메서드가 그 요청을 처리하겠다" 임
(3). GetMapping 애너테이션은 속성 없이 ( ) 안에 문자열을 넣었는데 애너테이션 이름이 GetMapping 인 것처럼 "http://localhost:8080/chapter02/jsp2 로 GET 방식 요청이 들어왔을 때 jsp2 메서드가 그 요청을 처리하겠다" 임
(2)와 (3)에서 문자열을 반환해주는데 클라이언트에게 전달할 뷰이름으로 컨트롤러에서 문자열을 반환하면 뷰 리졸버가 동작해 반환하는 문자열의 앞에 prefix 를 붙이고 문자열의 뒤에 suffix 를 붙여서 해당하는 뷰를 클라이언트에게 전달함
따라서 컨트롤러는 문자열을 반환했지만 뷰리졸버 덕분에 클라이언트는 문자열이 아닌 뷰를 전달 받음
혹시 이대로 했는데 뷰가 안나온다면 무시하고 넘어가자
이 글의 처음에서 언급했듯 Spring Boot 로 만든 Spring Framework 프로젝트는 백엔드 용으로만 쓰지 그 안에 웹 페이지, CSS 등 뷰를 위한 것들을 넣지 않음
만약 Spring Boot 를 공부하고 포트폴리오를 만든다면 Spring Boot로 백엔드 프로젝트를 만들고 JSP 에서 배웠던 프로젝트를 만들어 이 프로젝트를 프론트엔드 프로젝트로 사용하면 됨
잘모르겠다면 Spring Boot 공부가 다 끝나면 마지막에 프로젝트를 할테니 그대로 따라오면 알게될 것
우리가 만든 프로젝트의 Servlet, Tomcat, Java의 버전을 현업에서 사용하는 버전으로 바꿀 순 없을까?
바꿀 순 있지만 그러려면 Spring Boot 3.0.5 버전이 아닌 더 낮은 버전을 사용해 Spring Framework 프로젝트를 만들어야함
우리가 공부하는 환경과 현업의 환경이 많이 다르지만 그러려면 수 년 전의 책이나 자료를 찾아야하므로 이대로 진행하자
취업에 성공해 Spring Framework 를 사용한 프로젝트에 투입됐다면 Spring Framework의 버전과 Tomcat, Java의 버전을 잘 확인하고 차이가 난다면 신입 딱지가 붙어있을 때 얼른 상사 또는 사수에게 "저는 공부할 때 Spring Framework는 X 버전, Tomcat은 X 버전, Java는 X 버전을 사용했는데 혹시 제가 주의해야할 부분이 있을까요?" 라고 물어보자
아직은 "신입이니까..." 가 용서될 수도 있을 것ㅎㅎ
이렇게 우리 프로젝트의 Spring Framwork, Tomcat, Java의 버전을 확인해봤음
마지막으로 Tomcat의 포트 번호를 바꾸는 방법을 알아보자
Spring Boot 를 배울 때 포트 번호를 바꿔야하는 경우가 빈번하게 생기는 듯함
Tomcat의 포트 번호를 바꾸려면 [ 프로젝트 설정 값이 들어가는 곳 ] (1) 에 포트 번호를 설정하면 됨
Spring Boot는 기본적으로 Servlet, JSP 학습이 이뤄진 후에 공부하는 것을 추천함
Servlet, JSP 를 모른다면 우선 Servlet, JSP 를 학습한 후에 오자
Servlet, JSP 를 몰라도 Spring Boot 를 배울 순 있지만 이해하긴 어렵고 외울 수 밖에 없음
이해 없이 무조건 암기는 한계가 있음
Spring Boot 를 더 잘 이해하고 싶다면 Spring Framework 를 공부하면 됨
Spring Boot는 Spring Framework를 쉽게 생성하기 위한 도구라고 생각하면 됨
Spring Framework는 프로젝트 개발에 필요한 설정을 하나 하나 해줘야함
또한 설정끼리 호환이 잘되도록 버전도 맞춰줘야하는 경우가 많음
Spring Boot는 그 설정을 하나의 묶음으로 제공하기 때문에 설정을 하나 하나 해줄 필요가 없고 호환이 잘되는 설정끼리 묶어서 제공함
- "당장! Spring Framework를 사용한 프로젝트를 개발하고 싶다" Spring Boot 부터 시작
- "시간적 여유가 있거나 암기 위주가 아닌 이해 위주의 공부를 하고 싶다" Spring Framework 부터 시작
Framework 란 Frame + work 의 합성어라고 생각하면 됨
Frame은 틀이라는 뜻이고 work는 일이라는 뜻으로 "틀 안에서 일을 한다" 로 해석할 수 있음
Servlet/JSP 를 사용하면 웹 프로그램을 쉽게 개발할 수 있지만 Spring Framework에 비하면 제공하는 기능이 매우 한정적임
예를 들어 클라이언트가 서버로 정수값을 보냈을 때 Servlet은 클라이언트가 보낸 값을 무조건 문자열로 받으므로 클라이언트가 보낸 정수값을 우선 문자열로 꺼내고 정수값으로 변환해야함
그러나 Spring Framework를 사용하면 변환 없이 정수값으로 받을 수 있음
클라이언트가 서버로 정보, 예를 들어 회원 정보(이름, 나이, 연락처)를 보냈다면 Servlet은 그 정보를 문자열로 받는건 물론이고 클라이언트가 보낸 회원 정보 내 데이터(이름, 나이, 연락처)를 하나씩 꺼내서 나이는 정수로 변환한 다음 클래스를 사용해서 하나의 정보로 합쳐야함
그러나 Spring Framework를 사용하면 변환, 합칠 필요 없이 정보로 받을 수 있음
이 외에도 Spring Framework는 제공하는 기능이 매우 다양하기 때문에 웹 프로그램 개발을 할 때 개발자의 수고를 덜어줌
만약 Servlet, JSP 공부를 했는데 위 말이 이해가 안된다면 아직 Servlet, JSP 공부가 덜됐다는 뜻으로 다시 Servlet, JSP를 공부하고 오거나 그냥 그렇구나 정도로만 생각하고 넘어가도 됨
Spring Framework를 사용하면 개발자의 수고를 덜어주기는 하지만 Framework 라는 말이 붙은 것처럼 반드시 Spring의 틀 안에서 작업 해야하기 때문에 추가적으로 Spring Framework를 공부해야한다는 단점이 있음
또한 Spring Framework를 잘 모른 상태로 이를 사용해 개발을 하면 Spring Framework를 사용했지만 사용하지 않은(?) 마치 슈뢰딩거의 고양이 와 같은 상태의 프로젝트가 될 수 있음
Spring Boot 는 자체적으로 웹 서버를 내장하고 있어 웹 서버를 설치하고 연동하는 과정이 필요 없음
Spring Boot 는 이름에 starter 가 들어간 라이브러리를 제공함
이는 해당 라이브러리와 라이브러리를 사용하는데 필요한 부가적인 라이브러리까지 모두 포함하고 있는 "라이브러리 묶음(패키지)" 임
라이브러리와 부가적인 라이브러리 간에 버전을 맞춰줘야 제대로 동작하는데 이런 부분을 생략할 수 있게 버전이 다 맞춰진 패키지임
Spring Boot 로 개발하기 위한 개발툴을 설치하자
이 글의 처음에 언급했듯 Servlet, JSP는 반드시 선행되야하기 때문에 Java 설치 방법, 환경변수 설정 방법 등은 설명하지 않음
혹시 Servlet, JSP를 학습할 시간이 없어서 못한다 라고 하시는 분은 인터넷에 Java 설치 방법과 Java 환경변수 설정 방법을 찾아보고 Java를 설치한 이후에 다음 내용들을 보자
Spring Boot 개발툴은 이클립스 + STS 애드온이 설치된 [ Spring Tools 4 for Eclipse ] 를 사용할 것임
만약 Intelli J 를 사용하고 있다면 프로젝트 생성 방식에서 버튼의 이름만 다를 뿐 프로젝트를 생성하는 방법이나 생성 후 의 프로젝트 모습 등은 완전히 동일하기 때문에 Intelli J 로 Spring Boot 프로젝트 생성 방법만 따로 검색해보거나 Intelli J 는 잠시 두고 여기서 설치하는 Spring Tools 4 for Eclipse 로 학습 해도 무방함
우선 인터넷에서 sts 로 검색(1)하자
검색 후 검색 결과에 [ Spring | Home ] 으로 나오는 검색 결과(2)를 눌러 Spring 공식 홈페이지로 들어가자