슈코딩

[신입 기술면접] 기술면접 스터디 정리 3 본문

코딩공부/기술면접

[신입 기술면접] 기술면접 스터디 정리 3

Roshu 2022. 10. 22. 09:18

 

💡관심사 분리란 무엇인지 설명해주세요

관심사 분리

  • 하나의 관심사(함수, 기능)는 하나의 역할만 가지도록 구성하는 것
  • 하나의 함수에 여러가지 조건들로 혼잡스러운 로직을 정리하기 위함
  • List 안의 숫자들에서 최댓값과 최솟값을 찾고, 구한 값을 모두 더하는 로직이 있다고 가정 했을때
    그 안에서의 관심사는 최댓값 찾기, 최솟값 찾기, 모두 더하기 이렇게 3가지로 나눌 수 있다.
    이렇게 각각의 관심사를 함수로 나누어서 처리를 하는 기법

💡SOLID 원칙에 대해 설명해주세요

SOLID 원칙

  • 객체지향 프로그래밍의 가장 큰 장점인 유연성, 재사용성, 유지보수성
    객체지향 5대 원칙
  • SRP(단일책임원칙)
    • 클래스는 다른 책임과 관련된 코드에 영향을 미치지 않기 위해 단 한개의 책임을 가져야한다.
  • OCP(개방-폐쇄 원칙)
    • 확장에는 열려있어야 하고, 변경에는 닫혀 있어야 한다.
    • 기존의 코드를 변경이 아닌, 수정, 추가로 나아갈 수 있도록 설계하는 것을 말한다.
  • LSP(리스코프 치환 원칙)
    • 상위 타입 객체를 하위 타입 객체로 치환해도 정상적으로 동작하게끔 설계해야한다.
  • ISP(인터페이스 분리 원칙)
    • 하나의 클래스는 자신이 사용하는 인터페이스만을 구현해야한다.
    • 클라이언트가 필요로 하는 인터페이스들을 분리함으로써 클라이언트가 사용하지 않는 인터페이스의 작업에 영향을 받지 않도록 한다.
  • DIP(의존 역전 원칙)
    • 의존 관계를 맺을 때, 구체화된 클래스보다는 추상적인 클래스에 의존을 해야한다.

💡웹서버와 WAS의 차이점 중심으로 설명해주세요

웹서버

  • 클라이언트 요청시, 요청을 받아 정적 컨텐츠를 제공하는 서버

WAS

  • 웹서버 단독으로 처리할 수 없는 데이터베이스 조회나 다양한 로직 처리가 필요한 동적 컨텐츠를 제공하는 서버
  • 웹서버 기능들을 구조적으로 분리하여 처리하고자하는 목적으로 제시

DB조회 및 로직처리는 WAS를 사용하고, 단순한 정적 컨텐츠는 웹서버에게 맡겨서 기능을 분리하여 서버 부하를 방지하는 방향으로 사용한다.


💡WSGI와 ASGI가 무엇인지 각각 설명해주세요

WSGI (Web Server Gateway Interface)

  • Python 애플리케이션, 스크립트가 웹서버와 통신하기 위한 인터페이스

ASGI (Asynchronous Server Gateway Interface)

  • WSGI의 정신적 계승자
  • 웹소켓 등을 사용한 실시간 채팅서비스, 대용량 트래픽 처리 등 WSGI로는 구현하기 어려운
    비동기 기능을 구현하기 위한 인터페이스

WSGI로 비동기처리가 불가능한가요?

비동기 큐와 같은 Celery를 잘만 활용하면 대용량 트래픽처리를 요구하는 서비스 구현이 불가능한 것은 아니지만, 

트레이싱 등과 같은 유지 보수와 기본적인 구현이 쉽지 않다는것으로 알고있다.


💡파이썬에서의 매개변수와 인자의 차이를 설명해주세요

매개변수

  • 함수를 정의할 때 넘겨주는 a,b와 같은 변수

인자

  • 매개변수의 실제값 즉, 함수가 호출되면서 매개변수에 들어가는 값.

💡파이썬에서의 상속, 오버라이딩에 대해 설명해주세요

상속

  • 기존의 클래스로부터 메소드를 물려받아 새롭게 클래스를 작성하는것
  • 물려주는 클래스를 부모클래스, 물려받는 클래스를 자식클래스로 정의
  • 상속을 했을때 장점은 중복되는 코드를 줄일 수 있으며, 유지보수에 용이

오버라이딩

  • 부모 클래스가 가지고 있는 메서드를 자식 클래스가 재정의(기능 추가, 수정) 해서 사용하는것

오버로딩

  • 한 클래스 내에서 이름은 같지만 파라미터 수, 타입이 다른 메소드를 중복으로 선언하는 것
  • 메소드 이름이 같아야 함
  • 파라미터 갯수가 달라야 함
  • 파라미터 갯수가 같을 경우, 데이터 타입이 달라야 함

decorator를 왜 사용하는가?

함수 위에 붙으며,

목적 자체가 기존의 함수에 짜놓은 로직을 건드리기가 싫을 경우

추가적인 기능을 구현할 경우에 사용한다.


💡파이썬 클래스에서의 __init__, self, super 개념에 대해 설명해주세요

__init__

  • 객체가 생성될때 자동으로 호출
  • init 메서드를 통해 객체 생성시 만들어진 변수들은 모두 독립된 메모리에 저장
  • 파이선 클래스가 최초로 생성이 되었을 떄 생성된 객체에 초기화를 하는데에 관여를 하는 생성자
  • 객체변수들의 값을 넣어주는것이 초기화 하는것
  • 사용할 때 첫 인자로 self를 사용하게 됩니다.

self

  • 객체의 인스턴스(자기자신) 그 자체를 말함
  • 객체 자기 자신을 참조하는 매개변수
  • 클래스의 메소드를 정의할 때 사용

super()

  • 부모클래스의 임시적인 객체를 반환하여 부모클래스의 메소드를 사용할 수 있도록 하는 것
  • 자식에서 부모클래스를 지칭할때 사용

💡백엔드 개발자로서 Django를 선택한 이유와 Django로 개발을 하면서 어떠한 장/단점을 느꼈는지 기술적인 측면 위주로 설명해주세요

Django 선택 이유

  • 파이썬을 기반으로 하는 프레임워크중에서 가장 대표적
  • DB와 Admin페이지, ORM등 기본적으로 제공하는 기능이 편리하여 개발에 유용

Django 장점

  • ORM, Admin, permission등 내부 기능이 많아서 숙지하면 빠른개발이 가능
  • Django 템플릿을 활용하여 프론트엔드 개발도 다른 기술없이 개발이 가능
  • 파이썬에서 가장 많이 쓰이는 프레임워크이기 때문에 관련 자료가 많은점

Django 단점

  • 기능이 많은 만큼 무겁고 복잡하며, Flask와 비교 했을때 자유도가 떨어짐

 

Comments