부록 A 동시성2 (3)

책너두 5기 47일차 로버트 C. 마틴의 클린코드 p. 429~ p.436 내용정리 부록 A 동시성 2 작업 처리량 높이기 동기화 영역은 언제나 작을수록 좋다. 작업 처리량 계산 - 단일 스레드 환경 다음을 가정한다. 페이지를 읽어오는 평균 I/O 시간 : 1초 페이지를 분석하는 평균 처리 시간: 0.5초 처리는 CPU 100%를 사용, I/O는 CPU 0% 사용 스레드 하나가 N 페이지를 처리한다면 총 실행 시간은 1.5초 * N이다. 작업 처리량 계산 - 다중 스레드 환경 3개의 스레드를 사용한다면? 페이지 읽기 한 번은 페이지 분석 두 번과 겹침이 가능하므로 일 초마다 두 페이지를 처리한다. 따라서 단일스레드보다 처리율이 세 배 높다. ...

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

B-Tree 인덱스를 통한 데이터 읽는 방법

책너두 6기 22일차 백은빈, 이성욱의 Real MySQL8.0 1권 p.228 ~ p.236 내용정리 08 인덱스 8.3.3.3 선택도(기수성) 인덱스에서 선택도(Selectivity) 또는 기수성(Cardinality)은 거의 같은 의미로 사용되며, 모든 인덱스 키 값 가운데 유니크한 값의 수를 의미한다. 인덱스 키 값 가운데 중복이 많을수록 기수성과 선택도는 낮아진다. 선택도가 높을수록 검색 대상이 줄어서 빠르게 처리된다. 선택도가 좋지 않다고 하더라도 정렬이나 그루핑과 같은 작업을 위해 인덱스를 만드는 것이 훨씬 나은 경우도 많다. 인덱스에서 유니크한 값의 개수는 인덱스나 쿼리의 효율성에 큰 영향을 미친다. 8.3.3.4 읽어야 하는 레코드의 건수 인덱스를 통해 테이블의 레코드를 읽는 것은 인덱스를 안 거치는 것 보다 높은 비용이 든다. 100만 중 50만을 읽어야하는 쿼리가 있다면 무엇이 효율적일지 판단해야 한다. 테이블 모두 읽고 50만개 버리기 인덱스를 통해 필요한 50만 개 읽기 8.3.4 B-Tree 인덱스를 통한 데이터 읽기 mYSQL이 인덱스를 이용하는 대표적인 방법 세 가지 ...

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

부록 A 동시성2 (2)

책너두 5기 46일차 로버트 C. 마틴의 클린코드 p. 420~ p.428 내용정리 부록 A 동시성2 라이브러리를 이해하라 Executor 프레임워크 스레드 풀링으로 정교한 실행을 지원하는 프레임워크 스레드 풀을 관리하고, 풀 크기를 자동으로 조정하며, 필요하다면 스레드를 재 사용 스레드를 차단하지 않는(non blocking) 방법 최신 프로세서는 거의 지원. CAS(Compare and Swap)라 불리는 연산을 지원 다중 스레드 환경에서 안전하지 않은 클래스 SimpleDateFormat 데이터베이스 연결 java.util 컨테이너 클래스 서블릿 메서드 사이에 존재하는 의존성을 조심하라 두 스레드가 서로를 간섭해 예외가 발생할 가능성이 있다. 해결방안 실패를 용인한다. 클리언트를 바꿔 문제를 해결한다. 즉, 클라이언트-기반 잠금 메커니즘을 구현한다. 서버를 바꿔 문제를 해결한다. 서버에 맞춰 클라이언트도 바꾼다. 즉, 서버-기반 잠금 메커니즘을 구현한다. 실패를 용인한다. 떄로는 실패해도 괜찮도록 프로그램을 조정할 수 있다. ...

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

230927 성능 업데이트

날짜 2023년 9월 27일 업데이트 내용 CDN 적용 이미지를 사용할 떄 CDN(Content Delivery Network)를 적용하였습니다. CDN은 콘텐츠 제공 네트워크라고도 하는데, 지리적으로 분산된 서버들을 연결한 네트워크로서 웹 컨텐츠의 복사본을 사용자에 가까운 곳에 두거나 동적 컨텐츠(예: 라이브 비디오 피드)의 전달을 활성화하여 웹 성능 및 속도를 향상할 수 있게 합니다. 또한 데이터 사용량이 많은 애플리케이션의 웹 페이지 로드 속도를 높이는 상호 연결된 서버 네트워크입니다. 마크다운에 작성한 게시글에서 이미지 삽입할 때 경로를 ./img/이미지파일 에서 ...

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

부록 A 동시성2 (1)

책너두 5기 45일차 로버트 C. 마틴의 클린코드 p. 413~ p.419 내용정리 가능한 실행 경로 1 2 3 4 5 6 7 public class IdGenerator { int lastIdUsed; public int incrementValue() { return ++lastIdUsed; } } 스레드 하나가 IdGenrator 인스턴스 하나를 사용한다고 가정하면 가능한 실행 경로, 가능한 결과도 하나다. 반환값은 lastIdUsed 값과 동일하다. 두 값 모두 메서드를 호출하기 전보다 1이 크다. 스레드가 두 개라면? 그래서 각 스레드가 incrementValue 메서드를 한 번씩 호출한다면 결과는 어떨까? lastIdUsed 초깃값을 93으로 가정하면 결과는 다음 중 하나이다. ...

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

인덱스란?

책너두 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 분 · 배준수