MVVM 응용프로그램을 위한 프로젝트 구조화

MVVM 아키텍처 패턴을 사용할 때 코드의 의존관계를 엄격하게 제한함으로써 구성요소의 잘못된 설계 위험을 줄일 수 있다.

structuring-projects-for-mvvm-application

계속 읽기

MVVM 아키텍처 패턴

MVVM(Model/View/ViewModel) 패턴은 UI를 가지는 응용프로그램을 위한 아키텍처 패턴(architectural pattern)이다. MVVM 패턴은 MVC(Model/View/Controller) 패턴의 변형으로 뷰의 추상화를 만드는 것이 핵심이다. 뷰의 추상화는 재사용할 수 있고(reusable) 테스트하기 쉽다(testable). 뷰의 추상화를 통해 응용프로그램 구조는 단순해지고, 이상적으로, 시각 디자인과 표현 논리를 독립적으로 구현할 수 있다.

모델(Model)과 뷰(View)는 MVC 패턴의 그것들과 동일하다. 모델은 데이터, 비즈니스 논리, 서비스 클라이언트 등으로 구성된다. 뷰는 선언적으로 구성된 UI 요소들을 의미한다. MVVM 패턴을 학습하며 가장 집중해야할 부분은 뷰모델(ViewModel)이다. 아직까지 .NET 언어들과 XAML(eXtensible Application Markup Language, /zæməl/), Blend[1]를 제외하고 MVVM 패턴에 대해 얘기하는 것은 쉽지 않은 일이다. 하지만 나는 이 글에서 특정 플랫폼 언급을 가능하면 자제하고 뷰모델을 중심으로 MVVM 패턴의, 구현이 아니라, 개념적 특징들과 가치를 설명하려 한다.

계속 읽기

캡슐화와 정보 숨김

본능적으로 모호함을 피하려는 프로그래머들 사이에서도 캡슐화(encapsulation)라는 용어의 의미는 명확하지 않다. 가장 많이 사용되는 몇 가지 정의는 다음과 같다.

  • 정보 숨김(information hiding)과 동의어
  • 구현 숨김(implementation hiding)과 동의어
  • 데이터 숨김(data hiding)과 동의어
  • 응집을 통한 새로운 정체성 형성

정보 숨김의 정의는 논란의 여지가 없다. 70년대 초 David Parnas는 어려운 설계 결정과 변경될 가능성이 높은 설계 결정을 파악하는 것으로 모듈화를 시작하라 제안했고 이런 결정들이 다른 모듈로부터 숨겨지는 것을 정보 숨김이라 표현했다.

계속 읽기

두렵다면 테스트를 작성하라

얼마전 페이스북에서 다음과 같은 코드에 null 여부 검사가 필요한지 의견을 묻는 글을 발견했다.

public void MyCode(string param)
{
    if (param != null && TheirCode(param))
        DoSomething();
}

계속 읽기

이벤트 소싱(Event Sourcing) 소개

이벤트 소싱(Event Sourcing)

이벤트 소싱은 도메인 모델에서 발생하는 모든 이벤트를 기록하는 데이터 저장 기법입니다. 이벤트 소싱은 클라우드에서 구동되는 반응형 시스템에 적합하고 규모 확장이 쉽기 때문에 최근 더욱 주목받고 있습니다. 하지만 최종 상태만을 저장하는 기존 방식에 익숙한 프로그래머에게 이벤트 소싱은 낮선 기술입니다. 이 글은 이벤트 소싱을 배울 때 가장 먼저 이해해야하는 기본적인 특성을 설명합니다.

계속 읽기

좋은 디자인과 테스트하기 쉬운 디자인

TDD와 관련된 오해 중 가장 심각한 것은 단위 테스팅과 TDD를 구별하지 못하는 것입니다. 그리고 또 다른 오해가 ‘좋은 디자인’과 ‘테스트하기 쉬운 디자인’의 관계에서도 발견됩니다. ‘좋은 디자인은 테스트하기 쉽다’는 명제에 대한 반론은 찾아보기 어렵습니다. 저도 반례를 경험한 일이 없습니다. 따라서 TDD 과정에서 어떤 코드를 테스트하기 어렵다면 디자인 문제를 의심해 볼 수 있고 이것은 TDD가 주는 나쁜 디자인에 대한 피드백으로 볼 수 있습니다. 게다가 이 피드백은 세부 구현 전에 제공되기 때문에 더 유익합니다. 하지만 안타깝게도 그 역인 ‘테스트하기 쉬운 디자인은 좋다’는 명제는 성립하지 않습니다. ‘좋은 디자인’과 ‘테스트하기 쉬운 디자인’은 동치가 아닙니다. 단순한 사례는 아주 쉽게 만들 수 있습니다.

계속 읽기

CQRS란 무엇인가?

CQRS 오해

CQRS와 그 관련 기술들은 .NET 환경을 중심으로 발전해왔고 점차 Java, Ruby 등의 생태계로 확산되고 있습니다. 국내에서는 아직 크게 주목받지는 않지만 최근 CQRS에 대한 관심이 늘어나고 있습니다. CQRS를 처음 접하는 국내 프로그래머들은 혼란스러워하거나 오해를 하곤 합니다. 비단 이런 현상은 CQRS나 국내 환경에 국한되지는 않습니다. CQRS 말고도 여러 기술들이 확산되는 과정에 맹신과 괴담들이 퍼져왔습니다. 또한 해외 커뮤니티에서도 CQRS의 실체에 대해 혼란스러워하는 모습을 어렵지 않게 볼 수 있습니다. 저 또한 CQRS를 처음 공부할 당시 응용기술에 대한 이해보다 CQRS가 무엇인지에 대해 가장 많이 고민했고 몇 차례 주변에의 질문에도 명확한 답변을 얻지는 못했습니다.

계속 읽기