Spring Security를 이용하여 JWT 토큰방식 로그인 구현
·
Java, Spring
스프링 시큐리티 흐름 1. 사용자의 인증 요청이 들어오면 우선 DelegatingFilterProxy에서 SecurityFilterChain으로 요청을 전달해 준다.2. 이후 사용자의 요청들이 필터들을 타고 들어가서 인증 or 인가 과정을 거치게 된다.3. WebSecurity의 HttpSecurity를 통해서 적용되는 필터들을 Custom 해줄 수 있다. 코드 예시@Beanpublic SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .csrf(AbstractHttpConfigurer::disable) .formLogin(FormLoginConfigurer::disable) ..
Java Garbage Collection
·
Java, Spring
Java GC에 대해 알아보자 자바의 Execution Engine은 크게 3가지 주요 역할을 수행한다.JIT 컴파일러인터프리터GC이중 GC에 대해 알아보자. 우선 GC(Garbage Collection)은 자바의 메모리 관리 기법으로 jvm의 heap 메모리에 동적으로 할당된 객체들 중 쓰지 않는 객체들을 주기적으로 정리해 주는 프로세스이다. Stop-The-WorldGC가 동작하는 동안 다른 프로세스들이 멈추는 현상이다. Stop-The-World 시간이 길어지면 GC관련 스레드를 제외한 나머지 스레드들의 동작이 멈추기 때문에프로그램 동작에 차질이 생길 수 있다. 따라서 이 시간을 줄이는 것이 쟁점이다.-> GC를 실행할 때마다 프로그램이 멈추는 현상이 발생하게 되므로 소프트웨어 성능 하락으로 이어질..
AOP를 이용한 분산락 구현
·
Java, Spring
지난 글에서 AOP를 이용하는 방법에 대해서 알아보았다. Spring AOP를 이용하여 부가 기능을 핵심 기능으로부터 분리할 수 있는데, 락을 거는 것은 부가 기능으로 볼 수 있다.따라서 이번에는 기존에 동시성 처리를 위해 만들어 놓은 분산락을 AOP 기능을 통해 분리를 해보려고 한다. 기존 구현 방식@Component@Slf4j@RequiredArgsConstructorpublic class RedissonLockHandler { private final RedissonClient client; public void execute(String name, long waitTime, long leaseTime, Runnable runnable) { RLock lock = client..
Spring AOP에 대해서 알아보자
·
Java, Spring
Spring의 AOP에 대해서 알아보자 애플리케이션은 크게 핵심 기능과 부가 기능으로 나눠진다.  핵심 기능은 말그대로 애플리케이션을 작동하는 데 있어서 필요한 로직들이고 Serivce, Repository의 비즈니스 로직부가 기능은 핵심 기능을 보조하는 기능이라고 생각하면 된다. 예를 들어 로그, 예외 처리, 트랜잭션 등등... 이러한 부가 기능들을 공통적으로 여러 핵심 기능에서 사용한다고 해보자.예를 들어 Controller 단, Service 단, Repository단에서 모두 로그를 적용한다면? 위 그림처럼 각각 로직에 모두 로그를 적용시키는 방법이 있을 것이다. 하지만 이렇게 똑같은 코드를 반복적으로 작성하는 것은 비효율적이다. 그래서 이런 부가기능들을 모듈화 시켜 핵심 기능과 부가 기능을 분리..
무신사 블프 이벤트 상품 동시성 문제 (2)
·
Java, Spring
이전 글에서는 이벤트 상품 동시성 처리를 동기적으로 하였다.이번 글에서는 비동기적으로 처리하는 방법에 대해서 알아보겠다. 우선 동기적으로 처리하면 Lock을 사용하기 때문에 다른 스레드들이 Blocking 되기 때문에 TPS 감소 및 성능 저하가 발생한다.따라서 Message Queue를 이용하여 비동기 처리를 해보려고 한다.Redis pub/sub휘발성 특징 때문에 메시지를 전송하고 나면 데이터가 사라짐. 따라서 실제로 이벤트 상품 요청을 보냈는지 검증하기 힘듬메세지의 신뢰성이나 지속성이 중요하지 않은 서비스에 적합하고 대규모 처리가 어려움Kafka디스크에 저장되서 데이터 유실이 적고, 속도측면에서도 빠르고 대규모 분산 시스템에 적합함. 하지만 설정과 관리가 복잡하며, 초기 구성과 유지보수에 대한 학습..
green_dev
'Java' 태그의 글 목록