인덱스란?

책너두 6기 21일차 백은빈, 이성욱의 Real MySQL8.0 1권 p.216 ~ p.227 내용정리 08 인덱스 8.1.2 랜덤 I/O와 순차 I/O 랜덤 I/O는 HDD의 플래터(원판)를 돌려서 읽어야 할 데이터가 저장된 위치로 디스크 헤더를 이동시킨 다음 데이터를 읽는 것을 의미 사실 순차 I/O도 이 작업 과정은 같다. 순차 I/O는 3개의 페이지(3X16KB)를 디스크에 기록하기 위해 1번 시스템 콜을 요청 => 디스크의 헤드 1번 이동 랜덤 I/O는 3개의 페이지를 디스크에 기록하기 위해 3번 시스템 콜을 요청 => 디스크의 헤드 3번 이동 ...

2023년 9월 27일 · 3 분 · 배준수

냄새와 휴리스틱(5)

책너두 5기 44일차 로버트 C. 마틴의 클린코드 p. 404~ p.412 내용정리 17. 냄새와 휴리스틱 테스트 1. 불충분한 테스트 테스트 케이스는 잠재적으로 깨질만한 부분을 모두 테스트해야 한다. 확인하지 않는 조건이나 검증하지 않는 계산이 있다면 그 테스트는 불완전하다. 2. 커버리지 도구를 사용하라 커버리지 도구는 테스트가 빠뜨리는 공백을 시각적으로 알려준다. 3. 사소한 테스트를 건너뛰지 마라 사소한 테스트는 짜기 쉽고 제공하는 문서적 가치는 구현에 드는 비용을 넘어선다. 4. 무시한 테스트는 모호함을 뜻한다 불분명한 요구사항은 테스트 케이스를 주석으로 처리하거나 테스트 케이스에 @ignore를 붙여 표현한다. ...

2023년 9월 26일 · 2 분 · 배준수

테이블스페이스 이동

책너두 6기 20일차 백은빈, 이성욱의 Real MySQL8.0 1권 p.205 ~ p.216 내용정리 07 데이터 암호화 7.3.3 테이블스페이스 이동 테이블을 다른 서버로 복사할 떄 혹은 특정 테이블의 데이터 파일만 백업 후 복구할 때 테이블 스페이스 이동 기능이 효율적이고 빠르다. 익스포트(Export) : flush tables source_table for export; 7.4 언두 로그 및 리두 로그 암호화 테이블 암호화를 적용해도 리두 로그나 언두 로그, 그리고 복제를 위한 바이너리 로그에는 평문으로 저장된다. 리두 로그나 언두 로그를 평문으로 저장하다가 암호화가 활성화되면 그떄부터 생성되는 리두 로그나 언두 로그만 암호화해서 저장한다. 해제해도 기존의 로그는 암호화된 상태로 남아있다. 7.5 바이너리 로그 암호화 테이블 암호화가 적용돼도 바이너리 로그와 릴레이 로그 파일 또한 평문을 저장한다. ...

2023년 9월 26일 · 2 분 · 배준수

Transparent Data Encryption

책너두 6기 19일차 백은빈, 이성욱의 Real MySQL8.0 1권 p.195 ~ p.204 내용정리 07 데이터 암호화 데이터 암호화 여부는 보안 감사에서 필수적 데이터 파일, 리두 로그, 언두 로그, 복제를 위한 바이너리 로그 등 모두 암호화 가능 7.1 MySQL 서버의 데이터 암호화 TDE(Transparent Data Encryption) 혹은 Data at Rest Encryption 라고 한다. 7.1.1 2단계 키 관리 서버의 TED에서 암호화 키는 키링(KeyRing) 플러그인이 관리한다. 커뮤니티 에디션 keyring_file : File-Based 플러그인 엔터프라이즈 에디션 keyring_encrypted_file : Keyring 플러그인 keyring_okv : KMIP 플러그인 keyring_aws : Amazon Web Services Keyring 플러그인 서버의 데이터 암호화 : 마스터 키(master key)와 테이블스페이스 키(tablespace key 혹은 private key) 두 종류. ...

2023년 9월 25일 · 2 분 · 배준수

냄새와 휴리스틱(4)

책너두 5기 43일차 로버트 C. 마틴의 클린코드 p. 396~ p.403 내용정리 17. 냄새와 휴리스틱 자바 1. 긴 import 목록을 피하고 와일드카드를 사용하라 패키지에서 클래스를 둘 이상 사용한다면 와일드카드를 사용해 패키지 전체를 가져오라 2. 상수는 상속하지 않는다 static import를 사용하라. 3. 상수 대 Enum enum은 마음껏 사용하라. 이름 1. 서술적인 이름을 사용하라 사프트웨어 가독성의 90%는 이름이 결정한다. 시간들 들여 현명한 이름을 선택하고 유효한 상태로 유지한다. 2. 적절한 추상화 수준에서 이름을 선택하라 구현을 드러내는 이름은 피하라. 작업 대상 클래스나 함수가 위치하는 추상화 수준을 반영하는 이름을 선택하라. ...

