본문 바로가기

전체 글

(81)
JVM (Java Virtual Machine)과 메모리 영역 JVM(Java Virtual Machine) JDK, JRE, JVM 등이 무어인지 명확히 정의하지 못할 때가 많다. JDK란 java development kit의 약자로 JRE + Development Kit(개발을 위한 도구) 이라고 쉽게 생각하면 된다. JRE란 Java Runtime Environment의 약자이다. 그리고 이 JRE는 JVM + libraries 이라고 생각하면 된다. JVM은 Java Virtual Machine 선 마이크로 시스템즈에서 개발했다. 원래의 목적은 가전 제품들에 사용하는 코드를 어떠한 운영체제를 사용하더라도 돌아가게 만드는게 목적이었다. 그 목적을 이루기위해서는 운영체제 위에 virtual machine을 두어서 이 가상 머신이 동일한 코드를 넣으면 각 운영체.. 더보기
Sync, Async vs Blocking, Non-Blocking 동기, 비동기 vs 블로킹, 논블로킹 흔하게 쓰이는 용어들 중에 명확하게 구분하고 이를 정의하기 쉽지 않은 것들이 있다. 그 중에서도 대표적인 게 동기/비동기의 차이와 블로킹/논블로킹의 차이가 있을 것이다. 우리는 동기적이다 라는 개념과 블로킹의 개념을 동일 시 하고 비동기와 논블로킹을 비슷한 개념으로 이해하고 사용하는 것 같다. 하지만 이를 구분할 줄 알아야 각각의 개념을 더 잘 이해할 수 있을 것 같다. 사전적인 의미 동기, 비동기는 어떻게 구분할 수 있을까? 이 둘을 구분하는 관심사는 특정 함수를 호출했을 때 그 결과를 신경쓰는 주체의 차이이다. 동기적이다 라는 의미는 함수 A가 함수 B를 호출했을 때 함수 B의 결과에 대해 A가 신경을 쓰는 경우를 의미한다. 비동기적이다 라는 의미는 함수 A가 함.. 더보기
Real MySQL 8장 인덱스 #1 (~8.5) 8장 인덱스 인덱스에 대한 기본 지식은 쿼리 튜닝의 기본이 되므로 매우 중요하다. 8.1 디스크 읽기 방식 CPU나 메모리처럼 전기적 특성을 띤 장치의 성능은 짧은 시간동안 매우 빠른 속도로 발전했다. 하지만 디스크 같은 기계식 장치의 성능은 제한적으로 발전했다. 비록 최근에 자기 디스크 원판을 사용하는 하드디스크보다 SSD 드라이브가 많이 활용되고 있지만 그래도 여전히 데이터 저장 매체가 컴퓨터에서 가장 느린 부분이라는 사실은 변함이 없다. 이러한 이유에서 데이터베이스 성능 튜닝은 어떻게 디스크 I/O를 줄이느냐가 관건일 떄가 상당히 많다. 8.1.1 하드 디스크 드라이브(HDD)와 솔리드 스테이트 드라이브(SSD) CPU나 메모리 장치는 대부분 전자식 장치인데 하드 디스크 드라이브는 기계식 장치이다... 더보기
Real MySQL 6장 데이터압축, 7장 데이터 암호화 6장 데이터 압축 디스크의 데이터 크기 크면 클수록! 버퍼 풀로 더 많은 데이터를 읽어야 한다. 더티 페이지가 더 자주 디스크로 기록되어야 한다. 백업 및 복구하는데 시간이 더 소요된다. 비용문제가 발생한다. 그래서 DBMS에서는 데이터 압축 기능을 제공한다. 기본적으로 압축이 이루어지면 성능은 저하된다. (압축과 해제에 대한 비용발생) 데이터 압축은 크게 테이블 압축과 페이지 압축으로 나뉘어진다. 6.1 페이지압축 MySQL 서버가 디스크에 저장하는 시점에 데이터 페이지가 압축되어 저장되고, 읽어들이는 시점에 데이터 페이지가 압축 해제되어 읽는다. 즉, InnoDB 스토리지 엔진은 압축해제 상태에서 데이터 페이지를 관리한다. 펀치홀 데이터 페이지를 압축하고나서 남는 공간을 의미한다. 예를들어 16KB .. 더보기
Real MySQL 5장 트랜잭션과 잠금 5장 트랜잭션과 잠금 이번 장에서는 잠금과 트랜잭션, 트랜잭션의 격리 수준에 대해 살펴본다. 트랜잭션이란? 작업의 완전성을 보장해주는 것이다. => All or Nothing 잠금이란 동시성을 제어하는 기능이고 트랜잭션은 데이터의 정합성을 보장하기 위한 기능이다. 격리수준이라는 것은 하나의 트랜잭션 내에서 또는 여러 트랜잭션 간의 작업 내용을 어디까지 공유하고 차단할 것인지를 결정하는 레벨을 의미한다. 5.1 [[트랜잭션]] 데이터의 정합성 보장해주는 기능이다. 논리적인 작업의 Set이 100% 적용되거나 아무것도 적용되지 않아야 함을 보장해주는 것 5.1.1 MySQL에서의 트랜잭션 InnoDB 스토리지 엔진에서는 트랜잭션을 지원하지만 MyISAM,MEMORY 스토리지 엔진에서는 트랜잭션을 지원하지 않.. 더보기
Real MySQL 4장 아키텍처 4장 아키텍처 MySQL의 서버는 머리 역할을 하는 MySQL 엔진과 손과 발 역할을 하는 스토리지 엔진으로 구분한다. 이 중 스토리지 엔진은 핸들러 API를 만족시키면 누구든 구현하여 사용 가능하다. 대표적인 스토리지 엔진은 InnoDB 스토리지 엔진, MyISAM 스토리지 엔진이 있다. 4.1 MySQL 엔진 아키텍처 4.1.1 MySQL의 전체 구조 MySQL도 다른 RDBMS와 마찬가지로 대부분의 프로그래밍 언어로부터 접근 방법을 지원한다. 이 책에서는 MySQL엔진과 스토리지엔진 영역으로 구분하여 설명하고 이를 합쳐서 MySQL 서버라고 한다. 4.1.1.1 MySQL 엔진 MySQL엔진은 클라이언트 접속 및 쿼리 요청 등을 처리하는 커넥션 핸들러와 SQL파서 및 전처리기, 쿼리의 최적화된 실행.. 더보기
Real MySQL 1장 ~ 3장 1장 소개 1.1 MySQL 소개 스웨덴 TcX회사의 라이브러리에서 시작 => 썬 마이크로시스템즈 => 오라클로 인수됨 라이센스 정책은 5.5 이전에는 엔터프라이즈와 커뮤니티 에디션으로 나뉘지만 둘의 소스코드는 동일했었다. 그 후부터는 기능과 소스코드가 달라졌다. 핵심기능은 동일 5.5, 5.7, 8.0 버전에 이르기까지 오라클에 인수된이후 10년간 많은 변화가 있었다! 1.2 왜 MySQL인가? 오라클 DB에 비교해서 MySQL의 경쟁력은 가격과 비용이다. 최근에는 대형 은행 시스템에서도 MySQL 서버를 사용하고 있을 정도로 MySQL이 안정성 측면에서도 많이 발전했다. 페이스북에서 가진 데이터를 모두 오라클 DB에 저장하면 페이스북은 망할것이다 ㅎㅎ DBMS를 선택할 때 고려할 사항 안정성 성능과 .. 더보기
함수형 언어의 타입시스템 코틀린의 타입 시스템을 다루지 않는다. 특정 언어의 타입 시스템보다는 함수형 프로그래밍에 초점을 맞춘 포괄적인 관점의 타입 시스템을 설명한다. 타입 시스템의 종류와 특징 함수형 프로그래밍에서는 어떤 타입 시스템을 기반으로 하는지 대수적 타입의 개념과 종류 함수형 프로그래밍에서 대수적 데이터 타입 타입 변수, 값 생성자, 타입 생성, 타입 매개변수 타입 클래스 : 행위를 가진 타입 재귀적 자료구조와 장점 타입 시스템 타입 시스템의 종류와 특징 훌륭한 타입 시스템은 런타임에 발생할 수 있는 오류를 컴파일 타임에 발생시킨다. 또한 IDE를 비롯한 다양한 도구에게 프로그램에 대한 정보를 제공한다. 동적 타입 시스템 정적 타입 시스템 동적 타입 시스템 런 타임에 데이터의 타입이 결정되는 시스템 변수를 만들거나 값.. 더보기