AOP4 [Redisson] 트랜잭션 문제 발생 및 해결 지난 포스트 [Redisson]을 이용한 분산 Lock 구현 & 동시성 문제 해결 내 프로젝트의 Payment를 개발하면서 가장 기본 중에 기본이 되는 문제를 직면했었다. 그것은 바로 동시성 문제! 스프링부트의 내장 서버는 기본적으로 톰캣, 언더토우 등등의 WAS로 돌아가는데 이 sweeeetgoguma.tistory.com 지난 포스트에서 Redisson을 이용하여 동시성 문제를 해결하는 코드를 구현했다. 프로젝트 리팩토링이 거의 끝나가 조회 API를 구체화하여 몇 개 추가하던 도중, 스레드 100개의 동시 요청을 직접적으로 받는 과정을 확인하고 싶어졌다. 그래서 실험해봤다. 결과는?? 처참하다.. 무엇이 문제였을까 트랜잭션 처리가 씹혔다. @GetMapping("/test") public void t.. 2022. 10. 1. OutBox Pattern & Saga Pattern & Transaction 지난번 포스팅을 이후로 3일간 테스트 코드에 관한 공부를 하며 리팩터링을 진행했다. 데이터 분산 환경에서의 트랜잭션의 고려도 충분히 중요한 설계 같다. 그 리팩터링 과정을 정리해보겠다. https://sweeeetgoguma.tistory.com/entry/%E3%80%8COutBox-Pattern%E3%80%8D-%ED%99%9C%EC%9A%A9 「OutBox Pattern」 활용 https://github.com/GroovyArea/MyChickenBreastShop/wiki/Version-1 GitHub - GroovyArea/MyChickenBreastShop: ChikenBreastShop API with Spring boot ChikenBreastShop API with Spring boot... 2022. 6. 13. 2022.03.11~03.13의 기록 ▶ 3일 계획 => 공부 관련 1) 수업 내용 복습 2) MVC 객체지향 리팩토링 완료 3) 기술 질문 답변 노션 정리 및 SOLID 예제 프로그래밍 (OCP & DIP & ISP) 4) 8개의 디자인 패턴 정리 => 파이널 프로젝트 관련 1) ERD 그려 놓고 pdf로 만들어놓기 2) 이미지 수집 마우스 건전지 바꿔라!! [완료] ▶ 문제 정리 1. 생성자를 통해 주입은 괜찮음. 하지만 인스턴스 생성으로 의존하지 말것 (테스트 코드 작성 어려움) > 플레이어로 컴퓨터를 주지말고 외부에서 비교값을 얻어라 public class Player { private final Rsp playerRsp; private final Computer computer = new Computer(); // setter 대신.. 2022. 3. 12. 2022.03.08~03.10 의 기록 ▶ 3일 계획 => 공부 관련 1) 스프링 개구리책 완독 후 노션 및 블로그 정리 2) MVC 객체지향 리팩토링 하루종일 (9일 오늘) 3) 기술 질문 답변 노션 정리 및 SOLID 예제 프로그래밍 => 파이널 프로젝트 관련 1) DB 테이블 완성 및 select JOIN 대략적인 쿼리문 작성 2) git 협업 ▶ 문제 정리 1. 객체 간의 관계 > 단일 책임 원칙으로 클래스를 분리 2. 내부 로직을 구현하는 것은 Model에서 일어나지 않아야 한다 > 상수의 나열인 enum 클래스에서 해결 3. setter 메서드의 생략 (불변성을 지켜라) > 생성자의 주입으로 해결 4. 값 자체의 비교보다 타입의 의미를 더 살려서 비교 > 타입을 적극적으로 사용하여 같은 타입끼리의 비교가 코드 작성의 가독성이 좋다... 2022. 3. 9. 이전 1 다음 반응형