Spring

    [Spring] RequestMapping과 Controller

    스프링 MVC는 기본적으로 프론트 컨트롤러패턴이다. 이 프론트 컨트롤러의 핵심적인 역할을 하는것이 DispatcherServlet이며 이것이 핸들러를 매핑하고 핸들러 어댑터를 조회하여 어댑터를 실행시킨다. 가장 우선순위가 높은 핸들러 매핑과 핸들러 어댑터는 RequestMappingHandlerMapping, RequestMappingHandlerAdapter이다. @RequestMapping와 @Controller @RequestMappingHandlerMapping은 스프링 빈 중에서 @RequestMapping 또는 @Controller가 클래스 레벨에 붙어 있는 경우에 매핑 정보로 인식한다. @RequestMapping의 경우 컴포넌트 스캔을 위해 @Component도 붙여줘야하지만, @Contr..

    [Spring] 리다이렉트 동작 원리

    [Spring] 리다이렉트 동작 원리

    폼 형식의 문서를 작성 후에 서버로 보낸다고 가정해보자 (HTTP Form Post 방식). 폼 형식의 데이터를 서버에서 받으면 곧바로 다른 페이지로 리다이렉트 한다. 이 때 새로운 HTTP GET 요청을 시작하는 것이기 때문에 수행된 모델 데이터는 모두 소멸된다. 그렇다면 어떻게 리다이렉트를 할 때 데이터를 전달할 수 있을까? GET의 파라미터 형식으로 정보를 전달한다는 특징을 이용하면 된다. GET/servlet/helloServlet?userId=hello 하지만 중요한 정보가 URL에 그대로 노출된다는 문제점이 있고, 스프링은 이를 해결하기 위해 RedirectAttirbutes 클래스를 제공한다. RedirectAttribute는 리다이렉트가 발생하기 전에 모든 없어질만한 속성을 세션에 복사한다..

    [Spring] Validation

    [Spring] Validation

    검증 처리 코드 1. 검증 오류를 보관할 HashMap을 생성한다. 2. 상품 이름이 빠지거나, 가격의 범위를 넘어서거나, 수량 범위를 넘어설 때 검증할 로직을 추가한다. 3. 특정 필드가 아닌 복합 적인 검증 로직도 추가한다. 4. 만약 2번 3번에서 검증에 실패하면 errors에 에러 이유가 들어가 있을 것이고, 에러가 있으면 validation/v1/addForm으로 다시 이동한다. @PostMapping("/add") public String addItem(@ModelAttribute Item item, RedirectAttributes redirectAttributes, Model model) { // 검증 오류 보관 Map errors = new HashMap(); // 검증 로직 if (!S..

    [Spring] 의존성 주입과 동일 타입 클래스 문제 해결

    [Spring] 의존성 주입과 동일 타입 클래스 문제 해결

    의존성 주입을 위해 필드 주입, setter주입, 생성자 주입 등 여러 가지 방법을 이용할 수 있다. 하지만, 프로그램에서 한 번 의존성을 셋팅하고 나면 바꿀 일이 없기 때문에 생성자 주입 방법이 권장된다. 의존성 주입 다음과 같이 NoteService에서 NoteRepository를 필요로 한다고 가정해보자. 이런 경우 생성자 또는 setter를 이용하여 noteRepository의 실제 객체를 주입 받아야 한다. 이런 것을 의존성 주입이라고 한다. public class NoteService { private NoteRepository noteRepository; public NoteService(NoteRepository noteRepository) { this.noteRepository = not..

    [Spring] 스프링 빈 콜백

    보통 애플리케이션 서버를 올리고 DB커넥션을 연결하면 시간이 오래걸리기 때문에 DB커넥션 풀이나 네트워크 소켓을 이용하여 애플리케이션 시작 지점에 필요한 연결을 미리 준비하여 빠른 응대를 한다. 또 한 종료 시점에는 연결을 모두 안전하게 종료할 필요가 있는데 이를 도와주는 것이 콜백 메서드이다. 스프링 빈의 라이프사이클 스프링 빈은 기본적으로 객체를 모두 생성한 후에 의존 관계 주입을 시작한다. (생성자 주입은 제외) 그렇다면 스프링 빈의 등록 완료 시점을 어떻게 알 수 있을까? -> 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해서 초기화 시점을 알려주며, 스프링 컨테이너가 죵로되기 직전에 소멸 콜백도 준다. 스프링컨테이너생성 → 스프링빈생성 → 의존관계주입 → 초기화콜백 사용 → ..