분류 전체보기
-
Real MySQL 8.0 8장 - 인덱스는 왼쪽이 중요하다.✏️ 스터디 모음집/RealMySQL 스터디 2023. 3. 26.
B-Tree 인덱스의 특징은 왼쪽 부터 오른쪽으로 값이 정렬되있다는 것이다. 여기서 왼쪽이란, 하나의 컬럼 내에서 뿐만 아니라 다중 컬럼 인덱스의 컬럼간 순서도 의미한다. 1. 한 컬럼 내에서 왼쪽이 정해지지 않아서 인덱스를 활용하지 못하는 경우 LIKE 검색에서 왼쪽 부분이 정해 지지 않은 경우 인덱스 레인지 스캔이 불가능 하다. 한 컬럼 내의 데이터를 스캔 할 때 왼쪽 텍스트 부터 오른쪽 순서로 탐색이 이루어지기 때문이다. LIKE 절에 왼쪽이 특정 된 경우 explain select * from tb where name like 'a%'; type : range => 인덱스 레인지 스캔 왼쪽이 특정된 경우 인덱스를 활용하는 것이 가능하다. LIKE 절에 왼쪽이 특정 되지 않은 경우 explain s..
-
Real MySQL 8.0 8장 - 인덱스 정렬 및 스캔의 방향✏️ 스터디 모음집/RealMySQL 스터디 2023. 3. 26.
인덱스 생성시 기본적으론, 오름차순(ASC) 정렬로 인덱스가 생성된다. mysql 5.7 버전 이후의 버전에서 인덱스 생성 시, 인덱스를 구성하는 컬럼의 정렬 순서를 정 할 수 있다. 5.7 버전에서는 인덱스 생성시 아래 와 같이 ASC, DESC 키워드로 정렬 순서를 지정해 주어도, 실제로 내부적으로 오름차순(ASC)으로만 정렬된다. CREAT INDEX ix_teamname ON employees (team_name DESC) // 5.7 버전에서는 DESC로 생성해도 실제로는 ASC 로 정렬 됨. 8.0 버전 부터 복합 인덱스 생성시 각 컬럼마다 별개로 정렬 순서를 정할 수 있게 되었다. CREAT INDEX ix_teamname_userscore ON employees (team_name ASC,..
-
운영중인 앱들의 요청 라우팅 하기 - AWS Route 53, Nginx😱 삽질 이슈 기록 2023. 3. 7.
문제 상황 지난 달에는 회사에서 SPOF로 작용했 던, 앱 사용자 로그를 수집 및 처리하는 레거시 로그 서버를 AWS 클라우드 환경으로 분리 이전 하는 작업을 진행했다. 그러면서 현재 서비스 중인 50종의 앱들에서 이제는 레거시 로그 서버가 아닌 새로운 신규 로그 서버로 로그를 보내주도록 하는 작업이 필요하게 되었다. 먼저 생각 해 본 방식은 앱 자체를 업데이트 해서 새로운 리시버 서버로 로그를 보내도록 업데이트 하는 방법이였다. 이렇게 하려면, 앱에 적용되어있는 로그 리시버 서버 URL을 새로운 URL로 바꾸어 주어야 했는데, 현재 서비스 중인 앱의 종류가 50종이 넘는 상황이여서 그 앱들을 모두를 업데이트 하기 쉽지 않은 상황이였다. 또한 앱 자체를 업데이트를 한다고 해도 유저가 스토어에서 앱을 업데..
-
Real MySQL 8.0 7장 - MySQL 암호화✏️ 스터디 모음집/RealMySQL 스터디 2023. 2. 26.
응용프로그램 단에서 암호화 VS 데이터 베이스 단에서 암호화 응용프로그램 단에서 암호화 데이터의 암호화과정을 응용프로그램 단에서 수행하는 경우를 말한다. 주로 중요한 정보를 가진 컬럼 단위로 암호화를 수행한다. 응용프로그램 단에서 데이터를 암호화 해 넣을 경우, 암호화된 컬럼은 인덱스를 생성 하더라도 인덱스를 100% 활용하지 못할 수 있다. where 절에서 = 검색을 제외 한, BETWEEN … AND 와 같은 범위 기반 검색이나 ORDER BY 후 LIMIT 을 걸어 몇개만 데이터를 가져오는 경우에 암호화 되기 전 값을 기준으로 정렬할 수 없기 때문이다. 데이터베이스 단에서 암호화 MySQL 자체에서 암호화를 수행하는 경우를 말한다. 테이블 단위로 암호화를 적용한다. 보안 감사에서 필수적으로 언급되..
-
Real MySQL 8.0 5장(2) - 트랜잭션의 격리수준✏️ 스터디 모음집/RealMySQL 스터디 2023. 2. 26.
트랜잭션의 격리 수준(isolation level)이란? 여러 트랜잭션이 동시에 처리될 때 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회중인 데이터를 볼수있게 할지, 못보게 할지를 결정하는 것 격리수준의 종류와 3가지 문제 위 표에서 아래로 갈수록 격리 수준이 높아지고, READ UNCOMMITED 의 경우 DIRTY READ 문제가 발생하기 때문에 일반적인 데이터베이스에서는 거의 사용하지 않는다. SERIALIZABLE 의 경우도 동시 처리 성능이 낮기 때문에 동시성 처리가 중요한 데이터베이스에서는 거의 사용되지 않는다. 오라클 같은 DBMS에서는 주로 READ COMMITTED 수준을 많이 사용하며, MySQL에서는 REPEATABLE READ 수준을 많이 사용한다. 트랜잭션 격리수준을 테스트 하..
-
Real MySQL 8.0 5장(1) - 트랜잭션과 잠금✏️ 스터디 모음집/RealMySQL 스터디 2023. 2. 26.
1. 트랜잭션의 ACID 특성 ACID는 데이터베이스에서 트랜잭션의 무결성을 보장하기 위해 꼭 필요한 4가지 요소를 의미한다. Atomicity 원자성 : 작업의 일부만 적용되는(Partial update) 현상이 발생 하지 않고, 작업의 완전성을 보장해 주는 것 트랜잭션 내 여러 작업들은 하나의 작업처럼 동작한다. 하나라도 실패하면 전체가 다 실패한 결과를, 전체가 다 성공해야 트랜잭션이 성공한 결과를 내보내야 한다. Consistency 일관성 : 트랜잭션이 성공적으로 완료되면 일관적인 DB상태를 유지해야한다. 여기서 일관적인 DB상태란 무엇일까? 데이터가 제약조건들을 다 만족하면서 모순되지 않은 상태를 유지하고있는것을 말한다. 예를들어 내 계좌가 마이너스 잔액을 허용하지 않는다고 가정하면, 여기서 ..
-
Real MySQL 8.0 4장(2) - InnoDB의 구조✏️ 스터디 모음집/RealMySQL 스터디 2023. 2. 17.
InnoDB 주요 특징 레코드 기반의 잠금지원, 높은 동시성 처리 가능, 안정성이 뛰어남 프라이머리키로 데이터가 클러스터링 됨 외래키를 지원함 MVCC 를 통해 잠금 없이 일관된 읽기를 지원함 자동 데드락 감지기능이 들어가있음 자동으로 장애도 복구할수 있음 랜덤 디스크 쓰기 작업을 줄이기 위해 쓰기작업을 한번에 모아서 처리하는 InnoDB 버퍼풀 존재 Partial-page 문제를 방지하기 위한 Double Write Buffer 방식 언두로그 체인지 버퍼 리두로그 및 로그 버퍼 어댑티브 해시 인덱스 1. InnoDB는 프라이머리키로 데이터가 클러스터링 된다. 클러스터링이란? 비슷한 데이터끼리 묶어서 보관하는것 InnoDB는 그 비슷한 기준을 정할때 프라이머리키를 기준으로 생각한다. InnoDB에서는 모..
-
Real MySQL 8.0 4장(1) - MySQL 구조✏️ 스터디 모음집/RealMySQL 스터디 2023. 2. 17.
1. MySQL 전체 구조 MySQL 엔진 사용자 접속, 쿼리 요청을 처리, SQL 파싱 및 옵티마이저 담당하는 부분 스토리지 엔진 InnoDB, MyISAM, Memory 등이 있다. 데이터를 실제로 어떻게 저장하고 읽어올지 담당하는 부분 각 테이블 마다 다른 종류의 스토리지 엔진을 사용하는것이 가능하다. 현재 테이블의 스토리지 엔진 확인하기 mysql> SHOW TABLE STATUS FROM test; +---------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---..