0. 개요
프론트엔드 면접 준비를 하면서 "RESTful API에 대해 설명해주세요."라는 질 높은 답변을 하기위해 정리한 글입니다.
답변은 간단하고 명확하게 해야하지만 단순하게 암기해서 답변하는 것보다는 상세지식을 제대로 아는 상태에서 답변을 하는 것이 더 좋은 답변을 이끌어 낼 수 있다고 생각되어 이렇게 정리하였습니다.
1. API란?
API(Application Programming Interface) 둘 이상의 컴퓨터 프로그램이 요청, 응답을 할 때, 어떻게 통신할지 어떻게 데이터를 주고받을 지에 대한 방법(HTTP vs HTTPS, JSON vs XML, GET, POST… )이 정의된 중계계층을 말한다.
예를 들어, 기상청의 소프트웨어 시스템에는 일일 기상 데이터가 들어 있습니다. 휴대폰의 날씨 앱은 API를 통해 이 시스템과 ‘대화’하여 휴대폰에 매일 최신 날씨 정보를 표시합니다.
API 종류
1) SOAP API
이 API는 단순 객체 접근 프로토콜을 사용합니다. 클라이언트와 서버는 XML을 사용하여 메시지를 교환합니다. 과거에 더 많이 사용되었으며 유연성이 떨어지는 API입니다.
2) RPC API
이 API를 원격 프로시저 호출이라고 합니다. 클라이언트가 서버에서 함수나 프로시저를 완료하면 서버가 출력을 클라이언트로 다시 전송합니다.
3) Websocket API
Websocket API는 JSON 객체를 사용하여 데이터를 전달하는 또 다른 최신 웹 API 개발입니다. WebSocket API는 클라이언트 앱과 서버 간의 양방향 통신을 지원합니다. 서버가 연결된 클라이언트에 콜백 메시지를 전송할 수 있어 REST API보다 효율적입니다.
4) REST API
오늘날 웹에서 볼 수 있는 가장 많이 사용되고 유연한 API입니다. 클라이언트가 서버에 요청을 데이터로 전송합니다. 서버가 이 클라이언트 입력을 사용하여 내부 함수를 시작하고 출력 데이터를 다시 클라이언트에 반환합니다.
2. REST란 무엇인가?
REST(Representational State Transfer)는 API 작동 방식에 대한 조건을 부과하는 아키텍처 스타일입니다. REST는 인터넷과 같은 대규모 네트워크에서 효율적인 통신을 가능하게 합니다. HTTP 메소드(GET, POST, PUT, DELETE ...)를 사용하여 자원의 상태를 전송합니다.
REST 아키텍처 스타일은 자원(Resource)의 상태(state)를 전송(Transfer)하기 위해 표준 HTTP 메소드를 사용합니다. 이러한 자원은 예를들어 문서, 이미지 또는 서비스 제공에 필요한 다른 유형의 정보를 포함합니다.
REST 아키텍처 스타일의 몇가지 원칙
1) 균일한 인터페이스(Uniform Interface)
클라이언트와 서버 간의 통신을 단순화하고 표준화하기 위한 것을 목표로 합니다.
2) 무상태성(Stateless)
각 요청 간에 클라이언트의 상태 정보가 서버에 저장되지 않아야합니다. 즉, 각 요청은 서버가 요청을 이해하고 처리하는 데 필요한 모든 정보를 포함해야합니다. 그래서 연달아 요청을 보내도 같은 클라이언트가 보낸 것을 알 수가 없습니다. 이는 서버의 부하를 줄이고 확장성을 향상시킵니다.
3) 계층화 시스템(Client-Server Architecture)
컴퓨터 네트워크 디자인의 기본적인 모델 중 하나로, 클라이언트(Client)와 서버(Server)라는 두 가지 주요 구성 요소로 나뉩니다. 이 아키텍처는 클라이언트가 서비스를 요청(Request)하고 서버가 그 요청을 처리하여 응답(Response)하는 방식으로 작동합니다. 클라이언트와 서버는 네트워크를 통해 서로 통신합니다.
4) 캐시가능성(Cacheable)
클라이언트는 응답을 캐싱할 수 있어야 하며, 이는 네트워크 효율성을 향상시킬 수 있습니다.
이미자가 많은 웹 사이트를 방문할 때 서버는 동일한 이미지를 다시 전송하지않고 클라이언트가 해당 이미지를 캐싱해서 캐시에서 직접 이미지를 사용합니다. RESTful 웹 서비스는 캐시 가능, 불가능으로 정의되는 API 응답을 사용하여 캐싱을 제어합니다.
5) 온디맨드 코드(On-demand code)(옵션)
서버는 소프트웨어 프로그래밍 코드를 클라이언트에 전송하여 클라이언트 기능을 일시적으로 확장하거나 사용자 지정할 수 있습니다. 예를들어, 웹 사이트에서 잘못된 전화번호를 입력하면 즉시 알려줍니다.
즉 클라이언트가 서버로부터 스크립트(코드)를 받으면 이를 실행시킬 수 있어야함을 의미합니다.
6) Layered System
클라이언트는 자신이 직접 연결된 서버 또는 중간 레이어에 있는 서버와 통신하는지 알 수 없습니다. 이러한 계층화는 시스템의 확장성을 향상시킬 수 있습니다.
3. REST API, RESTful API란 무엇인가?
REST API는 REST를 기반으로 만들어진 API를 의미합니다. 그 중 REST를 잘 따른 API를 RESTful API라고 부릅니다.
RESTful API 클라이언트 요청에는 무엇이 포함되어 있나요?
RESTful API에는 다음과 같은 구성요소를 포함한 요청이 필요합니다.
1) 고유 리소스 식별자 (URL)
웹 상의 모든 것은 자원(리소스)으로 간주됩니다. 이는 문서, 이미지, 동영상 등의 미디어 파일 뿐만 아니라, 서비스의 기능(예: 날씨 정보 제공, 환율 계산) 자체도 포함됩니다.
REST 서비스의 경우에는 서버는 고유한 리소스 식별자(URL ;Uniform Resource Locator)를 사용하여 리소스를 식별합니다.
2) HTTP 메서드
HTTP(Hypertext Transfer Protocol)를 사용하여 RESTful API를 구현합니다. HTTP메서드는 리소스에 수행해야 하는 작업을 서버에 알려줍니다.
GET: 서버에서 리소스(데이터)를 요청하는 메소드입니다. 요청한 데이터를 가져와 응답합니다.
POST: 서버에 데이터를 전송하는 메소드입니다. 데이터를 전송하여 서버에서 처리하고, 처리 결과를 응답합니다.
PUT: 서버에 데이터를 업데이트하는 메소드입니다. 요청한 데이터를 서버에 저장하고, 처리 결과를 응답합니다.
DELETE: 서버에서 데이터를 삭제하는 메소드입니다. 요청한 데이터를 서버에서 삭제하고, 처리 결과를 응답합니다.
3) HTTP 헤더
요청 헤더는 클라이언트와 서버 간에 교환되는 메타데이터입니다.
예를 들어, 요청 헤더는 요청 및 응답의 형식을 나타내고 요청 상태 등에 대한 정보를 제공합니다.
데이터
REST API 요청에는 HTTP 메서드가 성공적으로 작동하기 위한 데이터가 포함될 수 있습니다.
파라미터
RESTful API 요청에는 수행해야 할 작업에 대한 자세한 정보를 서버에 제공하는 파라미터가 포함될 수 있습니다.
파라미터의 유형
- URL 세부정보를 지정하는 경로 파라미터
- 리소스에 대한 추가 정보를 요청하는 쿼리 파라미터
- 클라이언트를 빠르게 인증하는 쿠키 파라미터
RESTful API 서버 응답에는 무엇이 포함되어 있나요?
REST 원칙에 따라 서버 응답에는 다음과 같은 주요 구성 요소를 포함해야 합니다.
1) 상태 표시줄
요청 성공 또는 실패를 알리는 3자리 상태 코드
다음은 몇 가지 일반적인 상태 코드입니다.
- 200: 일반 성공 응답
- 201: POST 메서드 성공 응답
- 400: 서버가 처리할 수 없는 잘못된 요청
- 404: 리소스를 찾을 수 없음
2) 메시지 본문
응답 본문에는 리소스 표현이 포함됩니다.
서버는 요청 헤더에 포함된 내용을 기반으로 적절한 표현 형식을 선택합니다.
클라이언트는 데이터 작성 방식을 JSON, XML 형식으로 정보를 요청할 수 있습니다.
3) 헤더
응답에 대한 헤더 또는 메타데이터도 포함됩니다.
응답에 대한 추가 컨텍스트를 제공하고 서버, 인코딩 날짜 및 콘텐츠 유형과 같은 정보를 포함합니다.
RESTful API를 사용하면 어떤 이점이 있나요?
1) 확장성
무상태이기 때문에 서버가 과거 클라이언트 요청 정보를 유지할 필요가 없어 서버 로드를 제거합니다. 그로인해 성능을 저하시키는 통신 병목 현상을 일으키지 않으면서 확장성을 지원합니다.
2) 유연성
RESTful 웹 서비스는 완전한 클라이언트-서버 분리를 지원합니다.
각 부분이 독립적으로 발전할 수 있도록 다양한 서버 구성 요소를 단순화하고 분리합니다.
서버 애플리케이션 플랫폼 또는 기술 변경이 애플리케이션에 영향을 주지 않습니다.
애플리케이션 함수를 계층화하는 기능은 유연성을 더욱 향상시킵니다.
3) 독립성
REST API는 사용되는 기술과 독립적입니다.
다양한 프로그래밍 언어로 클라이언트 및 서버 애플리케이션을 모두 작성할 수 있습니다.
또한 통신에 영향을 주지 않고 양쪽 기본 기술을 변경할 수 있습니다.
RESTful API는 어떻게 작동하나요?
- 클라이언트가 서버에 요청을 전송합니다. 클라이언트가 API 문서에 따라 서버가 이해하는 방식으로 요청 형식을 지정합니다.
- 서버가 클라이언트를 인증하고 해당 요청을 수행할 수 있는 권한이 클라이언트에게 있는지 확인합니다.
- 서버가 요청을 수신하고 내부적으로 처리합니다.
- 서버가 클라이언트에 응답을 반환합니다. 응답에는 요청이 성공했는지 여부를 클라이언트에 알려주는 정보가 포함됩니다. 응답에는 클라이언트가 요청한 모든 정보도 포함됩니다.
RESTful API 인증 방법이란 무엇인가요?
RESTful 웹 서비스는 응답을 보내기 전에 먼저 요청을 인증해야 합니다.
RESTful API에는 4가지 일반적인 인증 방법이 있습니다.
1) 2) HTTP 인증
HTTP는 REST API를 구현할 떄 직접 사용할 수 있는 일부 인증 체계를 정의합니다.
이러한 체계 중 두 가지 입니다.
1) 기본 인증
클라이언트는 요청 헤더에 사용자 이름과 암호를 넣어서 전송합니다. 안전한 전송을 위해서 base64로 인코딩합니다.
2) 전달자 인증 (토큰)
전달자(bearer)인증이라는 용어는 토큰 전달자에 대한 액세스 제어를 제공하는 프로세스를 나타냅니다.
일반적으로 전달자 토큰은 서버가 로긍니 요청에 대한 응답으로 생성하는 암호화된 문자열입니다. 클라이언트는 리소스에 엑세스하기 위해 요청 헤더에 토큰을 넣어 전송합니다.
3) API키
서버는 고유하게 생성된 값을 최초 클라이언트에 할당합니다. 클라이언트는 리소스에 액세스하려고 할 때마다 고유한 API키를 사용하여 본인을 검증합니다. 도난에 취약하기 때문에 위험합니다.
4) OAuth
매우 안전한 로그인 액세스를 보장하기 위해 암호와 토큰을 결합합니다. 서버는 먼저 암호를 요청한 다음 권한 부여 프로세스를 완료하기 위해 추가 토큰을 요청합니다.
[면접 답변] RESTful API에 대해 설명해주세요.
RESTful API란 인터넷 상에서 서로 통신하는 방법을 정의한 아키텍처 스타일입니다.
API는 어떻게 통신할지 어떻게 데이터를 주고 받을지에 대한 방법이 정의된 중계계층인데 API의 많은 스타일중에서 REST한 스타일을 사용한 것 입니다.
RESTful API의 특징은 HTTP메서드(GET, POST, PUT, DELETE)를 사용해서 통신을 하며 무상태성, 캐시가능성의 특징을 가지고있습니다.
레퍼런스
RESTful API란 무엇인가요? - RESTful API 설명 - AWS
Amazon API Gateway는 어떤 규모에서든 개발자가 API를 손쉽게 생성, 게시, 유지 관리, 모니터링 및 보안 유지할 수 있도록 하는 완전관리형 서비스입니다. API Gateway를 사용하면 실시간 양방향 통신 애
aws.amazon.com
[네트워크] REST API란? REST, RESTful이란?
REST API란 REST를 기반으로 만들어진 API를 의미합니다. REST API를 알기 위해 REST부터 알아보도록 하겠습니다. REST란? REST(Representational State Transfer)의 약자로 자원을 이름으로 구분하여 해당 자원의 상
khj93.tistory.com
API란 무엇인가요? - 애플리케이션 프로그래밍 인터페이스 설명 - AWS
GraphQL은 API용으로 특별히 개발된 쿼리 언어로서, 클라이언트에게 요청한 데이터만 제공하는 것을 우선으로 합니다. 또한 API를 빠르고 유연하며 개발자 친화적으로 만들도록 설계되었습니다. RES
aws.amazon.com
'면접' 카테고리의 다른 글
[면접] 호이스팅(Hoistin)에 대해 설명해보세요. (0) | 2024.04.11 |
---|---|
[면접] 브라우저 렌더링 원리에 대해서 설명해보세요. (0) | 2024.04.10 |
[면접] async/await에 대해 설명해보세요. + promise란 (0) | 2024.04.09 |
[면접] CSRF나 XSS 공격을 막는 방법은? (0) | 2024.04.06 |
2. 네트워크 (0) | 2023.06.26 |
댓글