본문 바로가기

백엔드 개발/SpringMVC

데이터 검증 - 매소드 만들기, 등록, view에 보여주는 법 요청의 파라미터가 컨트롤러 매소드의 인수로 바인딩 될 때, 파라미터는 형 변환과 데이터 검증 절차를 거친다. 형 변환은 파라미터를 바인딩될 매소드의 인수와 같은 형으로 변환하는 절차이고, 데이터 검증은 파라미터가 인수의 값으로서 말이 되는지 확인하는 절차이다. 이 둘을 모두 에러 없이 거치면 바인딩 되고, 과정에서 에러가 나면 바인딩은 실패하고 에러 내용은 BindingResult의 객체에 저장된다. 저번 시간에는 형 변환 매소드를 만들어 Binder에 등록해서 WebDataBinder가 원래 할 수 없었던 형 변환을 할 수 있도록 만드는 것을 했다. 이번엔 같은 과정을 데이터 검증 쪽에서 할 것이다. 데이터 검증의 경우에도, WDB에 기본 내장된 기능 말고 사용자가 만들어 하고 싶은 검증 절차가 따로 .. 더보기
데이터 변환과 검증(타입 변환 추가 하는 법, BindingResult 이용) 1.WebDataBinder의 원리 (복습) (0)Binding이란? 요청의 파라미터를 컨트롤러 매소드의 인수와 연결 시키는 것을 말한다. WebDataBinder는 요청의 파라미터를 Controller Method의 인수에 맞게 형변환을 시켜주고, 또 인수로 들어갈 수 있는 값인지 확인하는 장치이다. 해당 과정을 거쳐서 파라미터가 인수와 연결된다. (1) 형 변환 요청의 파라미터는 무조건 String이기 때문에 형 변환이 필요하다. 여기서는 MyDate라는 객체가 컨트롤러의 인수로 쓰였고, 객체의 인스턴스 변수로 binding 되어야 한다. (binding 될 대상은 Spring이 알아서 잡아준다.) 따라서 "2021"을 int 2021로 바꿔주는 역할을 한다. 만약 이 과정에서 에러가 발생하면, (y.. 더보기
DispatcherServlet Source 까보기 (어떻게 돌아가는지) 1. DispatcherServlet이란 뭐였나? (복습) 본래 하나의 서블릿에 입력 처리 출력 과정이 다 담겨 있었다. 여기서 모든 서블릿에 공통적이고 돌아가는 원리의 차이가 없는 입력 부분을 앞으로 빼서, 하나의 서블릿으로 만들었다. (처리나 출력은 서블릿마다 기능이 다를 수 있지만, 사용자의 요청을 받는 입력부분은 거의 모든 서블릿이 공통적으로 같다.) 이것이 디스패쳐 서블릿이다. 스프링은 서블릿을 전처리 전담하는 DispatcherServlet과 처리담당 Controller, 출력담당 View로 나누어서 관심사를 분리했다. (관심사란 사용자가 관심을 가지고 해결해야할 작업을 말한다. MVC 패턴은 해결해야할 분야를 각각 DisPatcherServlet, Controller, view로 나누어서 관.. 더보기
Spring에서 예외 처리하는 방법(2) 저번 시간까지 정리한 내용으로 서버 처리하다가 예외가 발생했을 시 이를 대처하는 방법이 3가지가 있었다. (1) 예외가 발생할 수 있는 구문을 try - catch로 묶는다. 이는 예외가 발생할 수 있는 구문마다 try-catch 구문으로 묶어야 해서 아주 비효율적이었다. (2) 컨트롤러 내부에 예외처리만 담당하는 매소드 만들기. 예외처리 매소드의 어노테이션은 @ExceptionHandler 이다. 작동원리는 다음과 같다. a. 해당 컨트롤러 내부의 어떤 매소드에서 예외가 발생하고, 그 매소드는 예외를 밖으로 던진다. (throws) b. @ExceptionHandler 어노테이션이 붙은 매소드 중 해당 예외를 처리할 수 있는 매소드가 있다면 catch 구문처럼 해당 예외를 객체로 받아서 처리한다. **.. 더보기
Spring에서 예외 처리하는 방법(1) 컨트롤러의 매소드에서 예외가 발생 했을 시 어떻게 처리하는지에 관한 내용이다. 예외처리 안 한 경우, 서버가 어떻게 응답하는지에 대해서 알아보고 예외 처리 방법에 대해서 알아본다. 예외 처리 방법에는 try-catch 문으로 처리, @ExceptionHandler 사용, @ControllerAdvice 사용이 있다. 1. 예외처리 안 한 경우, 서버가 어떻게 응답하나? @Controller public class ExceptionController2 { // 각 매소드에서 예외 발생 시킴. @RequestMapping("/ex3") public void main() throws Exception { throw new Exception("예외가 발생했습니다."); } } 일부러 예외를 만들어 던져보았다. .. 더보기
세션(Session) 실습(2) 저번 시간에 했던 내용을 복기 해보겠다. 먼저 홈화면에서 게시판 화면으로 들어가려 했는데, 이때 클라이언트로 로그인 상태인지 아닌지 체크한다. 로그인 상태라면 바로 게시판 화면으로 넘어간다. 로그인 안 한 상태면, 로그인 창을 띄운다. 클라이언트가 로그인을 하면 다시 홈 화면으로 이동한다. 로직은 밑과 같다. 우리가 이번에 하려는 것은 로그인 성공하면 다시 자기가 갈려고 했던 페이지로 다시 클라이언트를 보내는 것이다. 난 무신사에서 옷을 살려고 했는데, 로그인 상태가 아닌 것을 까먹은 적이 있다. 로그인을 하니 다시 홈 화면으로 가서 내가 살려 했던 옷을 다시 찾아야 해 짜증 났던 적이 있다. 이번 웹페이지 에서는 그런 애로사항이 없도록 게시판에 들어가려 했던 사용자가 로그인 할 시 그대로 게시판 페이지.. 더보기
Session 이용 실습(1) 대다수의 웹페이지가 회원인지 아닌지에 따라 할 수 있는 행동들이 나뉜다. 우리가 만든 홈페이지에서는 클라이언트가 로그인 해야지만 게시판 페이지를 이용할 수 있다고 하자. 세션 객체 안에 id가 저장되어 있는지 아닌지를 통해 클라이언트가 로그인 했는지 안 했는지를 체크할 수 있다. 밑의 사진은 게시판에 들어가기 위한 로직을 나타낸 것이다. 1. BoardController와 boardList 만들기 우리는 지금까지 로그인 화면(loginForm.jsp)과 로그인 후 들어올 수 있는 홈 화면(index.jsp) 2가지를 만들었다. index.jsp를 살펴보면, fastcampus Home Board login Sign in This is HOME This is HOME This is HOME 위와 같이 li.. 더보기
Session- 이론 1. 세션이란? Session은 서로 관련된 HTTP 트렌젝션을 서버가 구별할 수 있도록 한데 묶어 놓는 것을 말한다. 하나의 브라우저에 대응하는 세션 객체(저장소)는 하나이다. (1대1 대응) (다른 PC에서 나온 브라우저, 한 PC에서도 서로 다른 브라우저라면 세션 ID가 서로 다르다.) (HTTP트렌젝션 - 요청과 응답 한 세트를 말함. 요청들은 서로 독립적이라, 세션이나 쿠키가 없으면 서버는 해당 요청이 같은 클라이언트에게서 온 것인지 아닌지 구별하지 못한다.) 세션은 서버에 객체로서 존재하고, 서로 연관된 요청들을 하나로 묶기 위해 쿠키를 이용한다. 2. 세션이 돌아가는 과정. (1) 세션의 생성 브라우저에서 첫 번째 요청이 오는 순간, 서버에서는 해당 요청에 대한 세션을 만든다. 그리고 요청에.. 더보기