Whiteship's Note


개그경제

모하니?/Thinking : 2008.10.24 23:42




헐헐헐.
top


파트 3: Refactoring Toward Deeper Insight

JEDI/DDD : 2008.10.24 13:05


리팩터링 수준

다른 책들은 너무 로우 레벨로 얘기하는데 그 보다는 도메인에 대한 통찰을 통한 또는 모델이 말하고자 하는 바를 분명하게 하는 것이 시스템의 실용성에 더 지대한 영향을 주는 리팩터링 이라는 이야기..
The refactorings that have the greatest impact on the viability of the system are those motivated by new insights into the domain or those that clarify the model's expression through the code.
Deep Model

모델을 좀 더 심도있게 바라보도록.. 피상적인 모습으로만 축출한 모델이 다가 아니라는거...
A deep model provides a lucid expression of the primary concerns of the domain experts and their most relevant knowledge while it sloughs off the superficial aspects of the domain.
Supple Design

변경을 반영할 수 있는 설계가 되어야 한다.

In a process of constant refactoring, the design itself needs to support change.
Deep Model과 Supple Design은 Model-Driven Design을 뒷받침하는 두 개의 축이다.
A MODEL-DRIVEN DESIGN stands on two legs. A deep model makes possible an expressive design. At the same time, a design can actually feed insight into the model discovery process when it has the flexibility to let a developer experiment and the clarity to show a developer what is happening.
The Discovery Process

좋은 모델을 찾아가는 과정은 개인의 창의성에 달려있기도 하지만, 여러 패턴을 따를 수도 있겠다.
You will usually depend on creativity and trial and error to find good ways to model the concepts you discover, but sometimes someone has laid down a pattern you can follow.

가끔은 이론적인 얘기로 머리를 환기시키는 것도 좋네요.

'JEDI > DDD' 카테고리의 다른 글

[DDD] User-Familly 구현  (0) 2009.06.22
[DDD] Whiteship's DDD 아키텍처 수정  (6) 2009.06.16
[DDD] Whiteship's DDD 아키텍처  (10) 2009.06.12
[DDD] DDD 입문에 좋은 글  (4) 2009.06.11
파트 3: Refactoring Toward Deeper Insight  (0) 2008.10.24
Factories  (0) 2007.12.25
Aggregates  (0) 2007.12.18
Modules  (2) 2007.12.14
Services  (2) 2007.12.13
DAO vs Repository  (4) 2007.12.04
DTO(Data Transfer Object)  (2) 2007.11.21
top


OSAF의 특징

OSAF : 2008.10.24 12:32


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에 대해 궁금하시다면, 여기를 참조하세요.
top


OSAF 빌드하기

OSAF : 2008.10.24 10:49




프로젝트를 받으시면, dist 폴더에 jar 파일이 들어있으니까, 직접 빌드를 하시진 않아도 되지만, 그래도.. 재미삼아 한 번 해보세요.ㅋㅋ

빌드 할 때 주의함 점이 하나 있는데요. 위에서처럼, JDK 버전이 1.6이 아닌 경우에 에러가 날 수 있습니다. 그럴 떄는 pom.xml을 열어서 jdk.version 프로퍼티를 1.5로 수정해주시면 됩니다. 위 동영상에서도 똑같은 현상이 벌어졌으니 참고하시면 되겠습니다.

참고로 OSAF는 JDK 1.5 이상에서만 사용할 수 있습니다. 1.4 이하는... ( --) 몰라요..ㅋㅋㅋ
top


OSAF 다운받기

OSAF : 2008.10.24 08:41


OSAF 소스포지 링크를 클릭하면 다음과 같이 두 개의 파일이 보입니다.


위에 있는 녀석은 OSAF 의존성 라이브러리들을 osaf홈/lib 폴더에 모두 담고 있습니다. 메이븐을 사용하지 않을 때는 거기에 있는 모든 라이브러리를 클래스패스에 추가해서 사용하시면 됩니다.

메이븐을 사용하실 때에는 아래에있는 1메가 남짓의 파일을 받으시면 됩니다.

소스포지를 이용해주시면 다운로드 집계가 되기 때문에 차후에 통계 자료를 참고할 수 있습니다.

한 가지 방법이 더 있는데, 메이븐 리파지토리에 OSAF 메이븐 저장소를 등록하신 다음, 다음의 dependency 설정을 pom.xml에 추가하는 방법이 있습니다.

<dependency>
        <groupId>org.opensprout</groupId>
        <artifactId>osaf-core</artifactId>
        <version>1.0.0-m1</version>
</dependency>

이렇게만 추가하면, 필요한 모든 라이브러리까지 알아서 끌어오기 때문에 매우 편리합니다.

OSAF 저장소를 추가하는 방법도 간단합니다.

<project>
...
    <repositories>
...
        <repository>
            <id>osaf.repository</id>
            <name>OSAF Repository</name>
            <url>
                http://www.opensprout.org:8082/nexus/content/groups/public/
            </url>
        </repository>
...
    </repositories>
..
</project>

top