API, 서비스, 도메인 테스트 및 TDD 에서의 기어비

2022. 12. 24. 22:44·IT
728x90
반응형

API, 서비스, 도메인 테스트 및 TDD 에서의 기어비

테스트 필요 이유

테스트가 있으면 시스템 변경에 두려움이 적어진다. 하지만, 너무 많은 테스트는 코드 변경마다 테스트 코드도 같이 변경되어야 하는 문제가 있다.
테스트의 목적은 코드 변경에서 시스템의 특성을 강제로 유지하기 위해서다.

API 테스트를 작성하면 도메인 모델을 변경할 때 테스트 코드 변경의 양을 줄일 수 있다.

테스트 종류에 따른 얻는 것

구분 API 테스트 서비스 테스트 도메인(모델) 테스트
피드백 적음 - 많음
변경 장벽 낮음 - 높음
테스트 영역 넓음 - 한정

도메인(모델) 테스트

  • 코드와 더 밀접하게 연관되어 작업시 높은 피드백을 받을 수 있다.
  • 테스트 코드를 통해서 도메인에 대한 이해도를 높일 수 있다.

API 테스트

  • 더 높은 수준의 추상화를 사용하므로 세부 설계에 대한 피드백을 받을 수 없다.

높은 기어비와 낮은 기어비

  • 새로운 기능이나 버그를 수정할 때는 도메인 모델의 변경이 생긴다면, 서비스 테스트를 작성하는게 좋다.
    예를 들어, add_stock(), cancel_order() 등 서비스 함수를 작성한다면 서비스 계층 테스트가 더 결합이 적은 테스트를 작성할 수 있다.
  • 새로운 도메인이거나, 프로젝트의 경우에는 도메인 모델에 대한 도메인 테스트를 작성해서 테스트 결과를 통해서 더 나은 피드백을 얻고 더 명확하게 설명해주는 문서를 얻을 수 있다.
  • 처음 자전거를 타면 기어를 저단에 두어야 쉽게 움직일 수 있고, 이후 빠르게 움직이면 높은 기어로 변경해서 효율적인 움직임을 가질 수 있다.
    나중에, 급경사나 장애물 등을 만난다면 기어를 낮추어서 진행해야 한다.

결론

1. 기능당 E2E 테스트는 하나씩 작성한다.

  • API 기능들이 서로 연결되어 잘 작동하는지 확인에 목표

2. 테스트 작성의 대부분은 서비스 계층을 목표로 한다.

  • 서비스 계층의 테스트는 커버리지, 실행 시간, 효율 측면에서 간극 사이를 절충할 수 있게 해준다.
  • 각 테스트 단위는 한가지 기능을 목표로 하고 Edge 케이스를 다루고, 비지니스 로직의 인풋과 아웃풋을 모두 테스트하기에 적절하다.

3. 도메인 모델을 사용하는 핵심 테스트를 적게 작성하고 유지보수 한다.

  • 도메인 테스트는 커버리지가 작고 변경에 깨지기 쉽지만, 피드백이 가장 크며 잘못된 변경을 쉽게 감지할 수 있다.

4. 오류 처리도 다루자.

  • 각 기능의 Happy Case 테스트를 작성하고, 하나의 Edge Case 테스트를 작성하자.
728x90
반응형
저작자표시 비영리 변경금지 (새창열림)
'IT' 카테고리의 다른 글
  • [Jetbrains] Intellij 인텔리제이 Live Template 사용 방법
  • [Kubernetes] OpenLens 설치
  • 알림 서비스 디자인
  • WEB RTC
상쾌한기분
상쾌한기분
    반응형
    250x250
  • 상쾌한기분
    상쾌한기분
    상쾌한기분
  • 전체
    오늘
    어제
    • 분류 전체보기 (251)
      • Python (44)
        • Python (26)
        • Django (6)
        • Flask (4)
        • Open Source (6)
      • Kotlin & Java (5)
        • Spring (2)
        • 프로젝트 (1)
      • Go (11)
      • Database (24)
        • MySQL (21)
        • Redis (3)
      • Infrastructure (2)
        • CDC (4)
        • Kafka (5)
        • Prometheus (2)
        • Fluentd (11)
        • Docker (1)
        • Airflow (2)
        • VPN (2)
      • IT (26)
        • AI (9)
        • Langchain (8)
        • Web (18)
        • Git (8)
        • 리팩토링 (9)
        • Micro Service Architecture (8)
        • Clean Code (16)
        • Design Pattern (0)
        • 수학 (1)
        • 알고리즘 (14)
      • OS (14)
        • Centos (10)
        • Ubuntu (3)
        • Mac (1)
      • Search Engine (2)
        • ElasticSearch (1)
        • Lucene Solr (1)
      • PHP (2)
        • Laravel (1)
        • Codeigniter (1)
  • 블로그 메뉴

    • Github 방문
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    티스토리챌린지
    docker
    prompt
    go
    Redis
    백준
    git
    오블완
    python
    Langchain
    CDC
    파이썬
    http
    Golang
    MYSQL
    performance
    fluentd
    ollama
    LLM
    Kafka
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
상쾌한기분
API, 서비스, 도메인 테스트 및 TDD 에서의 기어비
상단으로

티스토리툴바