
1. 컨트롤러의 역할
- 요청 받기 (URL(LOCATION) - URI(IDENTIFY) 포함)
- 데이터(body)는 DTO로 받음
- 기본 mime 전략 - 데이터 타입 x.www.form.urlencoded (키=값&키=값)
- 유효성 검사하기(body 데이터가 있으면)
- 클라이언트가 View만 원하는지? →View만 응답하면 끝
혹은 DB 처리 후 view도 원하는지? → 모델에게 위임(DAO:서비스)한 후 View를 응답하면 끝
2.유효성 검사하기
- 유효성 검사를 하지 않으면 사용자가 조건에 맞지 않는 데이터를 DB에 INSERT 할 수 있음
- 백엔드에서는 무조건 유효성 검사가 필요함!
- GET(SELECT) 요청시) DB에 변경을 주지 않고 단순 조회만 하기 때문에 유효성 검사를 안해도 됨
- 400.mustache 안해도 되는 이유 : ViewResolve 설정(앞 뒤 경로)이 되어 있음

3. UserRpository 만들어 DB에 작업하기
package shop.mtcoding.blog.user;
import jakarta.persistence.EntityManager;
import jakarta.persistence.Query;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
@Repository // IoC에 new하는 방법
public class UserRepository {
// DB에 접근할 수 있는 매니저 객체
// 스프링이 만들어서 IoC에 넣어둔다.
// DI에서 꺼내 쓰기만 하면된다.
private EntityManager em;
// 생성자 주입 (DI 코드)
public UserRepository(EntityManager em) {
this.em = em;
}
@Transactional // db에 write 할때는 필수
public void save(UserRequest.JoinDTO requestDTO){
Query query = em.createNativeQuery("insert into user_tb(username, password, email, created_at) values(?,?,?, now())");
query.setParameter(1, requestDTO.getUsername());
query.setParameter(2, requestDTO.getPassword());
query.setParameter(3, requestDTO.getEmail());
query.executeUpdate();
}
}
5. 유효성 검사하기
- 아이디가 3자 이하이면 오류 400 반환하기
- error 400 페이지 간단히 구현하기
무조건 templates폴더 안에 있어야지 안 그러면 인식을 못함!
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>클라이언트가 요청을 잘못함 400</h1>
</body>
</html>
package shop.mtcoding.blog.user;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@Controller
public class UserController {
private UserRepository userRepository; // null
public UserController(UserRepository userRepository) { //IOC 컨테이너에서 써치해서 찾아서 넣어줌
this.userRepository = userRepository;
} // 생성자를 만들어서 디폴트 생성자를 없애버림
@PostMapping("/join")
public String join(UserRequest.JoinDTO requestDTO) {
System.out.println(requestDTO);
// 1. 유효성 검사
if (requestDTO.getUsername().length() < 3) {
return "error/400";
}
userRepository.save(requestDTO); // 모델에 위임하기
return "redirect:/loginForm"; //리다이렉션불러놓은게 있어서 다시부른거
}
@GetMapping("/joinForm") // view만 원함
public String joinForm() {
return "user/joinForm";
}
@GetMapping("/loginForm") // view만 원함
public String loginForm() {
return "user/loginForm";
}
@GetMapping("/user/updateForm")
public String updateForm() {
return "user/updateForm";
}
@GetMapping("/logout")
public String logout() {
return "redirect:/";
}
}


Share article