본문으로 이동
Kotlin으로 DSL 만들기: 반복적이고 지루한 REST Docs 벗어나기
문서

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에이전트 개발

문서 정수호/노치현

이 테스트 API들, 왜 QA만 이렇게 어렵게 쓰고 있는 걸까?

소프트웨어 테스트

문서 이준희

REST Docs 를 최소한의 코드로 작성하면서 변화에도 더 유연하게 대처할 수 있는 tosspayments-restdocs 라이브러리와, 라이브러리에 녹인 기술들을 소개합니다.

백엔드 개발 도구

문서 이지윤

디자이너들도 어떻게 하면 빠른 속도를 내며 전체적인 경험을 맞출 수 있을지 매 순간 고민하고 있어요.

UI/UX

문서 김지헌

'추석맞이 선물하기 재개발'에 차출되어 API 문서화를 위해 도입한 Spring REST Docs 를 소개합니다.

백엔드 개발 도구