목록Study/Spring Boot (13)
전공공부
카카오페이와 일맥상통하는 Redisson 기반의 분산 락 적용기운영 중인 서비스에 분산 락 시스템을 적용하면서, 위의 카카오페이의 적용 사례를 참고 할 수 있을 것 같아 아래 사례 내역을 공유드립니다. Redisson 기반의 분산 락은 여러 서비스가 동시에 접근할 때, Redis를 통해 임계 영역의 데이터가 서로 침범되지 않도록 제어하는 데 사용됩니다. 분산 시스템에서는 이러한 충돌이 의도치 않은 결과를 초래할 수 있기 때문에, 정확하고 일관된 데이터 처리를 위해 필수적입니다. 기존 AOP 방식 코드아래는 기존에 사용하던 Aspect를 활용한 분산 락 코드입니다.// Aspect 정의@Aspect@Componentpublic class LockAspect { @Autowired private ..
문제점 Spring Security와 CompletableFuture를 함께 사용 할 시 Security Context가 null이 되는 문제가 있었습니다. 이 문제는 이런 상황에서 발생 할 수 있습니다. 아래 코드는 spring mvc - Security Context is null with CompletableFuture - Stack Overflow 비슷한 오류 상황을 가진 코드를 가져왔습니다. 저 중 getCurrentApplicationUser() 부분이 SecurityContextHolder.getContext.getAuthentication()을 부르는데 이것이 문제가 되었습니다. 이걸 부르는 곳 중에 타고 들어가면 RequestContextHolder이라는 객체가 있는데 이 객체는 Requ..

1. What is API Gateway? CNCF에서도 제시한 표준 MSA 구성 요소중 하나인 Gateway Pattern에 대해서 깊게 알아보려고 합니다. DDD 기반으로 MSA를 구성 하게 된다면 필히 이런 생각이 나실 겁니다. 서비스 별로 모든 역할을 나누는 건 알겠는데 이거 어떻게 나눠서 공통 인가처리를 하지..? 저도 처음 개인 프로젝트를 진행해보면서 JWT Token 인가처리 과정을 모든 Service에서 거쳐가야 하는데 이걸 모든 서비스에 둬서 체크를 해야 하나 싶었습니다. 하지만, 마이크로서비스를 구성 할 때 이런 부분을 모두 천재적인 선배 개발자 분들이 생각하고 만드셨습니다. API Gateway를 두고 사용하면 됩니다. 위 그림은 제가 실제로 구성중인 개인 프로젝트의 대략적인 구조를 ..

1. Spring Cloud Netflix Eureka Netflix에서 배포한 오픈 소스입니다. MSA 아키텍쳐를 구성 할 때 Client Side에서 각 서버의 Service를 연동하고 관리하는 것은 한 서버의 서비스 IP 또는, VM IP가 바뀌었을때 마다 대응이 힘들다고 판단하여서 Server 단에서 각 서비스의 IP를 관리하고 이를 사용하는 Client 단에서 각 서비스의 연동하는 name만 가져와서 사용 하게끔 합니다. 마치 K8S 내부의 Service와 같은 개념으로 각 Server를 관리하는데요. 이를 좀 더 유저 친화적으로 사용 할 수 있게끔 구현 한 것 입니다. 2. 서버 구현 Dependancy 등록 아래와 같이 의존성을 추가합니다. implementation 'org.springfr..

ReactiveRedisHashOperations @Bean public ReactiveHashOperations reactiveRedisOperations() { ReactiveRedisConnectionFactory connectionFactory = connectionFactory(); RedisSerializer stringRedisSerializer = new StringRedisSerializer(); Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class); RedisSerializationContext serializationContext = RedisSerializationContext .n..

Personal Project 사이드 프로젝트를 진행하면서 개인적으로 공부 했던 점들을 직접 적용해보려 합니다. 사실, 팀 프로젝트로 진행을 하여야 더욱 더 개성있고 실 서비스에 가까운 프로젝트를 진행 할 수 있겠으나 아무래도 개인 프로젝트를 진행하면서 제 개인의 실력을 키우고 성장해내고 싶은 마음이 크고 제 자신의 능력을 보여주기 위해서는 개인 프로젝트 만큼 솔직 한 것이 없다고 생각합니다. (팀 프로젝트 특성상 공부하고 싶은 툴들을 제대로 쓰지 못 할 수 있고 일정에 많이 민감하기 때문에 구현하고 나서 보면 코딩 스타일 및 기본적인 틀이 잡히지 않을 가능성이 있습니다...) 따라서, 위와 같은 이유로 개인 프로젝트를 진행해보려고 합니다. 우선 Domain Driven Design + MSA를 합한 E..
String으로 바로 반환 하는 것과 Mono 의 형태로 바로 반환하는 것과 어떤 차이가 있을까요? @RestController public class TesterController { @GetMapping("/") Mono hello() { return Mono.just("Hello Webflux"); } } @RestController public class TesterController { @GetMapping("/") String hello() { return ("Hello Webflux"); } } 모노로 리턴하면 Publisher의 형태로 만들어진 객체를 Spring이 자동으로 onSubscribe 처리를 하는데 Mono가 만든 Publisher를 구독하고 이를 onNext로 진행해서 내가 진..
https://velog.io/@ddh963963/Webflux-R2dbc-nonblocking-vs-MVC-JDBC-blocking-%EC%84%B1%EB%8A%A5-%ED%85%8C%EC%8A%A4%ED%8A%B8 Webflux + R2dbc (nonblocking) vs MVC + JDBC (blocking) 성능 테스트 완전한 환경에서 한 테스트가 아니기 때문에 편차가 있을 수 있습니다. WebFlux vs MVC 테스트의 목적 및 개요 WebFlux 와 MVC의 성능테스트를 눈으로 보고 스레드의 동작을 살피는 것이 테스트의 목적 velog.io https://medium.com/oracledevs/spring-blocking-vs-non-blocking-r2dbc-vs-jdbc-and-webfl..