728x90

🐍Python | Django 27

[Django] ORM Eager Loading(select related & prefetch_related)

ORM QuerySet의 특징 포스트에 이어서 Eager Loading에 대해 알아보자. 💡 https://dev-jy.tistory.com/23 [Django] QuerySet?! 장고 쿼리셋의 특징 중 Lazy Loading, Caching, Eager Loading에 대해 알아보자. 🤔 Lazy Loading 먼저, ORM은 게으르다. 😴 from prod.models import Product product = Product.objects.fitler(name='제품A') pr.. dev-jy.tistory.com Django ORM은 기본적으로 Lazy Loading 전략을 택하기 때문에, 아래의 예시처럼 N+1문제가 발생할 수 있다. 🤬 from board.models import Board ..

🐍Python | Django 2022.05.15

[Django] QuerySet method

django의 쿼리셋에서 사용할 수 있는 메서드들에 대해 알아보자. SELECT all() 테이블 내의 모든 데이터를 조회하여, 쿼리셋 타입으로 반환해준다. Product.objects.all() # get() 하나의 데이터를 조회하기 위한 메서드이며, 주로 pk로 조회한다. 결과가 1건 이상인 경우 에러를 발생시키고, 객체 타입으로 반환된다. Product.objects.get(id=1) # filter() 특정 조건에 맞는 row들만 조회할 때 사용하고, 쿼리셋으로 반환된다. Product.objects.filter(Group_id = 1) # exclude() 특정 조건을 제외한 데이터만 조회하고 싶을 때 사용한다. 쿼리셋으로 반환된다. Product.objects.exclude(Group_id =..

🐍Python | Django 2022.05.12

[Django] QuerySet?!

장고 쿼리셋의 특징 중 Lazy Loading, Caching, Eager Loading에 대해 알아보자. 🤔 Lazy Loading 먼저, ORM은 게으르다. 😴 from prod.models import Product product = Product.objects.fitler(name='제품A') print(product) 위와 같은 코드를 작성한 후 실행해보면, 실제 DB hits는 몇 번 일어날까? 정답은 1번이다. filter 할 때는 DB hits가 일어나지 않고 마지막 'print(product)'에서 DB hits가 일어난다. 장고 ORM은 QuerySet이 evaluated 될 때까지, 실제로 DB에 접근해 쿼리를 실행하지 않는다. 그렇다면 QuerySet이 evaluated 되는 시점은..

🐍Python | Django 2022.05.12

[Python] generator

generator를 간단히 설명하면, iterator를 생성해주는 function이다. ※ iterator? https://dev-jy.tistory.com/20 [Python] iterable? iterator? iterable? iterator? iterable의 의미는 요소를 하나씩 차례로 반환 가능한 object를 뜻한다. iterable의 예로는 sequence type인 list, str, tuple 등이 있고, non-sequence type인 dict나 file도 iterable 하다.. dev-jy.tistory.com 아래의 예시를 보자. def generator(n): i = 0 while i < n: yield i i += 1 얼핏 보면 일반 함수와 비슷해 보이지만, yield라는 ..

🐍Python | Django 2022.05.09

[Python] iterable? iterator?

iterable? iterator? iterable의 의미는 요소를 하나씩 차례로 반환 가능한 object를 뜻한다. iterable의 예로는 sequence type인 list, str, tuple 등이 있고, non-sequence type인 dict나 file도 iterable 하다고 말할 수 있다. (for문을 통해 순차 접근 가능) 또한, __iter__() 나 __getitem__() 메서드를 포함하는 class는 모두 iterable하다고 말할 수 있다. iterator 객체는 __next__() 메서드로 iterable한 객체의 데이터에 순차적으로 접근할 수 있다. 만약 __next__()로 다음 데이터를 불러올 수 없을 경우 StopIteration exception을 발생시킨다. 그렇다..

🐍Python | Django 2022.05.08

[Python] GIL

먼저 GIL에 대해 알아보기 전에 파이썬 인터프리터에 대해 한 번 짚고 넘어가자. 인터프리터란 파이썬으로 작성된 코드를 한 줄씩 읽으며 실행하는 프로그램을 말하는데, 현재 파이썬 인터프리터의 표준 구현체로 받아들여지고 있는 것은 C언어를 이용하여 구현한 CPython이다. GIL은 Global Interpreter Lock의 약자이다. 파이썬의 객체들에 대한 접근을 보호하는 일종의 뮤텍스(Mutex)로써, 여러 스레드가 동시에 파이썬 코드를 실행하지 못하도록 막는 것이다. 뮤텍스(Mutex)란, 멀티 스레딩 환경에서 여러 개의 스레드가 어떤 공유 자원에 접근하려 할 때 접근하기 위해 가지고 있어야 하는 키 같은 것이다. 식당에서 공용 화장실을 사용하기 위해 열쇠를 들고 화장실을 가고, 사용 중인 사람이 ..

