Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

heyday2024 님의 블로그

RESTful API 본문

프론트엔드 부트캠프

RESTful API

heyday2024 2024. 11. 13. 03:46

API란 무엇인가?

  • API(애플리케이션 프로그래밍 인터페이스): 애플리케이션이 서로 정보를 교환할 수 있도록 돕는 규칙입니다. API를 통해 소프트웨어 간의 통신이 이루어지며, 웹 API는 클라이언트와 웹 리소스 간의 연결을 돕습니다.

REST란 무엇인가?

  • REST(Representational State Transfer): API가 동작하는 방식에 대한 일종의 아키텍처입니다. 원래 복잡한 네트워크 상의 통신을 효율적으로 관리하기 위해 설계되었고, 서버와 클라이언트 간의 통신을 안정적이고 유연하게 만들 수 있습니다.

RESTful API의 기본 규칙: 균일한 인터페이스(Uniform Interface)

  1. 리소스 식별: 요청은 고유한 리소스를 식별해야 합니다. URL을 통해 리소스의 위치를 지정합니다.
  2. 리소스 표현: 서버는 리소스의 설명이나 상태를 표현으로 클라이언트에 전송합니다.
  3. 메타데이터 제공: 클라이언트가 리소스를 어떻게 사용할지 알 수 있도록 메타데이터를 전송합니다.
  4. 하이퍼링크 포함: 클라이언트가 추가 리소스를 탐색할 수 있도록 하이퍼링크를 포함해 전송합니다.

예시

  1. 리소스 식별
    • GET /books - 전체 도서 목록을 요청
    • GET /books/1 - ID가 1인 특정 책의 정보를 요청
  2. 클라이언트가 도서 목록을 요청할 때, 각 책은 고유한 URL로 식별됩니다. (ex)
  3. 리소스 표현

서버는 책의 정보를 JSON 형식으로 표현하여 클라이언트에 전달합니다. 예를 들어,GET /books/1 요청 시 서버는 위와 같은 응답을 보낼 것입니다.

  1. 메타데이터 제공

서버는 응답에 메타데이터를 포함해 클라이언트가 이 리소스를 어떻게 사용할지 안내할 수 있습니다. 예를 들어, 책이 수정 가능한지 여부를 알려주는 메타데이터를 포함할 수 있습니다 ({…"editable": true …})

  1. 하이퍼링크 포함

