본문 바로가기

java4

비동기 환경에서 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.
JavaScript Date 타입을 Java LocalDateTime으로 전달하기 Spring과 React를 활용해서 토이프로젝트 개발 진행 중 자바스크립트의 Date 타입을 자바의 LocalDateTime 형태로 어떻게 전달할 수 있을지 고민하였고, 찾아본 결과 date-format 라이브러리를 활용하면 쉽게 전달할 수 있다는 것을 알게되었다. date-format 라이브러리의 활용 방법을 토이프로젝트의 일부 코드를 통해 공유하고자 한다. [React] client.js import axios from "axios"; const client = axios.create(); export default client; api.js import client from './client'; export const createSchedule = ( memberId, name, startDate,.. 2023. 2. 1.