Spring(13)
-
[Spring] @Configuration 안에 @Bean을 사용해야 하는 이유
Spring에서 수동으로 빈을 등록할 때에는 @Configuration 클래스 안에서 @Bean을 사용해야 한다. 왜 @Configuraiton 클래스 안에서 @Bean을 사용해야 하는지 살펴보도록 하자. @Configuration 안에 @Bean을 사용해야 하는 이유, proxyBeanMethods @Configuration 안에 @Bean을 사용해야 하는 이유 @Bean 어노테이션을 이용한 수동 빈 등록 스프링에서는 일반적으로 컴포넌트 스캔을 사용해 자동 빈 등록 방법 사용, 그러나 @Bean 어노테이션을 이용해 수동으로 빈을 등록해야 하는 경우도 존재한다. 개발자가 직접 제어가 불가능한 라이브러리를 활용할 때 애플리케이션 전범위적으로 사용되는 클래스를 등록할 때 다형성을 활용하여 여러 구현체를 등록..
2022.10.13 -
[Spring] 빈 등록을 위한 어노테이션 @Bean, @Configuration, @Component
기존 스프링 MVC에서는 xml을 활용하여 Bean을 등록하였다. 하지만 프로젝트의 규모가 커짐에 따라 사용하는 요소들을 xml에 등록하는 것이 번거로운 일이 되었다. 따라서, 어노테이션을 활용한 Bean 등록 방법이 탄생하게 되었다. Spring에서 Bean을 등록하기 위해 활용 가능한 @Bean, @Component, @Configuration 어노테이션에 대해 알아보자. 1. Spring Bean이란? Spring에서는 Spring의 DI Container에 의해 관리되는 POJO(Plain Old Java Object)를 Bean이라고 부르며, 이러한 Bean들은 Spring을 구성하는 핵심 요소이다. Spring의 Bean을 정리하면 아래와 같다. POJO(Plain Old Java Object..
2022.10.12 -
[Spring] @RequestParam, @RequestBody, @ModelAttribute
Spring에서 Client로 받은 요청을 객체로 바인딩하기 위해 사용하는 방법들에 대해 알아보자. 1. 어노테이션들이 갖는 의미 1) @RequestParam @RequestParam은 1개의 HTTP 요청 파라미터를 받기 위해 사용한다. @RequestParam은 기본으로 설정된 필수 여부가 true이기 때문에 아무런 설정 없이 사용할 경우 반드시 해당 파라미터가 전송되어야 하며, 만일 파라미터가 전송되지 않을 경우 400 에러가 발생한다. 반드시 필요한 값이 아니라면 required를 false로 설정해주면 되고, defaultValue 옵션을 통해 기본값을 지정하는 방법도 가능하다. 2) @RequestBody @RequestBody는 클라이언트가 전송하는 json(application/json)..
2022.10.12 -
[Spring] WebSocket & Spring
웹소켓 웹소켓은 전이중(동시에 양방향 전송이 가능한) 통신을 제공하기 때문에 실시간성을 보장해 줄 수 있다. 실시간성을 보장하는 서비스에서 웹소켓을 사용할 수 있다. 웹소켓 vs HTTP 웹소켓이 아닌 HTTP를 이용하여 실시간성을 보장하는 것처럼 흉내낼 수 있다. HTTP의 실시간성 보장 기법에는 Polling, Long Polling, Streaming이 있다. 실시간성 측면에서 웹소켓과 HTTP의 가장 큰 차이는 수립된 connection을 활용하는 방식이다. HTTP 클라이언트와 연결을 맺고 끊는다. (비연결성) 3way, 4way handshake로 연결을 맺고 끊어야한다. 웹소켓 한 번 연결을 맺고 나면, 그 연결을 계속 유지한다. 연결을 맺는 과정에서 발생하는 비용을 줄일 수 있다. 또 다른..
2022.08.17 -
[Spring] 디스패처 서블릿(Dispatcher Servlet)
이번 글에서는 디스패처 서블릿에 대해 알아보도록 하자. 1. 핸들러 메소드(HandlerMethod) ▷ 핸들러 메소드(Handler Method)란? 핸들러 메소드는 @RequestMapping과 그 하위 어노테이션(@GetMapping, @PostMapping 등)이 붙은 메소드의 정보를 추상화한 객체이다. HandlerMethod는 그 자체가 실행 가능한 객체가 아닌, 메소드를 실행하기 위해 필요한 참조 정보를 담고 있는 객체로써 다음과 같은 정보를 가진다. 빈 객체 메소드 메타정보 메소드 파라미터 메타정보 메소드 어노테이션 메타정보 메소드 리턴값 메타정보 디스패처 서블릿은 애플리케이션이 실행될 때 모든 컨트롤러 빈의 메소드를 살펴서 매핑 후보가 되는 메소드들을 추출한 뒤, 이를 HandlerMet..
2022.08.15 -
[Spring] 포인트컷 표현식
포인트컷 지시자(Pointcut Designator) execution : 메소드 실행 조인 포인트를 매칭한다. within : 특정 타입 내의 조인 포인트를 매칭한다. args : 인자가 주어진 타입의 인스턴스인 조인 포인트 this : 스프링 빈 객체를 대상으로 하는 조인 포인트 target : Target 객체를 대상으로 하는 조인 포인트 @target : 실행 객체의 클래스에 주어진 타입의 애노테이션이 있는 조인 포인트 @within : 주어진 애노테이션이 있는 타입 내 조인 포인트 @annotation : 메서드가 주어진 애노테이션을 가지고 있는 조인 포인트를 매칭 @args : 전달된 실제 인수의 런타임 타입이 주어진 타입의 애노테이션을 갖는 조인 포인트 bean : 스프링 전용 포인트컷 지시..
2022.08.07