API 설계 원칙
API의 특수성
- API는 다른 서비스를 개발하기 위한 중간 제품으로 인지된다.
- API가 변화하게 될 때 해당 API를 사용한 모든 서비스에 문제를 야기할 수 있음.
API 설계 원칙
협업 : 다양한 이해관계자들의 충분한 합의가 필요함. 성과 : 가치, 도메인을 중심에 둘 것 (쓸모있는 것) 기술 : 기술 선택은 용도에 맞출 것(기술중심이 아닐것) 약속 : API는 고객과의 약속임. 큰 책임을 고려할것 문서 : 무엇보다 문서가 우선될 것
문서작성의 흐름
개발 중심 흐름
- 개발부터하고 그 결과를 문서로 생성함
- 개발이 변경되면 자동생성기가 문서를 변화시킴
- 문서를 기반으로 개발코드를 만들어야함.
API설계 원칙 흐름
- 5대 원칙에 근거하여 API문서가 먼저 작성됨
- 도메인이나 고객의 변화에 따라 API의 변화가 생겨날
- 실제 개발되는 코드나 언어와 무관하게 문서가 운영됨
개발을 못하는 기획과 할경우 개발자가 API DOC문서작성의 주체가 되어 개발중심으로 되는 경우가 문제임. 기획자가 API설계는 할 줄 알아야함.
문서작성 요령
ADDR프로세스에 따라 작성
-
도메인분석을 통한 작업스토리 추출 및 디지털기능식별(웹으로 가능한지여부) :
-
EX) 나는 무엇에 관심이 있어서 그걸 CALL해서 어떤 데이터를 받는다.
-
EX) 헬스자체는 못하지만 헬스장 운동 기록은 디지털기능으로 가능
-
작업스토리별 액티비티 단계 캡처
-
EX) 절차 프로세스 확인 : 장바구니 담기 -> 포인트사용 -> 결제
-
이벤트스토밍의 네러티브를 이용한 API경계 실별(애그리거트 분리)
-
식별된 바운디드컨텍스트 내의 구체적인 개별 API정의
-
REST구조에 맞는 실제 설계
-
DDD등 여러 기법 동원
-
유저스토리매칭, 작업스토리, 스토리스토밍, 유즈케이스, 예제매핑 등
OPEN API
하나의 규격, 많은 API를 기술 가능하고 사용이 많음.
요청, 응답의 정의
-
메소드 적용을 얼마나 엄격하게 할 것인가? PUT, POST
-
멱등성의 범위를 어떻게 정의할 것인가?
-
요청 변수는 공통 포멧을 적용할 것인가?
-
인증, 인가, 상태를 어떻게 처리할 것인가?
-
모든 응답의 공통포멧을 적용할 것인가?
-
응답의 상태별 공통 포멧을 적용할 것인가?
-
정상응답의 페이로드는 공통 포멧을 적용할것인가? OBJECT? ,LIST?
-
응답코드의 공통 기준을 적용할 것인가?
-
하이퍼미디어를 적용할것인가? (동적 ENDPOINT, 실행해봐야 ENDPOINT를 알 수 있음.)/ 해태우스
도메인주도
- 비지니스를 잘 이해했다 = 돈을 많이 벌고 있다.
- 대부분 돈을 많이 벌고 있지 않음.
- 돈 벌고 있는 대부분도 왜 돈이 벌렸는지 잘 모름
- 사업당사자도 비지니스로서의 도메인을 잘 이해하지 못함.
- 따라서 개발자가 비지니스를 잘 이해한다는건 거의 불가능에 가까움.
개발자가 알 수 있는것
- 관찰해보니 그 일을 실제하고 있음.
- 비지니스 경쟁자가 어떤일을 하고 있음
- 비지니스 관련 법령이나 암묵지로 해야할 일이 있음
비지니스의 구분
- 크게 돈 되는 부분 - 핵심 하위 도메인
- 작게 돈 되는 부분 - 일반 하위 도메인
- 돈 벌려면 해야하는 부분 - 지원 하위 도메인
문제점
- 뭐가 왜 돈 되는지 사업 당사자도 잘 모름
- 핵심 하위 도메인이라고 생각했던게 도메인 자체가 아니었음
- 일반 하위 도메인이라고 생각한 부분으로 회사가 돌아감 ex) 쇼핑몰로 돈벌려고 했는데 AWS로 돈범
- 지원하위 도메인이라고 생각한 부분으로 회사가 돌아감 ex) cs게시판 잘 운영하다보니 cs회사가 독립됨
하위 도메인은 개발하는 방법
- 돈을 벌려면 (개발)비용을 최적화해야 함.
- 비용이 절약되는 구조가
대부분의 핵심 도메인의 내제화는 허상
- 국내 기업 대부분은 핵심 도메인 구현에 외주업체 사용
- 주요 기업의 잉여자본금은 외부 투자사에 위임함.
- 개발 내부에도 많은 외주 인원들이 상주함.
- 더 나아가 ㅎ인공지능 등 핵심 개발물 진행에 주도적인 외주 인원도 많음. ex) ai스타트업 대부분 openAI api임, 오픈소스도 사실상 외주솔루션
- 핵심 도메인은 돈을 벌어야하기 때문에 고도화된 기술을 사용할수록 대응이 느려져 오히려 모순적, 핵심도메인이야말라 saas나 외주의 경연장
유비쿼터스 언어
- 비지니스도메인용어가 투명하지 않음. (새로운 개념의 언어가 생겨남)
- 도메인 전문가가 IT서비스에 대한 이해가 없는 경우가 흔함.
- IT프로젝트를 도메인 전문가가 주도할 수 없음. => 결국 유비쿼터스 언어는 도메인이 IT에 수용되는 형태로 정의됨.
유비쿼터스 그로서리
- 서로 공유하기 쉽고 편집하기 쉬운 온라인 동시 편집환경이 좋음
- 구글 스프레드시트는 누구나 접근하기 좋은 구조
- 그로서리를 가장 많이 사용하는 곳은 기획서 작성임
- 따라서 실질적인 그로서리는 피그마 내부에서 정의되는 경우가 대부분
도메인 커뮤니케이션
- 도메인지식에서 코드로 단반향으로 흐르는 것처럼 묘사
- 실제로는 개발팀의 도메인을 바탕으로 작성된 서비스를 도메인팀이 사용한 피드백을 바탕으로 수정됨
- 애자일 이론에서도 강조하듯 가장 확실한 커뮤니케이션은 제품 출시임.
- 개발팀의 '이거대로 하면 이런 문제가 있는데요? 어 그러네요.'의 과정이 보여짐
- 유비쿼터스 언어는 중복된의미의 단어를 하나로 통합하는 과정 (사용자, 유저, 계정) 개념을 명확하게하지 않고 불러주는대로 만들다보면 위와같이 같은 개념을 다른말로 만들어놓는 불상사 발생
- 도메인 전문가에게 중요한건 도메인이 잘 전달되었나가 아님. 기존의 도메인을 완전 다르게 표현 혹은 다른 기능을 전달해도 그게 도메인 내에서 가치가 있으면 관심있음
스프린트에서 도메인에게 전달할건 도메인 내에서 가치를 발휘하는가