728x90
반응형

난중일기 7

[Real MySQL 8.0] 10장 - 실행 계획

9장에서 옵티마이저가 어떤 실행 계획을 선택하는지에 대해 공부했다면, 10장에서는 실제로 표기되는 실행계획을 읽고 해석하기 위한 공부를 해 보려고 한다. 10.2 실행 계획 확인 MySQL 서버의 실행 계획은 DESC또는 EXPLAIN 명령으로 확인할 수 있다(결과는 같음). 10.2.1 실행 계획 출력 포맷 MySQL 8.0부터는 EXTENDED(옵티마이저가 변환한 쿼리 확인), PARTITIONS(파티션 목록 확인) 옵션은 제거됨 MySQL 8.0부터 FORMAT 옵션을 통해 실행 계획을 JSON이나 TREE, 단순 테이블 형태로 표시할 수 있다. - EXPLAIN (단순 테이블 형태) - 대부분 실행 순서는 위에서 아래로 순서대로 표시 - EXPLAIN FORMAT=TREE (트리 형태로 표시) -..

난중일기/Back 2024.03.06

[Real MySQL 8.0] 8장 - 인덱스

이번에 InnoDB 스토리지 엔진에서 인덱스 레코드를 잠금 한다는 사실을 알게 되어서, 인덱스 설계가 매우 중요하다는 사실을 알게 되었다. 8장을 통해 MySQL의 인덱스에 대해 자세히 공부해 보려고 한다. 8.1 디스크 읽기 방식 디스크 읽기에는 랜덤 I/O와 순차 I/O가 있는데, 디스크 헤더를 많이 움직여야 하는 랜덤 I/O가 부하가 더 크다. 쿼리를 튜닝하는 작업은 랜덤 I/O자체를 줄여주는 것이 목적이다. 8.2 인덱스란? 데이터 파일은 ArrayList와 같이 저장된 순서대로 별도의 정렬 없이 그대로 저장을 해둔다. 인덱스 파일은 Sorted List와 마찬가지로 저장되는 칼럼의 값을 이용해 항상 정렬된 상태를 유지한다. 프라이머리 키 : 레코드를 대표하는 컬럼의 값으로 만들어진 인덱스. 이 ..

난중일기/Back 2024.02.16

[Real MySQL 8.0] 4장 - 아키텍처

MySQL 서버의 아키텍처 구성을 알아본다. MyISAM과 InnoDB 스토리지 엔진의 차이점에 초점을 맞추어 보았다. MySQL 서버는 크게 MySQL엔진, 스토리지 엔진으로 구분된다. - MySQL 엔진 : 클라이언트로부터의 접속 및 쿼리 요청을 처리하는 커넥션 핸들러, SQL파서, 옵티마이저가 중심을 이룬다. - 스토리지 엔진 : 요청된 SQL문장으 분석하거나 최적화 하고, 실제 데이터를 디스크 스토리지에 저장하거나 데이터를 읽어오는 부분을 처리한다. MySQL엔진은 하나지만, 스토리지 엔진은 여러 개를 동시에 사용할 수 있다. 4.1 MySQL 엔진 아키텍처 핸들러 API : MySQL엔진의 쿼리 실행기에서 데이터를 쓰거나 읽어야 할 때 각 스토리지 엔진에 쓰기 또는 읽기를 요청하는데, 이러한 요..

난중일기/Back 2024.02.07

[Real MySQL 8.0] 5장 - 트랜잭션과 잠금

5장은 기존에 알고 있던 내용들이 많아서, 개념만 간단히 잡고 MySQL의 InnoDB에서의 특이사항은 어떤 부분인지를 확인해 보았다. InnoDB에서의 인덱스 레코드를 잠금하는 개념은 처음 알게 되어서, 앞으로 인덱스를 만들 때 이런 내용도 고려해야겠다는 생각이 들었다. 잠금(Lock) : 동시성을 제어하기 위한 기능 트랜잭션(Transaction) : 데이터 정합성을 보장하기 위한 기능 5.1 트랜잭션 개발 시 트랜잭션에서 고려해 볼 사항들 1. 커넥션과 동일하게 꼭 필요한 최소한의 코드에만 적용하는 것이 좋다(로직이 시작된 후에 커넥션을 맺는 것이 아니라, DBMS가 필요하지 않은 작업을 마치고, 필요한 시점의 전에 맺는 것이 좋다). 2. 메일 전송이나 FTP 파일 전송 작업 또는 네트워크를 통해..

난중일기/Back 2024.02.07

kafka 알아보기 - 아키텍처, 특징, 장점, RabbitMQ와의 차이점

카프카(Kafka)란? Apache Kafka는 실시간으로 기록 스트림을 게시, 구독, 저장 및 처리할 수 있는 분산형 데이터 스트리밍 플랫폼이다. Kafka 아키텍처 Kafka 클러스터 : 브로커, 토픽, 파티션으로 구성된 시스템. 데이터는 클러스터 내의 토픽에 기록된다. Producer : 토픽에 데이터/메시지를 보낸다. Consumer : 토픽에서 메시지를 읽거나 소비한다. Broker : Producer와 Consumer 사이의 중간 역할을 한다. Producer에게서 메시지를 받아 토픽에 저장하고, Consumer에게 전달하는 역할을 한다. Topic : 데이터들이 저장되는 단위. 토픽은 이름을 가지고 있다. 토픽에 추가된 데이터는 수정될 수 없다. Partition : 하나의 토픽은 여러개의 ..

난중일기/Back 2024.01.25

[Real MySQL 8.0] 1~3장

이전 회사에서는 MSSQL, 오라클(Tibero)만 사용하다가, MySQL을 사용하게 되어 공부를 시작하게 되었다. ORM, FRM같은 도구들이 나와서 직접적으로 쿼리를 짜거나 DBMS에 대해서 몰라도 개발은 가능하지만, 처리 방식을 이해하고 있는 개발자가 더 경쟁력 있을 것이라고 생각되어 공부를 하게 되었다. 1. 소개 MySQL 8.0은 5.5~5.7 버전까지의 안정화, 성능 개선을 거쳐 상용 DBMS가 가지고 있는 기능이 장착되었다. 다른 DBMS와 비교했을 때 MySQL의 경쟁력은 비용이다. 2. 설치와 설정 MySQL 서버는 오픈 코어 방식(핵심 나용은 엔터프라이즈 에디션과 커뮤니티 에디션이 모두 동일하고, 특정 부가 기능들만 엔터프라이즈 에디션에 포함되는 방식)이다. MySQL Percona ..

난중일기/Back 2024.01.25

Remirror Custom Extension 만들기

마크다운 문법에서 _문자_, *문자*가 있으면 자동으로 가운데 문자를 이탤릭체로 변경해준다. 그치만 우리는 snake case를 즐겨 쓰는 IT인들... 에디터에 필드명을 쓸 때마다 언더바가 사라지고, 자동으로 이태릭 체가 되어버리는 열받는현상이 계속해서 발생해버리는 것이다. 그래서 이런 현상을 수정하기 위해 삽질을 해 보았다. 내가 작업한 서비스에서는 에디터에 Remirror 라이브러리를 사용했다. 간략하게 설명하자면 Remirror는 ProseMirror를 리액트에서 쉽게 사용할 수 있게 해주는 라이브러리이다. (문서 참고 https://remirror.io/docs) 우선 기본적인 Remirror Extension 사용법은 아래와 같다. 1. Remirror 패키지 설치 npm add remirro..

난중일기/Front 2024.01.11
728x90
반응형