분류 전체보기 18

코틀린 이모저모 - 3

확장 함수fun String.twicePrint() { println(this) println(this)}fun main() { val str = "Hello World" str.twicePrint()}// Hello World// Hello World 일반적으로 클래스, 인터페이스에 기능을 추가하고 싶다면 상속 혹은 디자인 패턴을 통해 처리를 해줘야했습니다.하지만 위 예제는 String이라는 클래스에 twicePrint라는 메서드를 추가했습니다.직접적으로 String 클래스를 수정한 것이 아닌 추가적인 선언만 했습니다. 이러한 기능을 코틀린에서는 확장 함수라고 합니다.open class Shapeclass Rectangle: Shape()fun Shape.getName() = "S..

kotlin 2025.04.12

코틀린 이모저모 - 2

Classclass Person { /*...*/ } 코틀린은 class 키워드를 통해 클래스를 정의할 수 있습니다.class Person constructor(firstName: String) { /*...*/ } // OKclass Person(firstName: String) { /*...*/ } // OK 클래스 선언부에 constructor 키워드를 사용하여 기본 생성자를 정의할 수 있습니다.기본 생성자가 가시성 수성자 private, protected, internal을 필요로 하지 않는다면 constructor 키워드는 생략 가능합니다.(Java - 접근 제어자)class Car(color: String, weight: Int, speed: Int, storage: Int) { val ..

kotlin 2025.04.11

코틀린 이모저모 - 1

Kotlin Docs | Kotlin kotlinlang.org 프로젝트를 코틀린으로 전환한 이후 문법 공부를 위해 코틀린의 공식문서를 쭉 읽으면서 자바와는 달랐던 것, 코틀린의 신기한 것들을위주로 정리하기로 하였습니다.Smart casts코틀린에서는 is 키워드를 통해 객체가 특정 타입인지 확인할 수 있습니다.if (obj is String) { println("obj is String")} if문을 만족한다면 obj라는 객체는 String 타입이란게 확실하다는 것이죠.fun demo(x: Any) { if (x is String) { print(x.length) // x is automatically cast to String }} 위 코드처럼 컴파일러가 특정 객체의 타입..

kotlin 2025.04.10

이벤트 재발행 처리하기 - 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