0918 | 스프링부트 / 부트에서 컨트롤러 설정하기
✅ 스프링부트 소개
👉 서로 느슨한 결합력을 가지기 위해 객체생성은 스프링에게 맡겨놨음. ▶ 입출력이 쉬워지고 트랜잭션을 한번에 처리할 수 있게 되었다
#️⃣스프링부트 사용시의 이점
- 일반 자바코드처럼 작성 가능
- 톰캣이 갖고있었던 함수를 다시 반환받게됨. (메인함수를 가지고 시작함)
- 톰캣에서 필요한 부분만 가져다 쓰게됨 (톰캣이 embeded가 된다)
👉프로젝스 생성시 필요한 라이브러리들을 선택하면 starter가 필요한 라이브러리를 모두 받아줌.
✅ STS에서 프로젝트 만들기
👉 웹프로젝트 생성을 위해 .war로 만들던 기존과는 다르게, .jar로 자바파일을 만들어도 부트에서는 embeded tomcat을 사용해 작동시켜준다.
[에러사항] 어노테이션 하나없다고 깨져버림
Web application could not be started as there was no org.springframework.boot.web.servlet.server.ServletWebServerFactory bean defined in the context.
[SPRING] ApplicationContextException : ServletWebServerFactory 빈이 없어서 ServletWebServerApplicationContext를 시작할
ApplicationContextException : ServletWebServerFactory 빈이 없어서 ServletWebServerApplicationContext를 시작할 수 없습니다. 스프링 부트를 사용하여 스프링 배치 애플리케이션을 작성했습니다. 로컬 시스템에서 명
2ham-s.tistory.com
메인함수쪽에 뭘 변경하는줄알고 잘못건드렸다가 ServletWebServerFactory bean 이 없다고 에러가 떴었다. 혹시나해서 어노테이션 넣어줬는데 바로 인식함. (@SpringBootApplication)
코드를 보니 RlandwebApplication(내 프로젝트명).class 이므로 하위 클래스를 인식해서 객체를 읽어들여야하는데 애초에 어노테이션이없어서 메인함수인식을 통한 객체 생성 자체가 안되었던것 같음!
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class RlandwebApplication {
public static void main(String[] args) {
SpringApplication.run(RlandwebApplication.class, args);
}
}
👉부트가 적용되면서 configuration이 자동화되었다! (부트를 안쓰면 기존대로 라이브러리 받아서 직접 설정하면 됨)
웹문서를 껍데기로 쓰려면 WAS같은 것들이 내장되어있어야 함. (마치 화면을 띄우기 위한 도구로만 사용됨 == 하나의 라이브러리화)
✅ 부트 사용하기
#️⃣ 저장시 자동으로 서버동작하게 하기
: ctrl+s 누를때마다 자동으로 서버가 반영하도록 하려면 개별프로젝트-우클릭하여 스프링에서 DevTools를 추가해준다 (pom.xml에서 확인가능)
#️⃣ 컨트롤러 만들기
(* 패키지와 클래스 생성기준을 구분하기. 컨트롤러의 클래스명이 충돌될때 컨트롤러이름 지정하기)
👉 url이 길어져도 클래스위로는 모두 패키지명이 되어야 한다.
#️⃣ 뷰 연결하기 - jsp를 강제로 연동하기
: 스프링에서 쓰던 webapp - src - main - webapp -WEB-INF 폴더를 가져와도 작동되지않음.
👉 부트로 오면서 jsp에 관련된 어떠한 설정도 하지 않게됨! (뷰 엔진으로써 jsp를 쓰지않고 지원하지도 않음)
대신 타임리프를 사용함!
강제로 dependency를 꽂아줘야 (jstl, jasper) jsp를 강제로 반환시킬 수 있다.
지원하지 않는걸 굳이 할 필요가 없으나 부트에 jsp를 얹어쓰는 방법이 있다는것만 기억하기
#️⃣ 뷰 연결하기 -타임리프
Thymeleaf
Integrations galore Eclipse, IntelliJ IDEA, Spring, Play, even the up-and-coming Model-View-Controller API for Java EE 8. Write Thymeleaf in your favourite tools, using your favourite web-development framework. Check out our Ecosystem to see more integrati
www.thymeleaf.org
: 스프링부트에서 화면을 구현할때 사용되는 뷰 엔진. starter에 포함되어있으므로 쉽게 라이브러리를 설정가능하다.
❓JSP가 아닌 타임리프를 써야하는 필요성은?
👉기존의 JSP는 퍼블리셔가 가져온 문서를 JSP로 옮겨서 EL이든 코드블럭이든 대체해야 했다면, 타임리프는 HTML 코드 그대로 진행되므로 퍼블리셔든 개발자든 코드를 유지하면서 유지보수할 수 있다.