군만두의 IT 공부 일지

REST API란? 본문

개발일지/패스트캠퍼스

REST API란?

mandus 2024. 4. 12. 20:47

목차

    📅진행기간: 2024년 2월 5일 ~ 2024년 9월 20일

    ⭐요약


    • REST API 강의를 듣다가, 그래서 'REST API가 뭔데?' 라는 생각이 들어 추가로 공부함.
    • REST API의 정의, 사용 이유, 구성 요소, 특징, 설계 규칙 등을 정리함.

    ⭐REST API란 무엇인가?


    그 전에 API에 대해서 소개하자면, API는 다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙을 정의함. 개발자는 애플리케이션끼리 통신할 수 있도록 API를 표시하거나 생성함.

     

    REST(Representational State Transfer)는 자원(Resource)의 상태(정보)를 표현(Representation)을 통해 전달하는 아키텍처 스타일임. 여기서 자원이란 해당 소프트웨어가 관리하는 모든 것을 의미하며, 예를 들어 문서, 그림, 데이터 등이 있음. 자원의 표현은 그 자원을 참조하기 위한 이름으로, 예를 들어 데이터베이스 내 학생 정보가 자원일 때, 'students'라는 이름으로 그 자원의 표현을 정할 수 있음.

    REST는 클라이언트와 서버 간에 이루어지는 통신 방식 중 하나로, 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하여 웹의 장점을 최대한 활용할 수 있음.

    ⭐REST API 사용 이유


    • 플랫폼 독립적: REST API는 HTTP를 사용하여 통신하기 때문에, 어떤 플랫폼(웹, 모바일, IoT)에서도 사용할 수 있음.
    • 언어 독립적: 다양한 프로그래밍 언어로 구현할 수 있어 시스템의 다양성과 유연성을 보장함.
    • 쉬운 사용성: HTTP 메소드(GET, POST, PUT, DELETE)를 사용하여 자원을 쉽게 관리할 수 있음.
    • 확장성과 유연성: 분리된 클라이언트와 서버, 무상태성, 캐시 가능성 등의 특징으로 시스템을 확장하고 유지하기가 쉬움.

    ⭐REST 구성 요소


    • 자원 (Resource): 모든 자원에는 고유한 URI(Uniform Resource Identifier)가 부여되고, 이는 서버에 저장됨.
    • 행위 (Verb): 자원에 대한 행위는 HTTP 메소드(POST, GET, PUT, DELETE)를 통해 수행됨.
    • 표현 (Representation): 클라이언트가 서버로부터 자원의 상태(정보)를 요청할 때, 서버는 이에 적절한 응답(표현)을 보냄. 이때 데이터는 주로 JSON이나 XML 형식으로 전달됨.

    1. HTTP 메소드

    HTTP 프로토콜은 서버와 클라이언트 간의 통신을 위해 다음과 같은 메소드를 제공하는데, 이 메소드들은 REST API에서 자원을 조작하는 데 사용됨.

     

    GET 자원을 조회하는 데 사용됨. 이 메소드는 데이터를 가져올 때 사용되며, 데이터에 변경을 가하지 않음.
    POST 새로운 자원을 생성할 때 사용됨. 예를 들어, 새로운 사용자 등록이나 게시물 추가 등에 사용됨.
    PUT 기존 자원을 대체하거나 업데이트하는 데 사용됨. 예를 들어, 사용자 정보의 갱신에 사용될 수 있음.
    DELETE 특정 자원을 삭제하는 데 사용됨.
    PATCH 자원의 부분적인 수정을 위해 사용됨. PUT과 유사하지만, 전체 대신 일부만 업데이트할 때 사용됨.
    HEAD 자원의 메타데이터를 조회하는 데 사용됨. GET과 유사하지만, 본문을 반환하지 않고 헤더 정보만을 반환함.

    2. REST API 서버 응답

    서버의 응답은 클라이언트의 요청이 어떻게 처리되었는지를 나타내는 상태 코드와 함께 전송됨. 상태 코드는 요청의 성공 또는 실패 여부를 간략하게 설명함.

    • 200 OK: 요청이 성공적으로 처리되었을 때 반환됨.
    • 201 Created: POST 요청을 통해 새로운 리소스가 성공적으로 생성되었을 때 반환됨.
    • 204 No Content: 요청은 성공적이지만, 서버가 반환할 콘텐츠가 없을 때 반환됨.
    • 400 Bad Request: 서버가 요청을 이해하지 못했을 때 반환됨. 주로 요청 형식이 잘못되었을 때 발생함.
    • 401 Unauthorized: 요청이 인증을 필요로 할 때, 즉 인증 없이 접근하려 했을 때 반환됨.
    • 403 Forbidden: 인증은 되었지만, 자원에 대한 권한이 없는 경우 반환됨.
    • 404 Not Found: 요청한 자원이 서버에 없을 때 반환됨.
    • 500 Internal Server Error: 서버 내부 오류로 요청을 수행할 수 없을 때 반환됨.
    • 503 Service Unavailable: 서버가 일시적으로 요청을 처리할 수 없는 상태일 때 반환됨.

    응답 본문에는 리소스 표현이 포함됨. 서버는 요청 헤더에 포함된 내용을 기반으로 적절한 표현 형식을 선택함.

     

    클라이언트는 데이터 작성 방식을 일반 텍스트로 정의하는 XML 또는 JSON 형식으로 정보를 요청할 수 있음. 예를 들어, 클라이언트가 Mandus이라는 사람의 이름과 나이를 요청하면 서버는 다음과 같이 JSON 표현을 반환함.

    '{"name":"Mandus", "age":30}'

    응답에는 응답에 대한 헤더 또는 메타데이터도 포함됨. 이는 응답에 대한 추가 컨텍스트를 제공하고 서버, 인코딩, 날짜 및 콘텐츠 유형과 같은 정보를 포함함.

    ⭐REST 특징


    RESTful은 REST 아키텍처 원리를 따르는 웹 서비스를 지칭함. 이 아키텍처는 유연하고 확장 가능한 웹 서비스를 구축하는 데 기여하며, 다음과 같은 특징을 포함함.

    • 클라이언트-서버 구조: 자원을 가진 서버와 자원을 요청하는 클라이언트로 구성됨. 각각 독립적으로 작동하며 서로의 세부 구현 내용을 알 필요가 없음.
    • 무상태성 (Stateless): 각 요청은 독립적이며, 서버는 클라이언트의 상태를 저장하지 않음.
    • 캐시 가능 (Cacheable): HTTP 프로토콜의 특성을 활용하여 응답을 캐시할 수 있음.
    • 계층화 (Layered System): 클라이언트는 REST API 서버만 호출하며, 서버는 다중 계층으로 구성될 수 있음.
    • 유니폼 인터페이스(Uniform Interface): 일관된 인터페이스를 통해 정보가 명확하게 전달되고, 시스템 간의 상호 운용성이 보장됨.

    ⭐REST 설계 규칙


    • URI는 자원을 표현해야 함. 자원의 식별은 명사를 사용하여 표현함.
    • HTTP 메소드는 자원에 대한 행위를 명확하게 표현해야 함. (예: GET, POST, PUT, DELETE)
    • URI에는 행위를 표현하는 동사가 포함되지 않아야 함.
    • 슬래시(/)는 계층적 관계를 나타내는 데 사용함.
    • URI 경로의 마지막에는 슬래시(/)를 포함하지 않음.
    • URI는 대소문자를 구분하므로, 경로에는 소문자 사용을 권장함.
    • 하이픈(-)은 URI 가독성을 높이는 데 사용하고, 밑줄(_)은 사용하지 않음.
    • URI에는 파일 확장자를 포함하지 않음.

    ⭐REST API 테스트


    Spring Boot를 사용하여 위에서 언급한 JSON 응답을 반환하는 테스트를 진행함. GET 요청을 처리하여 JSON 형식으로 데이터를 반환할 것임.

    // Controller 클래스
    package com.example.demo;
    
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.http.ResponseEntity;
    
    @RestController
    public class SimpleController {
    
        @GetMapping("/user")
        public ResponseEntity<User> getUser() {
            User user = new User("Mandus", 30);
            return ResponseEntity.ok(user);
        }
    }
    // User 클래스
    package com.example.demo;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class User {
        private String name;
        private int age;
    }

    프로그램을 실행하면 '/user' 경로로 GET 요청을 받았을 때, User 객체를 JSON 형식으로 반환함.

    http://localhost:8080/user

    ▲ Api Test

    ⭐IT 기업에서의 REST API 활용 사례


    REST API는 Microsoft, Google, Kakao 등 IT 기업에서도 널리 활용되고 있음.

    • Microsoft Azure API 디자인 가이드에서는 클라우드 서비스를 위한 REST API 설계 방법을 제공함.
    • Spring가이드를 통해 Java 개발자들이 REST API를 구축할 수 있도록 지원함.
    • Google Cloud문서에서는 인증 및 인증 정보 관리를 위한 REST API 사용 방법을 설명함.
    • Kakao다양한 서비스에서 REST API를 제공하여 개발자들이 쉽게 접근하고 활용할 수 있게 함.

    ⭐후기


    • 이번 기회에 REST API의 기본 개념부터 실제 구현 예제에 이르기까지 폭넓게 다루어 보았음.
    • REST API가 무엇인지, 왜 널리 사용되는지, 그리고 어떻게 구성되는지, 설계 규칙과 실제 코드에 적용하는 방법을 이해할 수 있었음.

    ⭐참고자료


    1) to0, "RESTful API 이란", 2021.03.13, https://velog.io/@somday/RESTful-API-이란
    2) aws, "RESTful API란 무엇인가요?", https://aws.amazon.com/ko/what-is/restful-api
    3) heejeong Kwon, "[Network] REST란? REST API란? RESTful이란?", 2018.09.21, https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
    4) IBM Technology, "REST API 란 무엇입니까?", 2020.10.24, https://www.youtube.com/watch?v=lsMQRaeKNDk
    5) 생활코딩, "기계들의 대화법 - REST API", 2020.11.17, https://www.youtube.com/watch?v=PmY3dWcCxXI

    Comments