Kafka 파헤치기 (1) – 개념편

Event 를 다루거나, 확장성있는 구조를 갖추기 위해서, 혹은 Pub/Sub 의 Message Queue 로 Kafka를 많이 사용한다.많이 사용되는 Kafka에 대해 깊게 고민해보고 하나씩 파헤쳐보며 Kafka 에 대해 제대로 공부하고 잘 사용해보자. Kafka 개념 파악하기 Kafka는 Event 파이프라인, 스트리밍 등을 위해 설계된 고성능 분산 이벤트 스트리밍 플랫폼이다.Pub-Sub 모델의 Message Queue 형태로 동작하며 분산환경에 특화되어 주로 대량의 이벤트 스트림 데이터를 …

Read more

Springboot 에서 WebSocket 통신하기

Javascript 기반의 Socket Server 를 Java 기반으로 새로 만들어야 했던 일이 있었다.기존 NestJS와 + SocketIO 기반으로 만들어진 Socket Server 가 있었는데, 어떤 어려움이 있었고 이를 어떻게 해결하였는지에 관한 기록이다. 문제 인식 기존에 JavaScript 기반으로 만들어진 서버를 언어까지 바꿔가면서 통으로 리팩토링 했던 이유는 크게 두가지였다. 다른 Application 에서 Socket 을 이용해서 통신하고 싶으면, Kafka를 통해 Message …

Read more

[Design] EDA의 개념 (3) – CQRS

EDA 개념 마지막편으로 CQRS에 대해 알아보자. CQRS The basic idea with CQRS is that you separate the components that read and write to your permanent store. So you have effectively two separate models one for dealing with updates and one for dealing with reads. CQRS( Command and Query Responsibility Segregation ) 는 이름에서 유추할 수 …

Read more

[Design] EDA의 개념 (2) – Event Sourcing

이전 글에 이어서 EDA Martin Fowler가 제시하는 EDA의 중요한 개념인 EventSourcing 에 대해서 알아보자. Event Sourcing 마틴 파울러는 이벤트 소싱에 대한 개념을 개발자라면 단번에 이해할 수 있는 예시를 들어 설명한다. … Every software developers should be intimately familiar with one particular form of event source system. which is? ersion control. Event Sourcing is basically provide …

Read more

[Design] EDA의 개념 (1) – Event

요즘 개발하면서 자주 듣는 두가지 패러다임이 있는 것 같다. EDA ( Event – Driven – Architecture ) 와 DDD ( Domain – Driven – Design ) 두가지가 바로 그것이다.이 둘은 많이 사용되면서 서로 각각 고유의 접근 방식과 철학을 가지고 있다. 이 둘은 장점이 아주 명확하고 서로 상호 배타적이지 않기 때문에 각각의 장점을 잘 살릴 수 …

Read more

Proxy 에 대한 이해 – 3. Spring AOP

이 글을 작성하게 된 계기이기도 하고, Proxy 하면 가장 먼저 떠오르는것이 Spring AOP 에 관한 내용일 것이다.Spring AOP 는 기본적으로 Proxy 를 이용해서 동작하게 된다. 핵심이 되는 비즈니스 로직과 부가 기능을 서로 분리시켜 로직을 재사용 할 수 있게 해주고, 핵심이 되는 기능은 온전히 그 역할에만 집중할 수 있도록 만들어준다.Proxy 파트 마지막 글로 이번에는 SpringFramework 에서 …

Read more

Proxy에 대한 이해 – 2. CGLib

CGLib 은 JDK Proxy 와 달리 Interface 가 없어도 Byte코드 조작을 통해 Class 를 직접 조작하여 Proxy 를 생성한다.JDK Proxy 는 원본 객체가 구현한 Interface 에 대한 Proxy 를 만들어준다면, CGLib 을 이용하면 직접 Class 를 상속받아 Override 하는 방식으로 Proxy 를 만들어주게 된다.하나씩 살펴보자. CGLib CGLib 은 구체 클래스를 Extends( 상속 ) 받아서 Proxy …

Read more

Proxy에 대한 이해 – 1. JDK Proxy

대포적인 Dynamic Proxy library 에 2가지가 존재한다. CGLib ( Code Generator Library ) 과, JDK Proxy 가 그것이다.조금만 검색하면 이 둘은 Interface 가 존재 하는지, 존재하지 않는지 여부로 사용 여부가 나뉘어짐을 알 수 있다. 이 글은 왜 interface 의 차이로 인한 proxy 생성에 차이가 생기는지, 그렇다면 그로 인해 어떤 차이점이 생기게 되는지, 자세한 Proxy 에 …

Read more

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

이전 글에 이어서 Redis 를 이용한 Distributed Lock 을 구현한 방법에 대해서 작성한다. Kurly Tech Blog 에 작성된 글을 바탕으로 작성하였다. 이미 원글에서도 상세하게 설명하고 있지만, 분산락을 구현하기 위한 구현체로 Redisson 을 사용했다. Spring framework 기반에서 사용할 수 있는 대표적인 Redis Client 로 Lettuce , Redisson 가 있는데 이중에서 Lettuce 의 경우는 락을 획득하기 위해서 …

Read more

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

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

Read more