전체 글 315

[Docker] Docker 란? (chroot, 생명주기 등)

Docker 란? 도커는 컨테이너(*애플리케이션 및 해당 구동 환경을 격리한 공간) 기반의 가상화 플랫폼 기존 가상 머신 vs Docker 기존의 가상 머신 Hypervisior에 의해 GuestOS 생성 라이브러리, 커널 등 완전히 독립된 공간과 시스템 자원 할당 받아 사용 대표 툴 : VirtualBox, VMware 도커 컨테이너 프로세스 단위의 격리 환경(chroot, namespace, cgroup 등), 호스트의 커널 공유 라이브러리 및 실행 파일만 할당 하여 가벼움 애플리케이션 운영 표준화 및 어디서나 안정적으로 실행 가능 Docker의 chroot chroot (Change root) root directory(A)의 기준을 실행할 애플리케이션의 하위 directory (B)로 변경하는 역..

DevOps/Docker 2022.08.16

[Week I Learned] 22년 8월 2주차

📁 금주 진행 사항 기간 : 22.08.08 (월) ~ 22.08.12 (금) 📁 학습 내용 Django, JS 지식 정리 프로젝트 마무리 🎈 Django 지식 정리 https://yubi5050.tistory.com/126 // django-dotenv 설정 https://yubi5050.tistory.com/130 // ORM Queryset 특징 https://yubi5050.tistory.com/136 // Queryset 최적화 기법 (select, prefetch, F, Indexing 등) https://yubi5050.tistory.com/139 // Query Profiling Tool (1) - Django debug toolbar https://yubi5050.tistory.com/1..

WIL (~22.09) 2022.08.16

[Django] Query Profiling Tool (3) - Silk

Django Silk 란 Django Silk는 Request의 총 걸린 시간 / Query 시간 / Query 갯수 등을 Profiling 해주는 Tool 기본적으로 Request와 Response를 DB에 저장하기 때문에 자체가 서버에 부하를 줄 수 있음 Request 마다 걸린 시간 / Query 수 / Query 문 등을 분석 할 수 있으며, DB Clear도 웹으로 편하게 가능 Django Silk 설치 pip install django-silk https://pypi.org/project/django-silk/ django-silk Silky smooth profiling for the Django Framework pypi.org settings.py app, middleware, 옵션 추가..

Python/Django 2022.08.12

[Django] Query Profiling Tool (1) - Django debug toolbar

