전체 글161 Kotlin + Spring MVC 사용 시 요청 List 필드에 null이 들어가는 경우 Java와 비교했을 때 Kotlin은 컴파일 타임에서의 null-safety를 가질 수 있다는 장점이 있다.이를 통해 NullPointerException과 같은 런타임 오류 발생을 줄이고 더욱 안전한 코드를 작성할 수 있다. 하지만 generic에 있어서는 얘기가 조금 달라질 수 있는데generic은 컴파일 타임에 타입 체크가 이루어져 타입 안정성을 보장하지만, 런타임에는 타입 정보가 삭제되는 타입 소거(type erasure)가 발생하며 이로 인해 Kotlin의 null-safety가 깨질 수도 있다. 이번 포스팅에서는 Kotlin과 Spring MVC를 사용할 때, 요청 List 내 element의 null-safety가 깨지는 케이스에 대해 알아보고 이에 대한 대처에 대해 알아보도록 하겠다. (코.. 2025. 3. 3. Kotlin SpringBoot 환경에서 jOOQ 설정 JPA가 주는 개발의 편리함은 많은 사람들에 의해 검증되었지만, dirty checking과 같이 under the hood에서 동작하는 기능들로 인해 배포 후 운영 시에 마주치는 문제도 생기게된다.(관련해서 읽어보면 좋은 글: Hibernate 의 ‘불편한’ 편의 기능들) 가끔은 MyBatis를 쓰던 시절이 품은 조금 더 들지만 동작하는 방식은 명확해서 좋았던 것 같다.하지만 MyBatis를 쓰면서 생기는 가장 큰 불편함은 문자열로써 SQL query를 다루기 때문에 쿼리 상의 오류를 런타임에서나 알 수 있다는 것이다.반면 jOOQ의 경우 DB를 직접 스캔하여 query 용 class를 생성하는데 이 class를 사용하여 type safe 하게 SQL query를 사용할 수 있다.(DB를 스캔 방.. 2024. 12. 3. [Transactional Outbox] CDC 기반의 transaction log tailing 구현 [Transactional Outbox] 개요 에서는 Transactional Outbox pattern에 대한 이론적인 부분을 살펴보았다.이번 포스팅에서는 실제로 CDC를 사용하여 transaction log tailing 방식을 구현하는 예제에 대해 살펴보도록 하겠다. (전체 코드는 여기에서 확인할 수 있다) 개요다음과 같은 아키텍처의 Transactional Outbox pattern을 구현한다. 동일한 transaction 내에서 서비스 데이터 업데이트와 도메인 이벤트 데이터 저장을 한다.CDC를 통해 DB에 도메인 이벤트 데이터가 추가되었음을 감지하고, '데이터 추가됨 이벤트'를 Kafka topic으로 발행한다.2 에서의 '데이터 추가됨 이벤트' message를 가져온 다음, 이를 도메인 이벤.. 2024. 11. 25. [Transactional Outbox] 개요 꼭 MSA가 아니더라도 개발팀의 규모에 따라 API 서버가 도메인/서비스 별로 분리되어 개발되는 경우가 있다.이때 하나의 서비스에서 이벤트 발생 시 다른 서비스에서도 특정 처리가 필요한 상황이 발생하곤 한다. 예를 들어 '게시판 기반 커뮤니티' 앱에서 '회원 서비스'와 '게시판 서비스'가 분리되어 있는 경우,회원 탈퇴 시 해당 회원의 게시물을 삭제/숨김 처리해야하는 경우가 있다.단순한 개발을 위해 직접적으로 '회원 서비스'가 '게시판 서비스'로 직접 호출을 할 수 있다. 이때 만약 어떤 이유로 인해 '회원 서비스'에서 '게시판 서비스'로 호출을 실패하거나 '게시판 서비스' 호출을 성공하였으나 그 이후 작업에서 오류가 발생하는 경우가 발생할 수도 있다.('게시판 서비스'에서만 데이터가 처리되었고 '회원 서.. 2024. 11. 25. 대기열 시스템 커머스 서비스에서는 이벤트로 인해 짧은 시간에 급격하게 올라가는 트래픽에 대응하기 위해서 대기열 시스템을 적극적으로 활용하고 있다. 대기열 시스템의 실제 구현은 서비스의 요구사항, 트래픽 수준 등에 따라 천차만별이다.이번 포스팅에서는 가상의 요구사항을 제시하고 이를 만족하는 대기열 시스템을 구현해보도록 하겠다. (Fastify 기반의 대기열 시스템 API 예제는 여기에서 확인할 수 있다) 요구 사항이벤트 상품 주문 페이지의 트래픽을 조절할 수 있는 대기열 시스템을 구현한다. 이 시스템의 기능적 요구 사항은 아래와 같다.대기열 시스템은 대기와 입장만 관리하고 입장 이후는 관리하지 않는다.대기열 시스템은 이벤트 상품 주문 페이지에 5초 당 10명의 사용자를 입장시킨다.사용자가 대기할 필요가 없는 경우 바로.. 2024. 11. 12. Docker 로컬 Redis cluster 개발 환경 구성 로컬에서 직접 Redis docker image로 cluster를 구성하는 방법은 복잡하지만,grokzen/redis-cluster 이미지를 사용하면 따로 네트워크 설정이나 스크립트를 만들 필요없이 쉽게 Redis cluster 개발 환경을 구성할 수 있다. 다만 아쉬운 점은 최신 Redis 7.4 버전은 정식으로 지원하지 않는다는 점과현재 기준으로 Redis 7.2.5 버전이 지원하는 가장 최신의 버전인데 7.2.x 버전은 오류가 나서 정상적으로 실행되지 않는다.(관련 이슈) 그래서 실제로 사용할 수 있는 가장 최신 Redis 버전은 사실상 7.0.15 버전이다. 3 master nodes + 3 slave nodes먼저 아래와 같은 3개의 1 master - 1 slave shard로 구성된 Redi.. 2024. 11. 8. 이전 1 2 3 4 5 ··· 27 다음