API란 무엇인가?
API는 응용 프로그램 프로그래밍 인터페이스(Application Programming Interface)의 약자입니다. 이는 한 응용 프로그램이 다른 응용 프로그램의 특정 리소스에 접근할 수 있도록 하는 일종의 ‘문’ 역할을 합니다.
API 사용의 주요 장점 중 하나는 제3자 응용 프로그램에 대한 접근을 제한적으로 허용함으로써, 응용 프로그램의 전체 데이터가 아닌, API를 통해 공개된 특정 데이터에만 접근할 수 있도록 한다는 점입니다. 이는 보안성을 향상시키고 데이터 접근을 더욱 정밀하게 제어할 수 있게 해줍니다.
데이터에 접근하려는 응용 프로그램 또는 사용자를 클라이언트라고 하며, 데이터를 제공하는 응용 프로그램을 서버라고 칭합니다.
API는 현대 소프트웨어 아키텍처에서 빼놓을 수 없는 중요한 요소입니다. 프런트엔드, 백엔드, 풀 스택 개발자나 네트워크 엔지니어 등 어떤 역할을 맡고 있든 API에 대한 이해는 필수적이며, 인터뷰에서도 관련 질문을 자주 받게 됩니다.
이제 REST API와 관련된 주요 인터뷰 질문들을 살펴보겠습니다.
REST란 무엇인가?
REST는 API 작동 방식에 대한 몇 가지 제약을 정의하는 아키텍처 스타일입니다. REST 원칙을 따르는 API를 RESTful API라고 부릅니다. REST는 Representational State Transfer의 약자입니다.
REST는 특정 프로토콜이나 표준이 아닌, API를 다양한 방식으로 구현하는 데 사용될 수 있는 아키텍처 디자인입니다.
개발자에게 높은 유연성과 자유를 제공하기 때문에 API 개발에 널리 사용되며, REST 아키텍처의 주요 원칙은 다음과 같습니다.
- 클라이언트와 서버의 분리: RESTful API에서 클라이언트는 URI(Uniform Resource Identifier)를 통해 데이터를 요청하는 것 외에는 서버에 직접적인 영향을 주지 않아야 합니다. 마찬가지로 서버도 클라이언트의 콘텐츠를 변경해서는 안 됩니다.
- 무상태성(Stateless): 각 요청은 독립적으로 처리되며, 이전 요청에 대한 정보를 유지하지 않습니다. 즉, 각 요청은 완전히 격리되어 처리됩니다.
- 계층화된 아키텍처: 클라이언트 또는 서버는 요청이 원본 애플리케이션으로 직접 전달되는지, 아니면 중간 애플리케이션을 거쳐 전달되는지 알 수 없습니다. 요청에 대한 응답에만 관여합니다.
- 캐싱: 클라이언트와 서버 측에서 데이터를 캐싱하여 성능과 확장성을 향상시킬 수 있습니다. 특히 자주 요청되는 리소스의 경우 캐시를 활용하면 응답 시간을 크게 단축할 수 있습니다.
REST의 주요 특징은 무엇인가?
REST의 주요 특징은 다음과 같습니다.
- 유연성: API가 특정 요청에 대해 항상 동일한 응답을 보장하므로 서버를 변경해도 문제가 발생하지 않습니다. 또한 다양한 데이터 유형에 대해 원하는 만큼 엔드포인트를 추가할 수 있습니다.
- 확장성: 캐싱을 통해 응답을 저장하고 재사용함으로써 서버 부하를 줄이고 응답 시간을 단축시켜 확장성을 향상시킵니다.
- 인증(Authorization): 인증 헤더를 사용하여 서버가 요청을 승인하는 데 필요한 자격 증명을 제공할 수 있습니다.
- 무상태성(Stateless): 각 요청은 독립적으로 처리되므로 이전 요청의 상태에 영향을 받지 않습니다. 이는 REST의 가장 중요한 특징 중 하나입니다.
REST 아키텍처에서 리소스란 무엇인가?
리소스는 검색, 업데이트, 삭제 등의 다양한 작업이 수행되는 객체입니다. REST 아키텍처의 기본적인 구성 요소입니다.
예를 들어 온라인 쇼핑몰에서 제품, 사용자, 메타데이터 등이 리소스가 될 수 있습니다. 이러한 리소스는 API를 통해 다른 응용 프로그램으로 전송될 수 있습니다.
REST API의 장점과 단점을 설명하시오.
REST API의 장점은 다음과 같습니다.
- 구현이 비교적 간단합니다.
- 리소스 처리가 용이합니다.
- 클라이언트-서버 아키텍처로 인해 확장성이 뛰어납니다.
- XML 및 JSON과 같은 다양한 데이터 전송 형식을 지원합니다.
REST API의 단점은 다음과 같습니다.
- 요청 간에 상태를 유지할 수 없습니다.
- 계층화된 아키텍처로 인해 리소스의 정확한 소스를 파악하기 어려울 수 있습니다.
- 복잡한 쿼리나 요청에는 적합하지 않을 수 있습니다.
REST 템플릿을 정의하시오.
REST 템플릿은 Spring 프레임워크에서 REST API에 접근할 수 있도록 제공되는 유틸리티 또는 클라이언트입니다. REST API에서 리소스를 요청하기 위해 작성해야 하는 반복적인 코드를 줄여줍니다.
RESTful이란 무엇인가?
RESTful API 또는 서비스는 REST(Representational State Transfer) 아키텍처 스타일을 따르고 HTTP와 같은 프로토콜을 사용하여 작동하는 인터페이스입니다.
RESTful 웹 서비스란 무엇인가?
RESTful 웹 서비스는 웹에서 최적의 성능을 발휘하도록 설계되었습니다. REST(Representational State Transfer)는 균일한 인터페이스, 계층화된 아키텍처, 무상태성 등의 제약 조건을 정의하는 아키텍처 스타일로, 이러한 제약 조건은 웹 서비스의 성능과 확장성을 향상시킵니다.
RESTful 웹 서비스를 어떻게 테스트할 수 있는가?
RESTful 웹 서비스를 테스트하려면 Postman이나 Thunder Client와 같은 REST 클라이언트를 사용하여 테스트하려는 웹 서비스에 쿼리를 보내고 응답을 확인해야 합니다. 응답 내용을 이해하는 것이 테스트의 핵심입니다.
엔드포인트가 많은 복잡한 API를 테스트할 때는 테스트를 세분화하여 단위 테스트, 통합 테스트, 성능 테스트, 엔드 투 엔드 테스트 등을 수행해야 할 수 있습니다.
RESTful 웹 서비스의 주요 특징은 무엇인가?
RESTful 웹 서비스의 주요 특징은 다음과 같습니다.
- JSON 및 XML과 같은 다양한 미디어 유형을 지원합니다.
- 높은 확장성을 제공합니다.
- 클라이언트와 서버가 독립적으로 동작합니다.
- 뛰어난 유연성을 제공합니다.
RESTful 루트 리소스 클래스를 정의하시오.
루트 리소스 클래스는 @Path
어노테이션이 적용된 클래스나, @Path
또는 요청 메서드 지정자(예: @GET
, @POST
, @PUT
, @DELETE
)를 포함하는 클래스를 의미합니다.
URI란 무엇인가?
URI는 Uniform Resource Identifier의 약자로, API 또는 서비스의 리소스를 찾거나 식별하는 데 사용되는 일련의 문자입니다. 리소스의 이름이나 위치를 사용하여 식별하지만, 특정 방법이나 기술에 의존하지 않습니다.
REST에서 무상태성이란 무엇인가?
무상태성은 각 요청이 서로 독립적이며, 이전 요청에 대한 정보를 유지하지 않는다는 것을 의미합니다. 요청이 처리된 후에는 해당 상태가 유지되지 않습니다.
JAX-RS란 무엇인가?
JAX-RS는 REST 아키텍처를 사용하여 Java로 응용 프로그램을 개발할 수 있도록 해주는 Java API입니다. 이 API를 사용하면 Java에서 REST 응용 프로그램을 쉽게 개발할 수 있습니다.
JAX-RS API의 주요 어노테이션은 무엇인가?
JAX-RS의 어노테이션은 개발자가 Java 클래스를 사용하여 리소스와 해당 리소스에서 수행할 수 있는 메서드를 정의하는 데 사용됩니다. JAX-RS API의 주요 어노테이션은 다음과 같습니다.
@GET
: HTTP GET 요청을 생성하는 데 사용됩니다.@POST
: HTTP POST 요청을 생성하는 데 사용됩니다.@Path
: Java 클래스의 상대 경로를 나타냅니다.@QueryParam
: URI 또는 URL의 쿼리 매개 변수를 나타냅니다.
JAX-RS API의 주요 기능은 무엇인가?
JAX-RS의 주요 기능은 다음과 같습니다.
- 클라이언트 측 캐싱
- 서버 측 캐싱
- 쿼리 문자열 커스터마이징
- 런타임 어노테이션
JAX-RS 응용 프로그램을 어떻게 구성할 수 있는가?
JAX-RS 응용 프로그램은 WAR 파일 내에 패키징된 하나 이상의 리소스 클래스로 구성됩니다. 응용 프로그램의 리소스가 요청에 응답하는 기본 URI는 다음 두 가지 방법 중 하나로 설정할 수 있습니다.
- WAR 내에 패키징된
javax.ws.rs.core.Application
의 하위 클래스에서@ApplicationPath
어노테이션 사용 - WAR의
web.xml
배치 설명자 내에서servlet-mapping
태그 사용
JAX-WS와 JAX-RS란 무엇인가?
JAX-WS는 XML 기반 메시징 프로토콜인 SOAP(Simple Object Access Protocol)를 사용하여 API를 개발하는 데 사용되는 Jakarta XML 웹 서비스 API입니다.
반면 JAX-RS는 REST 아키텍처를 사용하여 웹 서비스를 만드는 데 사용되는 Java API입니다.
HTTP 상태 코드란 무엇인가?
상태 코드는 서버에서 클라이언트로 전송되는 응답의 상태를 나타내는 방법입니다. 이는 서버에서 전송된 응답 헤더에 포함되어 있습니다.
클라이언트는 상태 코드를 사용하여 요청이 성공적으로 완료되었는지, 실패했는지, 혹은 응답에 문제가 있는지 확인할 수 있습니다.
일반적으로 사용되는 HTTP 상태 코드는 다음과 같습니다.
- 200 – “OK”: 요청이 성공적으로 처리되었음을 나타냅니다.
- 404 – “Not Found”: 요청된 리소스가 서버에 없거나 엔드포인트가 존재하지 않음을 나타냅니다.
- 500 – “Internal Server Error”: 서버에서 요청을 처리하는 데 문제가 발생했음을 나타냅니다.
- 503 – “Service Unavailable”: 현재 서버가 요청을 처리할 수 없음을 나타냅니다. 서버가 다운되었거나 과부하 상태일 때 발생할 수 있습니다.
HTTP 메서드란 무엇인가?
HTTP 메서드는 API의 특정 리소스에 대해 특정 작업을 수행하는 데 사용됩니다. 예를 들어, 영화 컬렉션 API에서 영화 목록을 가져오려면 HTTP에서 제공하는 GET 메서드를 사용할 수 있습니다. 데이터를 업데이트하려면 POST 메서드를 사용할 수 있습니다.
자주 사용되는 HTTP 메서드는 다음과 같습니다.
- GET: 서버에서 데이터를 가져오는 데 사용됩니다.
- POST: 새로운 데이터를 서버에 보내거나 기존 데이터를 업데이트하는 데 사용됩니다.
- DELETE: 특정 리소스를 삭제하는 데 사용됩니다.
- PATCH: 리소스의 일부를 수정하는 데 사용됩니다.
HTTP 기본 인증은 어떻게 작동하는가?
인증은 데이터 보안을 위해 클라이언트의 신뢰성을 확인하는 프로세스입니다. HTTP에서 인증은 클라이언트가 보낸 인증 헤더를 통해 작동합니다.
인증 헤더에는 클라이언트의 사용자 이름/ID 및 비밀번호가 포함되어 있으며, 서버는 이를 확인하여 접근 권한을 부여합니다.
HTTP 인증을 사용할 때 중요한 점은 자격 증명이 전송되는 채널이 암호화되고 안전해야 한다는 것입니다. HTTPS에 통합된 SSL 레이어를 사용하여 채널을 보호할 수 있습니다. 자격 증명을 처리할 때는 HTTP 대신 HTTPS를 사용하는 것이 좋습니다.
HTTP 요청의 핵심 구성 요소는 무엇인가?
HTTP 요청은 다음 구성 요소로 구성됩니다.
- 요청 라인: 요청의 첫 번째 라인이며, HTTP 메서드, 경로(엔드포인트), HTTP 버전 번호로 구성됩니다.
- 헤더: 요청에 대한 메타데이터를 제공합니다.
- 본문(선택 사항): 요청의 실제 메시지를 포함합니다. 일부 요청 방법(예: GET)에는 필요하지 않지만, POST 요청에는 필요합니다.
HTTP 응답의 핵심 구성 요소는 무엇인가?
HTTP 응답은 다음 구성 요소로 구성됩니다.
- 상태: 서버에서 전송하는 HTTP 상태 코드입니다.
- 헤더: 응답에 대한 유용한 정보를 제공합니다.
- 메시지: 서버에서 클라이언트로 전송하는 실제 데이터입니다.
REST와 AJAX의 차이점은 무엇인가?
AJAX는 RESTful API에 접근할 수 있는 클라이언트입니다. JavaScript를 사용하여 비동기 요청을 보내는 데 사용됩니다.
REST는 RESTful API를 생성하기 위해 구현할 수 있는 아키텍처입니다. 즉, HTTP 요청을 보내려면 클라이언트 역할을 하는 AJAX를 사용할 수 있지만, RESTful API를 구현하려면 REST 아키텍처를 사용해야 합니다.
SOAP와 REST의 차이점은 무엇인가?
REST(Representational State Transfer)는 API를 생성하는 데 최소한의 제약이 있는 아키텍처 스타일입니다. SOAP(Simple Object Access Protocol)는 API를 구현하기 위한 엄격한 요구 사항이 있는 프로토콜입니다.
REST는 SOAP보다 유연하고 사용하기 쉽습니다. SOAP에서는 XML 기반 메시징을 사용하지만, REST에서는 JSON, XML 등 다양한 데이터 전송 형식을 사용할 수 있습니다. REST는 SOAP에 비해 더 가볍고 빠릅니다.
SOAP 웹 서비스는 보안 기능이 내장되어 있습니다. 이는 REST에 비해 SOAP를 사용하는 이점 중 하나이지만, 추가된 기능 때문에 사용이 복잡하고 무거워집니다.
PUT과 POST의 차이점은 무엇인가?
POST는 데이터를 서버로 보내는 HTTP 요청 방법입니다. 동일한 리소스에 대해 여러 POST 요청을 보내면 데이터에 부작용이 발생할 수 있습니다. 예를 들어, 게시글을 컬렉션에 추가할 때 여러 번 POST 요청을 보내면 중복된 게시글이 추가될 수 있습니다.
PUT은 데이터를 서버로 보내지만, 리소스를 한 번만 업데이트하는 HTTP 요청 메서드입니다. 여러 번 PUT 요청을 보내더라도 동일한 결과가 발생하며 데이터가 한 번만 추가됩니다. PUT 메서드는 리소스가 존재하지 않으면 새로 생성하고, 존재하면 기존 리소스를 업데이트합니다.
PUT은 멱등성을 가지지만 POST는 그렇지 않습니다.
페이로드란 무엇인가?
REST API에서 페이로드는 클라이언트에서 서버로 전송된 요청의 본문을 의미합니다. 서버로 보내고 응답받고자 하는 실제 데이터입니다.
POST 메서드에서 보낼 수 있는 최대 페이로드 크기는 얼마인가?
HTTP 프로토콜 자체에는 기본 제한이 설정되어 있지 않습니다. 제한은 클라이언트 또는 서버의 최대 제한 중 더 작은 값에 따라 달라질 수 있습니다.
URI를 생성할 때 따라야 할 모범 사례는 무엇인가?
URI를 설계할 때 다음 사항을 고려해야 합니다.
- 파일 확장자를 사용하지 마십시오.
- 모든 URI를 일관성 있게 유지하십시오.
- 다양한 리소스 세트에 대해 URI를 도메인과 하위 도메인으로 나누십시오.
- URI에 포함된 문장의 단어를 구분하려면 하이픈 또는 밑줄을 사용하십시오.
- 슬래시를 사용하여 리소스 계층을 나타내십시오.
- 적절한 인코딩을 사용하여 URI를 인코딩하십시오.
- URI를 사람이 읽기 쉽도록 만드십시오.
멱등(Idempotent) 메서드란 무엇인가?
멱등 HTTP 메서드는 동일한 요청을 여러 번 보내더라도 서버에 동일한 영향을 미칩니다. 예를 들어, 특정 리소스에 대해 동일한 DELETE 요청을 여러 번 보내면 모든 요청에서 리소스가 변경되지 않고 한 번만 업데이트됩니다.
멱등 메서드의 예는 다음과 같습니다.
- PUT
- DELETE
- GET
- HEAD
- OPTIONS
Postman이란 무엇인가?
Postman은 API를 개발, 수정, 테스트하기 위한 API 개발 도구입니다. 클라이언트를 설정하지 않고도 API를 빠르게 빌드하고 테스트할 수 있는 다양한 기능을 제공합니다.
Cache-Control 헤더는 브라우저 및 서버에서 캐싱을 구성하는 지침을 제공합니다. 브라우저나 서버에 무엇을 캐시할지, 네트워크 요청을 통해 요청하기 전에 캐시해야 하는 기간을 알려줍니다.
Cache-Control 헤더에는 다음과 같은 지시문이 포함됩니다.
- max-age
- no-cache
- private
- public
- no-store
- immutable
RESTful 웹 서비스에서 메시징을 정의하시오.
RESTful 웹 서비스에서 메시징은 클라이언트가 서버에 HTTP 요청을 보내고, 서버가 HTTP 응답으로 응답하는 과정을 의미합니다. 클라이언트와 서버 간의 이러한 통신을 메시징이라고 합니다.
모놀리식, SOA, 마이크로서비스 아키텍처의 차이점은 무엇인가?
모놀리식 아키텍처에서는 클라이언트, 서버, 데이터베이스 등 모든 구성 요소가 한 곳에서 관리됩니다. “monolith(모놀리스)”라는 단어 자체가 단일 블록을 의미하는 것처럼, 모든 것이 하나의 단일 단위로 관리됩니다.
SOA(Service Oriented Architecture)는 서비스 지향 아키텍처를 의미합니다. 이 아키텍처에서는 응용 프로그램의 여러 측면이 다양한 서비스(소프트웨어)에 의해 관리됩니다. 따라서 여러 서비스 모듈의 조합으로 구성되며, 통합이 중요한 역할을 합니다.
마이크로서비스 아키텍처는 SOA와 유사하지만, API를 사용하여 서로 통신하는 여러 자율적인 소프트웨어 프로그램으로 구성됩니다. 모놀리식 아키텍처와 달리, 모든 구성 요소가 어느 정도 독립적으로 동작합니다.
마이크로서비스 아키텍처는 어떻게 동작하는가?
마이크로서비스 아키텍처에서 응용 프로그램은 서로 독립적으로 동작하는 작은 하위 단위로 나뉩니다. 각 하위 단위는 잘 정의된 API를 통해 서로 통신합니다.
마이크로서비스 아키텍처의 주요 이점은 민첩성, 유연성, 확장성, 기술 독립성, 재사용 가능한 서비스, 쉬운 배포 등을 들 수 있습니다.
CRUD란 무엇인가?
CRUD는 Create(생성), Read(읽기), Update(업데이트), Delete(삭제)를 나타냅니다. 특정 리소스에서 수행할 수 있는 기본적인 작업입니다. 이러한 모든 작업을 지원하는 API를 CRUD API라고 합니다.
캐싱이란 무엇인가?
캐싱은 응답이나 요청을 나중에 재사용할 수 있도록 클라이언트나 서버에 저장하는 기술입니다.
응답은 일반적으로 클라이언트에 캐시됩니다. 짧은 시간 간격으로 동일한 요청을 여러 번 보내는 경우, 네트워크를 통해 응답을 다시 요청하는 대신 캐시된 응답을 사용하는 것이 더 효율적입니다.
@RequestMapping
의 용도는 무엇인가?
@RequestMapping
은 웹 요청을 특정 핸들러 클래스나 메서드에 매핑하는 데 사용되는 Spring 프레임워크의 어노테이션입니다.
@PathVariable
은 무엇을 하는가?
Spring 프레임워크의 @PathVariable
어노테이션은 템플릿 변수의 값을 추출하여 해당 값을 메서드 변수에 할당하는 데 사용됩니다.
HttpMessageConverter
를 정의하시오.
HttpMessageConverter
는 HTTP 요청(또는 일부)을 핸들러 메서드의 인수로 필요한 유형으로 변환하거나, 핸들러 메서드에서 반환된 값을 변환하여 HTTP 응답을 생성하는 데 사용됩니다.
다음은 API 테스트에 도움이 되는 도구들입니다.
- Postman
- Rest Assured
- SoapUI
- Katalon
- ReadyAPI
- Apigee
마지막 말
API는 인터넷의 발전과 함께 현대 기술의 필수적인 요소가 되었습니다. REST API는 개발과 사용이 용이하여 많은 인기를 얻고 있습니다.
인터뷰를 준비하고 있다면, 위에서 제시된 REST API 관련 질문들을 숙지하여 인터뷰에 대비하는 것이 좋습니다.
다음으로 koreantech.org의 Web Scraping API를 사용하여 웹사이트를 스크랩하는 방법에 대해 알아보는 것을 추천합니다.