https://start.spring.io 에서 원하는 설정과 추가할 라이브러리를 선택하면 프로젝트 생성이 가능하다.
이를 IDE에서 Open해서 사용하면 됨.
resources.static에 정적 컨텐츠를 생성한다.
"서버IP:포트명/파일명" 의 url을 통해 접근한다.
ex)localhost:8080/index.html
index.html은 스프링부트의 Welcome Page 파일명이며, url에서 파일명을 생략하면 Welcome Page로 이동한다.
모든 Java 파일은 src.main.java 안에 저장한다.
그 안에 controller를 저장하기 위한 패키지를 따로 생성하고, 컨트롤러를 저장한다.
controller 클래스 안에 멤버메서드로 url별 기능을 선언하며, 이 때 세가지가 필요하다.
클라이언트가 요청시 사용할 URL 주소
GetMapping 어노테이션으로 선언한다.
View에게 Request에 담아 넘겨줄 변수(필요시 사용)
Servlet에서는 HttpServletRequest에 setAttribute를 사용해 전달했다.
Spring에서는 Model이라는 객체를 매개변수로 활용해 addAttribute하여 View에게 전달한다.
넘겨줄 View 파일 이름
return 값으로 View 파일이름을 사용한다.
View는 resources.templates에 생성한다.
Controller의 return 값을 파일명으로 사용한다.
Spring은 @Component 어노테이션이 붙은 클래스를 자체적으로 관리하는 스프링 빈으로 미리 등록하여 서버 구동시 자동으로 하나의 객체를 생성하여 직접 관리한다. @Controller, @Service, @Repository 도 이에 포함된다. 따라서 컨트롤러 객체를 생성 및 등록하여 대기시킨다.
클라이언트로 부터 요청이 들어오면 Spring은 스프링 빈으로 등록된 컨트롤러 객체의 모든 메서드를 탐색하여, @GetMappping값으로 해당 url을 갖는 메서드가 있는지 확인한다. 이 때 없으면 정적 컨텐츠를 탐색한다. (컨트롤러 url이 정적 컨텐츠 url에 비해 우선순위를 갖음)
해당 url의 메서드를 찾으면 실행하여 addAttribute 등을 수행하고, ViewResolver가 return 값의 View를 resources/template에서 찾아 Dispatch를 수행한다.
View의 템플릿 엔진은 템플릿 엔진의 JSTL로 된 코드를 HTML로 변환하여 클라이언트에 표시해준다.
Controller의 메서드 어노테이션으로 @ResponseBody를 사용하면 ViewResolver를 사용하지 않고 HttpsMessageConverter가 동작하여 return 값을 그대로 반환해 돌려준다.
ResponseBody 추가 후 문자열을 return 한다.
@ResponseBody 을 사용하였으므로 return 값의 View로 전달되는게 아니라, 요청한 브라우저/컨트롤러에게 return 값을 그대로 돌려준다.
@RequestParam 을 사용하였으므로 get방식을 통해 name 값을 전달받야아만 한다.
get방식으로 name=spring을 전달하자. return 값인 hello + name 값이 그대로 출력되는 모습이다.
ResponseBody 추가 후 객체를 return 한다.
setter와 getter를 추가한 Hello 객체를 정의하고.
컨트롤러가 객체를 생성한 후 set로 값 대입 후 객체를 반환하도록 하였다.
수행결과 객체의 변수들을 key:value로 하여 JSON 파일로 출력해주는 모습이다.
API 또한 이러한 방식으로 구현되어. 서버가 원하는 방식으로 요청을 보내면, DB에서 데이터를 찾아 JSON파일로 응답하는 방식으로 되어있다.