기술 면접 준비

Day 1 - 객체지향 프로그래밍, REST API

완두노예 2023. 5. 8. 14:23

1. 객체지향 프로그래밍(OOP)에 대해 설명해주세요. 알고있는 원칙이나 키워드를 언급해주세요

객체지향 프로그래밍은 프로그래밍 패러다임 중 하나로,
프로그램을 여러 개의 독립적인 단위인 객체로 구성하는 방식을 말합니다.

객체는 데이터와 해당 데이터를 조작할 수 있는 함수(메서드)로 구성됩니다. 
이러한 객체들은 서로 상호작용을 하며, 프로그램의 기능을 수행합니다.

OOP의 가장 큰 특징은 캡슐화(Encapsulation), 상속(Inheritance), 다형성(Polymorphism)입니다.

캡슐화는 객체의 내부 상태(데이터)와 동작(메서드)를 외부로부터 숨기고, 
외부에서는 객체와 상호작용할 수 있는 인터페이스만을 제공하는 것을 말합니다. 
이를 통해 객체의 내부 구현과 외부 사용을 분리할 수 있으며, 코드의 유지보수성과 재사용성을 높일 수 있습니다.

상속은 부모 클래스에서 정의된 속성과 메서드를 자식 클래스에서 그대로 물려받는 것을 말합니다. 
이를 통해 중복 코드를 피하고, 코드의 재사용성과 확장성을 높일 수 있습니다.

다형성은 같은 이름의 메서드나 연산자가 다른 객체에서 다르게 동작하는 것을 말합니다. 
이를 통해 코드의 가독성과 유지보수성을 높일 수 있습니다.

객체지향 프로그래밍은 현실 세계를 모델링하기 용이하며, 대규모 프로그램 개발에 적합합니다. 



2. REST API란 무엇인가요?   

REST (Representational State Transfer) API는 웹 상의 자원을 HTTP를 통해 요청하고, 
해당 자원에 대한 상태를 전달하는 API 디자인 패턴 중 하나입니다.

REST API는 HTTP 프로토콜의 기본 메서드인 
GET, POST, PUT, DELETE 등을 사용하여 자원을 요청하고, 
해당 자원을 응답으로 받아 처리합니다. 
이 때, 자원은 URI(Uniform Resource Identifier)로 식별되며, 자원에 대한 조작은 HTTP 메서드로 정의됩니다.

REST API의 가장 큰 특징은 "자원 중심적"이라는 것입니다. 
즉, REST API는 URI를 통해 자원을 식별하고, 
해당 자원에 대한 상태를 주고 받는 방식으로 설계되어 있습니다. 
이는 HTTP의 기본 구조와 매우 유사하여, HTTP 프로토콜을 이해하는 모든 클라이언트에서 사용할 수 있습니다.

또한 REST API는 클라이언트와 서버의 역할이 분리되어 있으며, 
서버는 클라이언트의 요청에 대해 상태 정보를 응답으로 전달하고, 
클라이언트는 이를 받아 필요한 처리를 수행합니다. 
이를 통해 REST API는 서버와 클라이언트 간의 의존성을 줄이고, 확장성과 유연성을 높이는 데에 큰 장점을 가지고 있습니다.


3. 프로젝트에 REST API를 사용한 이유가 무엇인가요?

1) REST API는 HTTP 프로토콜을 기반으로 하기 때문에, 다른 프로그래밍 언어나 운영체제에서도 일관된 인터페이스를 제공할 수 있습니다.

2) 새로운 자원이나 기능을 추가할 때도 URI와 HTTP 메서드만 추가하면 되기 때문에, 확장성이 높습니다.

3) REST API는 HTTP 프로토콜을 기반으로 HTTP의 캐싱 기능을 이용할 수 있습니다, 클라이언트가 이전에 요청한 자원이 변경되지 않았다면, 서버로부터 응답을 받지 않고 캐시된 응답을 사용할 수 있습니다.

4)  REST API는 기본적으로 SSL/TLS 암호화를 지원하며, HTTP의 보안 기능인 Digest 인증 등을 사용하여 보안성을 높일 수 있습니다.

5) REST API는 URI와 HTTP 메서드만으로 요청과 응답을 처리하기 때문에, 개발자가 쉽게 이해하고 사용할 수 있습니다. 
또한, 다양한 개발 도구나 라이브러리를 사용하여 개발할 수 있어, 개발 효율을 높일 수 있습니다.

REST API는 이와같은 이점을 가지고 있기 때문에,  프로젝트에서 REST API를 사용하는 것이 유용하고 효과적일 수 있다고 판단하여 사용했습니다.


4. REST API 말고 다른 비교할만한 것을 알고 있나요?

REST API와 비교할 수 있는 대표적인 API 디자인 패턴으로는 SOAP(Simple Object Access Protocol) API가 있습니다.

SOAP API는 XML 기반의 프로토콜로, 자원을 요청할 때 HTTP 외에도 다른 프로토콜을 사용할 수 있습니다. 
또한, 메시지의 구조가 엄격하게 정의되어 있기 때문에, 클라이언트와 서버 간의 통신이 안정적이고 신뢰성이 높습니다. 
하지만, SOAP API는 XML을 사용하기 때문에 메시지의 크기가 크고 처리 속도가 느릴 수 있습니다. 
또한, 클라이언트가 SOAP API를 호출할 때는 복잡한 프로세스를 거쳐야 하기 때문에, 개발자가 이해하기 어렵고 개발 비용이 높아질 수 있습니다.

반면에 REST API는 HTTP 프로토콜을 기반으로 하기 때문에, 클라이언트와 서버 간의 통신이 간단하고 직관적입니다. 
또한, 자원 중심적인 디자인으로, 확장성이 높고 개발 비용이 상대적으로 낮습니다. 
그러나, REST API의 경우에는 URI와 HTTP 메서드만으로 요청과 응답을 처리하기 때문에, 
메시지의 구조가 유연하지 않을 수 있습니다. 또한, HTTP 프로토콜을 기반으로 하기 때문에, 보안성이 낮을 수 있습니다.