본문 바로가기
  • 시 쓰는 개발자
Spring

API란 무엇인가 (+REST API)

by poetDeveloper 2022. 11. 22.

API란?

sw가 다른 sw로부터 지정된 형식으로 요청하거나, 명령을 받을 수 있는 수단.

어떤 기술이나 제품이 아니라 형식이기 때문에 어떤 언어나 어떤 프레임워크를 쓰든, 어떤 SW를 만들든 이 form에 맞춰서 기능들을 만들면 된다. 하나의 규칙이고, 이름을 짓는 방법론이라고도 생각할 수 있다.

 

 

+추가) 코딩애플님의 유튜브를 보고 참고해서 다시 정리해보았습니다.

출처 : https://www.youtube.com/watch?v=ckSdPNKM2pY 

유튜버 "코딩애플"님의 영상입니다.

 

API란 한 프로그램에서 다른 프로그램으로 데이터를 주고받기 위한 방법이다. API는 식당 메뉴판이라고 생각하면 쉽다. 식당의 API인 메뉴판은 식당과 손님이 음식을 주고받기 위한 방법이다. 만약 웹툰을 보내주는 프로그램이 있다고 하자. 이때 사용자가 드래곤볼 보여달라고 하면 그대로 보여주는게 아니고 웹툰 리스트중에서(신의탑, 외모지상주의, 상남자 ... ETC) 사용자가 선택하는 형식이다.  식당이랑 똑같다. 식당에서도 김치찌개에 밥 한공기 스근하게 말아주이소 하는게 아니고 메뉴판 리스트에 있는 것들 중에서 선택하여 김치찌개 하나 주세요 이렇게 하는 것 처럼 말이다.

 

여기서 자꾸 이야기하는 "방법"이라는 단어는 매우 추상적이다. 이는 사실 코드를 이야기하는 것이다. 다음과 같은 코드가 있다고 하자. 이 코드는 스프링으로 웹툰을 보여주는 컨트롤러를 작성한 것이다. 코드 하나하나를 이해할 필요는 없다.

@Controller
public class WebtoonController {
    
    @Autowired
    private WebtoonService webtoonService; // 웹툰 서비스 클래스 의존성 주입
    
    @GetMapping("/webtoon/list")
    public ModelAndView showWebtoonList() {
        List<Webtoon> webtoonList = webtoonService.getWebtoonList(); // 웹툰 목록 조회
        ModelAndView mav = new ModelAndView("webtoonList"); // 뷰 이름 설정
        mav.addObject("webtoonList", webtoonList); // 조회한 웹툰 정보를 뷰에 전달
        return mav;
    }
}

 

사용자가 위에 적힌 것처럼 /webtoon/list로 url을 치고 접속하면 웹툰 목록이 조회될 수 있게 코드를 짠 것이다. 사용자가 public.... ModelAndView.... mav.addObject..... 이런것들을 이해하고 웹툰을 보려고 사이트에 들어오진 않으니, 우리는 그냥 해당 url을 누르면 행동이 실행되도록 짜놓고 사용자는 그걸 누르기만 하면 되는 것이다. 사용자가 어떤 버튼 혹은 아이콘 등을 누르는 것이 곧 API를 요청하는(ex. GET요청) 행위와 같고, 주소창이 API를 요청하는 곳이라고 생각하면 좋다. 다만 사용자가 위와같이 코드를 다 치지는 않으므로 어떤 버튼을 누르면 혹은 어떤 url을 치면 특정한 행동으로 이어지도록 우리가 설정해놓는 것이다.

 

이러한 API를 만들 때 API가 가지고 있어야하는 필수적인 내용이 3가지 있다.

  1. 어떤 요청이 들어올 것인가?? GET? POST? 데이터를 보낼건지?? 데이터를 달라고 하는건지??
  2. 어떤 자료를 요청할 것인가?? 이를 end point라고 한다. 웹툰? 댓글? 뉴스?
  3. 자료 요청에 필요한 추가적인 정보가 들어갈 수 있다. 사용자의 id, 이름, 아니면 웹툰 몇화인지... 등등
  4. 위 3개 이외에 추가적으로 REST API 원칙에 따라 작성해도 좋다.

