본문 바로가기
PHILINNOVATOR | 포스트 인지혁명, 인간은 ‘신’을 꿈꾸는가 나 그리고 당신을 위한 ‘초연결 시대 현자 되기’ 프로젝트! 21세기 혼란스러운 초연결 사회에서 중심을 잡고 지혜롭게 살아가기 위한 내용들을 담아 돌아온 ‘필리노베이터’입니다. 이번 달에는 지난 ‘2차 인지혁명, 인간을 넘어선 기계 2편’에 이은 ‘포스트 인지혁명, 인간은 신을 꿈꾸는가?’로 이어가 보겠습니다. 특별하지 않던 동물, 승리의 비결 인간 종이 처음 지구에 나타났을 때는 다른 동물들과 다를 바 없는 ‘특별하지 않은 동물’이었습니다. 특별할 게 없었던 동물 인간 종은 진화를 거듭하면서 유럽에서는 네안데르탈인이, 아프리카에선 현생 인류인 사피엔스가 나타나 살았고, 다른 인간 종들도 지구 전역에서 발생하여 살고 있었습니다. 그러다 어떤 계기로 인해 사피엔스는 아프리카에서 출발해서 유럽과 유라시아 지.. 2022. 7. 27.
Chapter 2. Numpy 1편 : Time Series 머신러닝을 위한 Python 필수 라이브러리 Time Series 머신러닝을 위한 Python 필수 라이브러리, Numpy 1편 머신러닝 알고리즘을 공부하기 앞서, 시계열 데이터를 다루기 위해서 Python 언어의 라이브러리 사용법에 익숙해져야 할 필요가 있다. 이번 챕터에서는 라이브러리를 중점적으로 살펴보며, 여러 실습 예제를 다뤄볼 것이다. Numpy와 Pandas는 큰 규모의 데이터를 탄력적으로 작업할 수 있도록 많은 고성능 도구들을 제공한다. Numpy와 Pandas가 무엇인지 살펴보고, 그 핵심 기능들에 대해 알아보자. 실습을 위한 환경으로는 크게 Jupyter notebook을 직접 구축하여 로컬에서 사용하는 방법과 Google Colab을 사용하는 방법이 있다. 빠른 실습 환경 구축을 위해 Colab을 활용하기를 권장한다. * Nump.. 2022. 7. 27.
DB 인사이드 | MySQL Architecture - 8. InnoDB : 동작 원리 앞서 MySQL의 InnoDB Architecture와 그 구성 요소들에 대해 알아보았습니다. 본 문서에서는 해당 내용을 바탕으로 MySQL의 Connection 생성 및 사용자 요청 처리, 주요 Thread의 동작 방식에 대한 내용을 InnoDB 스토리지 엔진 사용을 토대로 설명하도록 하겠습니다. Connection 생성 과정 MySQL의 Connection 생성 및 동작방식은 InnoDB 외 다른 스토리지 엔진에서도 모두 동일합니다. MySQL Server는 하나의 OS 프로세스로 실행되며, 내부적으로 여러 개의 Thread가 동시에 작업을 수행합니다. 이때, MySQL은 자체 Thread 구현 방식을 가지고 있지 않으므로 OS의 Thread 관리 방식에 의존하여 동작합니다. MySQL의 Connec.. 2022. 7. 27.
DB 인사이드 | MySQL Architecture - 7. InnoDB : On-Disk Structure 본 문서에서는 MySQL에 주요 스토리지 엔진인 InnoDB의 On-Disk Structure에 대해 알아보도록 하겠습니다. InnoDB의 디스크 구조 관련 항목은 아래와 같으며, InnoDB는 모든 Data를 디스크 상의 Tablespace라는 논리적인 공간에 저장합니다. Tablespace Table Index Doublewrite Buffer Redo Log Undo Log Tablespace Tablespace는 Data를 저장하는 데 사용되는 가장 큰 논리적 단위이며, 내부적으로 Segment → Extent → Page → Row의 형태로 구성됩니다. MySQL의 Tablespace는 저장하는 데이터의 종류와 방식에 따라 5가지로 분류가 가능한데, 각각의 Tablespace에 대해 알아보도록 .. 2022. 7. 27.
DB 인사이드 | MySQL Architecture - 6. InnoDB : In-Memory Structure 본 문서에서는 주요 스토리지 엔진인 InnoDB Architecture 중 In-Memory Structure에 대해 다루도록 하겠습니다. In-Memory Structure의 주요 구성 요소는 다음과 같으며, 각각 순서대로 알아보도록 하겠습니다. Buffer Pool Change Buffer Adaptive Hash Index Log Buffer Buffer Pool InnoDB Buffer Pool은 테이블 및 인덱스 Data의 캐싱을 목적으로 하는 메인 메모리 영역입니다. Buffer Pool에는 테이블 및 인덱스 Data 뿐만 아니라 아래 그림과 같이 다양한 유형의 Data 역시 캐싱되며 Buffer Pool List를 이용하여 목록을 관리합니다. Buffer Pool을 사용하면 자주 사용하는 D.. 2022. 7. 27.
DB 인사이드 | MySQL Architecture - 5. SQL 처리과정 본 문서에서는 Client가 Query를 전달한 후 내부적인 처리 과정에 대해 알아보도록 하겠습니다. Query Cache 먼저 Query를 분석하기 전에 MySQL Server는 Query Cache를 확인합니다. Query Cache는 Select문에 대한 전체 결과 집합을 저장하고 있습니다. Client가 Query 수행 시 제일 먼저 거치는 단계로, Query를 분석하기 전에 MySQL Server는 Query Cache를 참조합니다. Client가 이미 캐시에 있는 것과 동일한 Query를 실행하면 Server는 SQL Parser, Optimizer 단계를 건너뛰고 결과를 직접 반환합니다. 📢 테이블의 Data가 변경되면 Query Cache의 내용 역시 달라지므로 변경된 테이블과 관련된 정보.. 2022. 6. 30.
DB 인사이드 | MySQL Architecture - 4. Memory MySQL은 Database 작업 성능을 향상하기 위한 다양한 메모리 영역을 갖고 있으며, 각 영역의 값을 변경하여 MySQL 성능을 향상할 수 있습니다. 이러한 메모리 영역은 스토리지 엔진 또는 사용 중인 기능에 따라 다르지만, 일반적으로 공유 가능 여부를 기준으로 Global Memory와 Local Memory 영역으로 구분할 수 있습니다. Global Memory Global Memory 영역이란 Client Thread 수와 무관하게 공통으로 사용되는 하나의 메모리 공간을 의미합니다. 단, 필요에 따라 2개 이상의 공간을 할당받을 수도 있지만 생성된 영역이 2개 이상이어도 모든 Thread에서 공유 가능합니다. Global Memory 영역은 MySQL Server가 시작될 때 운영체제로부터 할.. 2022. 6. 30.
DB 인사이드 | MySQL Architecture - 3. Thread MySQL은 Process가 아닌 Thread 기반으로 동작합니다. Thread는 역할에 따라 2가지로 분류할 수 있는데, User Session에 해당하는 Foreground Thread와 내부적인 처리를 목적으로 하는 Background Thread가 여기에 해당합니다. Background Thread의 수는 MySQL Server 버전과 설정에 따라 다를 수 있으며, 병렬 작업을 수행하는 경우 동일한 이름의 Thread가 2개 이상 표시될 수 있습니다. mysql> select thread_id, name, type from performance_schema.threads; +-----------+----------------------------------------+------------+ | .. 2022. 6. 30.
DB 인사이드 | MySQL Architecture - 2. 스토리지 엔진 본 문서에서는 MySQL의 스토리지 엔진에 대해 알아보도록 하겠습니다. 스토리지 엔진 스토리지 엔진이란 MySQL에서 실제 Data를 디스크 스토리지에 저장하거나 읽어오는 부분을 담당합니다. 위 그림과 같이 MySQL은 스토리지 엔진을 플러그인 방식으로 사용할 수 있는 구조를 가지고 있기 때문에 필요에 따라 원하는 스토리지 엔진을 구성하여 사용할 수 있습니다. 사용자는 show [storage] engines 명령을 통해 스토리지 엔진 목록을 확인 가능하며, Support 값이 나타내는 의미는 다음과 같습니다. mysql> show engines; +--------------------+---------+--------------------------------------------------------.. 2022. 6. 30.