자바와 스프링의 비동기 처리 - 2편: CompletableFuture의 예외 처리와 타임 아웃
·
Backend/Spring Boot
Introduce 자바와 스프링의 비동기 처리 - 1편: CompletableFuture 톺아보기Introduce 스프링에서 비동기 처리를 위해 흔히 `@Async` 를 사용하곤 한다.나 역시 프로젝트에서 `@Async` 를 적용하여 일부 후속 로직들을 메인 로직과 분리하여 실행하고 있었다. 그런데 얼마 전 면woojjam.tistory.com먼저 해당 글을 읽기 전에 이전 글을 읽고 오는것을 추천한다. `CompletableFuture` 는 비동기 작업을 간결하게 표현할 수 있게 도와주지만, 비동기 환경에서는 예외가 어디서, 어떻게 발생했는지 추적하거나 디버깅 하기도 어렵기에 이를 처리하는것이 쉽지 않다. 그렇다고 예외처리를 해놓지 않으면 다음과 같은 상황이 발생할 수 있다.비동기 로직 중 하나가 실패..
자바와 스프링의 비동기 처리 - 1편: CompletableFuture 톺아보기
·
Backend/Spring Boot
Introduce 스프링에서 비동기 처리를 위해 흔히 `@Async` 를 사용하곤 한다.나 역시 프로젝트에서 `@Async` 를 적용하여 일부 후속 로직들을 메인 로직과 분리하여 실행하고 있었다. 그런데 얼마 전 면접장에서 다음과 같은 질문을 받았다.@Async 로 실행된 메서드에서 예외가 발생하면 어떻게 처리하나요?혹시 CompletableFuture 를 사용해본 경험이 있으신가요? 나는 이 질문에 대해 명확하게 답변하지 못하였다. 제대로 답변하지 못하는 모습을 보니 스스로 내가 비동기에 대해서 잘 모르고 사용하는 구나라는 생각이 들었고, `CompletableFuture` 이 무엇인지 이해해보는 시간을 가지게 되었다. 이번 글에서는 java의 기본 비동기 처리 도구인 Future 를 알아보고, 이를 ..
스프링 이벤트를 발행하여 트랜잭션과 관심사 분리하기
·
Backend/Spring Boot
Introduce 내가 개발중인 서비스에서 특정 상품을 결제하면 FCM을 통해 결제한 유저에게 알림을 전송하는 비즈니스 로직이 있다.결제 내역을 바탕으로 사용자에게 알림을 전송해야 함으로 결제 처리와 알림 전송이 같은 트랜잭션에 묶이게 된다. 현재 비즈니스 로직의 흐름을 살펴보면 1. 사용자가 상품을 주문한다.2. 상품을 조회하고, 결제를 진행한다.3. 재고를 차감하고, 결제 내역을 저장한다.4. 결제가 완료되면 사용자에게 FCM을 전송하고, 알림내역을 저장한다. 다음과 같은 순서로 동작한다. 그리고 다음 로직들은 같은 트랜잭션으로 묶여있다. 결제는 외부 API를 통해 이루어진다. 그러므로 우리 서비스의 트랜잭션과는 무관하다.그런데 만약 FCM 알림 저장 과정에서 예외가 발생하면, 전체 트랜잭션이 롤백..
동시성 문제에 대한 고찰, 점진적으로 접근하기
·
Backend/Spring Boot
🔎 본 글을 읽기 앞서 해당 게시글을 먼저 참고 해주시길 바랍니다.해당 게시글은 추후 내용이 변경될 수 있습니다. 해당 게시글에서 설명하지 않는 사전 지식들은 이미 알고있다고 가정하고 작성된 글입니다. [DB] 트랜잭션과 동시성 제어Introduce결제 시스템을 구축하면서 동시성 문제를 경험한 적이 있다. 여러 사용자가 동시에 결제를 시도할 때, 예상하지 못한 데이터 불일치와 정합성 문제가 발생했으며, 이를 해결하기 위해 다woojjam.tistory.com일시설명25.03.08- 게시글 작성25.03.09- Synchronized 분산 테스트 추가25.03.16- Pesimistic Lock 내용 추가25.03.28- Optimistic Lock 내용 추가 및 데드락 추가 Introduce 회사에서 ..
[DB] 트랜잭션과 동시성 제어
·
Computer Science/Database
Introduce결제 시스템을 구축하면서 동시성 문제를 경험한 적이 있다. 여러 사용자가 동시에 결제를 시도할 때, 예상하지 못한 데이터 불일치와 정합성 문제가 발생했으며, 이를 해결하기 위해 다양한 접근 방식을 고민해야 했다. 이러한 동시성 문제는 단순히 결제 시스템에서만 발생하는 것이 아니다. 데이터베이스에서 트랜잭션이 동시에 실행될 때, 공유 자원의 일관성과 무결성이 깨지는 문제는 모든 시스템에서 중요한 고려 사항일 것이다. 동시성이란 여러 주체가 하나의 공유 자원에 동시에 접근하여 의도하지 않은 결과를 발생시키는 것을 의미하며, 식사하는 철학자 문제가 유명한 예시이다. 즉, 데이터베이스에서 동시성 문제란 여러개의 트랜잭션이 동시에 실행되어, 공유 자원의 일관성과 무결성을 깨뜨리는 문제를 말한다. ..
[DB] Lock을 사용하여 동시성 제어하기 (+ 2PL Protocol)
·
Computer Science/Database
Introduce 결제 시스템을 구축하면서 동시성 문제를 해결하기 위해 비관적 락, 낙관적 락, 분산락과 같은 다양한 락킹 기법들을 검토하게 되었다. 하지만 이를 효과적으로 적용하기 위해서는 데이터베이스에서 제공하는 기본적인 락킹 기법을 먼저 이해하는것이 우선이라는 생각이다. 따라서 이번 글에서는 데이터베이스의 Lock의 종류, 발생할 수 있는 이상 현상, 해결 기법 들을 다루고자 한다. Concurrency📌 동시성 Concurrency(동시성) 이란 여러개의 작업(트랜잭션, 요청, 스레드 등)이 동시에 실행되는 상태를 의미한다. 즉, 하나의 시스템에서 여러 개의 프로세스 또는 스레드가 동일한 자원을 공유하며 실행되는 모든 상황을 의미한다. 즉, 데이터베이스에서 동시성 제어란 여러 개의 트랜잭션이 동..
브라우저는 google.com을 입력하면 어떤 일을 처리하지?
·
Computer Science/Network
Introduce 최근에 네트워크나 운영체제 쪽으로 CS 지식이 부실하다는 생각이 든다. 전공 수업에서 다 배웠던 내용이긴 하지만 시간이 좀 지나기도 했고, 그때는 단지 시험에서 점수를 잘 받기 위해서 공부했었던 것 같아서 이번에 짬짬이 정리해보고 CS 지식들을 리마인드 해보고자 한다. 그래서 어떻게 리마인드 할까? 무작정 다시 외워야 할까? 그냥 무작정 다시 외우기만 하면 금방 까먹을 것 같다는 생각이 든다. 그래서 내가 선택한 방법은 특정 주제를 던지고 그 주제에 대해서 최대한 스토리를 그려보며 공부해보고자 한다. 이번 게시글의 주제는 www.google.com 을 브라우저에 입력했을때 어떤일이 일어날까? 이다.  1. 사용자가 브라우저에 www.google.com 을 입력한다. 2. 브라우저는 캐싱..
스프링 모니터링 시스템 구축하기 (Actuator, Prometheus, Grafana)
·
DevOps/Monitoring
Introduce  PLG Stack(Promtail, Loki, Grafana)으로 효과적인 로그 모니터링 시스템 구축하기Introduce📌 개요2025.01.25 - [DevOps/Monitoring] - 로그 시스템이 필요한가요? (ELK Stack과 PLG Stack) 로그 시스템이 필요한가요? (ELK Stack과 PLG Stack)개요 로그는 어떻게 수집해야할까? 나는 최근까지 로그woojjam.tistory.com 이전 게시글에서는 PLG Stack으로 로그 모니터링 시스템을 구축해보았다. 이번 시간에는 SpringBoot Actuator, Prometheus, Grafana 를 활용하여 스프링 애플리케이션 모니터링 시스템을 구축해보고자 한다. 작전에 실패한 군인은 용서할 수 있지만 경계에..
PLG Stack(Promtail, Loki, Grafana)으로 효과적인 로그 모니터링 시스템 구축하기
·
DevOps/Monitoring
Introduce📌 개요2025.01.25 - [DevOps/Monitoring] - 로그 시스템이 필요한가요? (ELK Stack과 PLG Stack) 로그 시스템이 필요한가요? (ELK Stack과 PLG Stack)개요 로그는 어떻게 수집해야할까? 나는 최근까지 로그 수집에 대한 지식도, 관심도 가져 본적이 없었다. 그 이유는 개발만 하면서 로그 대한 필요성도 크게 느끼지 못했고, 익숙하지 않은것도woojjam.tistory.com 이전 시간에는 로그 시스템의 필요성과 ELK Stack / PLG Stack에 대해서 정말 간략히 알아보았다.이번 시간에는 실제로 PLG Stack을 구축해 보고, 실 서버에 적용해보고자 한다.Definition📌 목표 구축을 하기전에 내가 하고자 하는 것이 무엇인지..
로그 시스템이 필요한가요? (ELK Stack과 PLG Stack)
·
DevOps/Monitoring
개요 로그는 어떻게 수집해야할까? 나는 최근까지 로그 수집에 대한 지식도, 관심도 가져 본적이 없었다. 그 이유는 개발만 하면서 로그 대한 필요성도 크게 느끼지 못했고, 익숙하지 않은것도 있지만 실제로 로그를 효과적으로 관리하여 얻는 큰 장점을 경험해본적이 없기에 표면으로 다가오는 이점을 깨닫지 못했다. 개발 과정이야 소수의 팀원들끼리 지지고 볶고, 그러다보면 해결이 되었다. 하지만 운영 단계에서 서비스 장애가 발생할 경우 장애 감지부터 원인 분석까지 최소 30분 이상, 평균 40분이 할애되었다. 그러다 보니 더욱 빠른 장애 대응 시스템의 필요성을 느꼈고, 로그를 중앙 집중화하여 관리한다면 원인 분석 시간을 감소 시킬 수 있지 않을까라고 생각하였다. 따라서 로그 시스템을 구축하여, 로그 수집 기술을 적용..