5 min to read
벡엔드 면접 대비 파이썬 질문 정리
장고의 특징
현재 파이썬 웹프레임워크 중에서는 가장 많이 사용되는 웹프레임워크로 MVT패턴을 사용합니다
또한 orm을 이용해 파이썬의 클래스와 데이터베이스 시스템을 서로 연결주고 다양한 데이터베이스를 사용할 수 있으며 자동으로 생성되는 관리자 페이지를 제공합니다
또한 내장된 인증시스템을 사용해 사용자 로그인 로그아웃을 간단하게 사용할 수 있습니다
프로젝트는 전체의 구조를 나타내고 안에 특정 기능을 수행하는 독립적인 모듈을 app이라고 합니다 이 앱은 재사용 가능하도록 설계되어 있어 한앱을 여러 프로젝트에 사용할 수 있습니다 세팅에 app을 등록하고 url.py에 url을 정의해 해당 url로 요청이 오면 해당 뷰의 함수를 실행시킨다
쿼리셋
쿼리셋(QuerySet)은 전달받은 모델의 객체 목록으로 파이썬의 기본 자료 구조가 아니기 때문에 파이썬 자료형으로 변환을 해줘야 합니다
쿼리셋을 정의할 때 즉시 데이터베이스 쿼리가 실행되지 않고, 데이터를 실제로 사용할 때 (예: 데이터에 접근하거나, 반복문으로 순회할 때) 쿼리가 실행됩니다.
실제로 데이터를 가져올 때까지 데이터베이스에 쿼리를 실행하지 않습니다. 이를 통해 불필요한 쿼리를 방지할 수 있습니다. 하지만 여러 번의 쿼리가 실행되면서 성능이 저하될 수 있는 경우, 다음과 같은 방법으로 성능을 최적화할 수 있습니다.
-
*select_related()와 **prefetch_related()를 사용
-
values()와 values_list()를 사용하여 필요한 필드만 선택적으로
시리얼라이저
Django REST Framework에서 이터를 json이나 xml으로 변환하거나 반대로 바꾸는 것에 사용됩니다 이는 모델 인스턴스를 직렬화 하거나 역직렬화 할 수 있다
- 직렬화 서버에서 파이썬 객체로 저장된 데이터를 제이슨 형태로 바꿔주는 것
- 역직렬화 제이슨 형태의 데이터를 파이썬 객체로 바꿔주는것
이는 백엔드와 프론트엔드의 소통을 위해 데이터 형식을 통일하는데 사용된다 OneToManyField는 없어서 ForeignKey를 사용해 역참조를 해야한다
django에서 테이블 구현
models.py에 models.Model을 상속해 클래스를 생성 후 각 필드를 사용해 설계합니다
그후 마이그레이션 명령어로 생성 한 뒤 반영합니다
함수형 뷰, 클래스형 뷰, 제네릭 클래스형 뷰
함수형 뷰는 Django에서 웹 요청을 처리하기 위한 방법으로, 뷰를 하나의 Python 함수로 작성하는 방식입니다. 간단한 로직이나 복잡하지 않은 처리를 할 때 사용하기 적합합니다.
단일 함수로 처리하기 때문에 로직이 간단할 때 더 직관적이고 함수 단위로 쉽게 작성 가능해 소규모 프로젝트나 간단한 뷰 처리에 적합
클래스형뷰는 뷰를 클래스 형태로 정의하여 요청을 처리하는 방식입니다
공통 기능을 부모 클래스로 만들어 여러 뷰에서 재사용할 수 있고 클래스 기반이기 때문에 상속을 통해 기능을 확장하거나 수정하기 쉽습니다.
제네릭 클래스형 뷰는 클래스 기반 뷰로, CRUD 작업처럼 반복적으로 사용하는 기능을 간편하게 처리할 수 있도록 도와주는 뷰입니다
이미 구현된 공통 패턴을 사용하여, 개발자가 불필요한 코드를 작성하지 않고 효율적으로 웹 애플리케이션을 개발할 수 있도록 해줍니다
ListView, DetailView, CreateView, UpdateView, DeleteView 등이 있습니다
MTV 패턴이란
Django의 MTV 패턴은 MVC 패턴과 비슷하지만, 템플릿이 View의 역할을 하며, Django의 View는 실제로는 컨트롤러 역할을 합니다.
Model: 데이터베이스 구조 및 데이터 처리를 담당.
Template: 사용자에게 보여지는 HTML과 같은 프론트엔드 부분.
View: 요청을 처리하고 적절한 데이터를 모델에서 가져와 템플릿과 연결해 사용자에게 응답.
인증(Authentication)과 권한(Authorization)
Django는 내장된 인증 시스템을 제공하여 사용자의 로그인, 로그아웃, 회원가입 등을 처리
Django.contrib.auth 모듈이 이를 관리하며, 세션을 통해 사용자 인증 상태를 유지
PostgreSQL vs MySQL
PostgreSQL는 완전한 ACID를 지원 MySQL은 스토리지 엔진에 따라 트랜잭션 지원 여부가 다를 수 있음
PostgreSQL: PostgreSQL은 대규모 데이터 처리와 복잡한 쿼리에 강점 MySQL: MySQL은 읽기 성능이 뛰어나고, 웹 애플리케이션에서 많이 사용
웹서버와 was의 차이
- 웹서버
- 웹 서버는 정적인 데이터를 처리하는 서버
- 이미지나 단순 HTML파일과 같은 리소스를 제공하는 서버를 웹 서버를 통하면 WAS를 이용하는것보다 빠르고 안정적
- WAS
- 동적인 데이터를 처리하는 서버
- DB와 연결되어 데이터를 주고 받거나 프로그램으로 데이터 조작이 필요한 경우에는 WAS를 활용해야 함
ASGI와 WSGI
- ASGI
- 든 요청을 비동기로 처리합니다
- WSGI에서 지원되지 않는 웹소켓, http2.0 을 지원합니다
- 비동기 호출이 가능함으로 여러 이벤트를 주고받을 수 있어 대용량 트래픽 처리를 유연하게 할 수 있습니다
- WSGI WSGI는 web server gateway interface로 파이썬 스크립트가 웹서버와 통신하기 위해 만들어진 인터페이스로 CGI의 일종
CGI는 common gateway interface의 약자로, 서버와 어플리케이션간에 데이터를 주고받는 방식입니다
리스트 컴프리헨션
리스트 컴프리헨션은 직관적으로 리스트를 생성하는 방법으로 대괄호로 감싸고 내부에 for문과 if문을 사용해 반복적으로 조건에 만족하는 것만을 리스트로 생성할 수 있습니다
ForeignKey, OneToOneField, ManyToManyField
ForeignKey: 다대일(N:1) 관계를 나타냅니다.
OneToOneField: 일대일(1:1) 관계를 나타냅니다
ManyToManyField: 다대다(N) 관계를 나타냅니다
signals
특정 이벤트가 발생할 때 자동으로 함수를 실행할 수 있게 하는 기능으로 receiver 데코레이터를 사용해 어떤 함수를 실행할지 지정하고 시그널의 종류에는 pre_save, post_save, pre_delete, post_delete 등이 있습니다.
데코레이터
기존의 함수나 메서드의 기능을 변경하거나 확장할 때 사용되는 디자인 패턴으로 함수나 메서드를 인자로 받아, 그 함수에 새로운 기능을 추가한 뒤 다시 반환하는 함수입니다
데코레이터는 파이썬의 함수는 일급 객체라는 개념을 활용합니다. 함수가 인자로 전달될 수 있고, 반환값으로도 사용될 수 있다는 성질을 이용해 데코레이터를 구현할 수 있습니다.’
일급객체
프로그래밍 언어에서 함수가 하나의 값으로 취급될 수 있는 객체임을 의미합니다. 즉, 함수가 마치 변수처럼 다뤄질 수 있다는 뜻입니다.
일급객체는 함수를 변수처럼 할당, 전달, 반환될 수 있는 객체라는 뜻이고 Python에서는 함수가 일급 객체로 취급되기 때문에, 함수를 변수에 할당하거나 인자로 전달하는 등 유연한 프로그래밍이 가능합니다.
is와 ==의 차이점
is는 두 객체가 동일한 객체로 메모리 주소가 같은지 확인하고 ==는 두 객체의 값이 같은지 확인합니다 만약 두 객체가 값은 같지만 다른 객체로써 메모리 주소가 다르다면 is는 다른것으로 취급합니다
with
컨텍스트 관리를 위한 구문으로, 리소스(파일, 네트워크 연결 등)를 안전하게 열고 닫을 때 사용됩니다
jQuery
JavaScript 라이 브러리로, 복잡한 DOM 조작, 이벤트 핸들링, 애니메이션, Ajax 요청 등을 간결한 코드로 작성할 수 있게 해줍니다.
’$’로 시작하고 선택자를 통해 HTML 요소를 선택하고 조작할 수 있습니다. 아이디는 #으로 선택하고 클래스는 .으로 선택합니다
다양한 이벤트를 처리할떄 on메서드를 사용해 이벤트 헨들러를 설정할 수 있습니다
AJAX
웹 애플리케이션이 서버와 비동기적으로 통신하여, 전체 페이지를 다시 로드하지 않고도 데이터를 주고받을 수 있는 기술입니다
AJAX는 서버와의 통신을 비동기 방식으로 처리하고 전체 페이지를 다시 로드하지 않고도, 부분적으로만 업데이트할 수 있습니다.
XMLHttpRequest 객체를 사용하여 서버와 비동기적으로 데이터를 주고받습니다. AJAX 요청이 서버에 전송되면 서버는 응답 데이터를 클라이언트에 다시 전송하고, 클라이언트는 해당 데이터를 사용하여 페이지의 일부를 업데이트합니다.
jQuery에서 AJAX 요청을 취소할 수 있습니다. ‘$.ajax()’는 jqXHR 객체를 반환하며, 이를 통해 AJAX 요청을 중단할 수 있습니다.
Comments