본문 바로가기

전체 글61

[Kafka] Kafka Poison Pill 메시지 동적 스킵 메커니즘 구현 Kafka Poison PillKafka 기반 시스템에서 컨슈머는 메시지를 순서대로 읽고 처리합니다. 일반적인 실패라면 retry, DLT, error handler 등을 통해 대응할 수 있습니다. 하지만 특정 메시지를 처리하는 순간 애플리케이션이 OOM, JVM crash, container restart 같은 방식으로 죽어버리는 경우에는 이야기가 달라집니다. 이런 메시지를 흔히 poison pill이라고 부릅니다. poison pill은 컨슈머가 정상적으로 처리할 수 없는 메시지입니다. 예를 들어 메시지 payload가 너무 크거나, 특정 데이터 조합이 비정상적인 메모리 사용을 유발하거나, 처리 로직에서 무한 루프나 과도한 객체 생성을 유발하는 경우가 있습니다. 메시지 자체는 Kafka에 정상적으로 .. 2026. 5. 27.
[Spring boot] JPA flush, clear 옵션의 중요성 JPA 영속성 컨텍스트와 장애 사례JPA를 사용하다 보면 겉으로는 단순한 조회나 수정 로직처럼 보이지만,실제로는 영속성 컨텍스트의 상태 때문에 예상하지 못한 예외가 발생하는 경우가 있습니다.특히 엔티티를 수정하는 과정에서 하위 엔티티를 함께 다루거나, bulk update 쿼리를 사용하는 경우에는엔티티가 현재 영속성 컨텍스트에 의해 관리되고 있는지 반드시 확인해야 합니다. 최근 운영 환경에서 특정 리소스를 수정하거나 승인 처리하는 API가 500 에러로 실패하는 문제가 있었습니다.두 사례 모두 상위 엔티티와 하위 엔티티를 함께 수정하는 흐름에서 발생했습니다.하나는 ID를 가진 하위 엔티티를 새 객체로 생성해 컬렉션에 넣으면서 문제가 되었고,다른 하나는 bulk update 이후 영속성 컨텍스트가 초기화되.. 2026. 5. 24.
[Server] 장시간 비동기 작업에 Kafka가 적절할까? - part1 Kafka를 활용한 서비스최근 많은 백엔드 서비스에서 Kafka를 사용하고 있습니다. 서비스 간 결합도를 낮추고, API 서버의 부하를 줄이며, 특정 작업을 이벤트 기반으로 비동기 처리하기 위해서입니다. 예를 들어 사용자가 API를 호출하면 API 서버는 요청에 필요한 최소한의 처리만 수행하고, 오래 걸리는 계산 작업은 Kafka 이벤트로 발행합니다. 이후 별도의 Consumer 서버나 Batch 서버가 해당 이벤트를 받아 무거운 로직을 처리하는 방식입니다. 이 구조는 처음에는 꽤 이상적으로 보이고, 현재 제가 다니는 회사에서도 해당 아키텍처를 사용하고 있습니다.API 서버는 오래 걸리는 작업을 직접 수행하지 않아도 되고, 작업 요청은 Kafka에 안전하게 쌓입니다. Consumer는 이벤트를 순서대로 .. 2026. 5. 23.
[Spring boot] MSA Passport Pattern 서비스끼리의 반복 호출MSA 환경을 구성하다 보면 각 서비스끼리의 호출이 많이 일어난다.특히 사용자 정보가 필요한 서비스마다 회원 관리 서비스에서 사용자 정보를 Rest API나 gRPC로 요청하게 되면 너무나 많은 반복호출이 일어나게 된다.이를 해결하기 위해 각 서비스마다 간소화된 사용자 테이블을 같이 배치하는 전략을 생각할 수도 있다. 하지만 이는 회원 정보 변경, 삭제 등에 따라 이벤트를 수신하면서 회원 정보를 관리해야 하고데이터 동기화 문제가 발생할 수 있다. Passport 패턴 기반 사용자 컨텍스트 전파이를 해결하기 위해 Passport 패턴 기반 사용자 컨텍스트 전파를 사용할 수 있다.아래의 그림을 실제 토스 테크 블로그에 존재하는 Gateway에서의 Passport 전파 방식이다.토스에서.. 2025. 10. 8.
[Spring boot] MSA 환경 구성 서비스 레지스트리 / 서비스 디스커버리MSA에서 마이크로서비스 관리와 운영을 위한 패턴 중 서비스 레지스트리와 서비스 디스커버리가 있다.서비스 간 통신 시 서비스 위치 (포트, 호스트) 가 정적이던 전통적인 애플리케이션 / 아키텍처와는 달리 주소가 동적으로 변화하고 (클라우드 환경, 오토 스케일링, 컨테이너 기반의 배포 등) 서비스 역시 무수히 많은 마이크로서비스에서는 서비스 위치에 대한 관리가 많이 복잡해지게 되는데, 이를 해결하기 위해 서비스 레지스트리 패턴과 서비스 디스커버리 패턴이 등장하게 된다.서비스 레지스트리와 서비스 디스커버리 패턴은 다음과 같다.서비스 레지스트리 마이크로서비스 / 관리, 운영을 위한 기반 서비스의 주소와 유동적인 IP를 매핑하여 저장하는 패턴 서비스 디스커버리 클라이언트가 .. 2025. 3. 25.
[Server] MSA 아키텍처 마이크로서비스 아키텍처 ( MSA ) 마이크로서비스 아키텍처는 하나의 애플리케이션을 여러 개의 독립적인 서비스로 분리하여 운영하는 소프트웨어 아키텍처 패턴이다. 각각의 서비스는 특정한 비즈니스 기능을 담당하며, 독립적으로 개발, 배포, 확장할 수 있는 것이 특징이다. 이러한 구조는 전통적인 모놀리식 아키텍처와 대비되며, 최근 클라우드 환경과 DevOps 문화가 확산됨에 따라 많은 기업들이 도입하고 있다.먼저 모놀리식 아키텍처를 살펴보면 다음과 같다.  모놀리식 아키텍처란모놀리식 아키텍처는 하나의 통합된 코드베이스에서 여러 비즈니스 기능을 수행하는 전통적인 소프트웨어 아키텍처 스타일이다. 애플리케이션의 모든 서비스가 하나의 애플리케이션 안에 포함되어 있으며, 단일 데이터베이스와 연결되어 동작한다. 즉, 여.. 2025. 3. 18.

loading