본문 바로가기

전체 글93

스프링 트랜잭션 동기화로 메시지 발행 타이밍 제어하기 들어가기에 앞서실무에서 비즈니스 로직을 구현하다 보면 MQ에 메시지를 발행하여 비동기로 작업을 처리하거나, Redis를 임시 데이터 저장소로 활용하는 경우가 많았습니다. 외부 시스템과 연동할 때 스프링 트랜잭션이 롤백되면 불필요한 연산이 발생하거나, 데이터베이스 커밋 전에 비동기 작업이 완료되어 DB에 똑바로 반영되지 않는 문제가 종종 발생했습니다.문제를 해결하기 위해 먼저 떠오른 것은 스프링 이벤트였습니다. 과거에 해당 기능을 사용했던 경험을 떠올려 보면, @TransactionalEventListener의 AFTER_COMMIT, AFTER_ROLLBACK 등의 옵션을 사용하여 이벤트를 소비하는 작업의 실행 시점을 트랜잭션의 커밋, 롤백이 성공한 시점으로 조절할 수 있었습니다. 그리고 이 기능의 기반.. 2026. 2. 17.
스프링 트랜잭션 롤백 제어하기 들어가기에 앞서스프링 트랜잭션은 UncheckedException은 롤백하고 CheckedException은 비즈니스 예외로 취급하여 롤백하지 않는다.스프링 프레임워크의 트랜잭션에 대해 처음 배울 때 들었던 이야기입니다. 최근 실무에서 스프링 트랜잭션의 롤백을 제어하여 비즈니스 요구사항을 구현했습니다. 이 경험을 바탕으로 스프링 트랜잭션의 롤백이 어떻게 동작하는지 직접 프레임워크 코드와 공식 문서를 통해 학습한 내용을 정리해보려고 합니다.본 게시글에서는 다음 내용을 다룹니다.스프링 트랜잭션의 기본 롤백 정책과 그 이유rollbackFor, noRollbackFor 속성을 통한 롤백 규칙 커스터마이징실무에서 noRollbackFor를 활용한 사례스프링 트랜잭션의 기본 롤백 정책스프링의 선언적 트랜잭션(@T.. 2026. 2. 1.
도메인 주도 개발 시작하기 학습 내용 정리 본 게시글은 지난 10주 동안 책 스터디를 진행하며 최범균님의 도메인 주도 개발 시작하기를 읽고 학습한 내용을 정리한 게시글입니다. 도메인이란 무엇인가?도메인(Domain)이란 소프트웨어로 해결하고자 하는 문제 영역을 말합니다. 하나의 도메인은 다시 하위 도메인으로 나뉘며 서로 다른 하위 도메인과 연동하여 완전한 기능을 제공합니다.도메인 모델특정 도메인을 개념적으로 표현한 것을 도메인 모델이라 합니다. 도메인 모델을 살펴보면 이해관계자들이 도메인을 이해하고 지식을 공유하는 데 도움이 됩니다. 모델의 표현은 이해하는 데 도움이 된다면 어떤 표현 방식이든 활용할 수 있습니다.도메인 모델은 도메인 자체를 이해하기 위한 개념 모델입니다. 때문에 구현 모델이 이를 그대로 표현할 수는 없으나 객체 지향 언어를 사용.. 2025. 9. 16.
[Datadog 삽질기] Observability와 Trace 알아보기 들어가기에 앞서최근 담당하고 있는 서비스에 모니터링 도구인 Datadog을 도입했습니다. 대부분은 DevOps에서 설정을 잡아주고 Datadog agent가 자동으로 계측을 수행해서 손댈 것이 없었습니다. 메트릭도 자동으로 측정되고 api 요청, 스케줄러 실행 모두 잘 계측되었습니다. 딱 하나 이벤트 컨슈머를 제외하고요. 나중에 알고 보니 이벤트 컨슈머도 잘 계측되고 있었지만 Datadog의 특정 기능으로 인해 찾아보기가 어려웠습니다.이러한 배경에서 본 게시글은 Datadog 도입 과정에서 있었던 삽질을 기록하기 위해 작성했습니다. 그 첫번째 기록으로 Observability란 무엇인지, Observability를 구성하는 핵심 요소, 그리고 Trace에 대해 조금 더 알아본 내용을 기록합니다.학습은 O.. 2025. 4. 20.
Jackson record 역직렬화 예외 can not set final 요약ObjectMapper의 PropertyNamingStrategy SNAKE_CASE로 설정한 뒤 record 클래스의 역직렬화를 시도했을 때 해당 예외가 발생이 외에도 @JaonNaming 등 NamingStrategy를 변경하고 record 클래스를 역직렬화하는 경우에 해당 예외가 발생해당 문제는 Jackson 라이브러리가 record 클래스를 지원하기 시작한 2.12 버전부터 해당 문제가 수정되기 이전인 2.15 버전 사이에 발생할 수 있음예외 발생 상황최근 실무를 접하면서 새로운 로직을 개발할 일이 있었습니다. 원격 저장소의 json 파일을 읽어들여 프로덕트 DB에 적재하는 일이었습니다. 해당 파일의 json 필드들은 스네이크 케이스(field_name)로 되어 있었고, bean으로 동록되어 .. 2025. 1. 19.
우아한테크캠프 7기 및 우형 최종 탈락 후기 들어가기에 앞서본 게시글은 올해 6월 21일부터 8월 30일까지 이루어진 우아한테크캠프 7기에 참여하며 제가 경험한 것, 배운 것에 대한 기록입니다. 우아한형제들 최종 면접에서 탈락한 후기도 짧게 다룰 예정입니다. 다만, 비밀유지서약서를 작성했기 때문에 면접 질문이나 상세한 절차는 다루지 않고 개인적인 감상정도만 다룰 생각입니다.이하의 기록은 회고의 성격을 가지지만 우아한테크캠프에서 어떤 것을 경험하는지 궁금하신 분들이 읽을 수도 있다는 생각하에 작성한 글입니다. 다만, 기수에 따라 교육 내용이 변경될 수도 있습니다.우아한테크캠프소켓 프로그래밍 과제 수행우아한테크캠프 전체 10주 중 초반 7주는 Java, JSP 과제를 수행했습니다. 이 과제들 중 가장 기억에 남는 것은 3주 동안 진행한 소켓 프로그래밍.. 2024. 11. 20.