django-debug-toolbar 설치 pip install django-debug-toolbar settings.py INSTALLED_APPS = [ # ... 'django.contrib.staticfiles', 'debug_toolbar', ] MIDDLEWARE = [ # ... 'debug_toolbar.middleware.DebugToolbarMiddleware', # ... ] # DRF의 Response 로 return 하는 구조의 툴바 뜨게 DEBUG_TOOLBAR_CONFIG = { "SHOW_TOOLBAR_CALLBACK": lambda request: True, } STATIC_URL = '/static/' INTERNAL_IPS = [ '127.0.0.1', ] urls.py..

Python/Django 2022.08.12

[Django] Query Profiling Tool (2) - Custom Decorator & Logger

Query Debugger Custom Decorator 형식의 Query Debugger로 전체 API 동작간 호출 된 Query의 갯수, 전체 걸린 시간을 체크할 수 있다. (ex. Testcode에서 함수 위에 설정해서 실행해도 동작한다) from django.db import connection, reset_queries import time import functools def query_debugger(func): @functools.wraps(func) def inner_func(*args, **kwargs): reset_queries() start_queries = len(connection.queries) start = time.perf_counter() result = func(*arg..

Python/Django 2022.08.12

[DB] Index란?

Index란? 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조 Index가 효율적인 이유 모든 요소에 효율적으로 접근 할 수 있는 균형 적인 트리 구조와 트리 깊이의 대수 확장성 때문 대수확장성 : 트리 깊이가 리프 노드 수에 비해 느리게 성장하는 것을 의미 (ex. depth 1 추가시 node 당 4개 인덱스추가) Index 관리 DBMS에서 index는 항상 최신의 정렬된 상태로 유지 INSERT, UPDATE, DELETE가 수행시 인덱스에 대한 추가 작업 필요 INSERT: 신규 데이터에 인덱스 추가 DELETE: 해당 데이터 인덱스 삭제 UPDATE: 기존 인덱스 삭제 및 수정 데이터에 인덱스 추가 Index 장단점 장점 : 테이블 조회 성..

DB/이론 2022.08.11

[Django] Queryset 최적화 기법 (select, prefetch, F, Indexing 등)

사전 학습 내용 https://yubi5050.tistory.com/60 // ORM 이란? https://yubi5050.tistory.com/83 // ORM Queryset API https://yubi5050.tistory.com/130 // ORM Queryset 특징 QuerySet 최적화 기법 (1) select_related & prefetch_related 일반적으로 조회(GET)시 or Serailization 과정에서 많이 발생 ORM의 Lazy Loading 특성에서 발생하는 N+1 Problem 등 의 문제를 극복하기 위해 Eager Loading (즉시 로딩) 진행 📁 select_related ForeignKey(1:M)의 1입장에서, OneToOne 관계 등에서 사용 가능 S..

Python/Django 2022.08.11

[DB] Transaction 격리 수준 종류 (Isolation Level)

Transaction 격리 수준 이란?Transaction이 동시에 처리될 때 transaction끼리 얼마나 고립되어 있는지를 나타냄RDBMS는 transaction의 격리 수준을 제어 가능하며 일반적인 DBMS는 READ COMMITTED나 REPEATABLE READ를 사용 (oracle, postgresql - READ COMMITTED  /  mysql - REPEATABLE READ) 격리 수준은 아래 4가지로 구분되며, 번호가 높아질 수록 트랜잭션간 고립 정도 ↑, 성능 ↓1) READ UNCOMMITTED2) READ COMMITTED3) REPEATABLE READ4) SERIALIZABLE READ UNCOMMITTED트랜잭션(A)의 변경내용이 COMMIT이나 ROLLBACK 여부와 상..

DB/이론 2022.08.10

[DB] 에러 발생시 대응 시나리오

과도한 트래픽 대응기존에 단일 DB 였다면, 마스터/슬레이브 모델 (=Replica)을 사용해 트래픽 분산 1대의 Read/Write 마스터 DB와 해당 DB를 복제하는 다수의 Slave DB 를 생성하여 트래픽 분산 동시성 이슈 (Concurrency Issue)동시성 이슈란 : 여러 스레드가 동시에 같은 인스턴스의 필드 값을 변경 하면서 발생하는 문제예시) Read & Update를 가진 여러 Transaction 요청이 동시에 들어올 때 transcation 1의 Update(+1)이 완료 되지 않은채 transaction 2의 Update(+1)가 요청 되어 정상적으로 값 변경이 안된 상황1) transaction 격리 수준 직접 수정 : READ COMMITTED => REPEATABLE REA..

DB/경험 공유 2022.08.10

[DB] PostgreSQL vs MySQL

1. MySQL vs PostgreSQL 특징 비교 PostgreSQL MySQL Architecture ORDBMS (Object-RDBMS) multi-process(연결마다 프로세스 생성, 연결 유저 많으면 많은 메모리 요구) RDBMS single-process(연결마다 쓰레드 생성, 커널 스레드를 활용한 완전한 multi-thread) Indexes supported 고성능을 위한 다양한 index 기능 지원 B-tree, hash, GiST, SP-GiST, GIN, BRIN 기본 B-tree 특정 데이터 타입 R-tree, hash, inverted index Performance 읽기와 쓰기가 많은 어플리케이션에 적합 읽기가 많은 어플리케이션에 적합 Security 접근 관리, multi ..

DB/이론 2022.08.10