자바용 Active Record 기획안

설  연휴 전날 몇몇 회사 동료와 야근을 하려고 식사를 하던 중 그냥 일찍(?) 나가서 얘기나 하다 집에 가기로 의기투합하여 회사를 나왔다. 2차까지 가며 (1차는 별다방, 2차는 덩킨도넛... 꼭 알콜이 있어야 한다는 편견은 버리삼) 이런 저런 얘기를 하던 중 평소 궁금했던 것을 물어봤다.

"자바용 Active Record를 만들면 좋을지 모르겠는데 어떻게 생각해?"

한동안 이 문제로 고민을 해왔다. 이미 iBatis와 Hibernate같은 유명 인사가 있고 이 외에도 수많은 ORM 도구와 추상화 솔루션이 있는 상황에서, 그리고 우리의 완소 JDBCTemplate가 든든하게 뒷받침을 하고 있는데 Active Record를 따로 만드는 것이 의미 있는지 판단이 잘 서지 않았다. 아무리 Dynamic Proxy를 쓴다고 해도 최소한 인터페이스는 일일이 만들어 만들어줘야 하는 자바에서  생산성을 어느 정도 높일 수 있을지도 의문이었고 어떻게 보면 ORM을 사용하면서 도메인을 DB Table과 1:1로 대응하게 하면 그것에 곧 Active Record와 다를 바 없는 것 아닌가 생각되었기 때문이다.

그런데 동료들은 꼭 필요하다며 이런저런 이유를 늘어놓더니 결국 내 마음에 불을 질러 놓았다. 집에 오며 한 시간 넘게 생각을 해보니 대략 윤곽이 떠올라서 간단히 기획안을 적어본다.

배경

왜 Active Record가 필요할까? 솔직히 말하면 내가 필요하기 때문이다. 난 아직도 ORM을 쓰지 않는다. 더 정확히 말하면 도메인 모델링을 하지 않는다. 도메인 객체가 있기는 하지만 DB 구조를 반영해서 만들어진다. 여전히 모델링 단계에서 DB 설계를 먼저 하고 있고 DBMS의 고유 기능을 사용하는데 익숙하며 두꺼운 추상화 레이어를 두는 것에 막연한 두려움을 느끼고 있다.

무엇보다 프로젝트를 하다 보면 필연적으로 프리렌서와 함께 일을 하게 되는데 배우는데 비용이 많이 드는 기술 때문에 프로젝트에 엄청난 피해를 봤던 경험이 너무 많다. 반면에 롤을 세분화 하기에는 프로젝트 규모가 작다. 대부분 개발자 2-5명이 2-3개월 안에 완료해야 한다. 신입사원 교육 비용도 만만하지 않다.

모 은행 개발 프로젝트에 잠시 투입되었었는데 그 은행에서는 DB 추상화 레이어로 ORM과 SQL Mapper를 준비해 두었다고 한다. 권고하는 것은 ORM이지만 ORM으로 개발하도록 요구했더니 개발자들이 진행을 하지 못해서 결국 SQL Mapper를 추가로 제공할 수 밖에 없었고 대부분 어플리케이션이 SQL Mapper를 사용해서 개발이 되었다고 한다. (나는 iBatis와 jdbcTemplate는 개발 비용이 비슷하고 디버깅은 jdbcTemplate이 쉽다고 생각한다. 적절한 Query Object를 사용하면 동적 SQL 문제도 해결된다.)

마틴 파울러는 개발자들이 SQL을 어려워하고 DB보다 객체 다루기를 더 쉽게 생각하고 있다면서 Domain model과 ORM을 추천하지만 우리나라 개발자들은 DB와 SQL에 친숙한 것 같다. 아직 OOD로 넘어오지 못한 것 같다는 생각이다. 결국 DB를 원본으로 하고 DB와 1:1 구조를 가지고 있으면서 비즈니스 로직을 객체에 분산시키는 Active Record가 필요하다고 판단이 된다.

이런 이유로 프로젝트 이름을 'Last exit for the DB believers'라고 하면 어떨까 생각도 해보았다. (물론 농담이다. ㅡ.ㅡ);

