분류 전체보기
-
[Python] Heap과 heapq 모듈언어/파이썬 & 장고 2021. 5. 2. 18:59
heap 에 대한 설명은 https://brownbears.tistory.com/391에서 했지만 여기서는 더 자세하게 설명을 합니다. Heap은 최댓값, 최솟값을 찾아내는 연산을 빠르게 하기 위해 고안되었으며 완전 이진 트리 (Complete Binary Tree)를 기본으로 가집니다. 즉, 데이터가 입력이 되면 가장 말단에서 왼쪽부터 차례대로 채워져 나갑니다. 최대 힙(max heap)은 부모의 노드가 자식 노드의 값과 같거나 더 크며 최소 힙(min heap)은 부모의 노드가 자식 노드의 값과 같거나 더 작습니다. 힙과 이진 탐색 트리 (binary search tree)이 쉽게 헷갈리는데 이진 탐색 트리의 경우, 부모 노드의 값보다 작으면 왼쪽, 크면 오른쪽 이라는 규칙이 있지만 힙의 경우엔 없습..
-
[Python] 양, 음의 무한대 표시언어/파이썬 & 장고 2021. 5. 2. 16:09
파이썬에서 양의 무한대, 음의 무한대를 표시는 다음과 같습니다. int타입의 양, 음의 무한대 파이썬 3에서는 아래와 같이 int 형의 무한대를 표시할 수 있습니다. import sys max_int = sys.maxsize min_int = -(sys.maxsize + 1) # 9223372036854775807 # 9223372036854775808범위를 정확하게 할 필요가 없다면 음의 무한대에 1을 추가할 필요가 없습니다. float타입의 양, 음의 무한대 float 타입의 무한대를 표시하는 방법은 두 가지가 존재합니다. math 모듈 사용 import math max_float = math.inf min_float = -math.inf # inf # -inffloat 내장함수 사용 max_floa..
-
[Django] prefetch_related 동작과 자동 쿼리 생성 조건 알아보기언어/파이썬 & 장고 2021. 5. 1. 20:44
먼저 아래에서 사용하는 장고의 버전은 Django 1.11.5 으로 현재 최신 버전인 3.2와는 동작이 다를 수 있습니다. 기본 조건 예시 모델 class Coupon(models.Model): coupon_no = models.BigAutoField( db_column='coupon_no', primary_key=True ) coupon_name = models.CharField( db_column='coupon_name', max_length=200 ) is_deleted = models.CharField( db_column='is_deleted', max_length=1, ) ... class CouponApplyBrand(models.Model): cou..
-
[PostgreSQL] VacuumDB/PostgreSQL 2021. 4. 4. 18:41
pg에서는 주기적인 Vacuum이 필요합니다. Vacuum은 진공 청소기라는 뜻 그대로 더이상 사용하지 않는 데이터를 정리해주는 역할을 합니다. 즉, 디스크 조각 모음과 같습니다. pg는 다중 버전 동시성 제어(MVCC)를 지원하기 때문에 데이터의 삭제, 수정이 발생하면 더이상 사용하지 않는 여러 버전의 데이터가 존재합니다. 만약 Vacuum을 진행하지 않으면 이러한 데이터가 지속적으로 쌓여서 실제 테이블 데이터 자체는 적은데 테이블의 사이즈는 어마어마하게 커지는 것을 볼 수 있습니다. 이런 테이블은 당연히 조회 속도가 느려집니다. 또한 데이터베이스의 나이가 줄지 않아 트랜잭션 ID 겹침 현상이 발생해 auto vacuum이 freeze 상태에서 멈출 수 있습니다. 이러한 현상이 지속되면 트랜잭션 ID를..
-
[Java] 람다식 표현 (Lambda Expression)언어/Java 2021. 4. 4. 00:04
자바 8에서 도입된 개념으로 함수를 변수처럼 사용하는 사용하는 개념입니다. 함수를 변수처럼 사용하므로 파라미터로 다른 메소드에 전달할 수도 있고 반환값으로 함수를 받을 수 있습니다. 자바에서 람다식은 다른 스크립트 언어처럼 완전한 함수형 프로그래밍 방식은 아닙니다. 인터페이스 형식을 빌려서 람다식을 표현하기 때문에 함수형 프로그래밍의 장점을 완벽하게 가지지 못합니다. 장단점은 아래에서 설명합니다. 사용법 (매개변수1, 매개변수2, ...) -> {실행문...}매개변수의 이름은 자유롭게 정할 수 있고 타입을 명시하지 않아도 됩니다. -> 는 실행문에서 좌변에 설정한 값들을 보내 사용한다 라고 이해하면 쉽습니다. 예시 예시를 하기 위해 사전에 아래와 같은 코드가 작성되어 있다고 가정합니다. @Function..
-
[Postgresql] 데이터 해시화, 암호화, 복호화DB/PostgreSQL 2021. 4. 3. 22:41
해시화 MD5 md5 는 해시화로 한번 변형을 하면 복원을 할 수 없습니다. 예전에는 비밀번호와 같은 값을 많이 변환했지만 보안적인 측면에서 이미 취약하다고 하기 때문에 탈취가 되어도 크게 중요하지 않은 데이터에서만 사용하기를 권장합니다. 형식 md5(문자열) return hex예시 SELECT md5('abcd'); -- e2fc714c4727ee9395f324cd2e7f331fdigest digest를 사용하면 md5 뿐만 아니라 sha1, sha256, sha512와 같이 평문을 해시화 할 수 있습니다. 반환 타입은 bytea 이므로 encode()함수를 사용해 16진수로 변환하여 사용하면 됩니다. 형식 해시 타입 md5, sha1, sha224, sha256, sha384, sha5..
-
[Java] Optional언어/Java 2021. 3. 14. 22:52
Optional 클래스는 객체를 포장해주는 래퍼 클래스로 모든 타입의 참조 변수를 담을 수 있습니다. Optional 객체를 사용하면 복잡한 조건문 없이 NullPointerException (;NPE) 예외 처리를 할 수 있습니다. 생성 Optional 객체 생성은 .empty(), .of(), .ofNullable() 이 있습니다. .of() 메소드를 사용해서 객체를 생성할 때, 인자값으로 null이 전달된다면 NPE가 발생하므로 null이 입력될 수도 있다면 안전하게 ofNullable() 메소드를 호출하는 것이 좋습니다. Optional op1 = Optional.empty(); // Optional.empty - null을 담고 있는 빈 객체 Optional op2 = Optional.ofNul..
-
[PostgreSQL] DB LockDB 2021. 3. 13. 23:21
명시적 lock (Explicit Lock) PostgreSQL은 여러 lock 모드들을 사용하여 테이블의 데이터를 동시 접근을 제어합니다. 이와 같은 lock 모드는 다중 버전 동시성 제어(MVCC)를 제공하지 않는 상황에서 어플리케이션을 제어하는 lock을 쓸 수 있고 대부분의 PostgreSQL 명령들은 해당 명령이 실행되는 동안 명령 실행의 대상이 되는 테이블이 삭제되거나 수정되지 않도록 적절한 모드의 lock을 자동으로 얻습니다. 예를 들어, 특정 테이블에서 truncate가 실행되는 동안 다른 작업이 실행되지 않도록 해당 테이블에 배타적 lock(exclusive lock)을 얻습니다. 동시성 제어 (Concurrency Control) 동시성 제어란 DBMS가 다수의 사용자 사이에서 동시에 ..
-
[DB] 데이터베이스 정규화 (Database Normalization) - 1NF, 2NF, 3NF, BCNFDB 2021. 3. 6. 21:06
이상현상의 종류와 함수적 종속성이 무엇인지 알고 있어야 이해가 쉽기 때문에 이 개념들을 먼저 설명을 먼저 한 다음, 데이터베이스 정규화를 설명합니다. 이상 현상 (Anomaly) 데이터베이스 설계를 잘못했을 때, 불필요하게 데이터가 중복으로 저장될 수 있습니다. 이럴 경우, 리소스가 낭비되고 운영 상 의도치 않은 부작용이 발생할 수도 있습니다. 부작용으로는 삽입 이상(Insertion Anomaly), 갱신 이상(Update Anomaly), 삭제 이상(Deletion Anomaly)이 있습니다. 아래는 학사 시스템 예제로 1명의 학생은 1개의 학과에 속할 수 있으며 학번과 과목명의 조합으로 기본키를 가지는 테이블 입니다. 삽입 이상 (Insertion Anomaly) 수강을 1개도 하지 않는 편입생을 ..
-
[Python] divmod를 사용해 몫과 나머지 구하기언어/파이썬 & 장고 2021. 3. 1. 20:45
divmod 모듈을 모른다면 몫과 나머지를 구하는 로직은 아래와 같습니다. # 몫 s = a // b # 나머지 r = a % b위와 같이 구하는 것도 좋지만 divmod를 사용하여 계산할 수도 있습니다. s, r = divmod(a, b) s, r = divmod(11, 3) # 3, 2divmod가 편해보여서 평상시에 사용해도 크게 상관은 없지만 처리 속도가 아주 중요한 프로그램에서는 사용에 지양해야 합니다. 계산하고자 하는 숫자가 작을 경우, divmod 보다 직접 연산자를 사용해서 계산하는 방식이 더 빠릅니다. 반대로 숫자가 크다면 divmod를 사용하는 것이 더 빠르게 처리됩니다. import timeit timeit.timeit('divmod(n, d)', 'n, d = ..