자바/스프링(16)
-
SpringBootTest에서 생성자 주입 시 @Autowired를 명시해야하는 이유
테스트에서 생성자 주입을 인식하지 못한다? 컨트롤러 테스트 코드 개선을 진행하다 다음과 같은 예외를 발견했습니다. 해당 예외는 테스트를 실행하자마자 발생했고, 내용을 확인해보니 파라미터를 제대로 등록하지 못했다는 내용이 적혀있었습니다. 빈 주입 과정이 올바르게 동작하지 못한다고 생각해 곧바로 테스트 코드의 필드와 생성자 부분을 확인했습니다. 생성자는 하나만 사용하고 있었고, 파라미터로 전달받는 값들 또한 모두 빈으로 등록되어있었습니다. 스프링 빈 생성자 주입 스프링에서 생성자를 하나만 작성하고, 그 파라미터가 모두 빈으로 등록이 되어있다면 @Autowired를 명시하지 않아도 빈 주입이 가능하다고 공식문서에서는 설명하고 있습니다. 실제 Autowired가 명시된 생성자를 찾아서 등록하는 코드는 빈 후처리..
2024.02.25 -
토비의 스프링, 스프링 AOP 뿌수기 (2), 프록시 팩토리 빈
프록시 팩토리 빈 ProxyFactoryBean 스프링에서 제공해주는 프록시팩토리빈을 사용하면 프록시를 생성해서 빈 오브젝트로 등록하는 동작을 해준다. 지난 포스팅에서 소개한 FactoryBean 인터페이스를 구현해서 만드는 방법과의 차이는 FactoryBean 인터페이스를 구현한 경우에는 프록시를 통해 제공해줄 부가기능도 해당 구현 코드 내부에 추가해줘야했다. 반면에 ProxyFactoryBean은 프록시를 생성하는 작업만 담당한다. 그래서 프록시를 통해 제공해줄 부가기능은 별도의 빈에 둘 수 있다. 즉, 부가기능의 분리가 가능하다는 점이다. ProxyFactoryBean에서 생성하는 프록시에서 사용할 부가기능은 'MethodInterceptor'라는 인터페이스를 구현해서 만든다. 이전 포스팅에서 보았..
2023.05.18 -
토비의 스프링, 스프링 AOP 뿌수기 (1), 빌드업
오랜만에 뿌수기 시리즈로 돌아왔다. 그런데 이번에는 토비의 스프링이다. 사실 다음주에 테코톡 발표 주제로 스프링 AOP를 선정했는데, 공식문서만으로는 자료가 매우 미흡해질 것으로 예상되어 이렇게 여러 책들이 소개하는 스프링 AOP에 대해 정리해보고자 한다. 그 중에 가장 먼저 정리하고자하는 책은 '토비의 스프링'에서 설명하는 스프링 aop이다. 토비의 스프링, 스프링 AOP 빌드업 다이내믹 프록시와 팩토리 빈 토비의 스프링에서는 aop를 설명하기 위한 빌드업이 등장한다. 먼저 핵심 기능에 부가기능을 추가했을 때 벌어지는 현상들에 대해서 설명하고 있다. 처음에는 핵심 기능에 로그나 롤백 등의 부가기능을 추가했을 때 코드가 복잡해진다라는 점을 단점으로 꼽는다. 코드가 그렇게 복잡하게 될 경우에는 우리가 원하..
2023.05.17 -
스프링 공식 문서 뿌수기(13), Bean
늦어도 한참 늦은 것 같은 Bean 정리이다. ㅋㅋㅋㅋ 순서로 따지면 한참 이전에 진행했어야했지만 이제야 정리를 한다. 사실 Bean에 대해서는 알고 있지만 Bean을 정리하지 않고 공식문서 뿌수기 시리즈를 한다는 것이 말이 안되기 때문에 늦게나마 Bean에 대해 정리해보고자 한다. Bean Spring의 IoC container는 하나 이상의 빈들을 관리한다. 이러한 빈들은 configuration metadata와 함께 생성이 된다. 이러한 빈은 자바 코드로도 구성할 수 있고 XML로도 구성할 수 있다. 컨테이너에서 빈을 관리할 때는 다음과 같은 BeanDefinition을 가지고 있다. 여기에서 Dependency Injection과 Scope를 중심으로 알아볼 예정이다. (빈 이름 짓기 등등에 대..
2023.05.10 -
스프링 공식 문서 뿌수기(12), MVC config - WebMvcConfigurer
지난 포스팅에서 @EnableWebMvc 어노테이션에 대해 알아보았다. 짧게 요약할 수 있지만 개인적으로 이해가 안되기도 했고, 구성을 어떻게 할지 한참 고민하다가 어영부영 대충 마무리했다. 그런데 거기에 너무 시간과 정성을 많이 쏟은 나머지 분량을 초과해버리고... 정작 중요한 핵심을 다 못짚고 넘어갔다. 이번에는 MVC Config에서 중요한 핵심인 WebMvcConfigurer와 이를 활용해서 어떻게 Configuration을 등록하는지 알아보도록 하겠다. WebMvcConfigurer WebMvcConfigurer는 기본적으로 제공해주는 MVC Configuration을 커스터마이징할 수 있도록 인터페이스이다. 여기에서는 formatter도 등록할 수 있고, interceptors나 resolve..
2023.05.08 -
스프링 공식 문서 뿌수기(11), MVC config - @EnableWebMvc
이번에는 MVC Config에 대해서 한번 공부해보자~!! MVC Config 공식 문서에서 소개하고 있는 MVC Config는 서블릿을 포함한 환경에 대한 Configuration을 의미한다. '이전에 @Configuration 어노테이션을 활용하면 추가적인 환경설정을 할 수 있는 거 아니었나? 그런데 왜 또 나오지?'라고 생각할 수 있다. 맞다! @Configuration 어노테이션을 사용하는 것만으로도 Configuration이 가능하다. 그런데 이번 포스팅에서는 @EnableWebMvc 어노테이션을 사용해서 Configuration을 하는 과정에 대해서 알아볼 것이다. 글을 다 적고 보니 내용이 조금 어수선하다. 쭉 따라서 읽어도 정리가 안될 수 있으니 뒤 쪽의 요약을 보고 글을 다시 보는 것을 ..
2023.05.08