전체 글 15

이벤트 재발행 처리하기 - Transactional Outbox Pattern

이벤트 발행으로 결제 후처리 하기점점 많아지는 결제 후 처리 과정진행중인 사이드 프로젝트는 수능 문제를 구매하는 플랫폼으로 유저는 포인트를 지불해서 수능 문제를 구매할 수 있습니다.public void payment(Long userId, List questionIe4g3r.tistory.com위 포스팅에서는 Transactional Outbox Pattern을 도입하여 이벤트 발행 실패로 발생할 수 있는 데이터 정합성 문제를 방지하였습니다.해당 포스팅을 작성한 시점에는 OutBox 테이블만 구현하였고 재발행하는 로직을 작성하지 않았습니다.Transactional Outbox Pattern을 마무리하기 위해 이번에는 이벤트 재발행을 처리해보았습니다.class QuestionPaymentEvent( ..

spring 2025.04.08

Spring Security 들여다보기 (2)

Spring Security 들여다보기 (1)Spring / Spring Security filter chain 들여다보기Spring 혹은 Spring Security를 사용하면 filter라는 키워드를 종종 듣게 됩니다.단순히 Http 요청이 Spring Application 영역으로 전달되기 전에 Servlet단에서 chain 형식e4g3r.tistory.com 지난 포스팅에서는 Spring Security Filter Chain의 흐름을 살펴보았습니다.작성한 포스팅을 다시 읽어보니 인가 과정에 좀 치우쳐져 있는 것 같아 이번에는 인증 과정을 좀 더 살펴보았습니다.SecurityContextHolder, SecurityContext, Authentication 지난 포스팅에서도 언급 되었던 Sprin..

spring 2025.04.05

Spring Security 들여다보기 (1)

Spring / Spring Security filter chain 들여다보기Spring 혹은 Spring Security를 사용하면 filter라는 키워드를 종종 듣게 됩니다.단순히 Http 요청이 Spring Application 영역으로 전달되기 전에 Servlet단에서 chain 형식으로 연결되어 있는 filter들을 하나씩실e4g3r.tistory.com 지난 포스팅에서 Servlet Filter가 어떻게 처리되는지 확인해보면서 간단하게 Spring Security Filter Chain을 간단하게 살펴보았습니다.이번에는 Spring Security Filter Chain 내부를 좀 더 자세히 보면서 정리하는 시간을 가져보았습니다. 제가 진행중인 프로젝트는 모든 URL을 permitAll 해주고..

spring 2025.04.02

Spring / Spring Security filter chain 들여다보기

Spring 혹은 Spring Security를 사용하면 filter라는 키워드를 종종 듣게 됩니다.단순히 Http 요청이 Spring Application 영역으로 전달되기 전에 Servlet단에서 chain 형식으로 연결되어 있는 filter들을 하나씩실행함으로써 Http 요청 응답을 가공할 수 있고 Spring Security Filter를 통해 인가/인증 처리를 한다는 정도만 알고 있었습니다.종종 이러한 특성을 이용해 Http 요청 및 응답을 Filter 단에서 Logging을 하기도 합니다. 이정도만 알면 되겠지 했는데 최근 참여중인 오픈채팅방에서 Spring Security 관련하여 어떤분이 질문을 하셔서저도 돌이켜보는 과정에서 너무 얕게 사용법만 알고 있는 것 같아 Filter Chain의 ..

spring 2025.03.29

이벤트가 한번 만 처리 되도록 보장하기 (feat. 멱등성)

이벤트 발행으로 결제 후처리 하기점점 많아지는 결제 후 처리 과정진행중인 사이드 프로젝트는 수능 문제를 구매하는 플랫폼으로 유저는 포인트를 지불해서 수능 문제를 구매할 수 있습니다.public void payment(Long userId, List questionIe4g3r.tistory.com이전 포스팅에서는 결제 이후 이벤트를 발행하여 후처리 과정을 처리하도록 하였습니다.Transactional OutBox Pattern을 이용하여 이벤트 발행을 보장하였고 최소 1회 이상 이벤트가 발행되도록 하였습니다.그런데 최소 1회 이상이란 것은 이벤트가 2번, 3번, 4번 발행될 수 있다는 의미입니다.또한 동일한 결제 이벤트가 2번 이상 발행이 된다면 사용자는 한번의 결제로 똑같은 물건을 2개 구매한 것과 같은..

spring 2025.03.19

이벤트 발행으로 결제 후처리 하기

점점 많아지는 결제 후 처리 과정진행중인 사이드 프로젝트는 수능 문제를 구매하는 플랫폼으로 유저는 포인트를 지불해서 수능 문제를 구매할 수 있습니다.public void payment(Long userId, List questionIds, Long userCouponId) { List questions = questionReader.getQuestions(questionIds); paymentProcessor.questionPayment(QuestionPayment.create(userId, userCouponId, questions)); userQuestionAppender.appendUserQuestions(userId, questionIds);}프로젝트 초반에는 문제를 결제하게 되면..

spring 2025.03.16

결제 로직에서 발생하는 예외 처리하기 2

결제 로직에서 발생하는 예외 처리하기(feat.트랜젝션 의존 줄이기)현재 진행중인 사이드 프로젝트 내에서 아이템을 구매할 때에는 서비스 재화인 포인트가 사용됩니다. 포인트는 게임 캐시처럼 직접 현금 결제하여 충전할 수 있습니다.현금 결제를 위해 Portonee4g3r.tistory.com  예외 처리의 예외 처리 (feat. RabbitMQ 지연 큐)결제 로직 에서 발생하는 예외 처리하기(feat.트랜젝션 의존 줄이기)현재 진행중인 사이드 프로젝트 내에서 아이템을 구매할 때에는 서비스 재화인 포인트가 사용됩니다. 포인트는 게임 캐시처e4g3r.tistory.com이전에 작성한 포스팅과 연결되어 계속해서 보완해나가는 과정입니다.RabbitMQ -> AWS SNS + SQS 전환기존에는 결제 도중 예외가 발..

spring 2025.03.10

운영체제 기술 면접 대비

운영체제 공부를 하면서 면접에 나올 것 같은 내용을 질문으로 만들어 답변해보는 공간 (계속 업데이트) Q. 운영체제는 무엇인가요?더보기A.  운영체제는 하드웨어를 제어하여 여러 프로세스들에게 자원을 할당하고 실행될 수 있도록 하는 프로그램입니다.추가적으로 파일 시스템을 관리하는 기능도 있습니다.Q. 커널이 수행하는 역할은 무엇이 있나요?더보기A. 프로세스 실행에 필요한 자원을 생성/제거 하며 스케줄러를 통해 여러 프로세스들이 한정된 자원을 이용할 수 있도록 합니다.또한 프로세스가 하드웨어를 필요로 하는 (파일입출력, 네트워크 통신) 작업을 할 수 있도록 인터페이스를 제공합니다.Q. 유저 모드와 커널 모드에 대해 설명해주세요.더보기A. 유저 모드와 커널 모드는 프로세스가 작업을 처리하는 모드 2가지입니다...

카테고리 없음 2025.02.08

Spring RabbitListener에서 예외가 발생하면? feat. 무한 루프

예외 처리의 예외 처리 (feat. RabbitMQ 지연 큐)결제 로직 에서 발생하는 예외 처리하기(feat.트랜젝션 의존 줄이기)현재 진행중인 사이드 프로젝트 내에서 아이템을 구매할 때에는 서비스 재화인 포인트가 사용됩니다. 포인트는 게임 캐시처e4g3r.tistory.com이전 포스팅에서는 포인트 충전 예외 처리 로직에서 또 예외 처리가 발생했을 때 지연 큐에 메시지를 발행하여 일정시간 이후 재시도 처리하도록 구성했었습니다. 현재 진행중인 프로젝트에서는 포인트로 문제를 구매하는 기능도 있기 때문에 문제 구매 예외 처리 로직에서도 똑같이 지연 큐를 도입하게 되었습니다.문제 발생 - Infinite Loop in RabbitListener@RabbitListener(id = "fail-question-p..

spring 2025.02.07

예외 처리의 예외 처리 (feat. RabbitMQ 지연 큐)

결제 로직 에서 발생하는 예외 처리하기(feat.트랜젝션 의존 줄이기)현재 진행중인 사이드 프로젝트 내에서 아이템을 구매할 때에는 서비스 재화인 포인트가 사용됩니다. 포인트는 게임 캐시처럼 직접 현금 결제하여 충전할 수 있습니다.현금 결제를 위해 Portonee4g3r.tistory.com지난 게시글에서는 결제 로직에서 발생할 수 있는 예외 케이스들을 정의하고 케이스마다 별도의 예외 처리 로직을 부여하여결제 플로우를 분리하였습니다. 기존 예외 처리 방식public ChargePointPayment approve(PGPayment pgPayment) { return lockManager.executeWithLock( LockKeyGenerator.generateChargePointPaym..

spring 2025.01.18