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

얼마전 페이스북에서 다음과 같은 코드에 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가 무엇인지에 대해 가장 많이 고민했고 몇 차례 주변에의 질문에도 명확한 답변을 얻지는 못했습니다.

계속 읽기

Azure Event Hubs를 이용한 비동기 마이크로서비스 아키텍처

시작하기

Azure Event Hubs는 메시지 스트림을 쉽게 구현할 수 있는 기능들을 제공합니다. 이 글은 Azure Event Hubs로 메시지 스트림을 만들고 분산된 비동기 서비스에 필요한 기반구조를 구축하는 하나의 방법을 제시합니다.

계속 읽기

메시지 스트림을 이용한 비동기 마이크로서비스 아키텍처

시작하기

단일 서비스에서 모든 기능들이 호스팅되는 방식이 하나 둘 씩 만들어내는 문제들을 해결하고자 회사 기술팀은 코드를 몇 개의 서비스로 분리하기로 결정했습니다. 이것을 실천하기 위해 마이크로서비스 아키텍처(microservice architecture)를 학습하면서 동기적인 작업 흐름으로는 달성하기 어려운 요구사항들이 있다는 것을 알게되었습니다. 그래서 메시지 스트림을 이용한 비동기 분산 시스템을 고민하고 학습했습니다. 이 글은 메시지 스트림의 필요성과 기능적 요구사항, 단점 및 보완 방법에 대해 설명합니다.

계속 읽기

단위 테스팅과 통합, 승인, 기능 테스팅

단위 테스팅이란 용어는 자주 사용되지만 유사한 모습을 가진 테스팅 기법들과 자주 혼동됩니다. 용어가 혼동되면 의사소통에 문제가 발생하고 각 용어의 대상이 가지는 특징을 이해할 수 없기 때문에 필요한 곳에 적절한 도구를 사용하지 못합니다. 이 게시물은 단위 테스팅, 그리고 단위 테스팅과 흔히 혼동되는 테스팅 기법 몇 가지를 설명합니다.

계속 읽기