본문 바로가기

전체 글

(1033)
[Django rest framework] 5. test 이번 포스팅의 소스는 여기에 있습니다. - python3.6, django 2.1, django-rest-framework 3.8, 을 사용합니다. 코드 테스트는 아주 중요합니다. 테스트 코드를 능숙하게 작성하고 사용하면 코드의 의도를 보다 명확히하는데 좋을 뿐 아니라, 아키텍처의 결합도를 낮출 수 있습니다. 테스트의 일반 원칙 테스트 유닛은 각 기능의 가장 작은 단위에 집중한다. 해당 기능이 정확히 동작하는지를 증명한다. 각 테스트 유닛은 반드시 독립적이어야 한다. (다른 테스트에 영향을 끼쳐선 안된다.) 위의 원칙을 지키며, 자신의 코드를 테스트 할수 있는 테스트 코드를 만든다면, 배포 및 유지보수에 큰 도움이 됩니다. 그러면 이제부터 기본적인 테스트코드와 테스트코드에서 사용하는 mock, patch..
django RemoteUserAuthentication 는 별거 없습니다. 아니..무슨 전부 배껴 쓰기를 하나, 어떻게 모든 한국의 블로그는 딱 두줄만 써져 있는거지?? RemoteUserAuthenticationUser - 정보가 다른 서비스에서 관리될 때, Remote 인증 (장고 공식문서) - Remote-User 헤더를 통한 인증 수행 https://docs.djangoproject.com/ko/3.0/howto/auth-remote-user/#using-remote-user-on-login-pages-only ``REMOTE_USER``를 사용하여 인증하기 | Django 문서 | Django The Django Software Foundation deeply values the diversity of our developers, users, and community...
[Django rest framework] 4. filters 이번 포스팅의 소스는 여기에 있습니다. - python3.6, django 2.1, django-rest-framework 3.8을 사용합니다. django에서의 filter는 보통 query_set()을 통한, 즉 쿼리를 통해 조건을 추가 하여 데이터를 반환하는 경우가 많습니다. 이를 더욱 재사용가능하게 만든 패키지가 django-filter입니다. 이를 활용하면 간단하게 filter / order by를 추가할 수 있습니다. Using django-filter 먼저 해당 패키지를 설치 합니다. pip3 install django-filter settings.py의 rest_framework 의 옵션에 filter사용을 선언합니다. # settings.py REST_FRAMEWORK = { ........
[Django rest framework] 3. pagination 이번 포스팅의 소스는 여기에 있습니다. - python3.6, django 2.1, django-rest-framework 3.8 을 사용합니다. Django는 paginated 즉 “이전/다음”링크를 사용하여 여러 페이지로 나누어진 데이터를 관리하는데 도움이 되는 몇 가지 클래스를 제공합니다. (Paginator 클래스) 또한 DRF에서도 이러한 pagination 기능을 제공하고 있습니다. PageNumberPagination / LimitOffsetPagination pagination 설정에는 두 가지 방법이 있습니다. PageNumberPagination page : 몇 번째 페이지인지 표시해줍니다. 페이지는 1부터 시작합니다. page_size : 한 페이지에 몇 개의 레코드를 보여줄지 표시해..
postgreSQL core 1. MVCC architecture postgreSQL는 Multi Generation Architecture이다. 이는 update 작업이 발생 시 페이지의 이전 레코드를 overwrite 하는 대신 새로운 레코드를 만드는 구조이다. postgreSQL의 레코드의 헤더는 레코드가 어디에 입력했는지 가르키는 라인 포인터를 가지고 있으며, 실제 레코드의 정보는 튜플의 헤더에 정보를 가지고 있다. - t_xmin : insert 시의 XID - t_xmax : delete 시의 XID - t_cid : insert, delete , command id - t_ctid : 해당 튜플의 현재 버전을 가리키는 포인터 - t_infomask: commit 여부 - t_hoff : 튜플의 헤더 길이 2. Inser..
DBMS core architecture 2 Buffer manager - 버퍼 캐시를 관리하는 메인 메모리 영역, - Replacement algorithm ( victim frame selection을 위한 dirty bits를 유지 관리 ) == 페이징 교체 알고리즘 1. 페이징 교체 알고리즘 1.1 victim frame selection - 메모리는 프레임(frame) 단위 - 디스크의 페이지가 메모리에 올라오면 free frame에 할당하는데 만일 모든 프레임이 사용 중이라면 비어 있는 프레임 확보 필요. 이 작업을 victim frame selection이라 한다. - 프레임에 있는 페이지가 dirty 상태라면 디스크에 변경된 내역을 저장 - dirty 상태가 아니라면 프레임 clear() Oracle, mysql(innodb) : L..
DBMS core architecture 1 1. MVCC (Multi Version Concurrency Control) DBMS에서 Lock을 사용하지 않고, 데이터의 일기 일관성을 보장해 주는 내부 기법. (Lock은 서버의 동시성을 크게 떨어트린다. ) 객체의 변경사항을 모두 버전을 나누어 저장하고, 데이터 객체는 이 버전을 모두 연속체로서 정의, 관리하게 하여 락을 사용하지 않고 일관된 읽기를 보장. 1.1. MGA - Multi Generation Architecture (PostgreSQL) 데이터를 변경할때 해당 데이터를 변경하는것이 아닌, 새로운 데이터를 추가 후 새로운 데이터를 링크를 연결하는 방식 1.2 Undo 방식 (Oracle, mysql/innodb) Undo 영역을 따로 두고 최신 데이터는 데이터 영역에 두고, 올드 데..
postgreSQL 튜닝 이 글은 postgreSQL의 내부 구조를 어느 정도 안다고 가정하에 진행합니다. 1. shared buffer 튜닝 - DISK I/O를 최소화 함으로써 I/O의 성능을 향상하기 위한 버퍼 - 많은 사용자의 동시 접근할때의 경합 최소화가 목표 - 자주 사용되는 블록은 최대한 버퍼 내에 있어야 한다. 1.1 pg_prewarm() - 해당 테이블을 강제로 buffer로 올린다. (캐시처럼 사용하기 위해 미리 로드) - 테이블의 크기에 따라 buffer가 더 느려질 수도 있다. creste extension pg_prewarm; select pg_prewarm('t1') 1.2 HOT (heap only tuple) - MGA에 의한 단점으로 해당 테이블의 변경이 빈번할 경우 테이블 크기 상승과 해당 데이..