API개념을 공부하기 위해 자료를 찾아봤는데, 많은 자료에서 API는 메뉴판이라는 비유로 설명을 하고 있었다.
메뉴판이라는 비유가 API라는 개념에 처음 접근하기에 친숙하고 가벼우면서도, 뭔가 개인적으로는 머리에 막 와닿지는 않았다. 이참에 많이 알려진 설명들에 내가 공부하면서 이해한 내용을 추가해서 정리해보려 한다.
API란?
사전적인 정의
- 서로 다른 프로그램들 사이에서 데이터를 주고받기 위한 방법 , 애필리케이션에서 데이터를 읽거나 쓰기 위해 사용하는 인터페이스
설명
- 식당가서 요리사한테 , “ 야채 썰고 , 기름에 넣어서 야채기름 낸 다음 , 고기 썰어서 같이 볶고 , 마지막으로 밥 넣고 볶아서 가져와주세요” 라고 하진 않는다.
- 그냥 [메뉴판]을 보고 종업원에게 “[볶음밥] 주세요” 하지
- 여기서 [메뉴판]이 API , [볶음밥]은 사용자가 원하는 데이터다.
- 이렇게 API를 이용하면 내부에서 복잡한 구현사항을 감추고 외부에서 간단하게 원하는 데이터를 받을 수 있다.
- 개발자는 프로그램을 만들 때 사용자에게 데이터를 제공하기 위해 API을 만들어야 한다. 만약 만들지 않았다면 , 프로그램은 사용자에게 서비스를 제공할 수가 없다. ( 일반적으로 메뉴판이 없다면 주문을 못한다.)
- 예시) 중식전문 음식점에서 메뉴판을 안만들었다. → 손님이 와서 프랑스 코스요리를 해달라고 한다. → 해줄 수 있는게 없다. → 음식점 망한다.
- 웹 서비스에서의 API는 사용자와 서버가 데이터를 주고 받는 정확한 방법이다.
- 웹에서 사용자가 API를 동작시킨다는 말은 코드를 동작시킨다는 말과 같다고 볼 수 있다. 그럼 사용자는 어떻게 코드를 동작시킬까? 그 방법은 특정 URL로 요청을 보내는 것이다. 요청이 개발자가 만들어 놓은 코드에 맞다면, 코드는 정상적으로 작동해서 사용자에게 데이터를 전달해준다.
- 아래는 간단한 예시이다. ( .../foods로 get요청이 들어오면 음식 리스트 데이터를 전달해주는 코드 )
@Controller
@RequestMapping(value = "/foods")
public class FoodController {
...
@GetMapping("")
@ResponseBody
public List<FoodDTO> showFoodList(){
return foodService.showList();
}
...
}
- API 동작 요청을 보내는 방법
- method = 어떤 요청을 할건지 get,post 등등
- endpoint = 어떤 데이터를 요청할 건지 = 보통 url형식
- parameter = 자료요청에 필요한 추가 정보 = 자신의 아이디 , 페이지 번호 등등
- 사실 데이터를 받기위해서는 사용자도 코드를 짜야한다. 이게 무슨 소리냐? 우리는 우리도 모르게 코드를 짜고있었다는 얘기다.
- 우리는 평소에 “브라우저”라는 도구를 이용해서 API요청을 계속 하고 있다.
- 브라우저 상단에 주소 적는 곳 = API 요청 코드 짜는 곳
- 일반적으로는 API를 적진 않고, 웹 사이트에 개발자가 만들어놓은 UI(버튼,검색창 등등)를 이용해서 API 요청을 한다.
즉, 버튼 클릭, 검색어입력+enter 등등 우리가 웹에서 하는 여러 입력들은 대부분 API요청으로 이어진다는 것이다.
오픈API란?
- 말 글대로 사람들에게 오픈해 놓은 API다.
- 그럼 왜 기업들은 기껏 만들어 놓은 API를 오픈하는가? 그 이유는 다양한 개발자들이 오픈API를 가지고 독창적이고 재미있는 프로젝트를 만들 수 있고, 그로 인해 궁극적으로 회사,서비스의 커뮤니티에 많은 기여를 하기 때문이다.(물론 이외에 더 많은 이유들이 있을 수 있다.)
- 하지만 항상 무료일 필요는 없다.
- 요즘에는 오픈API를 사용량에 따라 요금을 받고 지원하는 서비스도 많다. (아래는 예시)
- 네이버 클라우드 플랫폼에서는 제공하는 API 유료로 이용할 수 있게 해놨다.
- 네이버 클라우드 플랫폼에서는 파파고가 일정 글자까지 무료고 넘어가면 유료
- 요즘 유명한 chatGPT도 API를 유료로 사용할 수 있다.
참고자료
( 부족한 부분이나 수정해야 할 부분을 알려주시면 매우 압도적으로 감사하겠습니다! )
'CS' 카테고리의 다른 글
소켓이란? (0) | 2023.12.19 |
---|---|
자바 인코딩의 원리 (2) | 2023.11.08 |
추상클래스와 인터페이스 (0) | 2023.05.29 |
[프로그래밍 패러다임] - 함수형 프로그래밍 (2) | 2023.05.15 |
Spring DI 방법들 (0) | 2023.04.20 |