스프링 부트 기반
https://start.spring.io/
maven project
gradle project
필요한 라이브러리와 빌드하는 라이프사이클까지 다 관리해주는 툴 (버전 설정과 라이브러리 가져오기)
라이브러리 의존관계 관리 -> 의존 관계인 모든 라이브러리 가져옴
ex. 스프링 부트 라이브러리
spring-boot-starter :
ex. 테스트 라이브러리
spring-boot-starter-test :
^ gradle 들어가면 있음
main :
java : 실제 패키지와 소스 파일들
resources : 실제 자바 코드들을 제외한 xml이나 설정 파일들
test : 테스트 코드들이 있음
해당 에러는 start.spring.io에서 생성한 프로젝트의 java version이 17로 되어 있어, 내가 설치한 JDK version 11과 일치하지 않아 발생한 것.
start.io에서 java version을 11로 설정해줘야 함
Tomcat이라는 WebServer 내장하고 있어서 spring boot 띄워줌
package haein.haeinspring;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class HaeinSpringApplication {
public static void main(String[] args) {
SpringApplication.run(HaeinSpringApplication.class, args);
}
}
@Controller
public class HelloController {
@GetMapping("hello")
public String hello(Model model){
model.addAttribute("data", "hello!!");
return "hello"; // resources > templates > hello.html 찾음
}
}
spring 공식 사이트
https://docs.spring.io/spring-boot/docs/2.1.7.RELEASE/reference/html/boot-features-developing-web-applications.html
https://docs.spring.io/spring-boot/docs/current/reference/html/features.html
서버에서 하는 것 없이 파일을 웹 브라우저에 그대로 내려줌
과거에 JSP, PHP 등이 템플릿 엔진
서버에서 프로그래밍해서 동적으로 HTML 내려주는 것
MVC : model-view-controller 패턴
서버에서 HTML 변형해서 내려줌
JSON이라는 데이터 구조 포멧으로 클라이언트한테 데이터 전달하는 방식
API로 데이터만 내려주면 클라이언트에서 화면을 그려줌
서버끼리 통신할 때도 API 방식으로 함
hello-static이란 컨트롤러 없으면 static/hello-static.html에서 파일 찾음
템플릿 엔진을 Model, View, Controller로 쪼개서 View를 템플릿 엔진으로 HTML을 조금 더 프로그래밍하고 랜더링한 것을 클라이언트한테 전달
@Controller
public class HelloController {
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
}
문자열로 응답할 때
@Controller
public class HelloController {
@GetMapping("hello-string")
@ResponseBody // HTTP의 Body에 "hello " + name을 바로 넣어주겠다는 뜻
public String helloString(@RequestParam("name") String name){
return "hello " + name;
}
}
객체로 응답할 때
JSON 방식으로 데이터 만들어서 HTTP 응답에 반환
@Controller
public class HelloController {
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
Hello hello = new Hello();
hello.setName(name);
return hello;
}
static class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
@ResponseBody가 있으면 viewResolver 대신, HttpMessageConverter가 동작
정리
=> HttpMessageConverter를 통해 JSON 스타일로 바꿔서 반환!
View 없이 바로 Http Response에 넣어서 반환