전체 글102 비동기 환경에서 Spring Security 로그인 정보를 유지시키는 방법 Spring에서는 비동기 처리를 위해 @Async 어노테이션이나 CompletableFuture를 자주 사용한다. 하지만 비동기적으로 실행되는 코드에서는 SecurityContextHolder에 저장된 인증 정보(Authentication)가 기본적으로 전파되지 않기 때문에 보안 컨텍스트를 유지하는 것이 문제가 될 수 있다. 해당 포스트에서는 이 문제를 해결하는 방법을 예제와 함께 설명한다.왜 비동기 환경에서 SecurityContext가 유지되지 않을까?Spring Security는 현재 스레드에 보안 컨텍스트를 저장한다. 하지만 @Async나 CompletableFuture를 사용하면 새로운 스레드가 생성되어 비동기 작업이 수행된다. 이때, 기본적으로 새로운 스레드에는 원래 스레드의 보안 컨텍스트가 .. 2024. 9. 2. 비동기 프로그래밍 @Async와 CompletableFuture 비동기 프로그래밍의 두 가지 접근법비동기 프로그래밍은 현대 애플리케이션에서 성능을 최적화하고 사용자 경험을 향상하기 위해 필수적인 기술이다. Java에서는 비동기 프로그래밍을 지원하는 여러 도구가 있으며, 그중에서도 Spring Framework의 @Async 어노테이션과 Java 표준 라이브러리의 CompletableFuture가 많이 사용된다. 그러면 어떤 경우에 @Async를 사용하고 CompletableFuture를 사용해야 할까? 해당 포스트를 통해 @Async와 CompletableFuture의 차이점과 각각의 사용 사례를 구체적으로 살펴보자. @Async - Spring의 간편한 비동기 처리@Async는 Spring Framework에서 제공하는 어노테이션으로, 메서드를 비동기적으로 실행할 .. 2024. 8. 29. 특정 어노테이션이 추가된 자식 클래스를 찾으려고 할 때, 반드시 @Inherit를 사용하자 @Inherited는 어노테이션이 클래스에 적용될 때 해당 어노테이션이 하위 클래스에 상속될 수 있도록 한다. 기본적으로 어노테이션은 상속되지 않지만, @Inherited를 사용하면 부모 클래스에 적용된 어노테이션이 자식 클래스에도 적용된다. @Inherited 어노테이션이 없는 경우, (1) 인터페이스를 상속받은 구현체 또는 (2) 자식 클래스에서 해당 어노테이션이 추가되어 있는 클래스를 찾을 수 없게 된다. 이를 확인하기 위해 Spring의 ApplicationContext를 사용하여 어노테이션을 찾는 예제로 확인해 본다.1. @Inherited 없는 커스텀 어노테이션 정의@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)@interface S.. 2024. 8. 27. 스프링에서 Redis ACL 적용이 안되는 이유 (RedisCommandExecutionException : NOPERM this user has no permissions to run the ...) 😬 상황스프링 애플리케이션에서 웹 소켓 기능을 Redis로 구현한 뒤, Redis에 아무나 접근할 수 없도록 접근 권한을 추가하기 위해 Redis에서 AUTH 명령어로 id, pw 명령어를 계정을 생성하고 권한을 주었다. 하지만 애플리케이션 웹 소켓 Redis pub/sub 과정에서 하기 이미지와 같은 Redis 관련 예외가 발생하며 정상적으로 기능이 작동하지 않았다.원인WAS 서버 OS인 우분투 22.04 LTS에서apt 패키지 관리자를 통해 설치할 수 있는 기본 Redis 버전은 일반적으로 6.0.x 이다. 하지만 Redis Pub/Sub 채널 액세스 관리 ACL은 6.2 이상의 버전부터 지원했다. 그래서 ACL이 정상적으로 적용되지 않은 것이다. 해결WAS 서버의 Redis 버전을 강제로 최신 버.. 2024. 7. 14. 이전 1 2 3 4 5 6 7 ··· 26 다음