하이버네이트 사용시 Association Fake Object라는 기술을 사용해 보세요.

이 기술은 사부 토비님이 알려준 기술입니다.
 
Fake Object라는 이름으로 배운 기술인데 보다 적당한 이름이 생각나서 붙여봤습니다. 유즈케이스를 보여드리자면 Post -> Board 관계에서 Post를 추가하려고 할 때 Post에 Board 객체를 어디선가 setBoard로 묶어줘야 합니다.

그걸 폼을 보여주기 전에 하거나 아니면 폼을 받아서 처리할 때 하거나.. 언젠간 해야되죠. 그럴 때 보통 다음과 같은 코드를 작성하게 될 겁니다.

폼 보여줄 때 세팅할 경우를 생각해보죠.

    @RequestMapping(method=RequestMethod.GET)
    public void add(int boardId, ModelMap model){
        Post post = new Post();
        post.setBoard(boardService.getById(boardId));
        model.addAttribute(post);
    }

결국 저 문장은 서비스 타고 트랜잭션 내에서 DAO로 가서 DB로 가서 board 하나를 select하는 쿼리가 날아가게 합니다. 하지만  Association Fake Object 기술을 사용하면 그 쿼리를 보내지 않고도 아주 잘~ 연관을 맺은 상태로 객체를 저장할 수 있습니다.

Association Fake Object 라는 이름이 이미 사용 중인 용어인지는 모르겠는데, 연관 맺을 때 사용하는 가짜 객체 라는 뜻입니다.

어떻게?? 비밀입니다. 아.. 사실 비밀도 아닙니다. OSAF에서 아주 잘 활용하고 있거든요, 후후훗.

OSAF의 특징

OSAF는 스프링, 하이버네이트 기반 애플리케이션 프레임워크입니다. 라는 다소 두리 뭉실한 소개로는 대체 어떤 특징이 있는지 애매 모호 하실 것 같아서 OSAF가 가지고 있는 특징을 설명하겠습니다.

1. 제네릭 활용

GenericDao는 많이 듣고, 알고, 사용하고 있으리라 생각합니다. 하지만, OSAF에는 하이버네이트 기반의 GenericDao 뿐만 아니라, GenericService, GenericController 기능을 제공합니다. 따라서 GenericDao를 사용했을 때의 장점을 그대로 살려서 Service와 Controller 계층에서도 빠르고 간편하게 CRUD 개발이 가능하다는 것입니다. 또한, GenericPropertyEditor를 제공하여 스프링의 커스텀 프로퍼티 에디터 작성을 지원하고 있습니다. 훨씬 쉽고 빠르게 커스텀 프로퍼티 에디터를 작성하실 수 있을 것으로 생각합니다.

2. 태그 파일 활용

JSP 기반 뷰 코드를 컴포넌트화 하여 태그 파일로 만들었습니다. 이로 인해 JSP를 모르는 사람도 몇 개의 태그만 익히면 빠르게 뷰를 만들 수 있습니다. 이는 곧 생산성으로 직결될 것입니다. OSAF는 add, update, grid, search 등의 기본 뷰와 레이아웃을 제공합니다. 일반적인 JSP 파일이기 때문에, 얼마든지 워하는 대로 커스터마이징이 가능합니다.

3. 스프링 2.5 기반 프레임워크

스프링 2.5의 가장 큰 변화이자 핵심은 애노테이션 활용 극대화입니다. 애노테이션으로 XML 설정을 최소화 했기 때문에, 더
이상 여러 명의 개발자가 빈 설정 파일 하나를 수정해서 커밋하다가 충돌나고 어쩌구 저쩌구 하는 복잡한 일이 벌어질 여지를 최소화
했습니다. 또한, 스프링 MVC의 경우처럼 클래스 상속 구조를 애노테이션으로 대체하여 POJO 개발이 가능하도록 개선된 부분도
있습니다. 컴포넌트 스캔과 오토 와이어링을 비롯한 많이 기능이 애노테이션을 기반으로 하고 있습니다. OSAF는 스프링 2.5가
제공하는 애노테이션 기능들을 매우 잘 활용하고 있습니다.

4. 하이버네이트 기반 프레임워크

하이버네이트를 사용하여 도메인 중심의 개발이 가능합니다. 하이버네이트 기반 DAO를 제공하며, 하이버네이트에 특화된 기능 flush(), clean() 등의 인터페이스를 사용할 수 있습니다. 또한 하이버네이트를 사용하여 DB 교체가 용이하기 때문에 테스트 DB와 실제 배포 환경 DB가 다르더라도 편하게 개발할 수 있습니다.

5. CRUD 초고속 개발

위의 모든 특징들은 바로 이 것으로 귀결 됩니다. 별다른 코드 생성기나 IDE가 없이도, 직접 C&P를 해가면서 5분 이내에 한 도메인에 대한 CRUD 개발이 가능합니다. 여기서 CRUD 개발에 필요한 파일은 전부 12개 정도로, 자바 클래스 8개. 뷰 4개 정도 입니다. 이 코드는 예제 코드를 복사하여 붙여 넣고 find/replace 기능을 사용하여 이름만 바꾸면 작업이 종료됩니다. 컴포넌트 스캔과 애노테이션 활용을 극대화 했기때문에, 빈 설정을 건드릴 필요도 없으며, 하이버네이트 기반이라 테이블을 만들 필요도 없습니다. 태그 파일을 활용했기에 뷰도 정말 간단하게 편집하여 재사용할 수 있며, 제네릭 서비스와 컨트롤러의 역할은 두 말할 필요가 없습니다.

이상이 OSAF의 가장 큰 특징 다섯 가지입니다. 세부적인 기능에 대해서는 차차 또 공개하겠습니다. 급하신 분들은 소스 코드를 다운로드 하여 직접 확인해 보시기 바랍니다. 🙂

ps: OSAF 말고 OpenSprout에 대해 궁금하시다면, 여기를 참조하세요.