전체 글 13

Spring Security 인증 / 인가 과정 들여다보기

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개 구매한 것과 같은..

카테고리 없음 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

Mongo DB 조회 성능 개선기

https://www.mongodb.com/ko-kr/docs/manual/tutorial/sort-results-with-indexes/ 복잡한 Join 탈출 - 결제 내역 조회 With Mongo DB진행중인 프로젝트에선 사용자들이 Question이라는 상품을 구매할 수 있습니다. Question은 고등학교 과정의 문제를 의미합니다.(수학, 물리, 생명, 지구과학 등)따라서 사용자는 자신의 구매내역을e4g3r.tistory.com위 글에서 결제 내역 조회 시 복잡한 join 과정을 개선하기 위해 조회용 모델을 설계하고 MongoDB에 저장하여 조회하는 방식으로변경하였습니다.단순히 조회하는 Mongo DB 방식이 8개의 join을 처리하는 Maria DB 방식보다 미세하게 우세할 줄 알았으나 성능 테스..

spring 2024.12.27

복잡한 Join 탈출 - 결제 내역 조회 With Mongo DB

진행중인 프로젝트에선 사용자들이 Question이라는 상품을 구매할 수 있습니다. Question은 고등학교 과정의 문제를 의미합니다.(수학, 물리, 생명, 지구과학 등)따라서 사용자는 자신의 구매내역을 조회하는 API도 필요하게 되었습니다. Question 결제와 관련된 테이블은 QuestionPayment, QuestionOrder, Coupon, UserCoupon입니다.이 4개의 테이블을 join하여 결제 정보(결제 금액, 사용한 쿠폰, 각 상품의 가격)를 조회하게 됩니다.하지만 구매내역에서는 구매한 상품의 정보도 필요하기 때문에 QuestionOrder에 있는 questionId를 이용하여 상품 정보를 조회합니다. Question은 QuestionCategory, Creator라는 테이블과 관계..

spring 2024.12.16