본문 바로가기

분류 전체보기106

[Django] ORM 구조와 원리 그리고 최적화 전략 - Pycon2020 김성렬님 발표 정리 QuerySet을 통해 알아보는 ORM의 특징 Lazy Loading : 쿼리셋을 선언할 때는 쿼리셋 자체로만 존재한다. 실제 SQL이 실행되는 시점은, 그 쿼리셋이 사용되었을 때이다. 당장 필요하지 않으면 호출을 지연하는 특성. 꼭 필요한 시점에만 필요한 만큼 SQL이 호출된다. 재사용하지 못함으로, 불필요한 쿼리가 더 호출될 수 있다. Caching : QuerySet 캐싱을 재사용할 수 있음. 모든 user를 먼저 캐싱해두고, 필요한 특정 유저 정보를 가져올 때 앞의 변수를 활용하면 추가 쿼리를 호출하지 않는다. Eager Loading(즉시로딩, N+1 Problem) : for문이 돌때마다 쿼리를 계속 돌린다. user가 100명 있으면 for문으로 userinfo를 얻기 위해서는 총 100+1.. 2021. 6. 6.
[Javascript] DOM control 관련 자주 사용하는 문법들 요소 좌표값 구하기, 특정 위치로 스크롤 이동시키기 window.scrollTo를 이용하여 특정 위치로 이동시키기 window.scrollTo를 이용하여 특정 위치로 이동시키기 홈페이지 중에 탭 메뉴를 클릭하면, 특정 위치로 스크롤바가 이동되면서 화면에 보여지는 것을 본 적 있을 것이다. scrollTo() 메서드로 이를 구현할 수 있다. window 객체의 scrollTo 메서드는 문서를 enai.tistory.com textContent textContent의 값은 식별자 노드의 내부 콘텐츠를 text/plain 으로 파싱(Parsing)한 결과. 즉, 해당 요소 내부의 원시 텍스트(raw text)이다. 파싱 속도가 빠르고 보안에 강하다. innerText 줄바꿈, 숨김 등 적용 가능. IE(IE8.. 2021. 6. 6.
동적계획법(Dynamic Programming) - 피보나치 숫자 f[n] = f[n-1] + f[n-2] 위의 식을 계산하는 가장 빠른 방법은? 1. Fibonacci Numbers : f[n] 부터 시작해서 f[1]을 끝으로 2의 n승 회의 연산이 필요, 너무 많은 연산이 반복됨. 단순분할정복이라고도함. int finbonacci (int n) { int[] f = new int[100]; /* if(n==1 || n==2) { return 1; } else { return finbonacci(n-2) + finbonacci(n-1); } */ if(n == 1) return 1; if(n == 2) return 1; return f[n] = finbonacci(n - 1) + finbonacci(n - 2); } 2. Memoization : 이미 계산된 f값(중.. 2020. 11. 12.
[Javascript] 프로그래머스 - 위장 https://programmers.co.kr/learn/courses/30/lessons/42578 코딩테스트 연습 - 위장 programmers.co.kr 나의 풀이 function solution(clothes) { var answer = 1; var answerArr = new Array(); var type = new Array(); for(var i = 0; i acc.includes(curr) ? acc : [...acc,curr],[]); for(var i = 0; i < uniqueType.length; i++) { an.. 2020. 8. 29.
[Oracle] SQL 튜닝 - 실행계획 수립 (Execution Plan) - Rule Based Optimizer : 지정한 규칙을 기반으로 판단. 요즘은 거의 사용하지 않음 - Cost Based Optimizer : 통계정보를 기반으로 최적의 실행계획을 수립함(ML 같은 방식은 아니고 계산기와 같음). CBO가 작동할 때 어떻게 실행 계획을 수립하는지 PlusTrace로 테스트 해보자. 1. 로그인 할 사용자에게 plustrace 권한을 부여한다. 2. 아래 구문을 셋팅하면 DB server가 로그를 추적하는 것을 확인할 수 있다. SET AUTOTRACE [ON | OFF | TRACE | TRACEONLY] - ON : SQL문 실행 + 실행 계획 + 통계 정보 + 수행 결과 - OFF : 어떤 결과도 보여주지 않음 - TRACE : SQL문 실행 + 실행 계획 + 통.. 2019. 12. 27.
[Oracle] SELECT문 처리 과정 1. 구문 분석 → excution plan : 내부적으로 하루에 한번 갱신되는 통계정보를 근거로 가장 cost가 낮은 루트로 실행계획을 수립함. → shared pool에 구문을 저장 (향후 재활용) 2. 실행 → Disk I/O를 최대한 줄이기 위해 sga(system global area)내의 database buffer cash에서 먼저 뒤져보고 없으면 database로 간다. 3. 인출 → 사용자(end user, application developer...)에게 실행 결과를 반환한다. 2019. 12. 27.
[Oracle] Delete, Truncate, Drop 비교 + HWM(High Water Mark) DELETE FROM table_name; TRUNCATE TABLE table_name; DROP TABLE table_name [CASCADE CONSTRAINT]; DELETE TRUNCATE DROP 데이터 삭제 삭제 삭제 테이블 구조 존재 존재 삭제 저장 공간 존재 해제 해제 ※ TRUNCAT, DROP 하면 rollback을 할 수 없음. ※ '저장공간이 해제된다'는 것은 HWM(High Water Mark)까지 0번째 블록으로 당기는 것. 저장공간이 존재한다는 것은 HWM을 원래의 위치에 둔다는 것. 따라서 delete를 한 후에 full table scan 하면, 데이터가 없어도 hwm 지점까지 scan을 하기 때문에 시간이 오래 걸린다. ※※ HWM(High Water Mark) : 한 .. 2019. 12. 24.
[Oracle] sqlplus 치환변수 single ampersand(&), double ampersand(&&), / single ampersand(&) : where절에 들어갈 값을 입력 받아서 (java scanner, c scanf...) 쿼리를 실행 2. double ampersand(&&) : &와 같이 where절에 들어갈 값을 입력 받아서 쿼리를 실행하는데, 동일한 세션 안에서는 최초 입력받은 값을 저장해뒀다가 동일하게 실행함 (전역변수와 같은 개념) 3. / : 직전에 실행된 쿼리를 불러와 다시 실행함 2019. 12. 24.
[Oracle] view, inlineview 구조 상의 차이점 view : 이미 파싱되어 분석이 끝난 데이터이므로 권한 체크만 하고 바로 접근이 가능, data masking의 역할. 권한이 다른 각 사용자들에게 맞는 데이터를 제공하기 위해 사용한다. (단, materialized view는 물리적으로 존재하는 테이블로, 원격지에서 테이블 복제 시에 사용한다.) inlineview(from절의 서브쿼리) : 쿼리가 실행될 때마다 매번 분석을 해야함 * 어떤 원리인가? 오라클DB에서는 쿼리가 문법적으로 이상이 없다는 것이 확인되면 해시 값을 붙혀서 Library Cash에 저장해두고, 나중에 같은 쿼리가 들어왔을 때 따로 분석을 하지 않고 해시값만 호출해서 사용한다. 2019. 12. 24.