본문 바로가기
카테고리 없음

(취업스터디 1일차) OOP 와 REST API

by hbIncoding 2023. 5. 8.

0. 질문

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

 > 객체지향 프로그래밍은 프로그래밍에서 필요한 데이터를 추상화 시켜 상태와 행위를 가진 객체를 만들고 그 객체들간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법입니다. 5대 원칙으로 단일 책임, 개방 폐쇄, 인터페이스 분리, 리스코프 치환, 의존 역전 원칙이 있습니다. 메인 키워드로 추상화, 캡슐화, 상속, 다형성 그리고 객체 , 클래스, 인스턴스가 있음을 말씀드립니다.

 

 2) REST API란 무엇인가요? 프로젝트에 REST API를 사용한 이유가 무엇인가요? REST API 말고 다른 비교할 만한 것을 알고 있나요?

 > REST API란 REST 원리를 따르는 API를 의미합니다. REST는 자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것을 의미 합니다. 

 > REST API의 여러 장점 중 메시지의 의도가 명확하고, 서비스 디자인에 생기는 문제를 최소화 할 수 있으며쉽게 사용할 수 있기 때문입니다.

 > SOAP API, Websocket API, RPC API, GraphQL API, Open API, MQTT API 등이 있습니다.

 

1. 객체지향 프로그래밍(OOP) 설명하기

 1) 키워드 : 객체, 클래스, 인스턴스, 추상화, 캡슐화, 상속, 다형성, 5대 원칙

  • 객체지향 이란 : 프로그래밍에서 필요한 데이터를 추상화 시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법
  • 객체 : 클래스에서 정의한 것을 토대로 메모리에 할당된 것으로 프로그램에서 사용되는 데이터 또는 식별자에 의해 참조되는 공간을 의미한다. 변수, 자료 구조, 함수 또는 메소드가 될 수 있다.
  • 클래스 : 객체를 정의하는 틀이나 설계도, 객체들이 어떤 특징들이 있어야 한다고 정의하는 추상화된 개념이다.
  • 인스턴스 : 클래스를 사용하기 위해 해당 클래스 타입의 객체를 선언하는 것을 인스턴스화 라고 한다. 그리고 메모리에 할당된 개체가 인스턴스 이다.
  • 추상화 : 객체들의 공통된 특징을 파악해 정의해 놓은 설계 기법이라 할 수 있다. 객체들이 가지는 공통된 특징을 미리 정의하고 객체 선언시 각 특징을 정의한다.
  • 캡슐화 : 클래스 안에 서로 연관이쓴 속성과 기능들을 하나의 캡슐로 만들어 데이터를 외부로부터 보호하는 것을 말한다. 외부 객체는 객체가 제공하는 필드와 메소드만 이용 가능하게 하여, 외부의 잘못된 사용으로 부터 손상을 방지하고, 접근 제어자를 통해 어떤 것을 숨기고 노출할지 결정한다.
  • 상속 : 자식 클래스가 부모 클래스를 선택하여 부모의 필드와 메소드를 물려 받는 것. 재사용을 통해서 빠른 개발, 중복 코드 감소, 유지보수 편의성 제공, 객체의 다형성을 구현 할 수 있다.
  • 다형성 : 같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질을 말한다. 기능을 확장하거나, 객체를 변경해야할 때 타입 변경 없이 객체 주입만으로 수정이 일어나게 할 수 있다. 오버로딩, 오버라이딩, 인터페이스가 이 경우에 해당한다.
  • 5대원칙
    • 단일 책임 원칙(SRP) : 하나의 모듈이 하나의 책임을 가져야한다. 
    • 개방 폐쇄 원칙(OCP) : 새로운 동작 추가 가능하여 기능확장이 가능하고, 기존 코드 수정 없이 동작을 추가하거나 변경할 수 있다. 확장에 대해 열려있고, 수정에 대해 닫혀있어야 한다.
    • 인터페이스 분리 원칙(ISP) : 목적과 관심이 각기 다른 클라이언트가 있다면 인터페이스를 통해 적절하게 분리하여 목적과 용도에 적합한 인터페이스만 제공하여, 불필요한 간섭을 최소화 한다.
    • 리스코프 치환 원칙(LSP) : 하위 타입은 상위 타입으로 대체할 수 있어야 한다. 객체를 사용하는 클라이언트는 상위 타입이 하위 탑으로 변경되어도, 차이점을 인식하지 못한 채 상위 타입의 퍼블릭 인터페이스를 통해 서브 클래스를 사용 할 수 있어야 한다.
    • 의존 역전 원칙(DIP) : 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안되며, 저수준 모듈이 고수준모듈에 의존 해야 한다.

  