🐍Python | Django 2022.05.07

[Python] Python의 메모리 관리

파이썬에서는 모든 것이 객체이고, 동적 메모리 할당이 파이썬 메모리 관리의 기초이다. 동적 메모리 할당이랑 런타임 시 메모리가 할당되는 것으로 객체가 더 이상 필요하지 않으면 파이썬 메모리 관리자가 자동으로 객체에서 메모리를 회수한다. 메모리 관리는 reference counting과 generational garbage collection 두 가지 방법으로 이루어 진다. Reference Counting 파이썬에서는 객체를 만들 때마다 객체의 유형과 reference count를 private heap에 생성한다. 기본적으로 파이썬 객체의 reference count는 객체가 참조될 때마다 증가하고 객체의 참조가 해제될 때 감소하는 방식으로 작동하고, 이때 reference count가 0이 되면 객체..

🐍Python | Django 2022.05.03

[Django] Django MTV

장고는 MTV(Model - Template - View) 패턴을 기반으로 하는 프레임워크이다. MTV패턴이란 Model(데이터), Template(사용자 인터페이스), View(데이터 처리 로직)을 구분하여 한 요소가 다른 요소들에게 영향을 주지 않도록 설계한 방식이다. Model Model은 데이터 모델을 의미하며, 장고의 model 모듈을 이용하여 DB의 테이블과 일치하는 데이터 구조를 정의한다. 보통 하나의 모델은 하나의 테이블에 매핑되고, 클래스 내부의 attribute들은 DB 테이블의 필드를 나타낸다. 장고에서는 Django ORM이라 불리는 자체 ORM을 사용한다. ORM은 Objecte Relational Mapping의 약자로 SQL 언어를 사용하지 않고 DB작업을 가능하게 해 준다. ..

🐍Python | Django 2022.04.29

[Python] call by value? call by reference?

일반적으로 사용되는 함수 인자 전달 방식은 call by value, call by reference 두 가지이다. call by value는 함수의 인자를 받을 때, 변수에 담긴 값 자체를 복사하여 넘겨주므로 함수 내에서 해당 인자를 조작하여 바꿔도 원본은 변하지 않는다. 원본을 건드리지 않아 안전하지만, 함수의 사용으로 해당 전역 변수를 바꾸고자 하는 경우에는 리턴 값을 다시 전역 변수로 집어넣어야 하는 번거로움이 있을 수 있다. call by reference는 함수의 인자를 받을 때, 변수가 가리키는 주소 값을 전달함으로써, 함수 내에서 해당 인자를 조작하면 원본 변수의 주소 값으로 타고 들어가 해당 값 자체를 변경시킨다. 그렇다면 파이썬은 call by value일까? call by refere..

🐍Python | Django 2022.04.28

[Python] 메타클래스(MetaClass)

메타클래스에 대해 알아보기 전에 먼저 객체와 인스턴스에 대해 한번 짚고 넘어가자. 클래스로 만든 객체를 인스턴스라고 한다. 그렇다면 객체와 인스턴스의 차이는 무엇일까? 예를 들어 a = Person() 이렇게 만든 a는 객체이다. 그리고 a 객체는 Person의 인스턴스이다. 즉, 인스턴스라는 말은 특정 객체가 어떤 클래스의 객체인지를 관계 위주로 설명할 때 사용된다. 파이썬에서의 모든 것은 객체이다. 따라서 클래스도 객체이다. 그렇다면 클래스를 만들기 위한 클래스가 필요하다는 말이 되는데, 클래스를 만들기 위한 클래스는 무엇일까? 바로 이것이 메타클래스이다. 메타클래스는 우리가 재정의해주지 않으면 기본적으로 클래스를 만드는 클래스로 정해져 있다. 만약, 특정 클래스를 만들 때, 특별한 규칙을 적용하고 ..

🐍Python | Django 2022.04.27

[Python] main 함수

파이썬에는 main 함수가 따로 존재하지 않는다. 파이썬으로 개발을 하다보면 if __name__ == '__main__': 으로 시작하는 구문을 만날 수 있는데, 이 구문이 의미하는 것이 현재 파일이 프로그램의 시작점이 맞는지 판단하는 것이다. # main.py def main(): print('This is Main Function') if __name__ == '__main__': main() # 실행 결과 # $ python main.py # $ This is Main Function 위와 같이 사용할 수 있다. 파이썬에서 Main함수는 이렇게 사용하는구나~ 하고 넘어갈수도 있지만 조금 더 자세히 알아보자. # addition_module.py def add(a, b): return a + b #..

🐍Python | Django 2022.04.26
728x90