3. Back-end/3-2. Spring MVC - 남궁성

    Spring MVC - [ Transaction, commit, Rollback ]

    1. Transaction Transaction (=Tx) 이란 더 이상 나눌 수 없는 작업의 단위를 의미한다. (ex. insert, update, select문 각각 하나하나 / 계좌 이체(출금+입금) 등) 계좌 이체의 경우는 출금과 입금이 하나의 Tx여야 한다. (계좌 이체 시 출금이 이루어지면 입금도 반드시 이루어져야하므로!) Transaction의 속성은 크게 ACID 4가지로 볼 수 있다. 원자성(Atomicity) : 나눌 수 없는 하나의 작업으로 다뤄져야 한다. 일관성(Consistency) : Tx 수행 전과 후가 일관된 상태를 유지해야 한다. 고립성(Isolation) : 각 Tx는 독립적으로 수행되어야 한다. 영속성(Durability) : 성공한 Tx의 결과는 유지되어야 한다. 각 ..

    Spring MVC - [ Transaction, commit, Rollback ]

    Spring MVC - [ Spring DI ]

    1. 변경에 유리한 코드(1) - 다형성, factory method 아래와 같이 코드를 작성하면 SportsCar를 Truck으로 변경할 때 변경해야 할 포인트는 2군데이다. SportsCar car = new SportsCar(); Truck car = new Truck(); 다형성을 이용하면 변경 포인트를 한 군데로 줄일 수 있다. Car car = new SportsCar(); Car car = new Truck(); 그리고 아래처럼 메서드로 반환받을 경우, 객체를 생성하는 코드는 손 댈 필요가 없고 메서드에서 반환 타입만 변경해주면 된다. Car car = getCar(); static Car getCar() { return new SportsCar(); } static Car getCar() ..

    Spring MVC - [ 데이터의 검증 ]

    1. Validator validator란 객체를 검증하기 위한 인터페이스로, 객체 검증기(validator)구현에 사용한다. 아래는 구현 예시이다. supports 반환 결과 false이면 검증할 수 없다. public class UserValidator implements Validator { @Override public boolean supports (Class clazz) { return User. class. isAssignablefrom(clazz); // clazz가 User 또는 그 자손인지 확인 } @Override public void validate (Object target, Errors errors) { User user = (User)target; String id = user..

    Spring MVC - [ 데이터의 검증 ]

    Spring MVC - [ 데이터의 변환 ]

    1. BindingResult 요청이 들어오면 주소에 붙어온 파라미터를 WebDataBinder가 1. 타입변환, 2. 데이터 검증 실행 후 BindingResult에 결과나 에러를 담아서 컨트롤러로 보내준다고 했다. BindingResult는 파라미터에서 바인딩할 객체 바로 뒤에 넣어줘야 한다. 형변활 할 수 없는 파라미터가 들어오면 오류가 뜨지만,(ex. Date 형식에 문자열) BindingResult를 파라미터로 넣어주면 형변환 실패 시 에러페이지로 넘어가지 않고 null값으로 받아와 컨트롤러가 처리할 수 있도록 해준다. 2. 데이터 변환 어떻게 형변환 해줄 지 컨트롤러에서 @InitBinder 애노테이션을 가진 메서드를 생성해 직접 지정해 줄 수 있다. 해당 메서드가..

    Spring MVC - [ 데이터의 변환 ]

    Spring MVC - [ DispatcherServlet ]

    1. DispatcherServlet [ Spring MVC의 요청 처리 과정 ] DispatcherServlet은 각 서블릿이나 컨트롤러가 공통적으로 처리해야 할 부분을 전처리해준다. 외에도 많은 역할을 한다. 우선 클라이언트에게 요청이 들어오면 DispatcherServlet은 컨트롤러에서 뷰를 반환받아 해당 뷰를 응답으로 보내준다. 이 과정을 자세히 살펴보자. HandlerMapping은 Map으로 key(URL)-Value(메서드) 정보를 저장하고 있는다. DispatcherServlet은 HandlerMapping에서 URL에 해당하는 메서드 정보를 받고, 메서드를 호출한다. 메서드를 호출할 때 컨트롤러와 직접 연결되지 않고 HandlerAdapter를 거친다. 여러 HanlderAdapter ..

    Spring MVC - [ DispatcherServlet ]

    Spring MVC - [ 예외처리 ]

    1. @ControllerAdvice / @ExceptionHandler 컨트롤러에 @ControllerAdvice 애노테이션을 붙여서 전역 예외 처리 클래스 작성이 가능하다. 매개변수로 패키지 경로를 넣어서 지정된 패키지만 예외처리할 수 있도록 설정이 가능하다. 메서드에 @ExceptionHandler 애노테이션을 붙여서 해당하는 예외에 대한 처리를 할 수 있다. 예외 처리 메서드가 중복된 경우, 예외가 발생한 메서드가 있는 컨트롤러 내의 예외 처리 메서드가 우선이다. //@ControllerAdvice // 모든 패키지에 처리 @ControllerAdvice("com.fastcampus.ch2") // 지정된 패키지에서 발생한 예외만 처리 public class GlobalCatcher { @Exce..

    Spring MVC - [ 예외처리 ]