////
Search
Duplicate
8️⃣

8. 제어할 수 없는 것에 의존하지 않기

: 일정을 지키고자 버그가 많은 소프트웨어를 출시하는 것이 마음에 들지 않는다. 어떻게 하면 일정을 연기해서 안정된 소프트웨어를 만들어 내는 것이 더 중요하다고 리더들을 설득할 수 있을까요
⇒ 프로그래머에게 요구되는 것은 100점이 아닌 80-90점짜리 프로그램을 기한 내에 완성하는 일이다. - 나카지마 사토시
: 일정과 퀄리티는 어느 한쪽을 포기해야한다는 시소 관계가 아닌 어떻게 하면 아무리 급해도 80-90점짜리 소프트웨어를 개발할 수 있는지가 중요하다.
: 언어와 프레임워크가 달라져도 변하지 않는 프로그래밍 원칙은 존재한다. 필자가 가장 중요하게 생각하는 원칙은 제어할 수 없는 것에 의존하지 않기
: 이 원칙은 실용주의 프로그래머에서 처음 접하게 되었는데, “현실 세계의 변화와 설계 사이의 결합도를 줄여야 한다. 전화번호를 식별자로 사용하는가? 자신의 힘으로 제어할 수 없는 속성에 의존하지 말라”
: 주민등록번호를 예로 들어보면 대한민국이라는 국가에서 발급한 유일한 값으로 충분히 PK로 사용될 수 있을 것 같지만 1975년 체계변환, 2014년 무분별한 수집 금지 등의 제약으로 수정사항이 발생한다.
: 만약 PK를 직접 만든 키로 사용했다면 법이 바뀌어도 업데이트가 필요하지 않았을 것

코드 설계에 적용하기

: 일요일에 주문 시 10%를 할인해주는 로직을 작성했다고 했을 때, 일요일임을 확인하는 코드가 내부에서 정의된다면 이는 테스트하기가 어려울 것이다.
: 간단하게 이를 외부에서 주입받도록 하자, 그럼 테스트가 쉬워진다.
제어할 수 없는 값에 의존한느 코드들을 최대한 멀리한다. ⇒ LocalDate.now() 등
주요 비즈니스 로직은 모두 제어할 수 있는 값만 의존하게 해 테스트 코드 작성이 쉬운 형태로 구성한다.
: 메서드가 제어할 수 없는 값에 의존하지 않을수록 항상 같은 결과를 반환하는 사이드 이펙트가 적은 메서드가 된다.

조직과 매니징에 적용하기

: 이직 후, 1, 2달 간 가만히 지켜보며 자신이 제어할 수 있는 것과 없는 것을 구분하자.
: 내가 제어할 수 있는 “상호 유대감 쌓기”는 매우 중요, 인간적인 신뢰를 쌓은 후에는 엔지니어링 영역에서 신뢰를 쌓는 작업을 시작, 기존 시스템에 큰 변화를 주지 않으면서도 큰 효과를 줄 수 있는 모니터링, 로깅 시스템을 도입
: 제어할 수 있는 것에 의존해라, 제어할 수 없는 것을 탓하고 가까이 둔다면 비관적일 수 밖에 없다.