Kotlin으로 DSL 만들기: 반복적이고 지루한 REST Docs 벗어나기
한규주 토스 · 토스 기술 블로그
AI 핵심 요약
REST Docs는 API 통합 테스트와 인터페이스 변경 감지에 유용하지만, 문서마다 반복적이고 장황한 테스트 코드를 작성해야 하는 문제가 있었습니다. 이를 줄이기 위해 Kotlin의 infix 함수와 Field 래퍼를 활용해 필드 타입, 설명, 기본값, 포맷, 샘플 등을 자연어에 가까운 형태로 선언하는 DSL을 만들었습니다. 날짜·날짜시간과 enum을 별도 타입으로 다루고 Field 함수 체이닝을 지원해 문서 정의를 간결하고 읽기 쉽게 구성했습니다. 글은 반복 작업을 복사해 해결하기보다 팀의 도메인과 규칙에 맞는 DSL을 만들어 생산성과 코드 가독성을 함께 높일 수 있다고 제안합니다.
- Kotlin의 infix 함수는 receiver와 인자 하나를 자연어처럼 연결해 간결한 DSL을 만드는 데 적합합니다.
- REST Docs의 필드 타입을 감싸는 도메인 타입을 두면 날짜·날짜시간 형식과 enum 예시를 일관되게 표현할 수 있습니다.
- Field를 반환하는 DSL 함수에 설명, 기본값, 포맷, 샘플 설정을 체이닝하면 필드 정의를 읽기 쉽게 구성할 수 있습니다.
- DSL은 내부 구현을 감추되 팀에서 사용하는 REST Docs 속성과 규칙을 명확히 드러내도록 설계해야 합니다.
소개
토스페이먼츠에서는 API docs를 REST Docs를 사용해서 작성할 수 있도록 권장하고 있습니다. 이 글에서는 DSL을 통해서 반복적인 REST Docs 테스트 코드 작성을 줄일 수 있는 방법을 알아봅니다.
비슷한 학습 자료
컨퍼런스 우아콘 2022
Kotlin은 기존 Java 코드와 100% 상호 운용성을 지원합니다. 그렇기 때문에 기존 라이브러리와 프레임워크를 문제없이 사용할 수 있습니다. 하지만 비즈니스 로직을 작성할 때는 Kotlin 코드에 설레면서도 테스트 코드를 작성하기 위해 Java 라이브러리와 프레임워크를 만나면 Kotlin에 대한 설렘이 사라집니다. 이번 발표에서는 단위 테스트부터 인수 테스트까지 Kotlin에 대한 설렘을 유지하는 방법을 공유합니다. [발표자 소개] 박재성(제이슨) | 테크코스교육개발팀 좋은 코드에 관심이 많으며, 1년이 지나도 10년이 지나도 변화에 대응할 수 있는 코드를 추구합니다. 어떻게 하면 도메인을 깊이 이해하고 더 나은 소프트웨어를 개발할 수 있을지 여러분과 공유하고 싶고, 항상 고민하고 있습니다.
프로그래밍 언어 소프트웨어 테스트 TDD
문서 한주연
The Toss Frontend team no longer has to dig through documents to find what they need. We’re building an environment where developers can get immediate answers to their questions through docs and AI. Here’s how we built a new documentation system that lets developers focus entirely on development.
프론트엔드 AI에이전트 개발
문서 정수호/노치현
토스인컴 QA Platform: ‘누구나 테스트할 수 있는’ 도구의 시작
문서 이지윤