[Spring-Framework] 21(번외). STS 4.4 - Spring Boot Starter 프로젝트 생성(MVC)
나의 글에서 주로 Spring Legacy Project로 환경구축에 대해서 다루었다.
하지만, 초기 STS 4.4 최신버전을 설치하면 Spring Legacy Project는 따로 구성해줘야 사용할 수 있게 된다.
(Help -> Eclipse Marketplace -> "검색어: sts" -> "Spring Tools 3 Add-on for Spring Tools 4 3.9.14.RELEASE")
Spring Boot를 소개하게 된 건, 셋팅에 있어서 그동안 조금 복잡한 과정을 거쳐야 했었는데 그런 걸 "통폐합"해서 간단하게 사용할 수 있도록 도와주고 있다.
알 필요성이 있다고 생각되서 작성하게 되었다.
[기대 효과]
(장점)
1. 복잡한 셋팅을 안 해도 된다
2. 빠른 작업이 가능해진다.
(단점)
1. Spring Framework 위주의 자동생성에서 벗어나질 못한다. ???
1. 프로젝트 생성하기
처음으로 Spring Starter Project를 생성하는 방법에 대해서 소개하도록 하겠다.
그림 1. 프로젝트 시작하기
File -> New -> Spring Starter Project를 클릭한다.
그림 2. 프로젝트 시작하기(2)
셋팅을 조금 해주면 된다.
Group명, Artifacte, Package, Description 등을 수정해도 된다.
자바 버전 등도 셋팅할 수 있다.
셋팅이 완료되었다면, Next를 클릭한다.
그림 3. 프로젝트 시작하기(3)
MySQL Driver, Oracle Driver, Spring Security, Spring Web Services를 체크한다.
Next를 누른다.
그림 4. 프로젝트 시작하기(4)
Finish를 누르면 프로젝트가 생성된다.
2. Spring Boot(Spring Starter)에서는 서블렛(Servlet) 지원하나요?
Servlet 기능이 되는지 궁금한 분들을 위해서 작성하였다.
그림 5. Servlet 생성하기 전의 모습 (결론: 생성 안 됨.)
Next를 클릭해보면, 생성할 수 없다고 나온다.
3. Run - Hello World
Spring Security를 체크한 경우에는 아래의 화면을 볼 수 있다.
Hello World 화면이라고 생각하면 된다.
그림 6. Run 누르면, 내장 톰캣으로 돌아감.
Run 아이콘을 클릭하면, 내장 톰캣 서버가 돌아간다.
웹 브라우저를 수동으로 열어서 호출 시켜보면 이런 화면이 나오면 정상이라고 보면 된다.
4. REST - 활용한 Controller "Hello, World"
REST에 대해서 소개한 적이 있다.
SpringBoot 데모에서는 JSP 파일이 없어서 REST로 태스트를 진행해야 한다.
그림 7. 클래스 만들기(1)
com.spring. (패키지폴더)를 마우스 오른쪽 버튼으로 클릭한다.
New -> Class를 클릭한다.
그림 8. 클래스 만들기(2)
예로 HomeController라고 입력하고 Finish를 누른다.
이름을 임의로 임력한다고 해서 큰 문제가 되진 않는다.
그림 9. 콘트롤러 코드 작성하기
이처럼 코드를 작성해준다.
package com.springmvc.home;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HomeController {
@RequestMapping("/")
public @ResponseBody String home() throws Exception{
return "home";
}
}
그림 9-1, 그림 9-2. 서버 실행과 내장 웹 브라우저 사용방법, JavaEE 인터페이스 화면
모르겠으면 한번씩 눌러보길 바란다.
그림 10. 빌드 - 웹 브라우저 열어보기(1)
계정 아이디: user
비밀번호는 Using generated security password에 생성된 보안키가 비밀번호이다.
입력하고 로그인을 눌러본다.
그림 11. 빌드 - 웹 브라우저 열어보기(2)
내장 이클립스 웹 브라우저에서는 화면이 안 보이는데, 엣지나 크롬의 경우에서는 출력된 REST 화면을 볼 수 있다.
5. Web기반 - Controller 작성하기
이번에는 다소 세팅 작업이 몇 가지가 있는데 일반 jsp 웹 페이지를 출력할 수 있는 Controller(컨트롤러) 생성에 대해서 소개하겠다.
그림 12. 클래스 생성하기 (1)
패키지를 마우스 오른쪽 버튼으로 클릭한다.
New->Class를 클릭한다.
그림 13. 클래스 생성하기 (2)
Superclass의 Browse를 클릭한다.
WebSecu를 검색하면, "WebSecurityConfigurerAdapter를 선택한다.
OK를 누른다.
클래스명(Name)은 WebSecConfig를 입력한다.
Finish를 누른다.
그림 14. 클래스 생성하기 (3)
그림 14처럼 생성되면 잘 생성된 것이다.
복잡하게 코드를 만드는 게 아니다.
그림 15. 클래스 생성하기 (4)
Source -> Override/Implement Methods를 클릭한다.
그림 16. Override / Implement Methods
configure(HttpSecurity)를 체크하고 OK를 누른다.
5-1 Web기반 - SecurityConfig 설정하기
이 글을 조금 심화적으로 이해하려면, Spring Security 부분을 참고하면 된다.
자랑하는 건 아니지만, 필자의 글이 가장 잘 나와있다고 소개하고 싶다.
그림 17. Spring Security 설정하기
package com.springmvc.home.security;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/").permitAll()
.antMatchers("/welcome").permitAll()
.antMatchers("/page1").hasRole("ADMIN")
.anyRequest().authenticated();
}
}
파일명: WebSecurityConfig.java
[첨부(Attachments)]
5-2 Web기반 - HomeController.java 파일 수정하기
파일 수정을 조금 해줘야 한다.
아까 전에 만든 HomeController를 변형하도록 하겠다.
파일: com.springmvc.home.HomeController.java
그림 18. HomeController.java 만들기
package com.springmvc.home;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HomeController {
@RequestMapping("/")
public @ResponseBody String home() throws Exception{
return "home";
}
@RequestMapping("/page1")
public @ResponseBody String page1() throws Exception{
return "Spring Boot : 1";
}
@RequestMapping("/page2")
public @ResponseBody String page2() throws Exception{
return "Spring Boot : 2";
}
}
파일명: HomeController.java
[첨부(Attachments)]
이전의 STS ("Legacy로 작업할 때, 웹 브라우저에 자동으로 재빌드되었다.")와는 다른 점이 빌드가 조금 느리게 반응하거나 수동 빌드를 해줘야 한다.
화면이 안 바뀌면, 다시 실행(Run)을 해보기 바란다. 버그가 전혀 없는 건 아니다.
그림 19. 출력 결과 - 확인하기(1)
그림 20. 출력 결과 - 확인하기(2)
6. Web기반 - WelcomeController 생성(Controller)
그림 20의 문제를 해결할 겸 Web기반 페이지를 작성하는 방법에 대해서 소개하겠다.
그림 21. 패키지 오른쪽 버튼 메뉴
com..... 패키지를 선택한다.
마우스 오른쪽 버튼 클릭한 후, New-> Class를 클릭한다.
그림 22. WelcomeController.java 생성하기
Name: "WelcomeController"
Finish를 클릭한다.
그림 23. 코드를 입력한 상태의 WelcomeController
초기에는 코드가 전혀 입력되어 있지 않다.
그림 23처럼 입력해준다.
package com.springmvc.home;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class WelcomeController {
@RequestMapping("/welcome")
public String welcome() {
return "welcome";
}
}
파일명: WelcomeController.java
[첨부(Attachments)]
7. application.properties 설정 - 웹 경로
웹 페이지를 사용하려면, 경로를 설정해줘야 한다.
이전 Spring Legacy나 maven project로 프로젝트를 생성했다면, web.xml가 존재했었다.
application.properties로 통합된 것으로 보인다.
그림 24. 코드를 입력한 상태의 application.properties
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
파일명: application.properties
[첨부(Attachments)]
7-1. 웹 홈페이지 폴더와 jsp폴더 생성 - 웹 경로
이번에는 jsp 파일의 폴더를 생성하도록 하겠다.
그림 25. 폴더 만들기(1)
src/main 폴더를 오른쪽 버튼으로 클릭한다.
New->Folder를 클릭한다.
그림 26. 폴더 만들기(2)
webapp/WEB-INF/views를 입력한다.
Finish를 클릭한다.
그림 27. 파일 만들기
/src/main/webapp/WEB-INF/views 폴더 내에 파일을 만들어준다.
welcome.jsp 파일을 만든다.
서버를 재시작해준다.
그림 28. 로그인 후의 welcome(URL 주소)
그림 28의 화면이 뜨면, 잘 된 것이다.
7-2. CSS, Images, Javascript 경로
Css/images/Javascript의 경로에 관한 것이다.
그림 29. 결과 - 외부 CSS 적용
그림 29는 css 스타일이 적용된 결과이다.
7-2-1. /src/main/java/resources/static/css/style.css
css 폴더는 /src/main/java/resources/static 내에 만들어주면 된다.
그리고 style.css 파일은 /src/main/java/resources/static/css 폴더에 만들어주면 된다.
그림 30. Style.css 위치
7-2-2. index.jsp 파일 수정하기
index.jsp 파일을 수정해주면 된다.
그림 31. index.jsp 파일 수정하기
<link rel="stylesheet" href="/css/style.css">
서버를 재시작하면 결과를 볼 수 있다.
그림 32. 출력 결과