"인터페이스가 뭐야?"
나는 자바 강의 시간에 들었던 interface라는 단어를 떠올리며 "어... 인터페이스가... 인터페이스지...?" 정도의 허접한 답변밖에 할 수 없었던 기억이 있다.
그러나 백엔드에서 API는 평생 갈 친구이므로 인터페이스의 개념을 잡아두는 것은 매우 중요하다! 인터페이스가 뭔지 정확히 알아야, 백엔드 개발을 하더라도 API가 왜 필요한지 이해하고 제대로 다룰 수 있을 것이다.
그럼 인터페이스의 개념부터 바로잡아보자!✨
*이 글에서는 자바 언어의 인터페이스는 다루지 않는다. 물론 같은 단어를 쓰는만큼 비슷한 영역에 있겠지만, 지금은 근본적인 인터페이스의 의미와 관련 단어에 대해서만 다루고자 한다 :)
인터페이스(Interface)의 정의를 찾아보면 다음과 같이 나온다.
인터페이스(interface)는 서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면이다. 즉, 사용자가 기기를 쉽게 동작시키는 데 도움을 주는 시스템을 의미한다. 컴퓨팅에서 컴퓨터 시스템끼리 정보를 교환하는 공유 경계이다.
-위키백과
👉 간단히 말해 인터페이스란 일종의 매개체이자 '소통하기 위한 접점'이며, 개발자에겐 통신과 상호작용을 위해 정해둔 약속[명세, 규약, 정해진 틀]의 개념이다.
(+ 여기서 소통은 데이터를 '읽거나 쓰기'라고 이해)
인터페이스는 그 접점 자체가 하드웨어인지, 소프트웨어인지에 따라 하드웨어 인터페이스, 소프트웨어 인터페이스로 구분할 수 있다. 우리가[사람이] 접할 수 있는 인터페이스(UI)를 예시로 들어보자.
하드웨어 인터페이스 | 소프트웨어 인터페이스 |
---|---|
키보드 모니터 리모컨 터치스크린 ... | 배달 어플리케이션 날씨 어플리케이션 ... |
우리가 바로 접할 수 있는 인터페이스의 예시로는, 데이터를 쓰기 위한 키보드/마우스나 리모컨, 데이터를 읽기 위한 모니터, 읽기와 쓰기를 모두 할 수 있는 터치스크린 등이 있다. 이는 모두 인터페이스 중 '하드웨어 인터페이스'에 해당한다. 이와 같이 배달/날씨 애플리케이션도 사용자와 시스템 사이에서 일어나는 소통의 접점으로 하나의 인터페이스이며, 그중 '소프트웨어 인터페이스'에 해당한다.
🤨 흠...
솔직히 여기까지는 '인터페이스'가 아주 와닿지는 않는다. '접점'이고 '약속'인 건 알겠는데, 그래서 그 접점이 개발을 공부하는 나와 무슨 상관인데? 🤷
여기부터는 UI와 API의 개념을 알고, 앞서 익힌 인터페이스의 개념을 적용해 보자.
그럼 인터페이스와 친해질 수 있을 것이다! :D
User Interface, 사용자 인터페이스는 말 그대로 '사용자가 소통하기 위한 접점'이다. 위에서 살펴본 예시인 키보드, 모니터, 배달 애플리케이션 모두 사용자가 시스템과 소통할 수 있도록 하는 매개체이므로 UI에 해당한다.
(+) GUI (Graphic User Interface, 그래픽 사용자 인터페이스)
: 편리한 사용을 위해 입출력 등의 기능을 알기 쉬운 그래픽(아이콘 등)으로 나타낸 UI
UI(User Interface)가 사용자와 맞닿아 있는 인터페이스였다면, API(Application Programming Interface)는 응용 프로그램과 맞닿아 있는 인터페이스, 응용 프로그램이 사용하는 인터페이스라고 볼 수 있겠다.
👉 백엔드 애플리케이션이 프론트엔드 애플리케이션에게 다양한 API를 제공하고, 프론트엔트 애플리케이션이 이를 이용해 사용자에게 UI를 제공하는 흐름이다! 사용자는 UI를 사용해 소통하고, 애플리케이션은 API를 사용해 소통하는 것 :>
일부는 '네가 이걸 선택하면, 내가 이걸 제공할게'를 구현해둔 것이 API이기에 이를 '메뉴판'으로 비유하기도 한다.
다음은 좀 더 직관적인 이해를 위한 예시이다.
참고 영상
우리가 기상청에서 날씨 정보를 얻으려 하는 상황이다.
이를 위해 기상청에서 제공해 준 API의 모습은
http://api.data.go.kr/weather/list
이러하고,
우리가 이 API를 사용하려면
curl http:/api.data.go.kr/weather/list
이런 방식으로 요청(Request)하고,
아래와 같은 응답(Response)을 받는다.{ "today": "2021-04-09", "weather": "맑음" }
위와 같은 형식의 API를 정확히는 "HTTP API" 라고 칭하며, 일반적으로 우리가 말하는 API, 오픈API는 HTTP API이다.
인터페이스란 '소통을 위한 접점'이자 개발자에겐 '상호작용을 위한 약속'이라고 정리할 수 있겠다!
자바에서 다루었던 무언가... 정도로 생각했던 인터페이스와는 완전히 다른 개념이 좋은 방향으로 자리잡혔다 :)