Spring(34)
-
Spring MVC - 컨트롤러 파라미터 타입 종류, 리턴 타입 종류 매뉴얼
컨트롤러에 어떤 종류의 파라미터를 받을 수 있고, 어떤 종류의 리턴타입을 사용할 수 있는지 정리된 매뉴얼. 컨트롤러 파라미터 타입 매뉴얼 docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-ann-arguments Web on Servlet Stack Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, “Spring Web MVC,” comes from the name of its source mod..
2021.04.07 -
Spring MVC - 요청 헤더 조회 @RequestHeader, @CookieValue
컨트롤러 파라미터에서 헤더 정보를 조회하기 위한 방법. 다건: @RequestHeader MultiValueMap headerMap, 단건: @RequestHeader("host") String host, 참고로 MultiValueMap은 하나의 키에 여러 값을 저장할 수 있는 구조로, List로 리턴받을 수 있다. 쿠키: @CookieValue(value = "myCookie", required = false) String cookie
2021.04.07 -
Spring MVC - 요청 매핑, @RequestMapping, @PathVariable
@RequestMapping("/hello") /hello URI로 요청이오면 해당 메서드가 호출이 된다. /hello/ 처럼 뒤에 / 가 붙어 있어도, 스프링은 /hello와 같다고 허용하여 메서드를 매핑시켜준다. 클래스 레벨에 선언하여 공통 URI부분을 매핑해서 메서드 레벨에 선언된 URI의 중복된 부분을 제거해준다. method 속성에 HTTP 메서드를 지정해주지 않으면 어떤 메서드가 와도 호출되는 매핑이 된다. 최근에는 method 속성을 사용하지 않고 @GetMapping, @PostMapping, @PutMapping, @PatchMapping, @DeleteMapping 으로 간편하게 사용할 수 있다. @PathVariable 경로변수. 요청 URI 자체가 식별자가 되는 방식. 예) 요청 U..
2021.04.06 -
Spring MVC - Front Controller의 핸들러매핑과 핸들러어댑터
Front Controller의 역할 프론트 컨트롤러의 가장 대표적인 역할을 뽑자면, 요청 URI에 따라 알맞는 컨트롤러를 선택하여 호출하는 것이다. 이 역할의 핵심이 핸들러 매핑과 핸들러 어댑터다. 핸들러란? 여기서 핸들러란 무엇일까? 다양하게 해석될 수 있는데, 여기서는 그냥 이벤트가 발생했을 때, 해당 이벤트에 맞는 동작을 수행하는자 라고 생각하면 된다. 즉, 해당 URI에 맞는 동작을 수행하는 자 = 컨트롤러 라고 생각하면된다. 컨트롤러는 구체적고 핸들러가 그 상위 개념으로 더 큰 개념이라고 생각하면 된다. Spring MVC 구조 핸들러 매핑이란? Dispatcher Servlet이 요청 URI가 어떤 핸들러와 매핑되는지 찾는 과정이다. 핸들러 매핑은 결국 요청과 알맞는 핸들러 객체를 Dispa..
2021.04.01 -
Spring MVC의 핵심! FrontController 패턴과 DispatcherServlet
DispatcherServlet이란? Spring MVC에서 프론트 컨트롤러 패턴을 구현한 Servlet이다. Front Controller란? Front Controller가 없었던 시절에는 REST API를 구현할 때, 한 개의 URL에 한 개의 서블릿이 매핑되는 구조였다. 이 구조는 매 서블릿을 구현할때마다 중복되는 소스가 발생하였다. 예를 들어 서블릿에서 처리한 결과를 JSP에 넘기기 위해, RequestDispatcher에 forward를 해주는 로직은 매번 필요한 작업이었다. 또한, 컨트롤러의 테스트 코드를 작성할 때, 서블릿에 의존되어 순수한 자바 코드로 단위 테스트가 불가능했다. 하지만 프론트 컨트롤러라는 서블릿이 컨트롤러 앞에 수문장 역할을 하면서 컨트롤러의 공통영역을 처리해주고 컨트롤러..
2021.04.01 -
엔티티에 setter를 사용하면 안되는 이유와 대체방안
엔티티에 setter를 열어두면 어떻게 될까? 보통 스프링은 여러가지 클래스 종류로 나눌수 있지만 대표적으로 Controller, Service, Repository, Domain 등 으로 분류할 수 있다. 엔티티는 도메인에 해당하며 여기서 만약 setter를 열어뒀다고 가정해보자. 엔티티에 setter로 필드 상태를 변경하고 트랜잭션이 종료되면 변경감지에 의해 update문이 나가게 된다. 그런데 Controller에서도 Entity를 생성하여 setter를 호출하고,,, Service에서도 호출하고,, 시스템이 복잡하다면 운영시 해당 Update문이 어디서 누구에 의해 발생했는지 추적하기가 굉장히 어려워진다. 그럼 setter를 열어두지 않고 어떻게 필드 상태를 업데이트 할 수 있을까? setter를..
2021.01.29