2023년 9월 25일 · 1 분 · 배준수

냄새와 휴리스틱(3)

책너두 5기 42일차 로버트 C. 마틴의 클린코드 p. 388~ p.395 내용정리 17. 냄새와 휴리스틱 일반 26. 정확하라 코드에서 뭔가를 결정할 때는 정확히 결정한다. 결정을 내리는 이유와 예외를 처리할 방법을 분명히 알아야 한다. 코드에서 모호성과 부정확은 의견차나 게으름의 결과다. 검색 결과 중 첫 번째 결과만 유일한 결과로 간주하지 마라. 부동 소수점으로 통화를 표현하지 마라. 갱신할 가능성이 희박하다고 잠금과 트랜잭션 관리를 건너뛰지 마라. List로 선언할 변수를 ArrayList로 선언하지 마라. 모든 변수를 protected로 선언하지 마라. ...

2023년 9월 23일 · 2 분 · 배준수

데이터 압축

책너두 6기 18일차 백은빈, 이성욱의 Real MySQL8.0 1권 p.185 ~ p.194 내용정리 06 데이터 압축 디스크에 저장된 데이터 파일의 크기는 쿼리의 처리 성능, 백업 및 복구 시간과도 연결된다. 시간과 비용을 절약하기 위해 데이터 압축 기능이 있다. 6.1 페이지 압축 “Transparent Page Compression"이라고도 불린다. 서버가 디스크에 저장하는 시점에 데이터 페이지가 압축되어 저장 서버가 디스크에서 데이터 페이지를 잃어올 때 압축이 해제 페이지 압축 작동 방식 16KB 페이지를 압축(압축 결과를 7KB로 가정) MySQL 서버는 디스크에 압축된 결과 7KB를 기록(이때 MySQL 서버는 압축 데이터 7KB에 9KB의 빈 데이터를 기록) 디스크에 데이터를 기록한 후, 7KB 이후의 공간 9KB에 대해 펀치 홀(Punch-hole)을 생성 파일 시스템은 7KB만 남기고 나머지 디스크의 9KB 공간은 다시 운영체제로 반납 여러 이유로 페이지 압축은 거의 사용되지 않는다. ...

2023년 9월 23일 · 2 분 · 배준수

격리 수준

책너두 6기 17일차 백은빈, 이성욱의 Real MySQL8.0 1권 p.176 ~ p.184 내용정리 05 트랜잭션과 잠금 5.4 MySQL의 격리 수준 격리 수준(isolation level)이란 여러 트랜잭션이 동시에 처리될 때 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 말지를 결정하는 것이다. 5.4.1 READ UNCOMMITTED 각 트랜잭션에서의 변경 내용이 COMMIT이나 ROLLBACK 여부에 상관없이 다른 트랜잭션에서 보인다. 이를 더티 리드(Dirty read)라 한다. 5.4.2 READ COMMITTED 오라클 DBMS에서 기본으로 사용되는 격리 수준. 가장 흔하게 사용된다. ...

2023년 9월 22일 · 1 분 · 배준수

냄새와 휴리스틱(2)

책너두 5기 41일차 로버트 C. 마틴의 클린코드 p. 379~ p.387 내용정리 17. 냄새와 휴리스틱 일반 15. 선택자 인수 선택자(selector) 인수는 목적을 기억하기 어려울 뿐 아니라 각 선택자 인수가 여러 함수를 하나로 조합한다. 인수를 넘겨 동작을 선택하는 대신 새로운 함수를 만드는 편이 일반적으로 좋다. 16. 모호한 의도 코드를 짤 때는 의도를 최대한 분명히 밝힌다. 17. 잘못 지운 책임 코드는 독자가 자연스럽게 기대할 위치에 배치한다. 18. 부적절한 static 함수 일반적으로 static 함수보다 인스턴스 함수가 더 좋다. 조금이라도 의심스럽다면 인스턴스 함수로 정의한다. 반드시 static 함수로 정의해야 겠다면 재정의할 가능성은 없는지 꼼꼼히 따져본다. ...

2023년 9월 22일 · 2 분 · 배준수

냄새와 휴리스틱(1)

책너두 5기 40일차 로버트 C. 마틴의 클린코드 p. 370~ p.378 내용정리 17. 냄새와 휴리스틱 환경 1. 여러 단계로 빌드해야 함 빌드는 간단히 한 단계로 끝나야 한다. 한 명령으로 전체를 체크아웃해서 한 명령으로 빌드할 수 있어야 한다. 2 . 여러 단계로 테스트해야 함 모든 단위 테스트는 한 명령으로 돌려야 한다. 함수 1. 너무 많은 인수 함수에서 인수 개수는 적을수록 좋고 아예 없으면 가장 좋다. 2. 출력 인수 인수는 출력보단 입력으로 간주할 수 있어야 한다. ...

2023년 9월 21일 · 2 분 · 배준수