- 프론트엔드
- 웹페이지가 브라우저에 랜더링되는 과정을 설명해주세요.
- Restful API에 대해 설명해주세요. GET,POST 외에 알고있는 메소드와 그 기준을 설명해주세요. RESTful API 가 아닌 것들은 어떤게 있나요?
- https://www.youtube.com/watch?v=sJ14cWjrNis
- 백엔드
- 객체지향 프로그래밍(OOP)에 대해 설명해주세요. 알고있는 원칙이나 키워드를 언급해주세요
- REST API란 무엇인가요? (모두가 답변) 프로젝트에 REST API를 사용한 이유가 무엇인가요? (프로젝트에 REST API를 사용하셨을 경우에만 추가 답변), REST API 말고 다른 비교할만한 것을 알고 있나요?
1. OOP(Object-Oriented Programming)
객체 지향 프로그래밍 방식이라고 하며, 구조적 프로그래밍 방식의 개선된 형태 입니다. 프로그래밍 패러다임 중 하나로, 소프트웨어를 개발하는 방법론입니다. OOP에서는 데이터와 해당 데이터를 처리하는 동작을 하나의 논리적인 단위인 객체(Object)로 묶어서 사용합니다.
프로그램을 함수단위로 나누고 함수끼리 호출하는 방식을 말하며, 큰 문제를 해결하기 위해 문제를 작은 단위들로 나누어 해결하는 방식입니다.(Top-Down 방식 이라고도 합니다)
이 방식을 사용하면 코드의 재사용성이 높아지고 코드가 간결해져 유지보수에 유리하다. 하지만, 처리 시간이 비교적 오래 걸리며 설계시 많은 고민과 시간이 필요하다.
OOP 의 5원칙 SOLID
- SRP, Single Responsibility Principle 한 클래스는 하나의 책임만 가져야 합니다.
- OCP, Open/Closed Principle 확장에는 열려 있으나, 변경에는 닫혀 있어야 합니다.
- LSP, Liskov’s Substitution Principle 프로그램의 객체는 프로그램의 정확성을 깨드리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
- ISP, Interface Segregation Pirinciple 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫습니다.
- DIP Dependency Inversion Principle 추상화에 의존한다. 구체화에 의존하면 안된다.
SOLID 원칙 상세 정리
단일 책임 원칙 SRP
클래스(객체) 는 단 하나의 책임만 가져야 한다는 원칙입니다.
책임이란 의미는 하나의 기능 담당을 의미합니다.
따라서 하나의 클래스는 하나의 기능만을 담당하여 하나의 책임을 수행하는데 집중되도록 클래스를 따로따로 여러개 설계하라는 원칙입니다.
이를 통해 기능 변경이 일어났을 때 해당하는 하나의 클래스만을 수정하면 되기에 유지보수성을 높이는 것에 이점이 있습니다.
개방 폐쇄 원칙 OCP
확장에 열려있어야 하며, 수정에는 닫혀있어야 합니다.
기능 추가 요청이 왔을 때 클래스를 확장을 통해 쉽게 구현하며, 확장에 따른 클래스 수정은 최소화 하도록 하는 설계 기법 입니다.
즉, 다형성과 확장을 가능케 하는 객체지향의 장점을 극대화 하는 기본적인 설계 원칙입니다.
(자바 프로그래밍을 배우면서 사용한 추상 클래스와 상속을 통한 클래스 관계 구축을 말합니다)
리스코프 치환 원칙 LSP
서브타입은 언제나 기반(부모) 타입으로 교체할 수 있어야 한다는 원칙입니다.
이는 다형성 원리를 이용하기 위한 원칙 개념입니다.
다형성의 특징을 이용하기 위해 상위 클래스 타입으로 객체를 선언하여 하위 클래스의 인스턴스를 받으면 업캐스팅된 상태에서 부모의 메서드를 사용해도 동작이 의도대로 흘러가야 하는 것을 의미합니다.
인터페이스 분리 원칙 ISP
인터페이스를 각각 사용에 맞게 끔 잘게 분리하는 설계 원칙을 말합니다.
즉, 인터페이스의 단일 책임을 강조하며 인터페이스를 이용해 클라이언트 기준으로 분리함으로 클라이언트의 목적과 용도에 적합한 인터페이스만을 제공 하는 것이 목표입니다.
다만, 한번 인터페이스를 분리해 구성하고 나중에 무언가 수정사항이 생겨 또 인터페이스를 분리하는 행위는 하지 않는것이 좋습니다.
의존 역전 원칙 DIP
Class 를 참조해서 사용해야 하는 상황에 대상의 상위 요소를(추상 클래스 or 인터페이스)로 참조하라는 원칙입니다.
즉, 구현 클래스에 의존하지 말고 인터페이스에 의존하라는 의미입니다.
가장 큰 목적은 각 클래스 간의 결합도를 낮추는 것 입니다.
4가지 원칙
- 캡슐화 Encapsulation 실제로 구현 부분을 외부에 드러나지 않도록 하는 것으로 변수와 메소드를 하나로 묶습니다. 데이터를 외부에서 직접 접근하지 않고 함수를 통해서만 접근합니다. ex) public, private, protected (접근 제한자)
- 상속화 Inheritance 자식 클래스가 부모 클래스의 특성과 기능을 물려받는 것 기능의 일부분을 변경하는 경우 자식 클래스에서 상속받아 수정 및 사용이 가능합니다. 상속은 캡슐화 유지, 클래스의 재사용이 용이하도록 해줍니다.
- 추상화 Abstration 인터페이스로 클래스들의 공통적인 특성(변수, 메소들) 들을 묶어 표현하는 것입니다. 인터페이스와 구현을 분리함으로써, 객체가 가진 특성 중 필수 속성만으로 객체를 묘사하고 유사성만을 표현하며 세부적인 상세사항은 각 객체에 따라 다르게 구현되도록 할 수 있습니다. ex) 인터페이스, 추상클래스, 추상메소드
- 다형성 Polymorphism 어떤 변수나 메소드가 상황에 따라 다른 결과를 내는 것을 말합니다. 하나의 객체가 여러 가지 타입을 가질 수 있는 특징으로 인해 객체들을 유연하게 바꿔가며 사용할 수 있습니다.
2. REST API
HTTP 프로토콜을 통해 API 를 설계하기 위한 아키텍쳐 스타일 입니다.
(유연성이 뛰어납니다) HTTP 요청을 통해 통신하여 데이터 생성, 읽기, 수정, 삭제 기능을 수행합니다.
CRUD 작업 이라고도 하며, HTTP Method(요청 메소드) 의 4가지 방법을 사용합니다. POST, GET, PUT, DELETE
REST 는 자원을 이름으로 구분하여 해당 자원의 상태(정보) 를 주고 받는 모든 것을 의미합니다.
REST API 는 데이터와 기능의 집합을 제공하여 컴퓨터가 프로그램간 상호작용을 촉진하며, 서로 정보를 교환 가능하도록 하는 것을 의미합니다.
REST 기반으로 시스템을 분산해 확장성과 재사용성을 높여 유지보수 및 운용을 편리하게 할 수 있습니다.
또한, HTTP 표준을 기반으로 구현하므로 HTTP 를 지원하는 프로그램 언어로 클라이언트, 서버를 구현 가능합니다.
RESTful
이해하기 쉽고 사용하기 쉬운 REST API 를 만드는 것을 의미합니다.
REST를 제공하는 웹 서비스를 RESTful 하다고 할 수 있습니다. REST 원리를 따르는 시스템은 RESTful 이란 용어로 지칭된다.
정리
1. 객체지향 프로그래밍(OOP)에 대해 설명해주세요. 알고있는 원칙이나 키워드를 언급해주세요
프로그램을 함수단위로 나누고 함수끼리 호출하는 방식을 말하며, 구조적 프로그래밍 방식의 개선된 형태 입니다. 이 방식을 사용하면 코드의 재사용성이 높아지고 코드가 간결해져 유지보수에 유리하지만, 처리 시간이 비교적 오래 걸리며 설계시 많은 고민과 시간이 필요합니다.
특징으로는 5가지 원칙과 4가지 특성을 가지고 있습니다.
- OOP 의 5원칙 SOLID
- SRP, Single Responsibility Principle 한 클래스는 하나의 책임(기능)만을 가져야 합니다.
- OCP, Open/Closed Principle 확장에는 열려 있으나, 변경에는 닫혀 있어야 합니다.
- LSP, Liskov’s Substitution Principle 프로그램의 객체는 프로그램의 정확성을 해치지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 합니다.
- ISP, Interface Segregation Pirinciple 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫습니다.
- DIP Dependency Inversion Principle 추상화에 의존한다. 구체화에 의존하면 안됩니다.
- 4가지 원칙
- 캡슐화 Encapsulation 실제로 구현 부분을 외부에 드러나지 않도록 하는 것으로 변수와 메소드를 하나로 묶습니다. 데이터를 외부에서 직접 접근하지 않고 함수를 통해서만 접근합니다.
- 상속화 Inheritance 자식 클래스가 부모 클래스의 특성과 기능을 물려받는 것을 말합니다.
- 추상화 Abstration 인터페이스로 클래스들의 공통적인 특성(변수, 메소들) 들을 묶어 표현하는 것을 말합니다.
- 다형성 Polymorphism 어떤 변수나 메소드가 상황에 따라 다른 결과를 내는 것을 말합니다.
2. REST API란 무엇인가요?
추가 질문
프로젝트에 REST API를 사용한 이유가 무엇인가요?
REST API 말고 다른 비교할만한 것을 알고 있나요?
주소와 메소드만 보고 요청의 내용을 알아볼 수 있다는 장점으로 인해 개발자간의 소통도 쉽고 개발 시 혼선도 예방 가능합니다.
또한, 언어에 상관 없이 HTTP 를 사용하는 다양한 플랫폼에서 모두 같은 주소로 서버에 요청을 보낼 수 있습니다.
즉, 특정 기술이나 플랫폼에 얽매이지 않기에 유연성이 뛰어납니다.
GraphQL 이라는 아키텍쳐 스타일이 있습니다.
이는 REST 와 마찬가지로 클라이언트와 서버 간의 통신을 위한 아키텍쳐 스타일로, REST 에서 발생할 수 있는 몇가지 단점을 보완하고자 개발되었습니다. REST와 달리, 클라이언트에서 필요한 데이터만 요청이 가능하며, 하나의 API 요청으로 여러 데이터 소스에서 데이터를 가져올 수 있습니다.
또한, 클라이언트와 서버간의 커뮤니케이션에서 발생할 수 있는 오버헤드를 최소화할 수 있습니다. 다만, REST 에 비해 더 복잡하고 적절한 캐싱전략이 없을 경우 네트워크 부하가 커질 수 있습니다.
'일기' 카테고리의 다른 글
2023-02-23 (0) | 2023.02.23 |
---|---|
2023-02-22 (0) | 2023.02.22 |
2023-02-18 (0) | 2023.02.18 |
2023-02-17 (0) | 2023.02.17 |
2023-02-16 (0) | 2023.02.17 |