pile·
백엔드·마켓컬리마켓컬리 Hello World·

BDD로 테스트에 중독되어 보자

팀 기술 모임에서 BDD를 접한 뒤 적립금 만료일 계산기를 예제로 테스트 표현을 다듬은 짧은 실험기다. 한 번에 테스트 하나만 작성하고, 페어 프로그래밍으로 시작한 결과를 Pull Request와 팀 리뷰를 통해 읽기 쉬운 계층형 시나리오로 개선했다. BDD의 도구보다 정책을 자연어로 정확히 표현하는 능력이 중요하다는 결론을 남긴다.

핵심 포인트
  • BDD의 계층형 테스트 결과가 기능 정책을 읽기 좋게 보여준다는 점에서 실험을 시작했다.
  • 테스트 대상은 지급일 기준 다음 해 분기 말일, 다음 해 같은 날, N일 후라는 세 가지 적립금 만료 정책이었다.
  • 한 번에 하나의 테스트만 작성하는 규칙으로 사례와 기대 결과를 작게 검증했다.
  • 첫 결과는 계층 구조가 있어도 문장이 어색해 의도가 잘 읽히지 않았다.
  • 페어 작업 뒤 PR과 팀 리뷰를 거쳐 정책 문장을 더 명확하게 다듬었다.
상세 정리
  • 도입: 매주 기술 이야기를 나누는 자리에서 사내 위키의 BDD 정리와 계층형 테스트 결과 화면을 접했다.
  • 첫 적용: BDD 경험자와 페어로 단순한 기능부터 테스트를 작성했다.
  • 정책 1: 지급일의 다음 해에서 같은 날짜가 속한 분기의 마지막 날을 만료일로 계산한다.
  • 사례: 2020년 1월 1일 지급분은 2021년 3월 31일, 2020년 4월 1일 지급분은 2021년 6월 30일이 된다.
  • 정책 2·3: 다음 해 같은 날짜, 또는 지급일로부터 N일 뒤를 각각 만료일로 계산한다.
  • 작성 규율: 여러 경우를 한 번에 만들지 않고 테스트 하나를 작성해 통과시킨 뒤 다음 사례로 넘어갔다.
  • 첫 피드백: 결과가 계층형이지만 영문과 문장 구성이 섞여 정책을 빠르게 이해하기 어려웠다.
  • 개선: Pull Request에서 더 많은 팀원의 의견을 받고 테스트 설명을 자연스러운 한국어 시나리오로 다듬었다.
  • 결론: BDD는 테스트 출력 형식만의 문제가 아니다. 도메인 규칙을 정확한 문장과 사례로 표현할 때 읽기 좋은 명세가 된다.
왜 읽나작은 날짜 정책을 BDD로 옮기며 테스트 이름과 시나리오 문장을 팀 리뷰로 개선하는 가벼운 시작점을 찾는 개발자에게 맞는다.
마켓컬리
마켓컬리 Hello World 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 백엔드·github-engGitHub Engineering·

    조기 종료를 없애야 벡터화된다 — 메모리 속도 소스 코드 케이스 폴딩

    GitHub의 코드 검색 엔진 Blackbird는 480TB 이상의 소스 코드를 인덱싱하기 전 모든 바이트에 case folding을 적용한다. 이 글은 Rust로 구현한 case folding을 메모리 대역폭 한계(45+ GiB/s)까지 끌어올린 두 가지 반직관적 최적화를 상세히 다룬다. 핵심은 루프 조기 종료(break) 제거로 LLVM 벡터화를 유도하고, UTF-8을 디코딩하지 않고 바이트 공간 산술만으로 fold를 수행하는 것이다.

    #rust#unicode#simd+2
  2. 백엔드·여기어때 (GC컴퍼니)여기어때 (GC컴퍼니)·

    트랜잭션 스크립트에서 숙소 메타 + 가격 계산 모듈로 — 전시 아키텍처 개선기 (2/3)

    여기어때 전시개발팀이 숙소 상세(PDP) API를 해부한 결과, 코드상으로는 DB 호출 3번처럼 보이던 요청이 실제로는 MongoDB $lookup 체인으로 컬렉션을 19회 접근하는 구조였다. 이 트랜잭션 스크립트 방식의 핵심 문제는 "aggregation이 I/O를 가린다"는 점으로, 독립적인 쿼리 10개가 단일 파이프라인에 직렬화되어 병렬화 기회를 잃고, 가격 때문에 거의 안 바뀌는 이미지까지 매 요청마다 읽어야 하는 읽기 증폭이 발생했다. V3에서는 "조회 시점 조립"을 "쓰기 시점 사전 조립"으로 전환하고, 화면별로 복제되던 가격 계산 로직을 goodsprice 단일 모듈로 수렴했다. 4개 API(PLP/PDP/RDP/ILP)의 반복 마이그레이션은 Claude Code skill로 절차를 고정하고 쉐도잉 + 동일성 검증으로 안전망을 마련하는 방식으로 진행됐다.

    #architecture#migration#caching+2