
이번에는 REQUIRES_NEW를 사용해서 문제 상황을 가정하고 해결해보도록 하자. 문제 상황 회원가입에 성공하면 회원 DB와 회원 이력 로그 DB에 저장하는 비지니스 로직을 수행해야 한다. 회원가입과 이력 로그를 저장하는 로직을 하나의 트랜잭션으로 묶어서 처리하던 중, 만약 이력 로그 저장에서 문제가 발생하면 회원가입 자체가 안 되는 상황이 발생한다. 실제 비지니스에서 이런 상황이 발생하면 많은 회원들이 이탈하는 문제가 발생할 것이기 때문에 요구 사항이 변경 되었다. "회원 가입을 시도한 로그를 남기는데 실패하더라도 회원 가입은 유지되게 해주세요." 단순하게 생각해보면 LogRepository에서 예외가 발생하면 그것을 MemberService에서 예외를 잡아서 처리하면 될 것 같다. 이렇게 하면 Me..

문제점 어느날부터 오전 11시만 되면 관리자 페이지 접속이 안 되는 것을 확인했습니다. 문제의 원인을 파악하기 위해 관리자 API 로그를 확인하던 중, 송장번호로 택배사 정보를 크롤링해서 배송완료된 주문의 상태를 배송완료로 변경하는 스케줄링 메서드 로그를 기점으로 서버가 다운되어 있음을 확인했습니다. 최근들어 급격하게 증가한 주문량으로 인해 서버가 다운이 된 것인가하는 의문점을 갖고 해당 소스코드를 들여다 보았습니다. 소스 코드의 내용은 이러하였습니다. 현재 배송중인 주문 데이터를 DB에서 가져와서 송장번호로 택배사의 정보를 크롤링한 뒤, 배송완료되었다면 주문 상태를 배송완료로 업데이트하고 있었습니다. // 1. 상태가 배송중인 주문의 데이터를 DB에서 조회한다. public void checkTrace..
- Total
- Today
- Yesterday
- 파이썬
- webflux
- spring boot
- 데이터베이스
- 코틀린
- 스프링
- 스프링부트
- 알고리즘
- 백준
- 릿코드
- 노마드
- 코테
- 노마드코더
- 그리디
- Algorithm
- 자료구조
- 스프링 부트
- 리팩토링
- 문자열
- 정렬
- leetcode
- Spring
- 구현
- Real MySQL
- 인프런
- kotlin
- mysql 8.0
- 북클럽
- 김영한
- MySQL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |