'도메인-드리븐 디자인'에 해당되는 글 1건

  1. 2011.03.21 소프트웨어 개발과 디자인 패턴 design patterns (2)
소프트웨어 개발과 패턴은 어떤 관계가 있을까요? 초급의 개발에서는 패턴에 대한 필요성 자체를 인지하지 못합니다. 딴 세상 이야기 처럼 말이죠. 개발자들도 중요성 인지가 안되어 있으니 심지어는 '디자인 패턴 design patterns' 책이 그림 코너의 서가에 꽂혀 있던 때도 있었습니다. 책 이름이 '디자인' 이란 이유로 말이죠.  재사용 가능하며 유지관리 가능한 소프트웨어어 대해 고민하기 시작하면, 그때서야 웹어플리케이션, 클라이언트 어플리케이션, 서버 어플리케이션 영역에 관계없이 객체지향디자인과 패턴이 필요하다는 것을 인식하게 됩니다.

소프트웨어 개발은 개발 환경과 구동 환경을 이해하는 것으로 부터 시작합니다. 통합개발환경 IDE Integrated Development Environment 에서 개발하는 것이 가장 쉬운 방법입니다. 닷넷개발자라면 Visual Studio, 자바개발자라면 Eclipse 같은 환경 말이죠. 개발도중 또는 개발된 소프트웨어는 구동될 수 있는 호스트 Host 라는 환경이 필요한데, IDE의 장점은 자체적으로 호스트를 지원해서 구동 환경에 대해 걱정할 필요가 없습니다.

비개발자가 개발이라고 부르는 코딩이라는 작업을 하려면 '언어'라는 무기가 필요합니다.  언어는 칼과 같죠. 요리를 할때는 식칼을, 결투를 할 때는 긴 칼을 사용하 듯이 웹페이지의 화면을 구성할 때는 HTML을, 상호작용을 위해서는 자바스크립트 언어를, 내부 콘트롤을 위해서는 C#등의 언어를 사용합니다. 

언어를 사용하려면 언어의 능력과 특성을 알아야 겠죠. 바로 언어의 사양 specification 입니다. 글 과 문법을 알았다면 이제 시를 써야 겠지요.

프랙탈 : 혼돈 속의 규칙적인 패턴이 자연계 및 생명체를 만들어 내는 것이 소프트웨어의 패턴과 닮았다.



소프트웨어 개발의 목적은 어떠한 문제를 해결하는 것 입니다. 원래의 의도대로 정확하게 구동 되는 것이 가장 첫번째 달성해야 하는 목표라고 할 수 있습니다. 허나 소프트웨어는 구동되는 것 만이 전부가 아닙니다. 잘 개발된 객체지향 소프트웨어가 가져야 할 특성은 구획화 된 모듈성 modularity, 변경을 반영할 수 있는 유연성 flexibility, 요구 추가를 위한 확장성 extensibility, 이 요소들을 갖추고 있으면서도 소프트웨어가 생명주기동안 살아 있을 수 있도록 하는 유지관리성 maintainability 입니다.

언급한 특성들을 갖추게하는 증명된 방법 그 것이 바로 '패턴 Pattern' 입니다.


소프트웨어를 개발하다 보니 구현 코드는 달라도 유사한 문제가 발생하는데, 그 때 패턴을 사용하게 되고, 개발 관련자들 사이에 의사소통 도구로 사용됩니다. 또한 잘 구성된 패턴은 해결하려는 문제가 무엇인지 유추 가능케 합니다.


패턴이라는 것은 어떻게 공부 할 수 있는가?

패턴에는 레벨이라는 것이 존재 합니다.  코드, 클래스, 아키텍처 레벨로 구분할 수 있습니다.

코드 단위의 패턴을 공부할 수 있는 가장 좋은 책은 [켄트 벡의 구현 패턴] 입니다. 코드 단위의 문제해결에는 수많은 방법이 존재합니다. 코드는 컴퓨터, 자신 그리고 동료와의 의사소통 입니다. 정확하게 구동되어야 하고, 군더더기 없이 의도를 밝히는 코드가 좋은코드의 조건이죠. 개발자는 한땀 한땀 작성 할 때 마다 수많은 고민과 선택을 합니다. 좋은 코드의 조건을 만족시키기 위해 말이죠. 켄트 벡의 책은 코드 구현 단위에서의 고민을 덜어 줄 수 있는 패턴을 이 책에 담고 있습니다.

구현 코드를 감싸는 클래스 단위에서 그 유명한 디자인 패턴 Design Pattern 이 등장합니다. 재사용 가능한 소프트웨어 개발에 대한 고민으로 시작된 객체간의 관계 패턴으로 구조 Structural, 생성 Creational, 행위 Behavioral 의 세가지로 구분되어 있습니다. 디자인 패턴을 공부할 수 있는 책들은 다수가 존재하는데 우선 바이블 [GoF의 디자인 패턴 ] 을 빼놓을 수 없습니다. 디자인 패턴은 구현패턴에 비해 어렵습니다. 여러권의 책을 읽어야죠.  마틴 파울러의 [리팩토링]은 구현패턴과 디자인패턴을 커버합니다. 특히 구조적코드 Structural code가 객체적 코드, 디자인으로 어떻게 변경되어야 하는지 체감 수준의 책입니다. 

세번째 아키텍처 패턴입니다. 패키지, 모듈, 레이어 수준의 패턴을 의미합니다. 좋은 책으로는  마틴 파울러 [PoEAA (Patterns Of Enterprise Application Architecture)] 와 좀더 추상화된 설명으로 에릭 에반스의 [도메인-드리븐 디자인]이 있습니다. 여기서 언급되는 것들은 레이어링, 도메인 로직, 데이터베이스 매핑, 어그리게이트, 리파지터리의 개념들 입니다.



코드 단위 
켄트 벡의 구현 패턴, 켄트 벡저/전동환역, ISBN-10: 108960770310

클래스 단위
GoF의 디자인 패턴 : Elements of Reusable Object-Oriented Software, 에릭 감마,리처드 헬름,랄프 존슨,존 블라시디스 공저, ISBN-10:8945072144
Refactoring 리팩토링 : 나쁜 디자인의 코드를 좋은 디자인으로 바꾸는 방법, 마틴 파울러 저/윤성준,조재박 공역, ISBN-10:898793960X


패키지, 모듈, 레이어 단위
Patterns of Enterprise Application Architecture, Martin Fowler, ISBN-10: 0321127420
Domain-Driven Design : Tackling Complexity in the Heart of Software, Eric Evans, ISBN-10: 0321125215


이 블로그의 DDD & PoEAA 카테고리는 아키텍처 수준의 개념과 구현에 대한 글들의 모음 입니다.

### 끝.
저작자 표시
신고

이 글을 Twitter / Facebook 에 공유하기
이 글이 유익하다면 아래의 트위터 버튼을 눌러 공유해 주시거나, 페이스북 "좋아요" 버튼을 눌러 주세요.

   


Posted by 반더빌트


티스토리 툴바