Framework/Another Lore2009. 3. 7. 20:43


AL의 필요성을 인식하기 위해서는 먼저 코드보다는 배경 사상이 먼저 이해되어야 한다. 오래전에 쓴 글이지만 원본이 없는관계로 다시 쓴다 -ㅅ-

1. 컨텐트는 타입을 가져야 한다.



2. 컨텐트는 관계를 가진다.
흔히 형사 영화에서 형사들이 여러 종류의 파일을 책상위에 짝 펼쳐놓고 담배피면서 인상을 찌뿌리는 장면을 본 적이 있을 것이다. 그때의 형사가 이마의 주름살을 지며 찾는 것은 다름아닌 널려져 있는 사건 정보들간의 관계이다. 관계는 이처럼 눈에 쉽게 보이지 않지만 매우 중요하다. RDBMS에서 관계는 속성으로 취급되는데 몇년전에 이를 좀더 확대해서 관계도 컨텐트다 라는 개념으로 접근하여 코드를 작성했었는데 수개월후 여기저기 개념상의 혼란이 많이와서 관계는 관계일뿐이고 그 자체로 의미가 있다로 수정하였다. (분석단계의 한 문장이 가지는 위력을 다시한번 체감했던 기억이다. )

3. 그룹도 컨텐트다.
보통은 게시판이라는 틀이 있고 게시글이라는 내용이 들어간다고 생각한다. 즉 틀과 내용은 구분되어 있다고 생각한다. 이제 생각을 바꿔보자. 게시판틀 컨텐트와 게시글 컨텐트는 사실 include라는 관계를 맺고 있을뿐 동일한 컨텐트라고 추상화시켜보자. 그렇게 보면 무언인가를 담는 틀 따위같은건 사실 없고 컨텐트와 컨텐트의 관계만 있을 뿐이다. 이 추상화를 통해 보면 여러 로직들이 상당히 간결해진다. 보통 게시판의 리스트와 View화면에서 댓글 리스트 모두 특정 컨텐트와 특정 관계를 가지고 있는 컨텐트의 리스트 일 뿐이다.


4. 컨텐트는 복합적이다.
3조건과 중복되는 얘기처럼 보이지만 여기서 복합적이란 한개 이상의 컨텐트가 동시에 Create되거나 Update되거나 Delete 되는  컨텐트로서 컨텐트지만 항상 다른 컨텐트의 inner컨텐트로 존재하는 컨텐트가 있다는 것을 말한다. 따라서 컨텐트가 교환될때 이를 항상 단수라고 가정해서는 안된다. 예컨데 파일이 첨부된 글의 경우 파일은 자체적인 속성 리스트를 가지고 있기 때문에 파일 자체가 하나의 컨텐트이고 글이란 컨텐트의 inner로 존재하지만 컨텐트의 교환시 항상 같이 참여하게 된다. 이러한 복합 컨텐트를 쪼개다 더이상 쪼갤수 없는 컨텐트를 Leaf 컨텐트라고 하고 Leaf 컨텐트는 속성과 속성값의 리스트를 가지고 있다.


5. 컨텐트는 참조관계수로 중요도를 측정한다.
구글의 페이지 랭크개념과 마찬가지로 컨텐트가 가지는 관계 수는 그 컨텐트의 중요도를 나타내는 지표중의 하나이다. 컨텐트는 상위 include 컨텐트를 가지고 있기 때문에 상위 컨텐트의 관계 수를 토대로 사이트의 중요도도 표시할 수 있다. (사이트도 하나의 컨텐트 이므로)


6. 관계는 타입을 가진다.
컨텐트끼리의 관계는 매우 여러개이며 이중 몇가지는 미리 지정하여 재사용이 가능하다. 예컨대 모든 컨텐트는 최상위 root 컨텐트를 제외하고 이미 존재하는 Parent 컨텐트로부터 create되는데 이때 자동적으로 parent-child 관계를 가지게 된다. 어떤 켄텐트가 다른 컨텐트를 포함하는 틀 개념이라면 이때의 관계는 include 관계라고 할 수 있다. 물론 사용자는 임의의 관계를 맺을 수 있지만 대부분의 관계는 이처럼 기 정의된 관계 타입을 사용하게 된다.


7. 관계는 동적이다.
RDBMS든 ODB든 기존에는 컨텐트간에 맺은 관계는 거의 변하지 않았다. 위키같은 프로그램이 있으니 본질적으로 이들이 정적이다라고 할 수는 없겠지만 AL에서는 기본적으로 관계는 동적이다 라고 정의한다. 어떤 타입의 컨텐트와도 관계를 맺을 수 있으며 생성시기와 상관없이 관계를 맺을 수 있다. 다시말해서 어떤 컨텐트가 생성될때 맺어진 관계뿐 아니라 이후 생존기간 내내 어느 컨텐트와도 다시 관계 설정이 가능하다는 뜻이다.


8. 컨텐트는 다중 관계를 가진다.
컨텐트가 단지 하나의 관계만을 가진다면 이를테면 이전의 게시판 컨텐트와 게시글 컨텐트는 하나의 관계만을 가진다. 그렇기 때문에 게시글은 쉽게 잊혀진다. 접근할수 있는 통로가 단 하나이기 때문이다. "Java로 구현하는 데이타베이스 아키텍쳐" 라는 책이 있다면 이는 자바 책일까? 데이타베이스 책일까? 아키텍쳐 책일까? 아니면 지하철에서 오고가며 읽을 수 잇는 책일까? 정답은 이 모든 분류에 속할 수 있다. 분류라는 것 자체가 철저히 주관적이기 때문에 하나의 분류에 종속이 되면 접근성이 극히 제한된다. 


... 아 생각이 안난다 -ㅅ-;; 몇개 더 있었는데..


간단한 Lore 창조 시나리오 코드를 보면 아래와 같다.
 public void init() throws Exception {
  AnotherLore anotherLore = new AnotherLore() ;   // 새로운 Service Lore가 창조됨
  UserSession session = anotherLore.login(new TestCredential("bleujin"), "com.bleujin.www") ;  // 사용자가 로그인
  Workspace workspace = session.getWorkspace() ;  // 작업 공간을 할당받음
  IGlobalPersistence globalPersistence = workspace.getGlobalPersistence(); // 공용 작업공간을 가져옴

  NodeType object = globalPersistence.createNodeType(NodeType.NO_SUPERTYPE, "_object", new PropertyDefinition[0]) ;  // 0개의 속성타입을 가지는 최상위 노드타입 생성
  Node root = session.createNode(Node.NO_PARENT, OBJECT_TYPE, "/") ;  // 최상위 노드 생성
  session.save() ;
 }

'Framework > Another Lore' 카테고리의 다른 글

와~~~  (0) 2009.04.09
AL - Extreme  (0) 2009.04.04
AL - Code Example  (0) 2009.03.20
AL - Abstraction & Model  (0) 2009.03.13
Framework - AL(개요)  (0) 2009.03.06
Posted by bleujin