2011년 10월 25일 화요일

NHibernate 학습 및 개발 속도 높이기

저도 처음 NHibernate를 접했을 때, HBM 작성하는데, 상당히 많은 시간을 투자해야 했고, 많은 시행착오를 겪었습니다. 특히, NHibernate 공식 자료에도, Class – HBM – Table 이런 식의 전체 정보가 존재하지 않아 애를 많이 먹었죠.

그래서 시작한 것이, NHibernate 소스의 테스트 코드를 보기 시작했습니다. 물론 실행도 해보고요. 이 때 제가 “뭔가 잘못하고 있구나” 를 깨닳았습니다. 테스트 코드를 보면, DB는 미리 만들어야 하지만, hbm2ddl 을 이용하여, DB Schema 생성용 script가 생성되고, 이를 DB에 실제 적용해서, 테스트를 위한 테이블을 모두 만든 후 테스트를 수행하더군요.

이 것을 알기 전에는 매핑 정보 하나 바꿀 때마다 DB도 바꾸고, 클래스도 바꾸고, 참 무식한 짓을 했습니다.
이제는 아예, NHibernate 테스트 프로젝트를 뜯어보다가, 하나의 DB에 대해서 테스트용 Schema 를 생성하는 것이 아니라, 설정에 따라, 다양한 DB에 대해서 테스트 할 수 있는 테스트용 Framework을 갖추게 되었습니다.

이 후 제게는 큰 변화가 일어났습니다. 그 동안 시도할 생각조차 못해왔던 복잡한 매핑이나, 개념이 잡히지 않던 매핑 속성 값에 대해, 여러 개의 매핑을 제작하여, 상호 비교할 수 있는 그런 체계가 제게 주어진 것이죠.

이렇게 되니, NHibernate에 대한 학습속도가 가파르게 오르더군요. 더군다나, IUserType, Interceptor, DynamicProxy, Listener, 2nd Cache Provider 등을 직접 제작하고, 테스트 하면서, 내부 구조를 빠르게 이해할 수 있게 되어, 이제는 왠만한 경우에는 자체 해결할 정도가 되었습니다.

그럼, 이제 막 NHibernate 를 시작하거나, 너무 힘들어서 포기하신 분들이라면, 다음과 같이 해보시기 바랍니다.

  1. NHibernate Test 프로젝트의 테스트 구조 파악 및 DB 생성 (hbm2ddl 활용) 방법을 파악
  2. 위의 테스트 방식으로 자신만의 Test Framework을 만들 것
  3. 다양한 매핑 방식에 대해 테스트 해 볼 것.
  4. 가능하면, FluentNHibernatePersistenceSpecification 을 활용할 것 (Fluent 방식의 매핑이 아니더라도 가능)
  5. DDD (Domain Driven Develoment), ORM 관련 지식을 쌓을 것
  6. Proxy에 대한 개념을 잡을 것 ( CastleProjectDynamicProxy 추천)

결론적으로 자신만의 Test Framework을 만들지 않고, NHibernate 를 습득하기는 상당히 힘듭니다.
남이 만든 것을 약간 고쳐서 사용해도 무방할 것입니다. 이런 예는 구글링으로 찾아보시면 될 듯 합니다.

댓글 1개:

루방 :

정말 좋은 글 감사합니다. C# 초급 개발자로서 NHibernate 를 공부하면서 진입벽(?)이 너무 높아서 힘들었는데, 위의 글을 읽고 어떻게 하면 좋을지 감이 오네요^^!