zero-wiki Help

API 설계 우선 방식에 변경 워크플로 구축

애플리케이션 구축에 앞서 API 정의서를 먼저 정의하는 방식을 API 우선 방식이라고 한다. 굉장히 장점이 많은 방식이지만 그만큼 단점이 많은 방식이기도 하다.

문제 발견

백엔드 담당자가 API 구현을 완료할 때까지 프론트엔드 담당자가 기달려야 하는 이슈와 같이 다른 이해 관계자에게 영향을 주는 이슈는 빨리 발견하는 것이 좋다.

최근에는 적합한 워크플로를 파악하는 데 있어 점점 더 '예술적'이라고 말하며, 새로운 이념이 등장하고 있다. 콘웨이의 법칙에서 말하는 것처럼, 대부분의 문제와 그 해결책은 조직의 구조에서 비롯된다.

API 설계 및 구현에는 조직 구조 전반에 걸쳐 다음과 같은 공통된 관심사가 있으며, 두 명 이상이 API 설계 및 구현에 관련된 상항에서는 고통 관심사가 더욱 극명하게 드러난다.

  • API의 진실에 대한 출처: 항상 합의된 최신 버전의 API를 찾을 수 있는 곳이있어야 한다.

  • 구현 중에 API 설계 변경을 피할 수 없는 문제가 발생할 수 있다. 이런 변경을 이해관계자에게 알일 방법이 필요하다.

  • 변경사항에 대한 논의 후 변경 사항 통합에 대한 합의를 도출할 수 있는 방법이 있어야 한다.

  • 이해 관계자가 마지막으로 API 정의서를 본 이후 어떤 변경사항이 발생했는지 확인할 수 있어야 한다.

API의 진실의 출처는 그 계약 또는 API 정의서다. 코드는 설계를 만족하도록 구현되므로 API 정의서는 'A와 B 중 어느쪽이 맞는가?'에 대한 답을 갖고 있어야 한다.

이슈는 다음과 같다.

  • 최신 API 정의서 확인

  • 변경 제안

  • 변경 비교

  • 변경 수용

변경 논의와 대응 방법

API 설계에 대한 변경은 불가피하다는 사실이 워크플로에서 가장 핵심을 이룬다. 우리가 관심을 갖고 지켜볼 것은 설계 단계에서는 예상할 수 없었고 구현 단계에서 발생하는 변경이다. 때문에 변경은 불가피하다고 가정할 수 있다.

문제는 그 변경을 수용할 수 있는 워크플로를 구축하는 방법이다. 이해관계자는 설계에서 문제를 강조하고, 변경을 제안하고, 변경에 대한 합의를 도출할 수 있어야 한다. 또한 다른 이해관계자에 의해 발생한 변경에도 대응활 수 있어야 한다. 이런 변경은 모두 진실의 출처에 바탕을 두고 있어야 한다. 신뢰할 수 있는 출처가 없다면 유효하지 않은 기능에 시간을 낭비할 수도 있다.

워크플로 엔진으로서의 깃허브

위에서 얘기했던 세 가지 문제를 깃허브를 이용해 해결해 보자.

단일 진실 출처

깃허브는 브랜치를 사용하며 '최신의 가장 높은' 버전을 선택해서 사용할 수 있다. 나중에 특정 기능을 개발할 때 특정 기능 브랜치를 생성하고, 해당 기능에 한해 사용할 수 있지만 궁극적으로는 다시 '최신의 가장 높은'버전으로 병합한다.

변경을 제안하려면 깃 브랜치 안에서 정의서 일부를 수정할 수 있어야 하며, 변경 내용을 main 브랜치에 제안할 수 있어야 한다. 또는 문제는 발견하였지만 API 변경을 못한다면 깃허브에서 이슈를 생성하면 된다.

변경 수용

최소 2명 이상의 동의를 요구한다, 모든 팀원들의 동의를 요구한다와 같이 팀마다 규칙을 다르게 선택할 수 있지만, 많은 사람이 지켜볼수록 실수를 줄일 가능성도 높아진다. 때문에 팀마다 기준을 잘 선택하면 좋다.

깃허브 워크플로 단계

  1. 최신 API 정의서 확인

    • 깃허브 레포지터리를 방문해서 main 브랜치를 확인한다. 확정된 최신 내용은 main 브랜치에서 확인할 수 있다.

  2. 변경 제안

    • 새 브랜치를 생성하고 변경, 새로운 코드를 작성한다.

    • main 브랜치를 대상으로 변경 사유 설명을 포함하는 풀 리퀘스트를 생성한다.

    • 동료 이해관계자를 검토자로 지정한다.

  3. 변경 검토 및 수용

    • 생성 알림을 받으면 검토자는 변경 내용을 검토하고 의견을 작성한다.

    • 문제가 없다면 풀 리퀘스트를 수용한다.

  4. 변경 내용 확인

    • main 브랜치에 변경 내용이 반영되면 자신이 작업중인 내용과 diff하면서 비교한다.

    • 필요한 작업이 있다면 따로 기록해 둔다.

    • 작업중인 브랜치에서 main 브랜치를 머지해서 main내 최신 내용을 반영한다.

Last modified: 08 December 2024