파이썬 개발자 면접 질문

jongeun·2023년 4월 19일
0
post-custom-banner
  • RESTful api란?

    REST원칙을 따르는 api를 의미
    REST는 웹서버를 설계할 때 사용되는 아키텍쳐 스타일로, 웹 서비스의 구성요소 간에 효율적이고 안정적인 상호작용을 촉진함
    RESTful api는 클라이언트와 서버 간에 데이터를 교환할 때 널리 사용되며, 웹 모바일 애플리케이션 및 다른 서비스와 통신할 수 있도록 개발 됨

    1. Stateless: 각 요청은 독립적으로 처리되며, 서버는 이전 요청에 대한 상태 정보를 저장하지 않습니다. 이렇게 함으로써 서버의 부하를 줄이고 확장성을 향상시킬 수 있습니다.
    2. Client-Server: 클라이언트와 서버는 서로 독립적이며, 각각의 역할에 집중할 수 있습니다. 이로 인해 유연한 아키텍처를 구성할 수 있습니다.
    3. Cacheable: 서버에서 제공하는 리소스는 캐시에 저장될 수 있으며, 이를 통해 성능과 효율성을 높일 수 있습니다.
    4. Layered System: 시스템은 여러 계층으로 구성될 수 있어서 각 계층은 독립적으로 관리되고 업데이트될 수 있습니다. 이를 통해 시스템의 유지보수 및 확장성이 향상됩니다.
    5. Uniform Interface: 일관된 인터페이스를 통해 리소스와 상호 작용할 수 있습니다. 이를 통해 API의 사용이 단순화되고 이해하기 쉬워집니다.
    • RESTful api는 주로 http를 사용하여 구현되며, http메서드를 사용하여 리소스에 대한 crud작업을 수행할 수 있음
    • 이러한 api는 특히 웹 기반 시스템에서 널리 사용되며, 다양한 언어와 플랫폼 간에 통신할 수 있는 표준방법을 제공함
  • http 메소드

    http 에서 사용되는 요청 방식을 나타냄
    http는 인터넷에서 웹 페이지와 다른 자원을 전송하는데 사용되는 주요 프로토콜(클라이언트 => 서버)

