GraphQL Mutation 설계하기
두줄요약
GraphQL mutation을 사용자 행동 중심으로 명확하게 설계하는 원칙을 설명했습니다. 단일 input, 고유 payload, 중첩 구조로 버전 없는 확장성을 확보합니다.
구조와 흐름
- 동사 우선 camelCase와 사용자 행동 중심의 명시적 mutation 이름
- mutation마다 단일
input인자와 non-null 고유 입력 객체 타입 구성 - 입력 객체와 payload의 중첩 구조를 통한 스키마 확장 여지 확보
선택 이유
- 범용 mutation보다 UI의 의미 있는 행동에 대응하는 mutation의 높은 명확성
- 단일 input 변수 사용에 따른 클라이언트 mutation 작성 단순화
- mutation별 고유 payload를 통한 반환 데이터·메타데이터 확장 기반
주의할 점
sendEmail(type: PASSWORD_RESET)같은 범용 API의 입력 제약 및 동작 발견성 저하- 단일 객체 직접 반환 시
userErrors,clientMutationId등 후속 필드 추가 제약 - toggle 동작에 상태값을 직접 받는 방식에서 발생하는 불필요한 엣지 케이스
적용해볼 점
- Todo 예제처럼
createTodo,toggleTodoCompleted,updateTodoText의 의도별 mutation 분리 - 현재 필드가 없어도 빈 input 객체와 고유 payload를 유지하는 미래 확장 공간 확보



