heyday2024 님의 블로그
RESTful API 본문
API란 무엇인가?
- API(애플리케이션 프로그래밍 인터페이스): 애플리케이션이 서로 정보를 교환할 수 있도록 돕는 규칙입니다. API를 통해 소프트웨어 간의 통신이 이루어지며, 웹 API는 클라이언트와 웹 리소스 간의 연결을 돕습니다.
REST란 무엇인가?
- REST(Representational State Transfer): API가 동작하는 방식에 대한 일종의 아키텍처입니다. 원래 복잡한 네트워크 상의 통신을 효율적으로 관리하기 위해 설계되었고, 서버와 클라이언트 간의 통신을 안정적이고 유연하게 만들 수 있습니다.
RESTful API의 기본 규칙: 균일한 인터페이스(Uniform Interface)
- 리소스 식별: 요청은 고유한 리소스를 식별해야 합니다. URL을 통해 리소스의 위치를 지정합니다.
- 리소스 표현: 서버는 리소스의 설명이나 상태를 표현으로 클라이언트에 전송합니다.
- 메타데이터 제공: 클라이언트가 리소스를 어떻게 사용할지 알 수 있도록 메타데이터를 전송합니다.
- 하이퍼링크 포함: 클라이언트가 추가 리소스를 탐색할 수 있도록 하이퍼링크를 포함해 전송합니다.
예시
- 리소스 식별
- GET /books - 전체 도서 목록을 요청
- GET /books/1 - ID가 1인 특정 책의 정보를 요청
- 클라이언트가 도서 목록을 요청할 때, 각 책은 고유한 URL로 식별됩니다. (ex)
- 리소스 표현
서버는 책의 정보를 JSON 형식으로 표현하여 클라이언트에 전달합니다. 예를 들어,GET /books/1 요청 시 서버는 위와 같은 응답을 보낼 것입니다.
- 메타데이터 제공
서버는 응답에 메타데이터를 포함해 클라이언트가 이 리소스를 어떻게 사용할지 안내할 수 있습니다. 예를 들어, 책이 수정 가능한지 여부를 알려주는 메타데이터를 포함할 수 있습니다 ({…"editable": true …})
- 하이퍼링크 포함
클라이언트가 관련된 다른 리소스를 쉽게 탐색할 수 있도록 하이퍼링크를 포함할 수 있습니다. 예를 들어, 각 책 리소스에 저자 관련 리소스로 이동할 수 있는 링크를 제공할 수 있습니다({… "authorLink": "/authors/10”…})
REST의 주요 특징
- 무상태: 각 요청은 이전 요청의 정보를 유지하지 않고 독립적으로 처리됩니다.
- 계층화 시스템: 클라이언트-서버 간에 여러 중개자를 둘 수 있어 유연성과 보안을 향상시킵니다. (여러 서버를 거쳐 최종 서버에 전달되는…. 이를 통해 보안이나 로드 밸런싱[네트워크 트래픽을 여러 서버에 효율적으로 분산하여 애플리케이션의 가용성과 성능을 최적화하는 기술] 강화할 수 있습니다.)
- 캐시 가능성: 서버 응답을 캐싱해 클라이언트가 자주 사용하는 데이터를 빠르게 접근할 수 있습니다.
- 온디맨드 코드: 필요할 때 서버에서 클라이언트로 코드를 전송해 특정 기능을 실행할 수 있습니다. (위에 예시를 확장해서 말하면, 클라이언트가 도서 추가 폼 제출 시 필수 입력 사항 확인하는 코드가 서버에서 전달되는 경우 =⇒ 이를 통해 입력 유효성 검증 돕습니다…)
RESTful API의 장점
- 확장성: 무상태와 캐싱으로 서버 로드를 줄여 대규모 시스템에서도 효율적으로 작동합니다.
- 유연성: 클라이언트와 서버 간의 독립성이 보장되므로 각각의 기술을 독립적으로 변경할 수 있습니다.
- 독립성: 다양한 프로그래밍 언어로 작성 가능하며 클라이언트-서버 간 기술적 영향을 최소화합니다.
RESTful API의 동작 방식
- 클라이언트가 서버에 요청을 보냅니다.
- 서버가 요청을 인증하고, 요청을 처리한 뒤, 응답을 반환합니다.
- 응답에는 요청 성공 여부와 데이터가 포함됩니다.
RESTful API 요청의 구성 요소
- 고유 리소스 식별자: URL을 통해 리소스의 위치를 지정합니다.
- 메서드: 요청이 수행할 작업을 나타내는 HTTP 메서드
- GET: 데이터 조회
- POST: 데이터 생성
- PUT: 데이터 업데이트
- DELETE: 데이터 삭제
- HTTP 헤더: 요청 및 응답의 메타데이터를 포함합니다.
- 예시
- Content-Type: application/json - 요청 본문이 JSON 형식임을 나타냄Authorization: Bearer <token> - 인증을 위한 토큰 포함
- 예시
- 데이터: POST, PUT 등의 요청에서 필요한 추가 데이터입니다.
- 파라미터: 요청에 대한 추가 세부정보를 제공합니다.
- 경로 파라미터: 리소스의 특정 항목을 지정합니다. 예를 들어, GET /books/1에서 1이 경로 파라미터입니다.
- 쿼리 파라미터: 요청에 조건을 추가할 때 사용합니다.
- 예시: GET /books?author=John%20Doe&year=2023
- author=John%20Doe: 저자가 John Doe인 도서 검색
- year=2023: 출판 연도가 2023인 도서만 필터링
- 예시: GET /books?author=John%20Doe&year=2023
RESTful API 인증 방법
- HTTP 인증: 기본 인증과 전달자 인증이 있습니다.
- 기본 인증: 클라이언트가 요청 시 사용자 이름과 암호를 함께 전송하여 인증하는 방법입니다. 이 정보는 Authorization 헤더에 Base64로 인코딩(텍스트 데이터를 ASCII 문자로 변환하는 인코딩 방식)되어 포함됩니다.
- 예시:
- Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ= ←이런식으로 인코딩…
- Base64로 인코딩된 username:password가 서버로 전송되어 인증됩니다.
- 예시:
- 전달자 인증(Bearer Authentication): 서버가 클라이언트에 발급한 토큰을 Authorization 헤더에 포함해 인증합니다.
- (Bearer 토큰은 서버가 특정 리소스에 접근을 허가했음을 나타내는 암호화된 문자열입니다.)
- 헤더에 포함되어 전송되므로, 암호화된 네트워크(예: HTTPS)를 사용하는 것이 좋습니다.
- 예시:
- Authorization: Bearer <token>
- 여기서 <token>은 서버가 발급한 고유한 인증 토큰입니다.
- 기본 인증: 클라이언트가 요청 시 사용자 이름과 암호를 함께 전송하여 인증하는 방법입니다. 이 정보는 Authorization 헤더에 Base64로 인코딩(텍스트 데이터를 ASCII 문자로 변환하는 인코딩 방식)되어 포함됩니다.
- API 키: 서버가 클라이언트에 고유한 API 키를 발급하고, 클라이언트는 요청 시 이 키를 전송해 인증합니다.
- 예시:
- 클라이언트가 API 요청 시 URL에 키를 포함: GET /books?api_key=12345
- 또는 헤더에 포함하여 전송: x-api-key: 12345
- 특징: 비교적 간단하지만 키가 노출될 위험이 있어 보안이 중요한 경우 추가적인 보안 조치가 필요합니다.
- 예시:
- OAuth(Open Authorization): 암호와 토큰을 이용해 안전한 인증을 보장합니다.=⇒ 주로 소셜 로그인(예: 구글, 페이스북 로그인)과 같은 높은 보안 수준이 필요한 애플리케이션에 사용됩니다.
- 예시: 클라이언트가 서버에 접근 권한을 요청 —> 서버는 클라이언트에게 "액세스 코드"를 발급 —> 클라이언트가 액세스 코드를 서버로 전송 —> 서버는 유효성을 확인 후 "액세스 토큰"을 발급 —> 클라이언트는 액세스 토큰을 Authorization 헤더에 포함—>리소스에 접근가능!
RESTful API 서버 응답의 구성 요소
- 상태 표시줄: 요청의 성공 여부를 나타내는 상태 코드(예: 200, 404).
- 메시지 본문: 요청된 리소스의 표현, 일반적으로 JSON 형식으로 제공.
- 헤더: 응답에 대한 추가 정보가 포함됩니다.
AWS에서 RESTful API 관리
- Amazon API Gateway는 RESTful API를 쉽게 구축, 배포, 관리할 수 있는 서비스입니다. 이를 통해 API 요청 성능을 최적화하고 인증, 데이터 관리 등을 효율적으로 수행할 수 있습니다.
Amazon API Gateway의 주요 기능
- 고속 성능 제공
- API Gateway는 고성능으로 API 요청을 처리하여 트래픽이 많을 때에도 안정적인 성능을 유지합니다.
- 사용자는 API 응답 시간을 줄이기 위해 데이터 캐싱을 설정하여 자주 사용되는 데이터를 빠르게 제공받을 수 있습니다.
- IAM(Identity and Access Management)과 통합
- AWS의 IAM(사용자 및 리소스에 대한 접근을 제어하는 서비스)과 통합하여 세부적인 접근 제어를 구현할 수 있습니다.
- 특정 사용자가 API에 접근할 수 있도록 허가하거나, API 기능을 제한할 수 있습니다. 이를 통해 보안성을 높이고 관리 효율성을 개선할 수 있습니다.
- API 버전 관리
- API Gateway는 API의 다양한 버전을 동시에 관리할 수 있습니다.
- 새로운 기능이나 업데이트를 테스트할 때 버전을 나눠서 사용할 수 있어, 기존 API에 영향을 주지 않으면서 API를 점진적으로 개선할 수 있습니다.
- 모니터링 및 로깅
- Amazon CloudWatch와 연동하여 API 요청, 데이터 대기 시간, 오류율 등의 지표를 모니터링할 수 있습니다.
- 실시간으로 API 성능을 추적하고 문제를 조기에 발견하여 해결할 수 있도록 돕습니다.
- 로깅을 통해 API 호출의 상세한 기록을 유지하여 보안 감사와 디버깅에도 활용할 수 있습니다.
'프론트엔드 부트캠프' 카테고리의 다른 글
CORS에 대해서 (2) | 2024.11.14 |
---|---|
[개인과제] 포켓몬 도감 만들 때 참고한 부분(1) (0) | 2024.11.13 |
JavaScript의 History API (0) | 2024.11.11 |
[React 숙련 1주차(7)] Supabase (3) | 2024.11.11 |
[React 숙련 1주차(6)] React Router DOM : hooks, Dynamic Route, useParams, 중첩된 라우트 (1) | 2024.11.07 |