기술면접 스터디 - 3주차

코변·2022년 10월 2일
0

기술면접 스터디

목록 보기
3/3

9월 26일(월)

  • 관심사 분리란 무엇인지 설명해주세요.
    • 가독성 높은 코드를 짜려고 노력하다보면 도달하게 되는 어쩌면 개발자가 최초로 만나게 되는 디자인패턴이라고 볼 수도 있겠다.
    • 모듈이나 함수가 하나의 큰 책임을 지기 보다는 잘게 나누어 각 모듈과 함수가 하나의 기능만을 수행할 수 있도록 코드를 짜는 것을 말하는데 이를 통해서 유지보수의 편의성, ‘분리’, ‘확장’을 고려한 코드를 작성할 수 있다는 장점이 있다.
  • SOLID 원칙에 대해 설명해주세요. SOLID란 객체지향 개발의 5대 원칙을 말한다.
    • 단일책임의 원칙
      • 클래스는 하나의 책임을 수행하는데 집중되어 있어야 한다는 원칙
    • 개방 폐쇄의 원칙
      • 객체의 확장에는 열려있고 변경은 최소화할 수 있도록 변경에는 닫혀있는 코드를 작성해야한다.
    • 리스코프 치환의 원칙
      • 자식 클래스는 자신의 부모 클래스에서 가능한 모든 행위를 수행할 수 있어야 하고 부모클래스와 자식클래스의 행위는 일관되어야 한다는 의미
    • 인터페이스 분리의 원칙
      • 클라이언트입장에서 사용하는 기능만 제공하도록 인터페이스를 분리해야한다는
    • 의존성 역전의 원칙
      • 객체는 서로 도움을 주고받으며 의존관계를 발생시키는데 그 의존관계를 맺을 때 변화하기 쉬운 것보다 변화가 없을 예정인 객체에 의존하라는 원칙

9월 27일(화)

  • 웹서버와 WAS의 차이점 중심으로 설명해주세요.
    • Web Server
      • http 프로토콜을 기반으로 하여 클라이언트에게 정적인 컨텐츠를 제공한다.
        클라이언트의 요청(Request)을 WAS에 보내고, WAS가 처리한 결과(동적컨텐츠)를 클라이언트에게 전달한다.
      • 아파치, nginx
    • WAS
      • 동적인 컨텐츠를 제공한다.
      • 웹 애플리케이션을 실행시켜 필요한 기능을 수행하고 그 결과를 웹 서버에게 전달하는 일종의 미들웨어를 말한다.
      • 톰캣, 구니콘
    • Web Server와 WAS 분리 이유?
      • WAS를 통해 요청에 맞는 데이터를 DB에서 가져와서 그때 그때 결과를 만들어서 제공함으로써 자원을 효율적으로 사용할 수 있다.
      • 간단한 정적 파일(이미지)을 Application Server까지 가지 않고 앞단에서 빠르게 보내줄수 있다.
      • 기능을 분리하여 서버의 부하를 방지하고 물리적으로 분리하여 보안 강화한다
  • ASGI와 WSGI가 무엇인지 각각 설명해주세요.
    • wsgi
      • WSGI는 python application(python script)이 웹 서버와 통신하기 위한 표준 인터페이스이며, 파이썬 프레임워크이다.
      • 웹서버의 동적 페이지 요청을 wsgi 어플리케이션에 번역해주는 역할을 담당한다고 생각하면 이해하기가 쉽다.
      • gunicorn
    • asgi
      • WSGI와 달리 비동기적으로 이벤트 처리가 가능하다. 그로인해 여러 송수신 이벤트가 가능하다.
      • uvicorn

9월 28일(수)

  • 파이썬에서의 매개변수와 인자의 차이를 설명해주세요. 인자란 어떤 함수를 호출할 시에 전달되는 값을 말하고 매개변수란 그 전달된 인자를 받아들여 함수 내에서 다시 선언되는 변수를 말합니다.
  • 파이썬에서의 상속, 오버라이딩에 대해 설명해주세요.
    • 상속
      • 클래스를 선언 할때 소괄호 안에 부모클래스를 넣어 상속받을 수 있다.
      • 부모클래스에서 선언한 속성과 메소드를 전부 물려받을 수 있다.
    • 오버라이딩이란
      • 부모 클래스의 메소드를 자식클래스에서 재 정의하는 것을 말한다.
      • 이를 통해서 부모클래스의 특성을 이어받으면서 자식클래스의 확장을 도모할 수 있다.
      • 자동차 예시

9월 29일(목)

  • 파이썬 클래스에서의 init, self, super 개념에 대해 설명해주세요. init은 객체 생성과 관련하여 데이터의 초기화를 실시하는 함수 self는 객체의 인스턴스 그 자체를 말한다. 즉, 객체 자기 자신을 참조하는 매개변수라고 생각하면 편하다. super는 부모 클래스를 가르킨다. super()는 주로 상속받은 자식클래스에서 부모클래스의 속성을 가져오면서 초기화를 실행하기 위해서 쓰입니다. 자식 클래스에서 init으로 초기화를 실행할때 init함수도 오버라이딩 되기 때문에 super()가 필요해진다.

9월 30일(금)

  • 백엔드 개발자로서 Django를 선택한 이유와 Django로 개발을 하면서 어떠한 장/단점을 느꼈는지 기술적인 측면 위주로 설명해주세요.
    • 빠르게 웹서버를 구축하고 그 흐름을 파악하고 싶었고 다양한 패키지들을 활용해 웹서버를 구축하는 것을 넘어서 여러 기술들을 체험해볼 수 있을 거라고 생각했습니다. 또한, 내장함수들과 패키지를 뜯어보면서 웹서버 구동을 더 깊게 들여다 볼 수 있었던건 부가소득이었다.
    • 장고의 장점은 공식문서의 탄탄함 덕분에 개발과정에서의 막힘이 없도록 도와준다는 점이 큰 장점이라고 생각합니다. 또한, 필요한 내장함수를 그때 그때 찾을 수 있고 패키지의 풀이 정말 다양해서 여러 기술을 다루기 위해 공부할 때 큰 도움을 받을 수 있다는 것입니다.
    • 장고의 단점은 아무래도 동기 비동기 처리를 지원하지 않는다는 점 → 장고닌자를 활용하지 않는 이상 내장함수를 직접 뜯어보지 않는 이상 실제로 구현을 어떻게 하는지 알 수가 없다는 점입니다. 다른 기술을 활용해 웹서버를 구축할 때 어.. 이거 내가 직접 해야해? 하는 생각을 심어줌
profile
내 것인 줄 알았으나 받은 모든 것이 선물이었다.

0개의 댓글