잊어버릴 것 같으면 쓰기라도 하자!

Redis를 이용한 동시성 이슈 해결하기 (1/2)

과거에 개발했었던 코드를 리팩토링 및 업데이트 하는 과정에서, 기존 코드는 동시성 이슈가 발생할 수 있다는걸 발견했다. 예제 코드로 재현해보면 이런 느낌의 코드였는데, 의도했던 바는 Database 에서 조회해온 Domain Entity 의 Occupied 상태값이 False 일 경우에, 딱 한번만 메시지를 발행하기를 바라는 의도였다. 그런데, 이 코드를 리팩토링 하면서 동시성 처리를 위한 기능들이 빠져 있는것을 확인할 수 있었다. …

Read more

Spring Security .apply( configurer ) deprecated

개인 프로젝트의 Spring boot 버전을 3.2 로 업데이트 하는 과정에서 deprecated 된 함수를 발견해서, 해결했던 방법을 기록한다.문제가 된 코드는 Spring Security 의 FilterChain 을 정의하는 이부분에서 발생했다. 바로 Spring Security 에서 CustomConfigurer 를 적용하는 .apply 함수가 Spring Security 6.2 부터 Deprecated 되었다. 링크를 따라가보면 ” For removal in 7.0. Use AbstractConfiguredSecurityBuilder.with(SecurityConfigurerAdapter, Customizer) instead. ” 라고 명시되어 있다.내용은 …

Read more

[Java] Virtual thread 와 Platform Thread

Project Loom 으로부터 탄생한 결과물인 Virtual Thread가 Java 21 부터 정식 기능으로 사용 가능하게 되었다.고전적인 1 Request per 1 Thread 모델에 사용되었던 Platform Thread 는 생성, 사용, Context Switch 하는데에 많은 비용을 요구했기 때문에 스레드가 Blocking 되어 대기상태에 오랜 시간 머무르는것이 성능 저하를 일으키는 원인이었다. 기존의 무거운 Platform Thread 보다 경량화된 새로운 Thread 가 추가되면서 …

Read more

[MSA] (2) MSA 구성요소 – Saga 구현

MSA 구조는 장점만 있는 완벽한 구조가 아니다. 실제로 잘 갖추어진 환경을 만들려면 많은 것들을 준비해야 한다. 이번 글은 그 구성요소들과 시스템에 대한 고민을 정리한 글이다. MSA 를 구현하려면 완벽한 시스템, 서비스는 없다. 도메인을 작은 단위로 분해하게 되면 각 서비스를 개발하거나 유지보수할 때, 확장성에서는 분명한 장점을 갖는다. 그러나 서비스를 나누었기 때문에 발생하는 문제점들도 분명히 있다. 예를 …

Read more

[MSA] (1) 내가 MSA를 도입한 이유

이 글은 왜 필자가 현재 개발하고 있는 프로젝트와 서비스들을 MSA 기반으로 설계하려고 했는지와 그때의 고민 그리고 현재 상황에 대한 기록이다. MSA에 대하여 MSA( Micro Service Architecture )는 요즘은 크고 거대한 시스템을 구축할 때에 당연히 고려할 만큼 많이 알려진 방법이다. 이와 반대점에 서 있는 Monolithic Architecture 가 갖고 있는 장점도 분명 있으나, 어떤 시스템이 확장( Extend …

Read more

[OAuth2] TokenSettings Class cast exception (2)

이 글은 이전 글 에서 이어지는 내용이다. 이번 글에서는 Type Cast issue 가 발생하는 근본적인 원인을 기록하고, 기존에 작성했던 코드도 리팩토링해보려고 한다. 요약 역시나 코드가 필요하거나, 자세한 내용이 필요 없는 사람들을 위해 먼저 요약 정리한다. OAuth Server의 전체 코드는 Spring-stack 여기서 확인할 수 있다.1. OAuth 인증을 하기 위해서는 Client를 미리 등록해야 한다. 만약 필자처럼 이 Client 정보를 …

Read more

[OAuth2] cannot be cast to class java.time.Duration

Spring module Project 에서 OAuth 관련 모듈을 개발하던 중에 생겼던 Duration 타입의 Type casting issue 를 해결한 과정을 공유하려 한다. Spring-modules 프로젝트에서 자주 사용되는 인증 방식을 미리 Application으로 구현하는데, 요새는 누구나 다 지원할만큼 보편적으로 사용되는 OAuth 인증 방식을 빼먹을 수 없어서 함께 구현하게 되었다. 필자는 OAuth2 인증 방식을 이해하기 위해서 OAuth 인증을 담당하는 Client, Authorization …

Read more