
Controller

@Controller는 해당 클래스가 Controller의 역할을 수행할 수 있도록 등록해줄 수 있다.
@GET, @POST, @PUT, @DELETE
-각각의 HTTP Method에 매핑되는 애너테이션입니다.
@RequestMapping -> 중복되는 URL를 단축시켜줄 수 있습니다.
@Controller
@RequestMapping("/api")
public class HelloController {
@GetMapping("/hello")
@ResponseBody
public String hello() {
return "Hello World";
}
@GetMapping("/get")
@ResponseBody
public String get() {
return "GET Method 요청";
}
@PostMapping("/post")
@ResponseBody
public String post() {
return "POST Method 요청";
}
@PutMapping("/put")
@ResponseBody
Spring Master - 1주차 83
public String put() {
return "PUT Method 요청";
}
@DeleteMapping("/delete")
@ResponseBody
public String delete() {
return "DELETE Method 요청";
}
}
정적 페이지와 동적 페이지
정적 페이지
-SpringBoot 서버에 html 파일을 바로 요청하면 해당 html 파일을 static 폴더에서 찾아서 반환해줌
-템플릿 엔진을 적용한 상태에서 static 폴더의 html 파일을 Controller를 통해서 처리는
Redirect 요청을 문자열로 반환하면 요청이 재 수행되면서 static 폴더의 파일을 반환할 수 있다.
-외부 즉, 브라우저에서 바로 접근하지 못하게 하고 싶거나 특정 상황에 Controller를 통해서 제어하고 싶다면 templates 폴더에 해당 정적 html 파일을 추가하고 해당
html 파일명인 " hello " 문자열을 반환하여 처리할 수 있습니다. ( .html 은 생략가능!)
동적 페이지
-동적 페이지 처리 과정
Client 의 요청을 Controller에서 Model 로 처리합니다.
a. DB 조회가 필요하다면 DB 작업 후 처리한 데이터를 Model에 저장합니다.
Template engine(Thymeleaf) 에게 View, Model 전달합니다.
a. View: 동적 HTML 파일
b. Model: View 에 적용할 정보들
Template engine
a. View에 Model을 적용 → 동적 웹페이지 생성
i. 예) 로그인 성공 시, "로그인된 사용자의 Nickname"을 페이지에 추가
ii. Template engine 종류: 타임리프(Thymeleaf), Groovy, FreeMarker, Jade, JSP 등
Client(브라우저)에게 View(동적 웹 페이지, HTML)를 전달 해줍니다.
-Thymeleaf
View 정보
"hello-visit" → resources/templates/hello-visit.html
<div>
(방문자 수: <span th:text="${visits}"></span>)
</div>
Model 정보
visits: 방문 횟수 (visitCount)
예) 방문 횟수: 1,000,000 번
<div>
(방문자 수: <span>1000000</span>)
</div>
데이터를 Client에 반환하는 방법
JSON 데이터를 요청하는 API를 통해 브라우저에서 html을 조작하여 반영하는 식
JSON 데이터 반환하는 방법
-템플릿 엔진이 적용된 SpringBoot에서는 Controller에서 문자열을 반환하면 templates 폴더에서 해당 문자열의 .html 파일을 찾아서 반환
-html 파일이 아닌 JSON 데이터를 브라우저에 반환하고 싶다면 해당 메서드에 @ResponseBody 애너테이션을 추가
-반환값 String : 자바에서는 JSON 타입 지원 안하기 때문에 JSON -> String 변환
-반환값 객체 : Spring에서는 자바의 객체 -> JSON 자동 변환
@RestController = @Controller + @ResponseBody
-사용 시 해당 클래스의 모든 메서드에 @ResponseBody 애너테이션이 추가되는 효과를 부여
📝오늘의 회고
쉴틈이 없다. 배울껀 많고 시간이 부족하다.
오늘도! 쳐지지 말고 포기하지말고 힘내서 가보자고~~~