클라이언트가 관련된 다른 리소스를 쉽게 탐색할 수 있도록 하이퍼링크를 포함할 수 있습니다. 예를 들어, 각 책 리소스에 저자 관련 리소스로 이동할 수 있는 링크를 제공할 수 있습니다({… "authorLink": "/authors/10”…})


REST의 주요 특징

  1. 무상태: 각 요청은 이전 요청의 정보를 유지하지 않고 독립적으로 처리됩니다.
  2. 계층화 시스템: 클라이언트-서버 간에 여러 중개자를 둘 수 있어 유연성과 보안을 향상시킵니다. (여러 서버를 거쳐 최종 서버에 전달되는…. 이를 통해 보안이나 로드 밸런싱[네트워크 트래픽을 여러 서버에 효율적으로 분산하여 애플리케이션의 가용성과 성능을 최적화하는 기술] 강화할 수 있습니다.)
  3. 캐시 가능성: 서버 응답을 캐싱해 클라이언트가 자주 사용하는 데이터를 빠르게 접근할 수 있습니다.
  4. 온디맨드 코드: 필요할 때 서버에서 클라이언트로 코드를 전송해 특정 기능을 실행할 수 있습니다. (위에 예시를 확장해서 말하면, 클라이언트가 도서 추가 폼 제출 시 필수 입력 사항 확인하는 코드가 서버에서 전달되는 경우 =⇒ 이를 통해 입력 유효성 검증 돕습니다…)

RESTful API의 장점

  • 확장성: 무상태와 캐싱으로 서버 로드를 줄여 대규모 시스템에서도 효율적으로 작동합니다.
  • 유연성: 클라이언트와 서버 간의 독립성이 보장되므로 각각의 기술을 독립적으로 변경할 수 있습니다.
  • 독립성: 다양한 프로그래밍 언어로 작성 가능하며 클라이언트-서버 간 기술적 영향을 최소화합니다.

RESTful API의 동작 방식

  1. 클라이언트가 서버에 요청을 보냅니다.
  2. 서버가 요청을 인증하고, 요청을 처리한 뒤, 응답을 반환합니다.
  3. 응답에는 요청 성공 여부와 데이터가 포함됩니다.

RESTful API 요청의 구성 요소

  1. 고유 리소스 식별자: URL을 통해 리소스의 위치를 지정합니다.
  2. 메서드: 요청이 수행할 작업을 나타내는 HTTP 메서드
    • GET: 데이터 조회
    • POST: 데이터 생성
    • PUT: 데이터 업데이트
    • DELETE: 데이터 삭제
  3. HTTP 헤더: 요청 및 응답의 메타데이터를 포함합니다.
    1. 예시
      1. Content-Type: application/json - 요청 본문이 JSON 형식임을 나타냄Authorization: Bearer <token> - 인증을 위한 토큰 포함
  4. 데이터: POST, PUT 등의 요청에서 필요한 추가 데이터입니다.
  5. 파라미터: 요청에 대한 추가 세부정보를 제공합니다.
    1. 경로 파라미터: 리소스의 특정 항목을 지정합니다. 예를 들어, GET /books/1에서 1이 경로 파라미터입니다.
    2. 쿼리 파라미터: 요청에 조건을 추가할 때 사용합니다.
      1. 예시: GET /books?author=John%20Doe&year=2023
        1. author=John%20Doe: 저자가 John Doe인 도서 검색
        2. year=2023: 출판 연도가 2023인 도서만 필터링

RESTful API 인증 방법

  1. HTTP 인증: 기본 인증과 전달자 인증이 있습니다.
    • 기본 인증: 클라이언트가 요청 시 사용자 이름과 암호를 함께 전송하여 인증하는 방법입니다. 이 정보는 Authorization 헤더에 Base64로 인코딩(텍스트 데이터를 ASCII 문자로 변환하는 인코딩 방식)되어 포함됩니다.
      • 예시:
        • Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ= ←이런식으로 인코딩…
        • Base64로 인코딩된 username:password가 서버로 전송되어 인증됩니다.
    • 전달자 인증(Bearer Authentication): 서버가 클라이언트에 발급한 토큰을 Authorization 헤더에 포함해 인증합니다.
      • (Bearer 토큰은 서버가 특정 리소스에 접근을 허가했음을 나타내는 암호화된 문자열입니다.)
      • 헤더에 포함되어 전송되므로, 암호화된 네트워크(예: HTTPS)를 사용하는 것이 좋습니다.
      • 예시:
        • Authorization: Bearer <token>
        • 여기서 <token>은 서버가 발급한 고유한 인증 토큰입니다.
  2. API 키: 서버가 클라이언트에 고유한 API 키를 발급하고, 클라이언트는 요청 시 이 키를 전송해 인증합니다.
    • 예시:
      • 클라이언트가 API 요청 시 URL에 키를 포함: GET /books?api_key=12345
      • 또는 헤더에 포함하여 전송: x-api-key: 12345
    • 특징: 비교적 간단하지만 키가 노출될 위험이 있어 보안이 중요한 경우 추가적인 보안 조치가 필요합니다.
  3. OAuth(Open Authorization): 암호와 토큰을 이용해 안전한 인증을 보장합니다.=⇒ 주로 소셜 로그인(예: 구글, 페이스북 로그인)과 같은 높은 보안 수준이 필요한 애플리케이션에 사용됩니다.
  4. 예시: 클라이언트가 서버에 접근 권한을 요청 —> 서버는 클라이언트에게 "액세스 코드"를 발급 —> 클라이언트가 액세스 코드를 서버로 전송 —> 서버는 유효성을 확인 후 "액세스 토큰"을 발급 —> 클라이언트는 액세스 토큰을 Authorization 헤더에 포함—>리소스에 접근가능!

RESTful API 서버 응답의 구성 요소

  1. 상태 표시줄: 요청의 성공 여부를 나타내는 상태 코드(예: 200, 404).
  2. 메시지 본문: 요청된 리소스의 표현, 일반적으로 JSON 형식으로 제공.
  3. 헤더: 응답에 대한 추가 정보가 포함됩니다.

AWS에서 RESTful API 관리

  • Amazon API Gateway는 RESTful API를 쉽게 구축, 배포, 관리할 수 있는 서비스입니다. 이를 통해 API 요청 성능을 최적화하고 인증, 데이터 관리 등을 효율적으로 수행할 수 있습니다.

Amazon API Gateway의 주요 기능

  1. 고속 성능 제공
    • API Gateway는 고성능으로 API 요청을 처리하여 트래픽이 많을 때에도 안정적인 성능을 유지합니다.
    • 사용자는 API 응답 시간을 줄이기 위해 데이터 캐싱을 설정하여 자주 사용되는 데이터를 빠르게 제공받을 수 있습니다.
  2. IAM(Identity and Access Management)과 통합
    • AWS의 IAM(사용자 및 리소스에 대한 접근을 제어하는 서비스)과 통합하여 세부적인 접근 제어를 구현할 수 있습니다.
    • 특정 사용자가 API에 접근할 수 있도록 허가하거나, API 기능을 제한할 수 있습니다. 이를 통해 보안성을 높이고 관리 효율성을 개선할 수 있습니다.
  3. API 버전 관리
    • API Gateway는 API의 다양한 버전을 동시에 관리할 수 있습니다.
    • 새로운 기능이나 업데이트를 테스트할 때 버전을 나눠서 사용할 수 있어, 기존 API에 영향을 주지 않으면서 API를 점진적으로 개선할 수 있습니다.
  4. 모니터링 및 로깅
    • Amazon CloudWatch와 연동하여 API 요청, 데이터 대기 시간, 오류율 등의 지표를 모니터링할 수 있습니다.
    • 실시간으로 API 성능을 추적하고 문제를 조기에 발견하여 해결할 수 있도록 돕습니다.
    • 로깅을 통해 API 호출의 상세한 기록을 유지하여 보안 감사와 디버깅에도 활용할 수 있습니다.