Django ORM 성능 최적화 N+1 문제 해결
·
Software Developer
Query 개선의 목적 백엔드 개발자의 채용 공고에 종종 쿼리 튜닝이 들어가 있다. 결국 한 API가 실행될 때 몇 개의 Query를 날리느냐 ( = DB hit를 몇 번 치느냐)는 성능 향상으로 직결되는 매우 중요한 문제인 것이다. N+1 문제란? 오늘 살펴볼 N+1 문제는 Djnago의 ORM과 같은 ORM(Object-Relational Mapping)으로 작업할 때 발생할 수 있는 성능 문제다. 각 객체에 대해 검색하려고 할 때 관련된 다른 Table(=collection)까지 검색이 필요한 경우에 발생한다. 이 작업을 비효율적으로 수행하면 데이터베이스에 대해 N+1 Query를 실행하게 된다. 여기서 N은 해당 객체의 수이다. 이로 인한 성능 저하는 대규모 데이터를 세트로 작업하는 경우 애플리케..
백엔드 개발자, 첫 회사를 떠나며 늦은 2022년 회고록
·
Episode
이번 글로 2022년 회고록 막차에 탑승해 보려 한다. 주로 내 일상이나 감정보다는 기술적인 내용만을 적다보니 지금 이 순간이 괜스레 부끄럽지만 새로운 변화를 앞두고 두렵고 설레는 지금의 내 감정도 글로 남겨보자! 새해를 퇴사로 시작하게 되다니 21년 9월 23일에 입사해 이달 말 퇴사를 앞두고있다. 지난달 퇴사 얘기를 꺼내기까지 하루에도 수십 번씩 내 선택에 의문을 품고 자신을 몰아세우기도 하며 참 많이 힘들어했는데 인사팀장님과의 면담까지 마친 지금은 오히려 마음이 편하다. 인생의 매 순간이 선택이라는 말이 깊게 와닿는 요즘이다. 다양한 이유로 퇴사를 결정하겠지만 난 큰 한방이 있었다. 회사 내 조직이 개편되면서 앞으로 웹 개발이 아닌 다른 업무(다른 회사의 제품을 판매 및 구축)를 해야 하는 상황이 ..
[CS] 객체지향 OOP 개념 제대로 알기
·
Software Developer
객체지향 (OOP) 프로그램을 실제 세상에 가깝게 모델링하는 기법 데이터를 추상화시켜 속성과 행위를 가진 객체로 만들고, 그 객체 간의 상호작용을 통해 로직을 구현하는 프로그래밍 방법 코드 중복을 방지하고 재사용성을 높임 객체지향(OOP) 원칙 캡슐화 추상화 상속 다형성 클래스 (Class) 특별한 데이터와 메서드의 집합 설계도(틀) 메모리상에 올라가지 않음 객체 (Object) 하나의 class로 만들어진 여러 instance(object)는 각각 독립적이다.
[CS] 프로세스 vs 쓰레드 정리
·
Software Developer
프로세스(Process) 프로세스란 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램이다. 운영체제에서 할당 받는 자원 단위( = 실행 중인 프로그램) CPU 동작 시간 주소 공간 (각 프로세스는 별도의 주소 공간에서 실행된다) Code, Data, Stack, Heap의 구조로 되어있는 독립적 메모리 영역 할당 받는 자원은 다음과 같다. 최소 1개의 메인 스레드를 보유한다. 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신을(Context Switching)사용해야 한다. 파이프, 파일 소켓 등을 사용 스레드(Thread) “프로세스 내에서 실행되는 여러 흐름의 단위” 프로세스가 할당 받은 자원을 이용하는 실행 단위다. 스레드는 프로세스 내에서 Stack만 별도로 할당 받고, 나머지 Code, D..
JS 필수 문법 정리
·
Software Developer
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를 사용 해야하는 이유
·
Software Developer
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 쓰고 계신가요?
·
Software Developer
-이 글은 저희 팀에 Git Flow를 제안하며 작성한 제안서 입니다.- Git Flow란? Git-flow는 Git이 활성화 되기 시작하던 10년 전 Vincent Driessen의 블로그 글에 의해 널리 퍼지기 시작했고, 현재는 개발 시 표준과도 같이 사용되는 방법입니다. Git-flow 는 기능이 아닌 서로 간의 약속. 즉, 방법론이다. Git Flow 이해하기! 보통 깃을 검색하면 많이 나오는 이미지 입니다. 사진의 이해를 돕기 위해 간략하게 설명하겠습니다. Vincent Driessen의 브랜치 모델에는 5가지 종류가 있습니다. Master 정식 배포되는 안정적인 버전의 소스 코드 Master 브랜치의 HEAD는 최신 배포 버전의 소스 코드가 들어있습니다. Develop 개발 브랜치로 개발자들이..
유닉스 커맨드 라인(부제: 검은화면 정복하기)
·
Software Developer
Vim 공식 사용 설명서(https://vimhelp.org/#help.txt) Vim을 게임처럼 재미있게 배울 수 있는 사이트(https://vim-adventures.com/) 기본 모드(Normal mode) 기능 키 왼쪽으로 이동 h 오른쪽으로 이동 l 아래쪽으로 이동 j 위쪽으로 이동 k 5칸(왼쪽, 오른쪽, 아래쪽, 위쪽)으로 이동 5(h/l/j/k) 커서가 있는 줄의 첫 번째 칸으로 이동 0 커서가 있는 줄의 마지막 칸으로 이동 $ 파일의 첫 번째 줄로 이동 gg 파일의 마지막 줄로 이동 G 한 글자 삭제 x 5글자 삭제 5x 한 줄 삭제 dd 5줄 삭제 5dd 작업 취소 u 텍스트 붙여넣기 p(커서 다음 칸 혹은 다음 줄) 텍스트 붙여넣기 P(커서 이전 칸 혹은 이전 줄) 입력 모드(Ins..
Docker (도커) 사용하기 🐳
·
Software Developer
도커 설치 도커 다운로드 페이지에서 (또는 도커 문서에서) 설치하면 됩니다. 각 운영체제에 맞게 다운로드 받아 설치하면 됩니다. 저는 Mac을 사용 하고 있기 때문에 Mac with intel Chip을 다운 받았습니다. 도커 사용하기 Docker ui가 아닌 터미널로 사용하는 법을 배워보겠습니다. $ docker run -d -p 80:80 docker/getting-started 위 명령을 입력하면 docker/getting-started 라는 이미지를 pull 받고 백그라운드 모드(-d: detached)로 80번 포트(-p 80:80; 포트는 :)를 연결해서 실행합니다. 즉 내 local host와 컨테이너를 연결한다는 뜻입니다. 원래는 pull 명령을 받아야 하지만 run 명령이 로컬에 해당 이..
Git/Github 제대로 알자! 🔥
·
Software Developer
Git은 버전과리를 위한 [소프트웨어] Github는 Git으로 저장돼서 원격전송된 내용들이 저장되는 [공간을 제공하는 서비스다.] "Git" 왜 Git을 사용하나? 시간여행이 가능해진다. (과거로 돌아갈 수 있다!) 그래서 버전관리가 편리하다. 또 협업을 하기에 편리하다. 준비물 1. Git https://git-scm.com/ Git git-scm.com 2. IDE ( intelliJ / VSCode / Pycharm 등 선택하여 사용) 3. Sourcetree https://www.sourcetreeapp.com/ Sourcetree | Free Git GUI for Mac and Windows A Git GUI that offers a visual representation of your rep..
Docker란? 🐳
·
Software Developer
Docker란 Go언어로 작성된 리눅스 컨테이너 기반의 오픈소스 가상화 플랫폼 Docker 란? IT 소프트웨어인 "Docker”는 Linux 컨테이너를 만들고 사용할 수 있도록 하는 컨테이너화 기술입니다. Docker 컨테이너의 이점 모듈성 Docker의 컨테이너화 접근 방식은 전체 애플리케이션을 분해할 필요 없이 애플리케이션의 일부를 분해하고, 업데이트 또는 복구하는 능력에 집중되어 있습니다. 사용자는 이 마이크로서비스 기반 접근 방식 외에도 SOA의 작동 방식과 동일하게 멀티플 애플리케이션 사이에서 프로세스를 공유할 수 있습니다. 계층 및 이미지 버전 제어 각 Docker 이미지 파일은 일련의 계층으로 이루어져 있으며 이 계층들은 단일 이미지로 결합됩니다. 이미지가 변경될 때 계층이 생성되고, 사용..
제네릭 뷰 정리
·
Software Developer
get_success_url 메소드 get_success_url 메소드는 POST 리퀘스트를 처리하는 CreateView, UpdateView, DeleteView에서 사용됩니다. POST 리퀘스트가 성공적으로 처리됐을 때 (예를 들어 오브젝트가 성공적으로 생성됐을 때) 리디렉트되는 URL을 정하는 건데요. CreateView, UpdateView, DeleteView를 사용할 때는 get_success_url 메소드를 정의해 줘야 합니다. # URL 파라미터가 없는 경우class MyView(CreateView): ... def get_success_url(self): return reverse('index') # URL 파라미터가 있는 경우class MyView(CreateView): ... def ..