목표 사양
  • Spring jdbcTemplate와 함께 사용한다. (ActiveRowMapper 지원)
  • CoC에 따라 table과 class를 맵핑하되 애노테이션으로 설정할 수 있다.
  • Relationship 지원 belong to, has many (many-to-many 포함) 지원
  • DB schema 자동인식
  • lazy load 지원
  • paging 지원
  • clob/blob 지원
  • criteria 지원
  • 필드 변경 여부 자동인식
아직 생각하지 않는 것
  • join
  • aggregation
  • data cache
  • cascade

by 박성철 | 2008/02/07 13:33 | 프로그래밍 이야기 | 트랙백(1) | 덧글(14)

트랙백 주소 : http://gyumee.egloos.com/tb/1389547
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tracked from 한국스프링사용자모임 K.. at 2008/07/01 01:16

제목 : 프레임워크에 관한 인상적인 글, 두 개
서핑하다가 프레임워크에 관한 인상적인 글 두 개를 봤습니다. 둘 다 봄날포럼[footnote]봄날포럼? 설마 모른다곤 하지 말아주세요[/footnote]에서 부지런히 글 쓰는 이들이라 뿌듯하군요. Application Framework 개발의 원칙 낮에 일하느라 바빠서, 혹은 눈치 보여서[footnote]젠장, 떳떳하게 봐야지 이런 글은[/footnote] 못봤다가 집에 와서 본 글. 짧긴 짧다. 기본적인 이야기지만, 간과할 내용은 아니다. 현......more

Commented by anarch at 2008/02/08 19:26
SpringRecord 라고 하면 어떨까요? 아니면 GenActiveRecord? :-)
Commented by 박성철 at 2008/02/09 23:04
anarch// SpringRecord는 ajax 기술을 응용한 DB 프로그램인가? spring note 처럼... ㅋㅋ
Commented by Loki at 2008/02/10 01:48
엄.......하나도 모르는 내용이어요....... :)
Commented by 박성철 at 2008/02/11 10:27
Loki님// 저도 낙하산 못타요. 응?!
Commented by 박훈 at 2008/02/11 13:36
모... 은행 프로젝트라...
혼자서... 도망가신 그 프로젝트를 말씀하시는거 맞지요??? ㅋ
Commented by 박성철 at 2008/02/11 14:17
박훈님// 일하세요. ㅡ.ㅡ+
Commented by 소내기 at 2008/02/12 13:50
일단 나오면 대박
Commented by 영회 at 2008/07/01 00:49
흥미롭네요... 진행을 KSUG에서 함께 하시는건 어떨까요?
private하게 하시는거라면 중간중간 사연이라도... ^^
Commented by 짱가 at 2008/07/01 11:05
멋집니다.
Commented by 소내기 at 2008/07/01 11:26
일단 다시 봐도 괜찮은것 같음.
Commented by 박성철 at 2008/07/02 21:18
헛! 창피하네요. 바빠서 진행 못 하다가 요즘 다시 손을 좀 대고 있습니다. 벌써 반년동안 아무 산출물도 없으니...ㅋㅋ

어설프게라도 뭐가 나오면 KSUG 포럼에 공개하겠습니다. 애초에 Open Source로 생각하고 만드는 것이니...
Commented by 이근우 at 2012/11/20 14:57
초보가 질문드립니다. 이 포스팅 내용은 activejdbc 를 지칭하는게 맞나요 ??
Commented by 박성철 at 2013/02/16 03:40
아닙니다. 진행하다 그냥 포기했습니다. 제가 쓸 일이 없어졌었거든요. 제가 쓰지 않을 제품을 만드는 건 의미 없다고 생각되서요. (근데 그 다음에 다시 필요해졌... -_-);
Commented by at 2014/10/26 06:26
이 블로그는 내가 귀하의 게시물을 공부 사랑 환상적입니다. 좋은 그림을 계속! 당신은 많은 사람들이 당신이 크게 그들을 도울 수있는,이 정보를 라운드 사냥하고, 인식하고 있습니다.

:         :

:

비공개 덧글

◀ 이전 페이지다음 페이지 ▶