2. REST API 설명하기

 1) REST(Representational State Transfer) : 자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것을 의미

  • HTTP URI를 통해 자원을 명시하고, HTTP Method 를 통해, 해당 자원(URI)에 대한 CRUD Operation을 적용한는 것을 의미 한다.
  • 장점
    • HTTP 프로토콜의 인프라를 그대로 사용하여 별도의 인프라 구축이 필요없다.
    • HTTP 프로토콜 표준을 최대한 활용하여 여러가지 추가적인 장점을 함께 가져갈 수 있다.
    • HTTP 프로토콜 표준을 따르는 모든 플랫폼에서 사용 가능
    • Hypermedia API의 기본을 충실히 지키면서 범용성을 보장한다.
    • REST API 메시지가 의도하는 바가 명확하게 나타난다.
    • 여러 가지 서비스 디자인에 생기는 문제를 최소화 한다.
    • 서버와 클라이언트의 역할을 명확하게 분리한다.
  • 단점
    • 표준이 없어 정의가 필요하다
    • HTTP Method 형태가 제한적
    • 브라우저를 통해 테스트 할 일이 많은 서비스 라면 쉽게 고칠 수 있는 URL 보다 Header 정보의 갑을 처리해야하므로 전문성이 요구 된다.
    • 구형 브라우저에는 호환 되지 않아 지원해주지 못하는 동작이 많다.

 2) REST API : REST의 원리를 따르는 API를 의미

  • RESTFUL 이란 REST의 원리를 따르는 시스템을 의미한다. 하지만 REST를 사용해도 모두가 RESTful 한 것은 아니다. REST API의 설계 규칙을 올바르게 지킨 시스템을 RESTful하다고 말할 수 있다.

 3) REST API 설계 예시

ㄱ. URI는 동사보다는 명사를, 대문자보다는 소문자를 사용하여야 한다.

Bad Example http://khj93.com/Running/
Good Example  http://khj93.com/run/  

  ㄴ. 마지막에 슬래시 (/)를 포함하지 않는다.

Bad Example http://khj93.com/test/  
Good Example  http://khj93.com/test

  ㄷ. 언더바 대신 하이폰을 사용한다.

Bad Example http://khj93.com/test_blog
Good Example  http://khj93.com/test-blog  

  ㄹ. 파일확장자는 URI에 포함하지 않는다.

Bad Example http://khj93.com/photo.jpg  
Good Example  http://khj93.com/photo  

  ㅁ. 행위를 포함하지 않는다.

Bad Example http://khj93.com/delete-post/1  
Good Example  http://khj93.com/post/1  

 

 

3. 다른 종류의 API

  1. SOAP API: Simple Object Access Protocol의 약자로, 기존의 웹 서비스 프로토콜 중 하나입니다. HTTP, HTTPS, SMTP, FTP 등 다양한 프로토콜을 이용하여 XML 형식의 메시지를 전송합니다.
  2. RPC API: Remote Procedure Call의 약자로, 분산 시스템에서 프로그램 간 통신을 위해 사용되는 프로토콜입니다. 다양한 언어와 프레임워크에서 지원되며, gRPC, Apache Thrift 등이 대표적인 예시입니다.
  3. GraphQL API: Graph Query Language의 약자로, 데이터를 조회하고 조작하기 위한 쿼리 언어입니다. REST API와 달리, 클라이언트에서 필요한 데이터를 정확하게 요청할 수 있습니다.
  4. Websocket API: 양방향 통신을 위한 API로, 클라이언트와 서버 간의 연결을 유지하며 실시간으로 데이터를 주고받을 수 있습니다.
  5. OpenAPI: REST API를 설계, 구축, 문서화하는 데 사용되는 표준화된 프레임워크입니다. RESTful API를 설계할 때 사용되는 Swagger와 같은 도구들이 이에 해당합니다.
  6. MQTT API: Message Queuing Telemetry Transport의 약자로, IoT 기반 애플리케이션에서 사용되는 프로토콜입니다. 경량성과 저전력성을 갖추어 대량의 센서나 장치에서 효과적으로 통신할 수 있습니다.

 

4. 참조

 1) REST API : https://khj93.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-REST-API%EB%9E%80-REST-RESTful%EC%9D%B4%EB%9E%80

 

[네트워크] REST API란? REST, RESTful이란?

REST API란 REST를 기반으로 만들어진 API를 의미합니다. REST API를 알기 위해 REST부터 알아보도록 하겠습니다. REST란? REST(Representational State Transfer)의 약자로 자원을 이름으로 구분하여 해당 자원의 상

khj93.tistory.com