0. 프로젝트 세팅


1. 코드 작성
1. 패키지 및 java, mustache 파일 위치 구조

2. User 클래스 - Model
package org.example.second.model;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor // 생성자
public class User {
private int id;
private String username;
private String email;
}
3. UserRepository 클래스 - Repositroy
package org.example.second.repository;
import org.example.second.model.User;
public class UserRepository {
public User findOne(){
// select * from user_tb where id = 1;
return new User(1, "ssar", "ssar@nate.com"); // given data
}
public User findTwo(){
// select * from user_tb where id = 2;
return new User(2, "cos", "cos@nate.com"); // given data
}
}
4. UserController 클래스 - Controller
package org.example.second.controller;
import org.example.second.model.User;
import org.example.second.repository.UserRepository;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class UserController {
UserRepository userRepository = new UserRepository();
// 파일을 찾아줌
@GetMapping("/user/1")
public String findOne(Model model){
User user = userRepository.findTwo();
model.addAttribute("model", user);
return "user/info";
}
@GetMapping("/v2/user/1")
public @ResponseBody String findOneV2(){ // @ResponseBody는 값을 return => ResponseBody+Controller = RestController
User user = userRepository.findOne();
return """
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>info page</h1>
<hr>
<div>
${user.id}, ${user.username}, ${user.email}
</div>
</body>
</html>
""".replace("${user.id}",user.getId()+"")
.replace("${user.username}",user.getUsername())
.replace("${user.email}",user.getEmail());
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>info page</h1>
<hr>
<div>
{{model.id}}, {{model.username}}, {{model.email}}
</div>
</body>
</html>
Spring에서
model.addAttribute("model", user);
를 통해 user
객체를 View에 전달하면, View에서 {{model.id}}
같은 형태로 접근할 수 있는데, 이는 Spring의 View 템플릿 엔진이 내부적으로 getter 메서드를 호출하여 데이터를 가져오기 때문
DAO - db에 붙는 데이터 관리자
@RestController
리턴되는 값을 버퍼에 담아서 돌려줌
@Controller
리턴되는 값의 경로의 파일을 찾아서
경로가 templates로 고정되어있음
자동으로 mustache 파일을 찾음
버퍼에 파일에 있는 내용을 담는것
@ResponseBody는 값을 return => ResponseBody+Controller = RestController
- html 코드 + 데이터 끼워넣기 2.파일에다가 데이터 끼워넣기..?
템플릿엔진 = html 코드에 java 코드를 넣는 것
매개변수 Model model
mustache 라는 view 파일에 user를 "model"이라는 키의 값으로 들고가서 쓸 수 있음
mustache 파일안에서는 model.id처럼 변수를 씀 -> getId를 때려줌
model.id가 아니라 서버 측에서 자바 코드를 렌더링해서 mustache 파일에 끼워넣어줌 = 서버 사이드 렌더링
Share article