origoni's Blog from Millky

origoni의 스프링 블로그 입니다.

DB가 하는 일을 줄여봅시다.


오늘 HibernateTemplate을 EntityManager로 전환하고 있는데
이전에 작성한 코드를 보니... 쓸데없이 DB에 부담을 주는 코드를 발견했다.

아래를 보자 

Predicate restrictions = criteriaBuilder.and(criteriaBuilder.equal(root.get("postIdx"), postCommand.getPostIdx()), criteriaBuilder.equal(root.get("userIdx"), postCommand.getUserIdx()));

어떤 글을 지울때 사용하던 로직중에 일부이다.
뭐 별거 없다. 지울 글 번호(postIdx : PK)와 작성자가 일치하는 글을 가지고 온다 이다.
그냥보면 별로 이상한 부분이 없을지도 모르겠지만 잘보면 WHERE절에 쓸모 없이 하나가 더 들어간 사실을 발견할 수 있다.(사실 Predicate 사용하기 위해서 저기 안보이는 부수적인 코드도 많다.)


위의 코드와 같은 역할을 하는 아래 코드는 DB가 느끼는 부담을 자바에게 전가하고 있다.

Post post = entityManager.find(Post.class, postCommand.getPostIdx());
if(post != null && post.getUserIdx() !=  postCommand.getUserIdx())
{
post = null;
}

작은 차이지만 DB가 부담을 느끼는것보다는 서버의 확장이 용이한 자바가 그 부담을 지고 가는것이 좋을 것이다.
특히 PK(여기서는 postIdx)가 있을경우에는 꼭 기억하자.
사용자가 다를때 네트워크 비용이 들어간다고도 생각할 수 있겠지만.
이와같은 경우는 히트할 경우가 훨 많을 것이다.

물론 지금은 안 그러지만 오래전에 작성한 코드나..
시간이 없어서 복붙(?) 했던 코드들 중에는 종종 이런 부분이 있는 것 같아 글을 남겨본다.



◀ 06/28 2012 12:27:07
Eclipse Juno (4.2) Release
06/20 2012 12:19:35
CriteriaQuery 사용하기
back to top