반응형

트러블 슈팅 3

Mockito를 사용한 테스트에서의 OOM

상황 내가 만든 로직의 성능을 테스트하고자 연속적으로 호출하는 테스트 코드를 작성해봤다. 해당 로직에서는 레디스에 접근하는 경우가 있었기 때문에, Mock 객체를 활용해 실제 레디스에 접근하는 시간은 제외한 자바 코드의 성능만을 테스트 하고자 했다. 예시 코드는 아래와 같다. @MarsSpringBootTest @Slf4j class ServiceTest { private static final int CALL_STANDARD = 10_000_000; @Autowired private TestService testService; @Mock private Repository repository; @Test void run() { when(repository.find(xxx)).thenReturn(Optio..

트러블 슈팅 2023.01.03

Transaction propagation option & silent rollback

일반적인 상황 하나의 서비스 로직 안에서 다른 서비스의 메서드를 호출하는 경우가 많지만 지금까지는 어떤 메서드일지라도 문제가 생기면 전부 롤백시켜야 하는 상황이 대부분이었다. 예를 들자면, 게임의 결과로 100만원이 지급되어야 하는데 유저 서비스에 문제가 생겨 재화를 지급할 수 없는 상황이라면 해당 스핀 자체를 무효화하고 오류를 발생시키는 것이 일반적이다. 만약 게임은 계속 진행되는데 게임 머니가 지급되지 않는다면 아마 고객센터 서버마저 터져버릴 것이다.. ㅎㅎ 문제 상황 그런데 주요 로직이 아닌 부차적인 로직에 대해서도 하나의 트랜잭션으로 작용해야할까? 예를 들어, 게임에서 막대한 상금을 받았을 때 친구에게 자랑할 수 있는 메세지를 보낼 수 있다고 치자. 메세지 서버에 문제가 생겼다면 게임 자체를 플레..

트러블 슈팅 2022.12.28

[예외 처리] getMessage를 출력했는데 null이 왜 나와?

제가 오늘 겪었던 문제에 대해서 아주 간단하게 만든 예제 코드를 작성해봤습니다. 어떤 실수였는지 한번 유추해보시면 좋을 것 같습니다. 클래스 다이어그램 클래스 구조를 한 눈에 알아보기 쉽게 해드리기 위해서 Intellij의 내부 기능을 활용해 다이어그램을 만들어 봤습니다. BookManagerImpl 클래스는 IBookManager 인터페이스의 구현체이며, add()와 sell() 메서드를 구현하고 있습니다. Book 클래스는 isbn(String), title(String), quantity(int) 필드를 가지며, BookManagerImpl 클래스 내부의 books 리스트에 저장될 수 있습니다. RuntimeException을 상속한 custom 예외인 ISBNNotFoundException과 Qu..

트러블 슈팅 2022.01.25
반응형