하이버네이트가 문제인가요? 자신이 문제인가요?
"람보르기니가 있는데 운전 면허증이 없습니다. 그래서 람보르기니를 못타고 다니는데 그게 람보르기니 때문인가요 저 때문인가요."
저는 국내 대형 사이트나 금융권을 비롯해서 흔히 말하는 SI 환경을 경험해 본적이 없습니다. 지금이 11월이니까 이제 개발자로 일한지 거의 1년이 되어갑니다. 그동안의 개발 경험은 금융관련 컨설팅 회사에 아키텍트로 들어갔다가 두 달만에(사실은 한 달만에 냈지만, 한 달은 처리 기간) 사직서를 내고, 지금 있는 회사로 와서 조그마한 유통업에서 사용할 웹 애플리케이션을 사부님한테 배워가면서 스프링, 하이버네이트로 만들었고, 그걸 만드는 과정 중에 얼마전에 공개했으나 별로 빛을 못보고 있는 OSAF를 뽑아냈습니다.
저는 대형 사이트니 초대형 엔터프라이즈니 하는 것에 대한 경험은 없지만 스프링, 하이버네이트를 좋아하고 그만큼 공부도 하고 있고 실무에
적용도 해봤습니다. 한 번은 하이버네이트 버전을 올려놓고 수정할 것들을 제대로 하지 않아서 사부님이 밤을 새면서 버그를 잡은 적도
있습니다.
이런 제가 감히 하이버네이트를 대형 싸이트에서도 쓸 수 있다느니 없다느니 주장하는건 좀 웃긴 일이겠죠. 그래서 전 그런 주장을 하기 보다는 대형 프로젝트나 SI에서 일하시는 분들에게 물어보곤 합니다.
"하이버네이트도 괜찮은것 같은데 왜 iBatis를 쓰고 계신가요?"
답변은 굉장히 다양합니다. 그 중에서 어느정도 공감이가고 그럴 만하다고 생각하는 답변들은 다음과 같습니다.
- 한글로된 참고자료가 없다.
- 개발자가 하이버네이트를 모른다.
- 기술 리더가 iBatis는 익숙한데 하이버는 모른다.
- 레거시 DB를 써야 하는데 정규화가 엉망이다.
이 중에서 마지막 것만 기술적인 문제처럼 보이는데, 사실은 정규화를 제대로 안 했다는 건 DBA가 제 역할을 못한 거라고 볼 수 있으니 결국엔 하이버 문제라기 보단 DB쪽 관계자들의 문제입니다.
한국인이 꼭 한글로된 레퍼런스만 읽어야 한드는 법이 있는 것도 아닌데, 한글로 된 자료가 없다는 핑계를 계속 하는 건 자신의 역량을 제한하고 스스로를 가두는 일밖에 안 된다고 생각합니다. 하이버네이트 관련 자료는 온라인에서 정말 쉽고 많이 찾을 수 있습니다. 그리고 좋은 책도 있죠.(지금 번역도 하고 있습니다.) 그런 것들을 안 본다는 건 그만큼 노력해야 할 필요성을 못 느낀 것 뿐이고, 한글 레퍼런스가 없어서 공부를 못한다는 건 좀 핑계라고 생각합니다. 그래서 이것도 역시 개발자의 문제인거지 하이버네이트의 문제는 아닙니다. 당장 구글에서 hibernate와 iBatis로 검색을 해서 어떤 단어의 검색 결과가 더 많은지 눈으로 직접 확인해보시기 바랍니다.
다음으로 개발자가 좋은 기술이 있지만 몰라서 못쓴다. 이것 역시 하이버네이트의 문제가 아니죠. 개발자의 역량 문제입니다. 하이버네이트를 완전히 마스터 해야 할 필요까진 없겠지만, 적어도 HQL이 날아가면 하이버가 만들어 주는 SQL이 대강 어떠 어떠한 걸꺼라는 예측을 할 수 있는 정도까지만 공부를 하면 될 듯 합니다. 그 뒤에 최적화나 캐슁은 DBA나 소수의 기술 리더가 책임지면 되겠죠. 어쨋거나 이 문제 역시 하이버네이트의 문제는 아닙니다. 개발자가 공부를 안 한게 문제지..
마지막 기술 리더는 프로젝트에서 어떤 프레임워크를 사용 할지 결정할 때 지대한 영향을 주며, 개발자들에게 기술을 전파할 의무가 있다고 생각합니다. 그런 점에서 기술 리더는 현재 프로젝트에 가장 적합한 기술을 객관적으로 평가하고 그 중에서 선택을 해야 하는데 자신이 하이버네이트를 몰라서 자신에게 익숙한 iBatis를 선택한다는 건 물론 타당합니다. 그래야겠죠. 하이버네이트를 쓰라고 해놓고 자신이 못 도와주면 안되니까요. 하지만 만약 그 프로젝트에 하이버네이트가 더 적합한데도 그렇게 선택할 수밖에 없었다면 올바른 선택이긴 하지만 기술 리더에겐 분명히 잘못이 있는거라고 생각합니다. 물론 기술을 잘 모르는 고객이나 개발자들은 잘 모르겠죠. '저 사람이 기술 짱이니까. 저사람 선택이 맞는거겠지'..라고 안일하게 생각하는 개발자 자신의 잘못도 크지만, 이런 인식을 퍼지게 내버려 둔 잘못은 더 큽니다. 오히려 솔직하게 고객이나 개발자에게 지금 프로젝트는 하이버네이트가 더 좋아 보이는데 내가 잘 몰라서 도입을 못하겠다. 이렇게 말하는 기술 리더가 있다면 그 사람이 진정한 기술 짱입니다. 현재는 아니지만 미래의 진정한 짱이 될 수 있겠죠.
윗 글 단락들의 크기로만 봐도 제가 생각하는 문제 원인의 비중을 짐작할 수 있으시겠죠? 맞습니다. 저는 기술 리더가 가장 큰 책임이 있고, 그 다음은 개발자, 그 다음 정규화 제대로 안하는 DBA 순으로 생각하고 있습니다.
저는 위에서 생각한 저 네 가지 답변 말고 하이버네이트 기술 자체를 가지고 올타 그르다를 논하는 답변을 들으면 그 주장에 대한 증거를 찾고 반론에 대한 기술적인 증거를 찾기 전에 일단 이런 의문부터 생깁니다.
외국의 유명한 업체들의 개발자도 하이버네이트를 쓰고 있다. 그 사람들은 바보가 아니다. 그 사람들이 진행하는 프로젝트의 규모가 작은 것도 아니다. 그 사람들도 레거시 DB를 쓰고 있다. 하이버네이트를 iBatis 못지 않게 아주 많이 잘 쓰고 있다. 하이버네이트에 기술적인 결함이 있었다면, 그 사람들이 왜 쓰고 있는거지.. 말도 안돼. 개빈 킹이 가만 있을 만한 성격도 아닌거 같은데.. JBoss에서 노는 것도 아닐텐데 말이지..
반면에 같은 질문을 했을 때 가장 대표적인 기술적인 답변들은 다음과 같습니다.
- 테이블 중심이라 블라 블라..
- 레거시가 블라 블라..
- DB에 특화된 쿼리가 블라 블라..
- SQL을 직접 블리 블라..
- 성능이 블라 블라..
말이 안 되자나요. 저런 문제들이 있는데 유명 해외 업체 개발잘들은 무슨 깡으로 하이버네이트를 쓸까요. 이번 12월에 Spring One America에 가서 직접 물어보고 오겠습니다.
"What kind of framework is used for your persistence layer?"
"How many projects have you experienced with Hibernate?
"Have you ever used Hibernate with legacy DB? Is it really too hard to do that?"
"What about performance?"
"What do you think about Hibernate and iBatis?"
물론 이 질문들은 덤일 뿐이고, 스프링 관련 질문도 많이 하고 와야죠. 가기 전에 S1A에 가서 질문할 것과 말할 것들을 미리 정리해 둬야겠습니다.