기타

'웹 개발자' 기술면접 예상 질문3

softPattern 2023. 8. 22. 01:37
IaaS, PaaS, SaaS ?

서비스형 인프라(IaaS)

IaaS(Infrastructure as a Service)는 클라우드 IT의 기본 빌딩 블록을 포함하며 일반적으로 네트워킹 기능, 컴퓨터(가상 또는 전용 하드웨어) 및 데이터 스토리지 공간에 대한 액세스를 제공합니다. IaaS는 IT 리소스에 대한 최고 수준의 유연성과 관리 제어를 제공하며 오늘날 많은 개발자에게 친숙한 기존 IT 리소스와 가장 유사합니다.

서비스형 플랫폼(PaaS)

PaaS(Platform as a Service)를 사용하면 기본 인프라(일반적으로 하드웨어 및 운영 체제)를 관리할 필요가 없으며 애플리케이션 배포 및 관리에 집중할 수 있습니다. 이렇게 하면 리소스 조달, 용량 계획, 소프트웨어 유지 관리, 패치 또는 응용 프로그램 실행과 관련된 기타 획일적인 작업에 대해 걱정할 필요가 없기 때문에 효율성을 높일 수 있습니다.

서비스형 소프트웨어(SaaS)

SaaS(Software as a Service)는 서비스 공급자가 실행하고 관리하는 완성된 제품을 제공합니다. 대부분의 경우 SaaS를 언급하는 사람들은 최종 사용자 애플리케이션을 언급합니다. SaaS 오퍼링을 사용하면 서비스 유지 방법이나 기본 인프라 관리 방법에 대해 생각할 필요가 없습니다. 해당 소프트웨어를 어떻게 사용할 것인지만 생각하면 됩니다. SaaS 애플리케이션의 일반적인 예는 이메일 제품에 추가된 기능을 관리하거나 이메일 프로그램이 실행되는 서버 및 운영 체제를 유지 관리하지 않고도 이메일을 주고받는 데 사용할 수 있는 웹 기반 이메일입니다.

#출처: AWS

 


 

디자인 패턴이란?

일종의 설계 기법이다. (특정한 구현이 아닌 구현의 여러 표준을 위한 아이디어이다.)

 

하나의 변경을 위하여 다른 것들을 변경해야 하거나, 하나를 수정했는데 관련 없는 다른 부분에 영향을 준다거나, 재사용을 위한 컴포넌트 분리가 어렵다거나 하는 문제점들을 방지하는 설계 기법이다.

 

=> SW의 재사용성, 호환성, 유지보수성을 보장한다.

SOLID 객체지향 설계 원칙

Single Responsibility Principle: 하나의 클래스는 하나의 역할만을 수행해야 한다.

Open - Close Principle: 확장 및 상속에는 열려있고, 수정에는 닫혀 있어야 한다.

Liskov Substitution Principle: 자식이 부모의 자리에 항상 교체될 수 있어야 한다.

Interface Segregation Principle: 인터페이스가 잘 분리되어서, 클래스가 꼭 필요한 인터페이스만 구현하도록 해야한다.

Dependency Inversion Property: 상위 모듈이 하위 모듈에 의존하면 안된다. 둘 다 추상화에 의존하며 추상화는 세부 사항에 의존하면 안된다.

 


추상클래스와 Interface의 차이는 무엇일까?
추상클래스
  • 'abstract' 키워드를 사용하여 정의한다.
  • 하나 이상의 추상 메서드를 가지는 클래스이다. 상속을 통해 하위 클래스에서는 반드시 해당 추상 메서드를 구현해야한다.
  • Java에서 다중 상속을 지원하지 않기 때문에 여러 개의 추상 클래스를 상속할 수는 없다.
  • 상속을 통해서만 사용 가능하며, 하위 클래스의 생성자에서 super()를 사용하여 상위 클래스의 생성자를 호출하고 초기화 시킨다.
Interface
  • 'interface'키워드를 사용하여 정의한다.
  • 추상클래스보다 추상화 수준이 높으며 추상클래스와 다르게 구현부가 있는 일반 메서드나 일반 멤버변수를 가질 수 없다.
  •  
공통점
  • 추상메소드를 사용하여 메소드의 선언만 있고, 구현 내용이 없다.
  • new 키워드를 사용하여 인스턴스를 생성할 수 없다.
  • 상속받은 클래스가 반드시 추상 메소드를 구현해야한다.
  •  
차이점
  • 추상클래스
    • 'extends'를 사용하여 상속한다.
    • 다중상속이 불가능하다.
    • 일반 변수, 메소드, 추상메소드를 모두 가질 수 있다.
    • 확장의 느낌. 자신의 기능을 하위로 확장시키는 것.
  • Interface
    • 'implements'를 사용하여 상속한다.
    • 다중상속이 가능하다.
    • static 변수와 추상메소드만 가질 수 있다.
    • 구현의 느낌. interface에 정의된 메소드를 각 클래스의 목적에 맞게 동일한 기능으로 구현하는 것.
  • 상위 클래스는 다중 상속이 불가능하기 때문에 하나의 클래스에서 하위 클래스에 물려줄 특성이 풍부할수록 좋고, 인터페이스는 다중 상속이 가능하기 때문에 각각의 인터페이스는 목적에 맞는 최소한의 메서드(구현을 강제할)를 선언하는 것이 좋습니다.

#출처: https://wildeveloperetrain.tistory.com/112