더북(TheBook)

3.1.2 마이크로서비스 API 정의

API와 인터페이스는 소프트웨어 개발의 핵심입니다. 애플리케이션은 여러 모듈로 구성되며, 각 모듈마다 자신의 클라이언트가 호출하는 작업이 정의된 인터페이스가 있습니다. 잘 설계된 인터페이스는 유용한 기능은 표출하되 그 구현체는 감추어져 있기 때문에 클라이언트에 영향을 미치지 않고 코드를 고칠 수 있습니다.

모놀리식 애플리케이션은 대부분 프로그래밍 언어에 맞게 인터페이스를 지정합니다. 가령 자바 인터페이스는 클라이언트가 호출하는 메서드 목록이 정해져 있고, 클라이언트는 구현체 클래스를 직접 바라볼 수 없습니다. 자바는 정적 타입 언어(statically typed language)1이기 때문에 클라이언트와 인터페이스가 달라 호환되지 않으면 컴파일 자체가 안 됩니다.

마이크로서비스 아키텍처에서는 API와 인터페이스가 똑같이 중요합니다. 서비스 API는 서비스와 그 클라이언트 간의 약속입니다. 클라이언트가 호출 가능한 작업과 서비스가 발행하는 이벤트로 구성되죠(2장). 작업에는 이름, 매개변수, 반환형(return type)이 있습니다. 타입과 필드를 가진 이벤트는 메시지 채널에 발행됩니다(3.3절).

문제는 서비스 API가 단순한 프로그래밍 언어의 일부가 아니라는 점입니다. 정의상 서비스와 클라이언트는 함께 컴파일되지 않습니다. 따라서 새 버전의 서비스가 호환되지 않는 API에 맞물려 배포되어도 컴파일 에러는 안 나고 런타임에 조용히 실패할 것입니다.

 

 


1 역주 : 데이터 타입, 즉 자료형이 컴파일 타임에 결정되는 언어(예: C, C++, C#, 자바)를 말합니다. 반면 자바스크립트, 파이썬 등의 동적 타입 언어(dynamically typed language)는 코드 실행 시, 즉 런타임에 타입이 결정됩니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.