http 메소드는 클라이언트가 서버에 원하는 작업을 알리기 위한 방법으로, 여러 종류가 있음"

  • GET : 서버에서 정보를 검색하려는 경우 사용합니다. 이 메소드는 서버의 데이터를 변경하지 않고 조회하기만 합니다.

  • POST : 새로운 리소스를 생성하거나 서버에 정보를 제출할 때 사용됩니다. 일반적으로 데이터를 서버에 전송하여 처리하거나 저장하는 데 사용됩니다.

  • PUT : 기존 리소스를 완전히 대체하거나 업데이트하려는 경우 사용합니다. 이 메소드는 리소스의 전체 내용을 제공해야 합니다.

  • DELETE : 서버에서 리소스를 삭제하려는 경우 사용합니다.

  • PATCH : 리소스의 일부를 수정하려는 경우 사용합니다. 이 메소드는 변경하려는 데이터만 제공하면 됩니다.

  • HEAD : GET과 유사하지만, 실제 리소스를 반환하지 않고 메타데이터만 반환합니다. 이를 통해 클라이언트는 리소스의 존재 여부와 헤더 정보를 확인할 수 있습니다.

  • OPTIONS : 리소스와 관련된 통신 옵션을 설명하는 정보를 반환합니다. 이 메소드는 서버에서 사용 가능한 메소드를 확인하는 데 사용됩니다.

  • CONNECT: 네트워크 리소스에 대한 네트워크 연결을 설정합니다. 주로 프록시 서버에서 사용됩니다.

  • TRACE: 서버에서 수신한 요청 메시지를 반환합니다. 이는 클라이언트와 서버 간의 메시지 루프백 테스트에 사용됩니다.

  • 정규화, 반정규화

    • 정규화: 데이터 중복성을 제거하여 이상현상을 방지하고, 데이터의 일관성과 정확성을 유지하기 위해 무손실 분해하는 과정
    • 반정규화: 정규화 된 엔티티, 속성, 관계에 대해 성능 향상과 개발 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링의 기법
  • 세션과 쿠키는 무엇인가?

    웹 애플리케이션에서 사용자 인증, 정보 저장 및 상태 관리를 위한 기술
    웹은 기본적으로 상태가 없는 구조이기 때문에, 세션과 쿠키를 사용하여 웹 사이트가 사용자와의 상호작용을 추적하고, 사용자 정보를 저장하며, 사용자 경험을 개선할 수 있음

    • 쿠키
      • 쿠키는 클라이언트 측에 저장되는 작은 텍스트 파일
      • 웹서버는 사용자의 브라우저에 쿠키를 저장하도록 지시할 수 있으며, 쿠키는 사용자가 웹사이트를 다시 방문할 때 서버에 전송됨
      • 쿠키는 사용자의 로그인 정보, 선호 사항, 쇼핑 카드 내용 등과 같은 개인화된 정보를 저장할 수 있음
      • 쿠키는 만료기간을 설정할 수 있으며, 설정 된 기간 동안만 브라우저에 저장됨
      • 보안과 관려된 문제가 발생할 수도 있음
    • 세션
      • 세션은 서버측에서 사용자 정보를 저장하는 방법
      • 세션은 사용자가 웹 사이트에 로그인하거나 상호 작용할 때 생성되며, 서버는 고유한 세션id를 생성하여 사용자를 식별함
      • 세션id는 쿠키를 통해 클라이언트에 저장 될 수 있으며, 이후 요청 시 서버에 전송되어 사용자를 인증하고 식별함
      • 서버는 세션을 사용하여 사용자의 로그인 정보, 선호 사항, 쇼핑 카트 내용등과 같은 정보를 저장할 수 있음
      • 세션은 일정시간 동안 활성상태를 유지하며, 그 후에 만료됨
      • 세션은 쿠키에 비해 상대적으로 더 안전한 방법으로 상태를 저장할 수 있음
    • 세션과 쿠키는 웹 애플리케이션에서 사용자와의 상호작용을 관리하고, 개인화된 사용자 경험을 제공하는데 중요한 역할을 함
    • 이 두 기술은 웹 개발에 자주 사용되며, 서로 보완적으로 작동
  • 웹 서버와 웹 어플리케이션 서버 차이?

    웹 서버와 웹 애플리케이션 서버는 웹 애플리케이션의 구성 요소를 호스팅하고 처리하는데 사용되지만, 기능과 목적에서 차이가 있음

    • 웹서버
      • 웹서버는 http프로토콜을 사용하여 클라이언트의 요청에 응답하고 정적 리소스를 제공하는 소프트웨어
      • 웹 서버의 주요 목적은 클라이언트로부터 요청을 받아 웹 페이지 및 관련 파일을 전송하는 것
      • 웹 서버는 동적 컨텐츠를 처리하는데 제한이 있음
      • 동적 컨텐츠 처리를 위해 웹 서버는 웹 애플리케이션 서버와 통신할 수 있음
      • 예시로는 apache, nginx, microsoft lls등이 있음
    • 웹 애플리케이션 서버
      • 웹 애플리케이션 서버는 클라이언트 요청에 따라 서버 측 로직을 실행하고 동적 콘텐츠를 생성하는데 사용되는 소프트웨어
      • 웹 애플리케이션 서버의 주요 목적은 애플리케이션 로직을 처리하고 데이터베이스와 통신하여 웹 페이지를 동적으로 생성하는 것
      • 웹 애플리케이션 서버는 웹 서버와 함께 작동하여 클라이언트에 전체 웹 페이지를 제공할 수 있음
      • 웹 서버는 정적 콘텐츠를 처리하고, 웹 애플리케이션 서버는 동적 콘텐츠를 처리
      • 예시로는 tomacat, weblogic, jboss, django, ruby onrails등이 있음
    • 웹 서버와 웹 애플리케이션 서버는 웹 애플리케이션을 구축하는데 중요한 구성 요소로, 일반적으로 웹 서버가 정적 콘텐츠를 처리하고 웹 애플리케이션 서버가 동적 콘텐츠를 처리하는 방식으로 함께 작동함
    • 이러한 분리는 웹 애플리케이션의 성능, 확장성 및 보안을 향상시키는데 도움이 됨
  • 트랜잭션을 언제 사용하는지?

    트랜잭션은 데이터베이스에서 일련의 연산을 수행하는 논리적인 작업 단위
    트랜잭션은 데이터의 무결성을 보장하고, 여러 사용자가 동시에 데이터베이스에 액세스 할 때, 일관성을 유지하는데 중요한 역할을 함
    원자성, 일관성, 고립성, 지속성을 만족해야함

    • 여러개의 데이터베이스 연산이 한 단위로 묶여야 할 때
      • 트랜잭션은 여러개의 데이터베이스 연산이 모두 성공적으로 완료되거나 모두 실패하도록 보장함
      • 이를 통해 데이터의 일관성을 유지할 수 있음
    • 데이터의 무결성을 유지해야 할 때:
      • 데이터베이스의 무결성 규칙이나 제약조건을 만족하는지 확인하고, 규칙에 따라 연산을 수행할 필요가 있는 경우 트랜잭션을 사용
    • 동시성 제어가 필요한 경우:
      • 여러 사용자가 동시에 데이터베이스에 엑세스하고 변경을 수행하는 경우, 트랜잭션은 고립성을 통해 동시성 문제를 제어할 수 있음
      • 이를 통해 일관성 있는 결과를 얻을 수 있음
    • 예를들어, 은행 계좌 간의 이체 작업을 생각해보면 송금인 계좌에서 금액을 차감하고, 수금인 계좌에 금액을 입금하는 두개의 연산이 필요함
    • 이 두 연산은 하나의 트랜잭션으로 묶여야함
    • 왜냐하면 두 연산 중 하나가 실패할 경우, 전체 트랜잭션을 취소하고 롤백하여 데이터의 일관성과 무결성을 유지해야 하기 때문
    • 트랜잭션은 복잡한 데이터베이스 시스템에서 데이터의 일관성과 무결성을 유지하고, 동시성 문제를 제어하는데 필수적인 요소
  • 좋은 코드란?

    다양한 측면에서 효율적이고 이해하기 쉬우며, 유지보수가 용이한 코드를 의미

    • 가독성

      • 쉽게 일고 이해할 수 있어야함
      • 변수, 함수, 클래스의 이름은 명확하게 작성되어야 하며, 코드의 구조와 흐름은 일관성이 있어야함
    • 효율성

      • 코드는 불필요한 반복이나 중복없이, 자원을 최소한으로 사용하여 작동해야함
      • 실행시간과 메모리 사용량을 최적화하는 것을 포함함
    • 확장성

      • 좋은 코드는 새로운 기능이나 요구사항이 생겨도 쉽게 확장할 수 있어야함
      • 느슨한 결합과 모듈화를 통해 일워짐
    • 테스트 가능성

      • 코드는 테스트하기 쉬워야 하며, 테스트 케이스를 작성할 수 있어야함
      • 코드는 작은 단위로 분리되어야하며, 의존성이 낮아야함
    • 문서화

      • 좋은 코드는 주석, 문서, 예제 등을 통해 충분한 설명을 제공해야함
      • 코드를 읽는 다른 개발자들이 쉽게 이해하고 사용할 수 있도록 도움
    • 일관성

      • 프로젝트 내에서 일관된 코드 스타일과 패턴을 사용해야함
      • 팀원들 간의 협업을 돕고, 코드의 품질을 향상 시켜야함
    • 유지보수성

      • 좋은코드는 수정, 확장, 디버깅이 쉬어야함
      • 모듈화되어야하며, 재사용 가능한 컴포넌트로 구성되어야함
    • 안정성

      • 좋은 코드는 예상치 못한 입력이나 상화에도 견딜 수 있어야하며, 오류처리와 예외처리를 적절하게 구현해야함
  • api의 명칭을 어떻게 작성하는 것이 좋은가?

    • 간결함
      • api의 이름은 짧고 간결해야함
      • 이는 사용자가 쉽게 기억하고 타이핑 할 수 있도록 도움
    • 의미부여
      • api의 이름은 해당 api가 수행하는 기능을 명확하게 반영해야함
      • 사용자가 이름만 보고도 api의 기능을 이해할 수 있어야함
    • 일관성
      • api의 이름은 일관된 명명 규칙을 따라야함
      • 프로젝트 전체에서 사용되는 동사, 명사, 형용사등의 순서와 표기법이 통일되어야함
    • 소문자 및 구분 문자 사용:
      • 일반적으로 api의 이름은 소문자로 작성하며, 단어간 구분은 하이픈, 언더스코어와 같은 방식을 활용할 수 있음
      • 프로젝트 또는 회사의 코딩 스타일 가이드에 따라 달라질 수 있음
    • 동사사용
      • api가 수행하는 작업을 나타내는 동사를 사용하는 것이 좋음
      • 예를 들어, 데이터를 가져오는 api의 경우 get, fetch등의 동사를 사용할 수 있음
    • 명사 사용
      • api가 작용하는 대상을 나타내는 명사를 사용하는 것이 좋음
      • 에를 들어, 사용자의 정보를 가져오는 api의 경우 user, userinfo등의 명사를 사용할 수 있음
    • 버전관리
      • api의 버전을 이름에 포함시켜 사용자가 쉽게 구분할 수 있도록 사용
      • 일반적으로 api의 주소체계에 버전을 명시함
      • 예를 들어 /api/vi/users와 같이 작성할 수 있음
  • 스택과 큐는 무엇이고 언제 사용하는가?

    데이터를 저장, 접근, 조작하는 데 사용되며, 특정한 방식으로 데이터를 추가하거나 제거함

    • 스택
    • 가장 최근에 추가된 항목을 먼저 제거하는 후입선출(LIFO, Last-In-First-Out) 방식의 자료구조
      웹 브라우저의 뒤로 가기: 사용자가 방문한 웹 페이지의 이력을 스택에 저장하고, 뒤로 가기 버튼을 누를 때마다 스택에서 마지막으로 저장된 페이지를 꺼내서 보여줍니다.
      실행 취소(Undo) 기능: 텍스트 편집기와 같은 프로그램에서 사용자의 작업 이력을 스택에 저장하고, 실행 취소를 원할 때마다 스택에서 최근 작업을 꺼내 취소할 수 있습니다.
      괄호의 짝을 확인하는 등의 균형 검사에 사용될 때
    • 가장 먼저 추가된 항목을 먼저 제거하는 선입선출(FIFO, First-In-First-Out) 방식의 자료구조
      데이터가 도착한 순서대로 처리해야 할 때
      라운드 로빈 스케줄링에서 프로세스를 관리할 때
      너비 우선 탐색(BFS) 알고리즘에서 사용될 때
      이벤트 기반 프로그래밍에서 이벤트나 메시지를 처리할 때
      * 작업 스케줄링: 서버에서 여러 작업을 처리할 때, 작업 순서대로 처리하기 위해 큐를 사용
profile
기록으로 성장하는 개발자 되기
post-custom-banner

0개의 댓글