분류 전체보기

    @Async 애노테이션에서 커스텀 스레드풀 이름을 설정해줬을 때 따로 빈으로 등록하지않아도 스프링컨테이너가 구동된다구??

    1. 발단 별도의 커스텀 스레드풀을 빈으로 등록해주지 않고 @Async("customThreadPoolExecutor") 를 메서드에 붙여주고 스프링 컨테이너를 실행했을 때 당연히 빈을 못찾아서 실행부터 오류가 날거라고 생각했다.@Servicepublic class MyService { @Async("customTaskExecutor") public void performAsyncTask() { // 비즈니스 로직 System.out.println("비동기 작업 실행: " + Thread.currentThread().getName()); }}하지만 스프링 컨테이너는 잘 실행되었고 해당 기능을 호출하기 전까지 아무런 문제없이 구동되고 있었다.그리고 해당 기능이 호출..

    [spring-authorzaiton-server] RegisteredClient를 JPA 로 구현하기

    1. Spring Authorization Server 의 Core Model 을 알아보자 1) RegisteredClient인가 서버에 등록된 클라이언트를 의미한다.OAuth2.0 또는 OAuth2.1 을 통해 인증 및 권한 부여를 요청하는 클라이언트를 구성하는데 사용된다.예를 들어, 클라이언트가 authorization_code 또는 client_credentials 와 같은 권한 부여 흐름을 시작하려면 먼저 클라이언트를 권한 부여 서버에 등록해야한다.클라이언트 등록시 클라이언트는 고유한 client_id, client_secret 및 고유한 클라이언트 식별자와 연결된 메타 데이터를 할당한다.클라이언트의 주요 목적은 보호된 리소스에 대한 액세스를 요청하는 것으로 클라이언트는 먼저 권한 부여 서버를 인..

    [Spring Boot 3.2 마이그레이션] @TransactionalEventListener 사용시 트랜잭션을 분리하고 싶다면 반드시 전파속성을 명시해라!

    문제Spring Boot 2.7 에서 3.2.3 로 마이그레이션을 하던 중 아래와 같은 에러가 발생했다. 원인에러 내용을 읽어보면 @TransactionalEventListener 가 쓰인 곳에서 @Transactional 을 사용하려면 반드시 REQUIRES_NEW 또는 NOT_SUPPORTED 전파속성을 명시해야 한다고 한다.에러가 발생한 코드는 스프링 이벤트 리스너를 사용하면서 커밋된 후 이벤트를 발생시키기 위해서(관심사와 비관심사 로직을 분리하기 위해)@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) 을 사용했고 이 트랜잭션과 분리하여 새 트랜잭션에서 커밋을 발생시키기 위해 @Transactional 을 같이 사용하였다. @T..

    [Spring Boot 3.2 마이그레이션] hibernate @Type, @TypeDef deprecated

    개요 postgresql 에서 jsonb 타입으로 데이터를 저장하고 있었다. spring boot 2.7.6 버전을 사용중이었고 spring boot 3.2.3 로 버전업을 하게 되면서 @Type, @TypeDef 가 deprecated 되었다. 해결 @JdbcTypeCode(SqlTypes.JSON) 또는 AttributeConverter 를 새로 만들어주면 된다는데 postgresql 에서는 dependency 만 새로 바꿔주면 된다! https://github.com/vladmihalcea/hypersistence-utils GitHub - vladmihalcea/hypersistence-utils: The Hypersistence Utils library (previously known as Hi..

    [SpringDataJPA] @Modifying 과 @Query 의 관계와 동작방식 (@Query 없이 @Modifying 만 사용한다면 어떻게 될까?)

    1. @Modifying 이란? @Modifying 어노테이션은 @Query 어노테이션으로 작성된 수정, 삭제 쿼리 메소드를 사용할 때 필요하다. 즉, 조회 쿼리를 제외하고 데이터에 변경이 일어나는 INSERT, UPDATE, DELETE 쿼리에서 사용한다. @Modifying 어노테이션은 @Query 와 같이 사용되며 벌크 연산을 하고 싶을 때 사용한다. ex. 나이가 20살인 모든 회원의 주류 구매 가능 여부 업데이트 UPDATE SET isAvailiablePurchase WHERE age >= 20; @Modifying 의 내부 옵션을 보면 flushAutomatically() 와 clearAutomatically() 가 존재하는 것을 알 수 있다. (참고: https://docs.spring.i..

    [SpringCache] 쪼금의 개념 설명과 Caffeine maximumSize 옵션 테스트

    DB I/O 트래픽을 고려해야하는 api 개발을 진행하게되었다. 1. 조회는 빈번하지만 2. 업데이트는 빈번하지 않은 조건을 가지고 있었기 때문에 스프링캐시가 적합하다고 생각되어 적용해서 개발하게되었다. 해당 포스팅은 개발을 진행하면서 로컬 캐시인 카페인 캐시의 특정 옵션에 대한 여러가지 테스트를 기록하기위해 작성했다. 1. 스프링캐시가 뭔데? 캐시 처리중에서는 Redis, Memcached 등 추가적인 memoryDB 를 이용하거나 application 레벨에서 사용가능한 EhCache 등이 사용되는데 이 중 application 레벨에서 사용가능한 캐시를 말한다. 스프링 캐시는 스프링의 특징처럼 Cache 기능의 추상화를 지원하고, EhCache, Couchbase, Redis 등의 추가적인 캐시 저..