API가 꼭 public할 필요는 없다. 네이버 같은 곳들에서 우리가 뉴스를 보고 웹툰을 볼 때 사용하는 api는 public한 api이겠지만, 사내에서만 사용하는 api는 private api로 따로 있다고 한다. 또한, partner api라고 해서 미리 정한 사람들만 사용할 수 있는 api도 있다고 한다.

 

그리고 모든 "프로그램"은 API를 가질 수 있다. 예를 들면 이런 것들이다.

  • 윈도우 API : 이걸 쓰면 윈도우 운영체제의 기능들을 사용할 수 있다.
  • DB 관리 API : 이걸 쓰면 DB 입출력 기능들을 사용할 수 있다.
  • OO 프로그램 API : 이걸 쓰면 OO의 기능들을 사용할 수 있다.

 

여담으로, API가 반드시 무료이진 않다. API를 잘 만들었다면 돈주고 팔 수도 있다. 대표적으로 "네이버 클라우드 플랫폼"이 있다. 여기서 파파고 번역 API 요금을 볼 수도 있다. 일정 글자수를 넘어가면 유료라고 한다. 파파고가 유료라면...이제 영어수업은 망했다. 그 외에 뭐 내용요약 API... 날씨 API... 실시간 환율 API 등도 API마켓에서 팔고있다.

https://www.ncloud.com/product/aiService/papagoTranslation

 

NAVER CLOUD PLATFORM

cloud computing services for corporations, IaaS, PaaS, SaaS, with Global region and Security Technology Certification

www.ncloud.com

Rest API

  • 가장 보편적으로 사용하는 API가 Rest API. 오늘날에 FE에서 서버에 데이터를 요청하거나 배민 앱에서 서버에 주문을 넣는 등에서 널리 사용된다.

Restful하게 만든 api는 각 요청이 어떤 동작이나 정보를 위한 것인지를 그 요청의 모습 자체로 추론이 가능하다.

ex. /class/2 라고 하면 2반인거고,       /class/2/student 라고 2반의 학생들  이런느낌

자원을 구조와 함께 나타내는 형태의 구분자를 URI라고 함. 참고로 URI는 동사가 아닌 명사로 이뤄져야한다. (아래 예시)

동사들로 잘못 작성된 URI
명사들로 바르게 작성된 URI

  • 서버에 RestAPI로 요청을 보낼 때는 http에 따라 전송. RestAPI에선 GET, POST, PUT, DELETE를 가장 많이 쓰고 추가로 PATCH정도가 있음. POST 하나로도 CRUD를 다 할수 있지만 누구든 각 요청의 의도를 쉽게 파악하게 만들기 위해선 이들을 목적에 따라 구분해서 사용해야함.
  1. GET – 데이터를 조회하는데 사용(read)
  2. POST – 새로운 정보를 추가(create)
  3. PUT – 정보를 변경(update), 정보를 “통째로 다” 갈아 끼울 때 사용
  4. PATCH – 정보를 변경(update), 정보 중 “일부”를 특정 방식으로 변경할 때 사용
  5. DELETE – 정보를 지움(delete)

+추가) 이때 PUT과 PATCH 둘다 정보를 업데이트 하는 메소드라서 헷갈릴 수 있다. 이를 참고하길 바란다. https://100won-developer.tistory.com/60

 

PUT과 PATCH의 차이점

PUT과 PATCH는 모두 HTTP 메소드 중에서 데이터를 수정하기 위한 메소드이다. 둘 다 수정을 담당하는 메소드라서 어떤 것을 언제 사용해야하는지 헷갈리는데, 일반적으로 PUT과 PATCH는 다음과 같이

100won-developer.tistory.com

 

'Spring' 카테고리의 다른 글

spring security - 인증 방식에 따른 차이 (세션과 토큰방식)  (0) 2023.01.03
WelcomePage란?  (0) 2022.12.11
서블릿이란? (퍼옴)  (0) 2022.12.08
spring security란  (0) 2022.11.21
MVC패턴과 MVC패턴을 지키는 법  (0) 2022.10.20