😵 ~23.11.10

0918 | 스프링부트 / 부트에서 컨트롤러 설정하기

unikue 2023. 9. 18. 13:16

✅ 스프링부트 소개

👉 서로 느슨한 결합력을 가지기 위해 객체생성은 스프링에게 맡겨놨음. ▶ 입출력이 쉬워지고 트랜잭션을 한번에 처리할 수 있게 되었다

 

 

 #️⃣스프링부트 사용시의 이점

  • 일반 자바코드처럼 작성 가능
  • 톰캣이 갖고있었던 함수를 다시 반환받게됨. (메인함수를 가지고 시작함)
  • 톰캣에서 필요한 부분만 가져다 쓰게됨 (톰캣이 embeded가 된다)

 

 👉프로젝스 생성시 필요한 라이브러리들을 선택하면 starter가 필요한 라이브러리를 모두 받아줌. 

 

 


 

✅ STS에서 프로젝트 만들기

 

👉 웹프로젝트 생성을 위해 .war로 만들던 기존과는 다르게, .jar로 자바파일을 만들어도 부트에서는 embeded tomcat을 사용해 작동시켜준다.

 

 

필요한 라이브러리를 선택하면 알아서 관련 라이브러리 설치 & starters 로 작동시켜줌!

 

 


 

[에러사항] 어노테이션 하나없다고 깨져버림

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 코드 그대로 진행되므로 퍼블리셔든 개발자든 코드를 유지하면서 유지보수할 수 있다.