전체

    8기능 검사 결과(MBTI)

    Sakinorva Cognitive Functions Test (Grant/Brownsword)A cognitive function test centered around the work of Harold Grant, Alan Brownsword, Myers & Jung, and the 16 personalities they describe, this personality test calculates a cognitive function type using two different algorithms and attempts to pin down yosakinorva.net(Grant) Function Type: 융 학파 심리학자 그랜트와 브라운스워드의 이론에 따른 유형Myers Function Type: ..

    [Spring] 이중 트랜잭션으로 인한 PessimisticLockingFailureException

    최근에 PessimisticLockingFailureException 예외를 마주쳤다.이번에 내가 겪은 사례는 조금 특이한 구조에서 발생했다.상황 요약A 프로젝트가 B 프로젝트의 API를 호출한다.A와 B 모두 트랜잭션을 사용한다.B에서 JPA로 flush() 를 수행했는데 이 시점에 PessimisticLockingFailureException 이 발생했다. 원인핵심은 이중 트랜잭션 구조에 있다.A 프로젝트에서 트랜잭션이 열린 상태로 B를 호출한다.B에서도 트랜잭션이 별도로 시작된다.B에서 JPA가 엔티티를 비관적 락(PESSIMISTIC_WRITE)으로 조회한다.flush() 시점에 락을 걸 수 없어서 예외 발생:A 쪽 트랜잭션이 락을 보유하고 있거나,DB가 락 획득에 실패하거나 타임아웃이 발생한 경..

    SAGA 패턴, JTA 트랜잭션

    마이크로서비스 아키텍처를 도입하면 시스템은 점점 더 작고 독립된 서비스들의 집합으로 나뉘게 됩니다. 하지만 이로 인해 트랜잭션 처리는 복잡해집니다. 단일 DB 트랜잭션으로는 처리할 수 없는 문제가 발생하죠. 이 글에서는 마이크로서비스 환경에서 트랜잭션을 다루는 대표적인 방식인 Saga 패턴과 JTA를 비교하고, 코레오그래피 기반의 Saga 구현 방식도 함께 살펴보겠습니다.SAGASaga는 여러 개의 로컬 트랜잭션을 순차적으로 실행하면서 전체 작업을 처리하는 방식입니다. 각 단계가 성공하면 다음 단계로 넘어가고, 실패하면 이미 성공한 단계들에 대해 보상 트랜잭션(compensating transaction)을 실행합니다. @Servicepublic class OrderSagaService { @Aut..

    [ElasticSearch] 검색 방식, 장애 복구 정리(Circuit Breaker Exception)

    검색 방식from 방식GET my_index/_search{ "from": 100000, "size": 10, "sort": [{ "timestamp": "asc" }]}이 요청은 100,000번째 문서부터 10개를 반환하는 것이 목적입니다.페이지를 쉽게 이동할 수 있으나 깊은 페이지일수록 느립니다.Scroll APIPOST my_index/_search?scroll=1m{ "size": 1000, "sort": [ { "timestamp": "asc" } ], "_source": true} 이전 페이지 한 개만 유지하는 것이 아니라, 처음 요청 이후 모든 스냅샷 데이터를 유지하므로 백업 용도가 아니면 보통 사용하지 않는다. Search AfterPOST my_index/_search{..