2021-03-23(Tue)

항목

내용

학습 날짜

2021-03-23(화)

학습 시간

11:00~23:00

학습 범위 및 주제

TDD

학습 목표

TDD 강의를 들으며 적용방법을 익힌다.

동료 학습 방법

-

상세 학습 내용

현실세상의 TDD by 이규원

TDD를 살펴보기 전에 엔지니어링에 대해 고민해보자.

  1. 이전에 최선이라 여겨졌던 것들이 지금은 최선이 아닌 경우가 많다. 계속 믿고 있는 것들도 안심하고 믿기보다는 더 좋은 도구가 없을까 의심하게 된다.

  2. 과학은 밝혀내고, 엔지니어링은 해결한다. 엔지니어링은 주어진 자원을 고려해서 과학을 이용한다.

    Engineering, the application fo science to the optimum conversion fo the resources of nature to the uses of humankind.

    사례를 들어보자면, 클린 코드라는 표현이 유행한다. 클린 코드에 지나치게 빠져있는 개발자들의 언행을 좋아하지 않는다. 어디에나 통용될 수 있는 보편적인 코드 기준에 대해 얘기하는 것처럼 느껴지는데, 어디에나 획일적이고 보편적인 코드 기준을 도입했을 때 얻을 수 있는 것이 무엇인가를 생각해볼 필요가 있다. 엔지니어로서의 경험상, 항상 제시되는 코드 기준은 계속 높아졌다 낮아졌다해왔다. 상황에 맞는 적절한 기준을 찾고 적용하는 것이 중요하다고 생각한다.

  3. '패턴'에 대해 얘기해보자. 패턴은 알려진 문제의 일반적이고 재사용할 수 있는 해결법이다. 프로그래머가 고유한 문제를 풀더라도 그 곡유한 문제는 좀 더 작은 하위 기술 문제를 가지기 마련이고, 이 작은 기술 문제들 중 많은 일부는 과거 어디에선가 여러 번 반복되고 해결된 적이 있다. 이런 문제는 패턴을 활용하면 효율적으로 해결할 수 있다. 패턴은 '약'에 비유할 수 있다. 증상에 맞게 약을 처방해야하듯 상황에 맞게 패턴을 써야한다. 어디에나 통하는 은탄환은 없기 때문이다.

    Patterns always have two parts: the how and the when - 마틴 파울러

    은탄환이 없는 이유는 아래와 같다.

    • 현장은 무균실이 아니라 야전이다.

    • 프로그래밍은 협업이다.

    • 시스템은 연결된다. 예를 들어 42 API는 왜 저따윈가.. 하더라도 그럴만한 아픈 사정이 있을 수 있다. 어쨎든 그 시스템과 연결된다.

    따라서 완벽한 도구를 준비하는 것이 아니라, 다양한 도구를 준비해서 적절한 도구를 선택해야 한다. 엔지니어링은 거래(trade-off)이다. 더 심각한 문제를 덜 심각하고 감당할 수 있는 문제로 치환하며 앞으로 나가는 것이다.

TDD도 은탄환이 아니다, 다양한 도구 중 하나에 불과하다.

코드 기능 명세

프로그램은 입력과 출력으로 이루어진다. 어떤 입력이 어떤 출력으로 맵핑될 것이라는 기대를 가지고 있다. 이 것이 기능 명세이다.

이 코드 기능 명세는 어디서 출발하는가? 우리는 이 명세가 출발되는 지점을 도메인이라고 부른다. 소프트웨어가 문제를 푸는 도구라고 한다면, 도메인은 소프트웨어가 풀어야 할 문제가 정의되는 공간이다. 문제를 충분히 이해하지 못하면 문제를 푸는 도구를 잘 만들 수 없다.

비즈니스 시스템의 도메인 지식 흐름

비즈니스 전문가 -> 분석가(제품 관리자, 서비스 기획자, 프로그래머) -> 프로그래머 -> 컴퓨터

학습 내용에 대한 개인적인 총평

42 공통 서클의 마지막 프로젝트인 '트렌센던스' 과제가 끝났다. 개인적으로 회고를 진행해보았더니 TDD를 해보고 싶었는데 못한 것이 진한 아쉬움으로 남아있었다.

TDD는 막 은탄환은 아니지만 빠르게 시도하고 실패 후 개선한다는 면에서 필요한 상황에서 바로 적용하고 싶다. 그래서 패스트캠퍼스의 TDD 강의를 수강신청하였다.

다음 학습 계획

  • TDD 학습

Last updated