jpa ......
최근 spring boots와 요즘 언급이 많이 되는 jpa로 프로젝트를 마무리했다. jpa 언급이 많다는 건, 그만큼 시장에서 핫하다는 증거 일 테고, 그것이 긍정적이든 부정적이든, 사람들 입에 많이 오르고 내리니 직접 경험해 봐야겠다는 생각이 들어서다. 그것도 겉핥기식이 아닌, 제대로, 난 선무당이 되긴 싫으니깐, 아무튼 그랬다. 이렇게 시작된 5MM 프로젝트를 2년 차 팀원과 같이 진행해 최근에 마무리했다.
그래서 어땠냐? 성질 급한 사람은 빨리 듣고 싶겠으나, 결과는 5분 후에, 아니 지금 공개하겠다. 매우 좋았다. 프로젝트도 깔끔하게 마무리되었고, 무엇보다 불필요한 반복 작업을 줄여 주어, 생산성 향상에 크게 기어했다. 첫째, 기본 구현된 Repository interface로 인해 몇 줄 코딩 없이 CRUD가 가능했고, 복잡한 쿼리의 경우 보조 수단인 QueryDsl를 통해 해결 가능했다. 둘째, Entity class가 ddl를 거의 완벽하게 대체 가능했다. 셋째, 가장 큰 이유이기도 한, 쿼리 작성에 따른 구문 오류에서 말끔히 벗어 날 수 있었다. 여기까진 나뿐만 아니라 경험해 본 사람들의 공통된 의견일 테고, 그 외 뭔가 다른 게 더 있지 않을까 해서 여기까지 읽은 사람들에게는 미안하지만, 없다. 더는 없다. 다만, 가장 중요한 것은 지금부터다.
도구를 사용함에 있어, 편리한 도구일수록 그에 따른 주위 사항이 있고, 제대로 사용하지 못할 경우 오히려 독이 될 수 있다. 나무를 자르는데 전기톱이 편하긴 하나, 잘 못 사용하다간 내가 자릴 수 있다. jpa가 무척 편하나, 객체 개념으로만 접근하다간 낭패를 볼 수 있다는 생각이다. 기본 디비 설계 및 쿼리 튜닝, 적절한 인덱스 생성과 인덱스를 깨지지 않고 태울 정도의 기본 소양은 있어야 한다. 직접 쿼리를 작성하지는 않으나, 생성된 쿼리를 로그에서 확인하고 적절하게 수정할 수 있는 능력을 갖춰야 한다. 그렇지 않을 경우 엄청난 성능 저하를 맞이할 수 있다. 그런 의미에서 역설적이게도 쿼리 작성 능력이 더욱 필요하고, 먼저 이를 갖춘 상태에서 사용해야 하지 않을까 생각한다.