spring jpa (Hibernate) 요청당 쿼리 count

회사 프로젝트가 거의 막바지로 이르면서 성능과 관련된 코드들을 리팩토링 하는중이다. 거의 대부분 jpa와 관련 있을 듯해서 jpa 튜닝(?) 이라고 해야 되나? 아무튼 그러고 있다. orm이 아닌 mapper 같은 경우에는 개발하면서 대충 몇번의 쿼리를 날리는지 감으로 알 수 있지만 jpa같은 경우에는 언제 어디서 쿼리들이 n+1이 될지 모르니 계속 모니터링을 하기 귀찮아서 로컬에서 테스트하거나 테스트 서버에 올릴때 요청당 쿼리를 count하는 것을 만들었다. 설명보다는 코드를 보자. @Slf4j @RequiredArgsConstructor public class RequestCountInterceptor extends HandlerInterceptorAdapter.. Read More

[spring-boot] 블로그를 만들자. (2) JPA

블로그 만들기 두번째 시간이다. 오늘은 무엇을 할까 고민하다가 블로그니까 Post기준으로 점차 확대하는 방향으로 나가야겠다고 생각했다. 오늘은 JPA 이야기가 많은거 같아서 JPA라고 제목도 붙었다. 우리는 JPA라는 것을 사용할 것이다. JPA는 하나씩 하나씩 차근차근 보면 답이 없다. 왜냐하면 JPA또한 공부할게 많다. 아 JPA가 이런거구나 정도만 알면 성공한거다. 혹자들은 Spring만큼 공부할 양이 많다고 하니 책을 사서 공부하는 편이 낫다. 예제의 경우 아주 쉽게 나와 있지만 실무 프로젝트에선 그런 쉬운 로직이 많이 없다. 단지.. Read More

Spring Boot 1.4 Test

이번 시간에는 Spring Boot 1.4부터 추가된 Test를 알아보자 Spring Boot 1.3 에서는 이런 어노테이션을 붙어서 테스트를 진행했다. @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = Application.class) @WebAppConfiguration public class SimpleTestCase { } 하지만 1.4.부터는 좀더 심플하게 바뀌었다. @RunWith(SpringRunner.class) @SpringBootTest public class SimpleTestCase{ } 좀더 간판해졌다는걸 알수 있다. 1.4 부터 추가된 @MockBean 이라는 어노테이션이 있다. 가짜 객체를 만들어 테스트할 수 있게 만들어준다. 한번 코드를 보자. @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class SpringBootTestApplicationTests { @Autowired private TestRestTemplate.. Read More