본문 바로가기

Coding/Java Spring23

Spring 빈 후처리기 정리 의존성 추가 implementation("org.springframework.boot:spring-boot-starter-aop") 먼저 위처럼 aop에 관한 의존성을 추가해준다. 이렇게 하면 aspectjweaver라는 aspectJ 관련 라이브러리를 등록하고 스프링 부트가 AOP관련 클래스를 자동으로 빈으로 등록한다. AutoProxyCreator 스프링 부트는 AnnotationAwareAspectJAutoProxyCreator라는 빈 후처리기를 자동으로 빈으로 등록한다. 해당 빈은 자동으로 프록시를 생성해주는 클래스로써 스프링 빈으로 등록된 Advisor들을 자동으로 찾은 후 프록시가 필요하다면 자동으로 프록시를 적용해준다. 일반적으로 AOP를 구현할 때 클래스 위에 @Aspect 어노테이션을 붙.. 2023. 7. 19.
Spring DataSource/TransactionManager 정리 개요 Spring Batch 5 버전을 통해 배치를 생성하고 관리하고 있는데, 멀티 모듈로 구성된 상황에서 DataSource 설정 관련 동작이 원활하지 않아 Spring DataSource와 Transaction Manager에 대한 내용에 대해 정리한다. 본 포스팅의 내용은 인프런 김영한님의 데이터 접근 핵심 원리 강의에 기반한다. DataSource 일반적으로 커넥션을 얻는 방법으로 JDBC DriverManager를 직접 사용하거나 HikariCP등의 커넥션 풀을 사용하는 방법이 존재한다. DriverManager를 통해 커넥션을 획득하는 경우 항상 신규 커넥션을 획득하게 되는데 이를 커넥션 풀을 사용하는 방법으로 변경하려면 어떻게 해야할까? 어플리케이션 로직에서 DriverManager를 사용하.. 2023. 7. 19.
스프링 시큐리티 MVC 통합 @EnableWebMvcSecurity 스프링 4.0부터 @EnableWebMvcSecurity는 deprecated됐다. 대안으로 @EnableWebSecurity를 사용하자. 스프링 시큐리티와 스프링 MVC를 통합하려면 @Configuration 어노테이션이 붙은 클래스에 @EnableWebSecurity를 추가해주면 된다. 스프링 시큐리티는 MVC의 WebMvcConfigurer를 사용한 구성 방법도 제공한다. 이는 WebMvcConfigurationSupport와 직접 통합하는것과 같이 좀 더 세밀한 설정이 필요할 때 수동으로 설정하기 위해 사용된다. MvcRequestMatcher 스프링 시큐리티는 MVC가 MvcRequestMatcher를 사용하여 URL을 매칭시키는 방법에 대해 통합하는 방법.. 2023. 6. 19.
스프링 시큐리티 Authentication 아키텍처 Servlet Authentication Architecture 본 섹션에서는 서블릿 인증에 사용되는 스프링 시큐리티의 주요 아키텍처 요소에 대해 설명한다. 이러한 요소들이 어떻게 결합되는지 설명하는 구체적인 흐름은 인증 섹션을 통해 설명한다. 아래의 요소들은 인증 관련한 주요 요소들에 대한 간략한 설명이다. - SecurityContextHolder: 인증 정보를 저장하는 공간이다. - SecutiryContext: SecurityContextHolder를 통해 획득되며 현재 인증된 유저의 Authentication 정보를 담고 있다. - Authentication: 인증을 위해 사용자가 제공한 정보 또는 SecutiryContext의 현재 사용자 정보를 제공하기 위해 AuthenticationMana.. 2023. 6. 19.
스프링 시큐리티 아키텍처 Architecture 이번 섹션에서는 서블릿 기반의 어플리케이션에서 동작하는 스프링 시큐리티의 아키텍처에 대해 다룬다. A Review of Filters 스프링 시큐리티는 서블릿 필터를 기반으로 한다. 따라서 일반적인 필터의 역할에 대해 먼저 알아보자. 아래의 그림은 단일 HTTP 요청을 처리할 때의 구조이다. 클라이언트가 요청을 보내면 컨테이너는 FilterChain을 생성한다. 해당 클래스는 요청 URI기반으로 HttpServletRequest를 다루는 Filter와 Servlet인스턴스를 포함하고 있다. 스프링 MVC에서 Servlet은 DispatcherServlet의 인스턴스이다. 적어도 한개 이상의 서블릿이 단일 HttpServletRequest 및 HttpServletResponse를 처.. 2023. 6. 19.
Spring Hibernate EventListener로 엔티티 변경 감지하는 방법 개요 현재 토이 프로젝트에 간단하게 CQRS 아키텍처를 도입해보고 있다. 따라서 쓰기DB, 읽기DB 총 2개의 데이터베이스가 존재하고 쓰기 요청이 오는 경우 쓰기DB에 데이터를 기록함과 동시에 SQS에 이벤트를 발송하고 있다. 그리고 읽기DB에서는 해당 SQS를 컨슈밍하고 있다가 변경 이벤트가 들어오면 내부적으로 동기화를 진행하는 형태이다. 위 요구사항에 따라 엔티티에 변경사항이 생긴다면 감지한 후 이벤트를 발생해줘야하기 때문에 관련 이벤트 리스너를 찾아봤는데, Hibernate의 EventListener를 활용하면 손쉽게 가능하다는것을 알게 되었다. JPA에서 이벤트 리스너를 제공해주지만 Hibernate의 기능을 사용해야 좀 더 세분화하여 활용할 수 있다고 하여 사용하게 됐다. (참고: https:/.. 2022. 1. 21.