@Transactional ? @Transactional 어노테이션은 스프링에서 AOP를 통해 트랜잭션을 관리하기 위한 어노테이션이다. 트랜잭션이란 데이터를 변경하기 위한 작업의 단위인데 왜 해당 어노테이션에 readOnly 속성을 사용하는 걸까? 몇 가지 이유에 대해서 알아보자. 1. JPA에서 조회 성능 향상 JPA에서는 데이터를 조회할 때 영속성 컨텍스트 내 1차 캐시 영역을 이용하여 검색 성능을 향상시킬 수 있는데 영속성 컨텍스트를 이용하기 위해서는 트랜잭션이 필요하다. 즉 JPA의 1차 캐시 기능을 이용하여 검색 속도를 개선하기 위해 @Transactional 어노테이션을 사용할 수 있다. 하지만 트랜잭션 내에서 엔티티를 조회한 후 엔티티를 update 한다면 JPA의 변경감지 기능에 의해 의도..
오늘 단위테스트를 작성하던 도중 TaxInvoiceReserveItemRepository(@SpyBean) 을 설정하던 중 any() 파라미터를 사용했는데 다음과 같은 예외를 발생해서 원인에 대해 확인해보려고 합니다. // InvalidUseOfMatchersException 예외 발생 // Invalid use of argument matchers!, 3 matchers expected, 1 recorded when(taxInvoiceReserveItemRepository.findItemsByOrderNoWithLock( tiReserve.getSalesOrderNo(), anyList(), DocType.ORDER)) .thenReturn(tiReserve.getItems()); ArgumentMat..
개발하다보면 메서드의 파라미터의 유효성을 검사하기 위해 null 체크를 하게됩니다. 이러한 체크 과정이 번거로워서 알아보던 중에 @Nonnull 어노테이션과 @NotNull 어노테이션에 대해 알게되어서 정리하려고 합니다. 1. @Nonnull 과 @NotNull 메소드의 파라미터에 사용할 수 어노테이션으로 해당 어노테이션을 사용하면 null을 넘기는 것에 대해 주의할 수 있도록 메세지를 주는 어노테이션입니다. 2. @Nonnull vs @NotNull 두 어노테이션은 메소드로 null을 파라미터로 전달했을 때 NULL 객체를 참조하면서 NPE가 터지기 전에 예외가 발생하는지에 대한 차이가 있습니다. 테스트 결과 @Nonnull은 예외가 발생하지 않으며 @NotNull에 경우는 컴포넌트로 등록된 클래스의 ..
개인적으로 데이터베이스에 대해 실력이 부족해서 Real MySQL 8.0 서적을 공부하고 있습니다. 책을 보는데 리눅스에서 MySQL에 접속할 때의 차이점이 있다고 해서 정리해보려고 합니다. 1. 리눅스에서 MySQL 서버 접속하는 방법 먼저 MySQL 서버를 실행시킨 후 먼저 리눅스에서 MySQL에 접속하는 방법에는 3가지 방법이 있습니다. linux> mysql -uroot -p --host=localhost --socket=/tmp/mysql.sock linux> mysql -uroot -p --host=127.0.0.1 --port=3306 linux> mysql -uroot -p 2. 접속 방법의 차이 1) host를 localhost로 입력하여 접속 linux> mysql -uroot -p -..