소프트웨어 컴포넌트가 제공하는 인터페이스. 다른 소프트웨어가 그 컴포넌트의 기능을 쓸 수 있게 해준다. 라이브러리든 프레임워크든 플랫폼이든 전부 API로 열린다. 프로그램 사이를 잇는 다리에 해당한다.

세 낱말의 뜻

이름을 쪼개면 뜻이 그대로 나온다. Application은 운영체제 위에서 실행되는 모든 소프트웨어, 곧 운영체제가 아닌 모든 프로그램이다. Programming은 메모리에 올라가 실행될 명령어들의 집합인 프로그램을 작성하는 행위다. Interface는 서로 다른 둘이 정보를 주고받으려고 약속한 규약이다. 합치면 응용 프로그램을 만들 때 쓰는 인터페이스가 된다.

구현과 독립적인 규약

API가 정의하는 것은 구현과 독립적인 사양뿐이다. 어떤 하드웨어인지, 어떤 언어로 짰는지와 무관하게 정보를 주고받는 규약만 정한다.

이 성질에서 나머지가 따라 나온다. 규약이 유지되는 한 구현을 바꿔도 쓰는 쪽은 그대로다. 양쪽이 서로를 몰라도 되므로 인터페이스가 클래스 사이에서 하는 일을 시스템 사이에서 하는 셈이다. 다만 열려 있다고 아무나 쓸 수 있는 것은 아니어서 API에 따라 접근 권한이 필요하다.

같은 발상이 의존관계 역전 원칙PSA에도 있다. 구체적인 것에 기대지 말고 약속에 기대라는 것이다.

층마다 놓인 경계

API를 특정 기술로 좁혀 생각하기 쉬운데 실제로는 층마다 다 있다. 시스템 콜은 응용 프로그램과 커널 사이, 소켓은 응용 프로그램과 TCP/IP 스택 사이, Java API는 내 코드와 표준 라이브러리 사이, REST API는 클라이언트와 원격 서버 사이, 오픈 API는 내 서비스와 다른 회사의 서비스 사이에 있다.

“API”라고 하면 대개 뒤쪽 둘을 떠올리지만 시스템 콜도 소켓도 정확히 같은 것이다. 경계를 긋고 그 너머를 규약으로만 다루는 방식이다.

관련

출처