본문 바로가기
IT/API

REST API, 쉽게 이해해보자

by Cyber_ 2024. 5. 12.

    REST API란?

    API(Applicaiton Programming Interface)는 간단히 말해 통신 규칙이다. "우리는 어떠한 양식을 사용하여 데이터를 보낼 것인가" 를 정하는 것이다. 이것을 왜 정할까? 같이 일하기 위해서다.
    만약 함께 일하는 A가 '고래 모양의 장난감'을 '고래'라고 B가 '장난감'이라고 부른다면 A가 B에게 '고래'를 가져오라고 해도 B는 그것이 무엇인지 모른다. 단편적인 예 이었지만 함께 일을 한다면 '고래 장난감'이라고 부르기로 약속을 해야 오해가 없을 것이다.
    이와 같이 수많은 데이터가 오가는 어플에서 이러한 약속은 중요한 것이다. 여러 종류의 API가 있겠지만 2000년에 발표되어 안정적으로 사용되어온 REST API에 대해서 알아보고자한다.

    REST 디자인 원칙

    균일한 인터페이스

    요청이 어디에서 오는지와 무관하게, 동일한 리소스에 대한 모든 API 요청은 동일하게 보여야 합니다.
    만약 로그인을 위해 이메일과 패스워드를 요청하는 url '/login'이 있다면 패스워드가 없더라도 아래와 같이

    {
        email: "ehgus8621@gmail.com"
        password: ""
    }

    빈 패스워드라도 보내야 한다는 말이다.

    클라이언트-서버 디커플링

    클라이언트와 서버애플리케이션은 서로 간에 완전히 독립적이어야 합니다.
    요즈음 흔히 '프론트엔드 개발자', '백엔드 개발자'로 명칭이 나뉩니다.
    예를 들어 프론트엔드 개발자가 React를 사용한다면 axios Instance등을 통해 요청을 보내는 컴포넌트를 만들고 백앤드 개발자가 Django, Spring등을 사용한다면 React에서 요청을 수행할 기능과 url들을 만들것이다. 이로써 프론트엔드 개발자는 요청을 보내고 백엔드 개발자는 요청을 수행하는 개발을 진행함으로써 역할과 기능의 분리가 확실히 분리됩니다.
    여기서 핵심은 프론트엔드에서 개발한 클라이언트 쪽에선 요청을 어디로 보내야할지에 대한 url만 알고 있어도 일이 진행되어야 한다는 것이고,
    백엔드에서 개발한 서버에선 요청받은 요구사항 외의 활동이 진행되어선 안된다는 것입니다.(클라이언트에서 옷의 수량을 1에서 2로 바꾸라고 했는데 1에서 2로 바꾸고 옷의 카테고리가 상의에서 아우터로 바뀌면 안되는 다는 것입니다, 원자성)

    stateless

    각 요청에서 이의 처리에 필요한 모든 정보를 포함해야함을 의미,즉, REST API는 서버측 세션을 필요로 하지 않습니다. 만약 "글 삭제"라는 기능을 수행하기 위해 "글의 작성자가 현재 사용자가 동일해야한다."라는 조건이 필요하다면 "글 삭제"기능을 수행하기 위해 서버에 "요청을 보낸 사용자 정보, 삭제할 글의 정보"를 포함시켜 보내야함을 의미합니다.

    캐싱 가능성

    가능한 리소스를 클라이언트 또는 서버측에서 캐싱할 수 있어야 합니다. 또한 서버 응답에는 전달된 리소스에 대해 캐싱이 허용되느지 여부에 대한 정보도 포함되어야 합니다. 이의 목적은 서버측의 확장성 증가와 함께 클라이언트측의 성능 향상을 동시에 얻는 것입니다.
    만약 클라이언트 요청을 통해 상품 목록을 가져왔고 캐싱이 허용되어있나면 이후 동일한 요청에 대해 서버에 요청하지 않고 캐싱된 데이터를 사용함으로써 네트워크 트래픽을 줄이고 성능을 향상시킬수 있습니다.

    계층 구조 아키텍처

    REST API에서는 호출과 응답이 서로 다른 계층을 통과합니다. 통신 루프에는 다른 중개자가 있을 수 있고, 이 중개자와 통신하는 것을 클라이언트나 서버가 알수 없도록 설계합니다.
    예를 들어, Django와 React를 클라이언트와 서버로 두고 개발할 때 미들웨어로 CORS를 두고 통신합니다. 이를 통해 상호작요에 관한 세부 정보를 알 필요가 없으니 개발 중 통신과정에 시간을 많이 들이지 않아도 됩니다.

    코드 온디팬드(선택사항)

    일반적으로 REST API는 정적 리소스를 전송하지만, 특정한 경우에는 응답에 실행 코드를 포함시킬 수 도 있습니다. 이 경우에 코드는 요청시에만 실행되어야 합니다.

    REST API 작동 방식

    • HTTP 요청을 통해 통신을 통한 CRUD(생성, 읽기, 업데이트, 삭제)를 수행
    • 예를들어
      • get: 읽기
      • post: 생성
      • put: 업데이트
      • delete: 삭제
    • 리소스 표현으로 주로 JSON을 사용, 왜냐? 사람과 기계가 모두 읽을 수 있고 프로그래밍 언어에 구애받지 않기 때문

    결론

    REST API란 클라이언트 서버가 완벽히 분리된 환경에서 데이터를 주고 받기위한 규칙이다.

    Reference

    https://www.ibm.com/kr-ko/topics/rest-apis

    'IT > API' 카테고리의 다른 글

    API이란(Restful API, FAST API)?, 부제: API의 역사  (0) 2024.04.07