Django ORM 성능 최적화 N+1 문제 해결
Query 개선의 목적 백엔드 개발자의 채용 공고에 종종 쿼리 튜닝이 들어가 있다. 결국 한 API가 실행될 때 몇 개의 Query를 날리느냐 ( = DB hit를 몇 번 치느냐)는 성능 향상으로 직결되는 매우 중요한 문제인 것이다. N+1 문제란? 오늘 살펴볼 N+1 문제는 Djnago의 ORM과 같은 ORM(Object-Relational Mapping)으로 작업할 때 발생할 수 있는 성능 문제다. 각 객체에 대해 검색하려고 할 때 관련된 다른 Table(=collection)까지 검색이 필요한 경우에 발생한다. 이 작업을 비효율적으로 수행하면 데이터베이스에 대해 N+1 Query를 실행하게 된다. 여기서 N은 해당 객체의 수이다. 이로 인한 성능 저하는 대규모 데이터를 세트로 작업하는 경우 애플리케..
[CS] 객체지향 OOP 개념 제대로 알기
객체지향 (OOP) 프로그램을 실제 세상에 가깝게 모델링하는 기법 데이터를 추상화시켜 속성과 행위를 가진 객체로 만들고, 그 객체 간의 상호작용을 통해 로직을 구현하는 프로그래밍 방법 코드 중복을 방지하고 재사용성을 높임 객체지향(OOP) 원칙 캡슐화 추상화 상속 다형성 클래스 (Class) 특별한 데이터와 메서드의 집합 설계도(틀) 메모리상에 올라가지 않음 객체 (Object) 하나의 class로 만들어진 여러 instance(object)는 각각 독립적이다.
[CS] 프로세스 vs 쓰레드 정리
프로세스(Process) 프로세스란 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램이다. 운영체제에서 할당 받는 자원 단위( = 실행 중인 프로그램) CPU 동작 시간 주소 공간 (각 프로세스는 별도의 주소 공간에서 실행된다) Code, Data, Stack, Heap의 구조로 되어있는 독립적 메모리 영역 할당 받는 자원은 다음과 같다. 최소 1개의 메인 스레드를 보유한다. 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신을(Context Switching)사용해야 한다. 파이프, 파일 소켓 등을 사용 스레드(Thread) “프로세스 내에서 실행되는 여러 흐름의 단위” 프로세스가 할당 받은 자원을 이용하는 실행 단위다. 스레드는 프로세스 내에서 Stack만 별도로 할당 받고, 나머지 Code, D..
JS 필수 문법 정리
1. let & const let과 const는 var를 대체한다. 변수를 재할당하지 않기 때문에 상수처럼 효과적으로 사용할 수 있다. // 변수 let myName = 'Max'; console.log(myNmae); >>>>> Max let myName = 'Sunny' cosole.log(myName); >>>>> Sunny // 상수 const myName = 'Max'; console.log(myNmae); const myName = 'Sunny'; console.log(myName); // Error >>>> Uncaught SyntaxError: Identifier 'myName' has already been declared 2. ES6 Arrow Functions Arrow Functio..
Django models save()에 update_fields를 사용 해야하는 이유
Django ORM Django의 ORM은 SQL문을 사용하지 않고도 아주 손쉽게 조회, 생성, 수정, 삭제 할 수 있다. Save( ) Method 작동 방법 오늘 정리해 볼 주제는 바로 우리가 자주 사용하는 save() method이다. 값을 수정할 때 자주 쓰는 method인데 어떻게 작동하는지 최근에야 알게 되었다. save() method는 호출 할 때 해당 테이블의 모든 열이 업데이트 된다. 설명글 보다는 코드로 직접 예시를 들어 설명하는 것이 이해에 도움이 될 것같아 아래 코드를 첨부했다. 예를 들어 아래와 같은 User Table이 있다고 해보자. from django.db import models class User(models.Model): name = models.CharField(m..
다들 Git Flow 쓰고 계신가요?
-이 글은 저희 팀에 Git Flow를 제안하며 작성한 제안서 입니다.- Git Flow란? Git-flow는 Git이 활성화 되기 시작하던 10년 전 Vincent Driessen의 블로그 글에 의해 널리 퍼지기 시작했고, 현재는 개발 시 표준과도 같이 사용되는 방법입니다. Git-flow 는 기능이 아닌 서로 간의 약속. 즉, 방법론이다. Git Flow 이해하기! 보통 깃을 검색하면 많이 나오는 이미지 입니다. 사진의 이해를 돕기 위해 간략하게 설명하겠습니다. Vincent Driessen의 브랜치 모델에는 5가지 종류가 있습니다. Master 정식 배포되는 안정적인 버전의 소스 코드 Master 브랜치의 HEAD는 최신 배포 버전의 소스 코드가 들어있습니다. Develop 개발 브랜치로 개발자들이..