흔한 프로그래머 이규원입니다. 반갑습니다.

그게 통합 테스트라고? 정말?

January 16, 2018 Opinion

글을 시작하며 우선 참회한다. 나는 오래 전 mockist였다. 당시의 나를 비롯해 mockist들은 단위 테스팅에 많은 테스트 대역(test double)을 등장시키고 그래야만 단위 테스팅이며 그렇지 않으면 통합 테스팅이라고 주장한다. 하지만...

테스트 주도 개발 실천

October 31, 2017 Dev

테스트 주도 개발 실천 테스트 주도 개발(test-driven development)은 점진적으로 코드를 검증하는 소프트웨어 개발 방법이다. 자신이 작성한 코드의 동작을 직접 확인하는 것은 어쩌면 프로그래머의 기본 미덕이고 테스트 주도 개발은...

비공개 메서드를 테스트 해야 하는가?

September 29, 2017 Opinion

TDD(Test-Driven Development, 테스트 주도 개발)에 익숙하지 않은, 개체지향 프로그래밍 언어를 사용하는, 프로그래머들은 간혹 이런 질문을 한다. 비공개(private) 메서드도 테스트 해야 하는가? 이 질문의 대답은 ‘그렇다’ 또는 ‘아니다’보다 좀...

적은 코드가 항상 더 좋지는 않다

July 16, 2017 Dev

예상했던 일이지만 정적 기록자(static logger) 변수를 그만 사용하자는 의견에 반발이 거세다. 모든 의견에 하나하나 대응해 줄 여유가 없음이 안타깝다. 그 중 다음 한가지 의견에 대해 답해 본다. 우리...

정적 기록자는 이제 그만

July 7, 2017 Dev

수십년간 적응력있는(adaptive) 소프트웨어를 만들기 위한 노력이 지속되고 있다. 우리는 많은 원칙들과 패턴들을 도출했고 또 일부는 퇴출시켰다. 도메인은 가장 높은 적응력을 가져야 하는 소프트웨어 구성요소로 거론되고 있다. 간혹 도메인을...

싱글턴은 정적이지 않다.

July 5, 2017 Dev

얼마전 페이스북에서 많은 Java 프로그래머들이 당연시하게 기록자(logger)를 정적(static)으로 사용하는 것을 비판했는데 비슷한 주장을 하는 다른 분의 글에서 기록자는 인스턴스 범위(scope)에 있지 않다는 반론을 발견했다. 나는 반론 제기자에게 그것은...

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

March 6, 2017 Dev

MVVM 아키텍처 패턴을 사용할 때 코드의 의존관계를 엄격하게 제한함으로써 구성요소의 잘못된 설계 위험을 줄일 수 있다.   모델(Model), 뷰모델(ViewModel), 뷰(View)를 물리적으로 구분된 프로젝트에 분산시켜라. 프로젝트 순환 참조를 금지하라....

MVVM 아키텍처 패턴

March 5, 2017 Dev

MVVM(Model/View/ViewModel) 패턴은 UI를 가지는 응용프로그램을 위한 아키텍처 패턴(architectural pattern)이다. MVVM 패턴은 MVC(Model/View/Controller) 패턴의 변형으로 뷰의 추상화를 만드는 것이 핵심이다. 뷰의 추상화는 재사용할 수 있고(reusable) 테스트하기 쉽다(testable). 뷰의 추상화를...

캡슐화와 정보 숨김

February 28, 2017 Dev

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

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

February 20, 2017 Dev Opinion

얼마전 페이스북에서 다음과 같은 코드에서 null 여부 검사가 필요한지 의견을 묻는 글을 발견했다. public void MyCode(string param) { if (param != null && TheirCode(param)) DoSomething(); }   나는...

이벤트 소싱 소개

February 5, 2017 Dev

이벤트 소싱은 아직 낮선 데이터 저장 기법이지만 클라우드에서 구동되는 반응형 시스템에 적합하기 때문에 주목받고 있습니다. 하지만 최종 상태만을 저장하는 기존 방식에 익숙한 프로그래머에게 이벤트 소싱을 익히고 활용을 극대화하는...

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

January 13, 2017 Opinion

TDD와 관련된 오해 중 가장 심각한 것은 단위 테스팅과 TDD를 구별하지 못하는 것입니다. 그리고 또 다른 오해가 ‘좋은 디자인’과 ‘테스트하기 쉬운 디자인’의 관계에서도 발견됩니다. 좋은 디자인이 테스트하기 쉽다는...

CQRS란 무엇인가?

September 17, 2016 Dev

