본문 바로가기

웹 개발/Spring8

Singleton Scope 빈에 Request Scope 빈을 주입받고 싶다면… (Scoped Proxy Bean) 문제 상황 프로젝트 도중 singleton scope 빈에 request scope을 주입해서 사용해야 할 상황이 생겼다. 아래와 같이 인가 처리를 위한 커스텀 인터셉터에서 인증 정보를 담아두는 객체를 주입받아 사용해야 했기 때문이다. @Component public class AuthenticationInterceptor implements HandlerInterceptor { private final AuthenticationContext authenticationContext; ... @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Excep.. 2022. 7. 13.
[Spring] 스프링 이벤트를 활용하여 서비스 간의 의존성 제거하기 작년 12월 19일에 진행한 유스콘에서 스프링 이벤트 처리에 대한 세션이 있었는데요, 내용이 너무 좋아서 포스팅으로 정리하며 제대로 이해해보고자 합니다. 반태형님이 지식 공유를 해주셨고 예제 코드는 여기서 확인하실 수 있습니다. 스프링 공식 문서에서 이벤트에 관한 내용을 참고하고 싶으시면 여기를 보시면 됩니다. 애플리케이션을 만들다보면 아래처럼 서로 다른 서비스 간에 의존성이 발생하는 경우가 생깁니다. @Service public class UserService { private final UserRepository userRepository; private final AdminService adminService; private final EmailService emailService; private .. 2022. 2. 5.
[스프링 시큐리티] 스프링 시큐리티의 구조를 살펴보자! 스프링 시큐리티의 구조 스프링 시큐리티는 웹 애플리케이션의 인증과 인가 및 그 외 일반적인 웹 공격에 대한 방어를 제공하는 스프링의 하위 프레임워크이다. 인증: 내 신원을 확인하는 과정 인가: 내가 특정 리소스에 접근할 권한이 있는지 확인하는 과정 스프링 시큐리티는 주로 서블릿 필터와 이들로 구성된 필터체인을 통해 웹 요청에 대한 보안 관련 처리를 수행한다. 서블릿 필터란 HTTP 요청을 가로채 전처리 및 후처리를 수행할 수 있도록 만들어진 자바 표준 기술이다. 필터는 체인으로 구성될 수 있으며, 하나의 필터가 자신의 역할을 한 후 요청과 응답 객체를 다음 필터로 넘길 수 있다. public void doFilter(ServletRequest request, ServletResponse response,.. 2021. 11. 23.
[SpringMVC] 스프링 MVC의 구조를 이해해보자 (3/3) V4: 사용하기 쉬운 컨트롤러 지난 포스팅에서 만든 V3는 분명 좋은 설계이지만 컨트롤러 인터페이스를 개발하는 개발자 입장에서 매번 ModelAndView를 생성하고 반환하는 것이 번거로울 수 있다. 그래서 이번에는 개발자가 사용하기 편한 컨트롤러를 만들어본다. 기본적인 구조는 V3와 같다. 하지만 프론트 컨트롤러가 컨트롤러를 호출할 때, paramMap 뿐만 아니라 객체를 담을 model을 추가적으로 전달한다는 것, 그리고 컨트롤러가 ModelAndView를 반환하는 것이 아니라 viewName만 반환한다는 차이가 있다. 프로세스 또한 V3와 크게 다르지 않다. 다만 Controller가 더이상 ModelAndView를 반환하지 않고 String을 반환한다. model 객체는 프론트 컨트롤러에서 파라미.. 2021. 7. 30.
[SpringMVC] 스프링 MVC의 구조를 이해해보자 (2/3) V2: JSP 포워드 중복 제거 이전 포스팅에서 단순히 프론트 컨트롤러만 도입한 V1 을 만들어봤다. 이때는 단순히 프론트 컨트롤러를 도입하는 것에 의의를 두고 딱히 설계상 진보된 점은 없었다. 이번에는 V1에서 조금 더 진보된 형태인 V2를 만들어본다. 이번에는 V1에 화면을 그리는 책임을 가지는 오브젝트인 View를 도입해서 JSP를 포워드하는 코드의 중복을 없애보도록 하겠다. 아래의 코드 말이다. RequestDispatcher requestDispatcher = request.getRequestDispatcher(viewPath); requestDispatcher.forward(request, response); V2의 구조는 아래와 같다 이번에는 Controller가 View를 반환하는데, Co.. 2021. 7. 9.
[SpringMVC] 스프링 MVC의 구조를 이해해보자 (1/3) 애너테이션 기반의 스프링 MVC는 정말 편리하다. 얼마나 편리하나면 그 구조를 모르고 사용할때는 마치 마법처럼 느껴질 정도이다… 나는 그냥 문자열만 반환했는데 어떻게 뷰를 찾는건지, 나는 그냥 객체를 반환했는데 어떻게 Json으로 변환해서 HTTP 메시지 바디에 값을 입력하는지… 또 어떻게 컨트롤러의 파라미터에 맞춰서 필요한 컨트롤러를 동작시키는지… 이 과정이 어떻게 일어나는지 정확히 알려면 RequestMappingHandlerAdapter와 HttpMessageConverter, ArgumentResolver의 동작 방식과 구조를 알아야한다. 김영한님의 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 강의를 들으면서 스프링이 어떤 구조로 이런 다양한 변화에 맞게 컨트롤러를 호출하고 뷰를 반환하는지 .. 2021. 7. 9.