CQRS 오해 CQRS와 그 관련 기술들은 .NET 환경을 중심으로 발전해왔고 점차 Java, Ruby 등의 생태계로 확산되고 있습니다. 국내에서는 아직 크게 주목받지는 않지만 최근 CQRS에 대한 관심이 늘어나고 있습니다....

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

August 9, 2016 Dev

시작하기 단일 서비스에서 모든 기능들이 호스팅되는 방식이 하나 둘 씩 만들어내는 문제들을 해결하고자 회사 기술팀은 코드를 몇 개의 서비스로 분리하기로 결정했습니다. 이것을 실천하기 위해 마이크로서비스 아키텍처(microservice architecture)를 학습하면서...

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

May 23, 2016 Dev

단위 테스팅이란 용어는 자주 사용되지만 유사한 모습을 가진 테스팅 기법들과 자주 혼동됩니다. 용어가 혼동되면 의사소통에 문제가 발생하고 각 용어의 대상이 가지는 특징을 이해할 수 없기 때문에 필요한 곳에...

스타트업에 취업하기

May 19, 2016 Opinion

박재성님의 ‘최근 구직, 구인 글을 보면서 느끼는 단상’이란 글을 읽었는데 무척이나 공감을 했습니다. 특히 다음 구절에서 생각나는 일화가 있어서 적어봅니다. 다양한 스펙을 쌓는 것에 집중하기 보다 프로그래밍 자체를...

Inversion of Control(제어 역전)

May 14, 2016 Dev

이전 게시물 의존성 역전 원리(Dependency Inversion Principal) 관련 용어에서 Inversion of Control(제어 역전, 이하 Ioc)에 대해 간단히 정리했습니다. 비록 짧지만 제가 알고있는 범위에서 가장 중요한 부분은 설명이 되었다고...

의존성 역전(Dependency Inversion) 관련 용어

May 13, 2016 Dev

의존성 역전(Dependency Inversion)은 모듈간 낮은 결합도(loose coupling)와 테스트 용이성(testability)을 확보하는데 유용한 디자인 방법입니다. 저는 확장 가능하고(scalable) 클라우드 환경에 적응력있는(adaptive) 응용프로그램 디자인을 위해 의존성 역전이 아주 큰 역할을 한다고...

프로그래밍 언어 생산성

May 6, 2016 Dev

얼마 전 페이스북에서 대화하던 중 프로그래밍 생산성에 있어서 누가 개발하느냐가 중요하지 어떤 언어를 사용하느냐는 중요하지 않다는 의견을 들었는데 저는 강하게 반대하는 입장이지만 여건 상 길지 않게 의견을 전달했습니다....

나는 틀렸었다

April 5, 2016 Opinion

얼마 전 팟캐스트 ‘나는프로그래머다’의 페이스북 페이지에 블로그 게시물 하나가 소개되었습니다. 소개된 블로그 게시물의 제목은 ‘Anti-OOP : if 를 피하고 싶어서’이고 반복되는 분기문으로 작성된 코드에 공장(factory)를 사용한 리팩터링을 시도하는...

매개변수 3개는 너무 많은 것일까?

February 11, 2016 Dev

저는 책을 멀리하는 사람이기 때문에 Robert Cecil Martin이 Clean Code에서 이런 말을 했다는 것을 알지 못했습니다. The ideal number of arguments for a function is zero (niladic). Next...

선언적 코드를 사용한 ASP.NET Web API 데이터 검사

May 9, 2015 Blog

일반적으로 선언적(declarative) 코드는 명령형 코드에 비헤 가독성이 높고 테스트하기 쉬우며 코드의 양도 더 적습니다. System.ComponentModel.DataAnnotations 네임스페이스는 데이터를 검사하는 ValidationAttribute 하위 특성(attributes) 집합을 제공하며 이 특성들을 사용하면 데이터의 유효성을...

선언적 코드를 사용한 ASP.NET Web API 데이터 검사

May 9, 2015 Blog

일반적으로 선언적(declarative) 코드는 명령형 코드에 비헤 가독성이 높고 테스트하기 쉬우며 코드의 양도 더 적습니다. System.ComponentModel.DataAnnotations 네임스페이스는 데이터를 검사하는 ValidationAttribute 하위 특성(attributes) 집합을 제공하며 이 특성들을 사용하면 데이터의 유효성을...

Xamarin.iOS 제한된 제네릭 지원

February 28, 2015 Code

시작하기 어쩌다보니 당찮게도 모바일 서비스 스타트업에 CTO(라고 쓰고 ‘기술 잡부’라고 읽는다) 타이틀로 합류한지 몇 달 되었습니다. 그런데 함정은 제가 합류 당시 모바일 개발 경험이 전혀 없었다는 것입니다. 모바일...