전체 글

    [MySQL] Transaction Isolation Level과 Lock

    Transaction의 특성 트랜잭션은 DBMS에서 데이터를 조작하는 최소한의 작업(unit of work) 트랜잭션은 아래의 4가지 특성인 ACID를 보장해야 한다. 원자성(Atomicity) 일관성(Consistency) 격리성(Isolation) 지속성(Durability) Transaction Isolation Level 그런데 ACID를 엄격하게 지키다 보면 동시성(Concurrency)가 매우 떨어지는 경우가 발생한다. 그래서 DB 엔진은 ACID를 희생해서 동시성을 얻을 있는 방법을 제공하는데 그것이 바로 트랜잭션 격리 레벨이다. 격리성을 덜 지키는 level을 사용할수록 문제 발생 가능성은 커지지만 동시에 더 높은 동시성을 얻을 수 있다. 일관성(Consistency)와 동시성(Concur..

    [MySQL] SSL 보안 접속방법

    ✅ 공식문서 4.4.3 mysql_ssl_rsa_setup — SSL/RSA 파일 생성 6.3.3.1 MySQL을 사용하여 SSL 및 RSA 인증서 및 키 생성 SSL이란? 1994년 Nescape 사에서 개발한 보안기술로 Secure Sockets Layer의 약자이다. 현재는 표준 보안기술로 사용되고 있으며 SSL을 사용시 스니핑과 피싱을 방지할 수 있다. SSL/RSA 파일 생성 MySQL 설치시 버전별로 SSL 필수 여부가 달라진다. SSL을 사용하는 보안 연결을 지원하고, 암호화되지 않은 연결에서 RSA를 사용하는 보안 암호 교환을 지원하는데 필요한 SSL 인증서 및 키 파일과 RSA 키 쌍 파일을 생성한다(해당 파일이 없는 경우). 기존 SSL 파일이 만료된 경우 새 SSL 파일을 생성할 수 ..

    [MySQL] InnoDB 버퍼 풀에 대해서

    Buffer Pool InnoDB 버퍼 풀은 InnoDB에서 가장 핵심적인 부분 MySQL 성능 튜닝의 중요한 측면 innodb_buffer_pool_size로 설정하고, 전체 물리 메모리의 50~80% 수준으로 설정 버퍼 풀 메모리는 페이징과 캐시 효율성을 위해 LRU 알고리즘을 사용하는 리스트 형태 인덱스 설계에 잘 되어 있지만 슬로우 쿼리가 해결되지 않는다면 이 부분을 의심해 봐야 한다. 사용되고 있는 상태 확인 쿼리 SHOW STATUS LIKE '%innodb_buffer_pool%'; innodb_buffer_pool_size 버퍼 풀의 크기가 클수록 성능에 유리함 버퍼 풀 메모리가 충분히 큰 양으로 할당되어 있다면 innodb는 인메모리 데이터베이스처럼 동작 디스크의 데이터 파일이나 인덱스 ..

    RealMySQL 8.0 | 4.2 InnoDB 스토리지 엔진 아키텍처

    RealMySQL 8.0 을 읽고 정리했습니다. InnoDB 스토리지 엔진 아키텍처 InnoDB → MySQL의 스토리지 엔진 가운데 가장 많이 사용되고, 거의 유일하게 레코드 기반의 잠금을 제공하여 동시성 처리가 가능하고, 안정적이며 뛰어난 성능 구조 4.2.1 프라이머리 키에 의한 클러스터링 InnoDB의 모든 테이블은 기본적으로 프라이머리 키를 기준으로 클러스터링 되어 저장 → 즉, 프라이머리 키 값의 순서대로 디스크에 저장되어 → 프라이머리 키에 의한 스캔은 상당히 빨리 처리됨 결과적으로 쿼리의 실행 계획에서 프라이머리 키는 다른 보조 인덱스에 비해 높은 비중으로 설정 InnoDB 테이블 구조 = 오라클의 IOT(Index Organized Table) 구조 4.2.2 외래 키 지원 Only In..

    RealMySQL 8.0 | 4.1 MySQL 엔진 아키텍처

    RealMySQL 8.0 을 읽고 정리했습니다. 4.1.1 전체 구조 MySQL 서버 = 사람의 머리 역할을 담당하는 MySQL 엔진 + 손발 역할을 담당하는 스토리지 엔진 MySQL 엔진 커넥션 핸들러 : 클라이언트로부터 커넥션 및 쿼리 요청을 처리 SQL 인터페이스 : DML, DDL, Procedure, View 등 SQL 인터페이스 제공 SQL 파서 : SQL 문법 오류 탐지 및 SQL 쿼리 문장을 MySQL이 처리하기 좋은 토큰 단위로 나눠서 트리 형태로 파싱하는 작업 담당 SQL 옵티마이저 : 쿼리의 최적화된 실행을 담당 캐시 & 버퍼 : 성능 향상을 위한 보조 저장소 기능 담당 스토리지 엔진 핸들러 API를 만족하면 누구든지 스토리지 엔진을 구현하여 MySQL을 추가하여 사용할 수 있음 실제..

    NHN Cloud 인스턴스에 MySQL 설치하기 (3) - 설정

    임시비밀번호 변경 ALTER USER '[user명]'@'localhost' IDENTIFIED BY '[변경할 비밀번호]'; USER 생성, 권한 부여 user 생성 CREATE USER '[user명]'@'[접근가능범위]' IDENTIFIED BY '[비밀번호]'; # 내부 접근을 허용하는 user 생성 CREATE USER '[user명]'@'localhost' IDENTIFIED BY '[비밀번호]'; # 외부 접근을 허용하는 user 생성 CREATE USER '[user명]'@'%' IDENTIFIED BY '[비밀번호]'; # 특정 IP만 허용하는 user 생성 CREATE USER '[user명]'@'192.168.188.122' IDENTIFIED BY '[비밀번호]'; # 특정 IP 대..

    NHN Cloud 인스턴스에 MySQL 설치하기 (2) - Yum 이용

    ✅ 공식문서 https://docs.nhncloud.com/ko/TOAST/ko/Overview/ ⬇️ MySQL 설치 전에 인스턴스 생성하는 방법 ⬇️ 2023.01.08 - [인프라/NHN Cloud] - NHN Cloud 인스턴스 생성하기 인스턴스 환경 OS : CentOS 7.9 아키텍쳐: x86_64 0. 설치 전 확인 인스턴스에 MySQL을 처음 설치한다는 가정으로 설치를 진행한다. 설치 여부 확인 rpm -qa | grep mysql 아래와 같이 나오면 설치가 되어 있는 것이다. 재설치를 하기 위해서는 삭제를 먼저 하고 설치를 진행한다. yum remove mysql-server 1. 설치 과정 ( 1 / 8 ) 인스턴스에 SSH 방식으로 접속 ssh -i [키페어이름.pem] centos@..

    NHN Cloud 인스턴스에 MySQL 설치하기 (1) - 압축파일 이용

    ✅ 공식문서 https://docs.nhncloud.com/ko/TOAST/ko/Overview/ ⬇️ MySQL 설치 전에 인스턴스 생성하는 방법 ⬇️ 2023.01.08 - [인프라/NHN Cloud] - NHN Cloud 인스턴스 생성하기 인스턴스 환경 OS : CentOS 7.9 아키텍쳐: x86_64 0. 설치 전 확인 인스턴스에 MySQL을 처음 설치한다는 가정으로 설치를 진행한다. 설치 여부 확인 mysql --version 아래와 같은 형식으로 나오면 설치가 되어 있는 것이다. 재설치를 하기 위해서는 삭제를 먼저 하고 설치를 진행한다. rm -rf /var/lib/mysql 데이터 파일이나 config 파일까지 삭제해야 한다. 1. 설치 과정 ( 1 / 12 ) 인스턴스에 SSH 방식으로 ..

    [Redis] 자세히 알아보기! (6) - 활용 예제와 장애 포인트

    활용 예제 Counting Strings 단순 증감 연산 INCR / INCRBY / INCRBYFLOAT / HINCRBY / HINCRBYFLOAT / ZINCRBY Bits 데이터 저장공간 절약 정수로 된 데이터만 카운팅 가능 userid 값이 0 이상의 정수값일 때만 카운팅이 가능 시퀀셜한 값이 없을 때에는 사용 불가 SETBIT / BITCOUNT HyperLogLogs 대량의 유니크한 데이터를 카운팅할 때 적절 set과 비슷하지만 저장되는 용량이 매우 작음 웹사이트에 방문한 유니크한 IP 수 / 하루 종일 크롤링한 URL 수 / 검색엔진에서 검색된 유니크한 단어 수 PFADD / PFCOUNT / PFMERGE Messaging Lists 자체적으로 blocking 기능을 제공해서 Event ..

    [Redis] 자세히 알아보기! (5) - 아키텍처

    Replication replicaof 커맨드로 간단하게 복제 연결 비동기식 복제 Master가 다운되더라도 Replica가 서비스를 계속 할 수 있음 HA 기능이 없으므로 장애 상황 시 수동 복구 replicaof no one 서버 다운시 AOF 또는 RDB로 재시작 replication 과정에서 fork가 발생하므로 메모리 부족 발생 가능 특정 커맨드 disable 하기 Sentinel 센티널은 일반 노드들을 실시간으로 모니터링(monitoring)하는 역할 자동 페일오버 가능한 HA 구성 마스터가 비정상이면 자동 페일오버(Automatic Failover) 연결 정보 변경 필요 없음 센티널 노드는 항상 3대 이상, 홀수로 존재해야 함 과반수 이상의 센티널이 동의해야 페일오버 진행 예) 네트워크의 잠..

    [Redis] 자세히 알아보기! (4) - 영속성

    데이터 운영과 관련된 것으로 redis에 데이터를 영구 저장할 수 있는 2가지 방법이 있다. Redis는 In-memory 데이터 스토어 서버 재시작 시 모든 데이터 유실 복제 기능을 사용해도 사람의 실수 발생 시 데이터 복원 불가 Redis를 캐시 이외의 용도로 사용한다면 적절한 데이터 백업 필요 AOF Append Only File 방식 모든 write/update 커맨드를 log 파일에 기록하는 형태 redis 프로토콜 형태로 저장 RDB snapshot 방식 순간적으로 메모리에 있는 내용을 disk에 옮겨담는 방식 바이너리 파일 형태로 저장 AOF vs RDB 선택 기준 redis를 캐시로만 사용한다면 둘 다 쓸 필요 없다. 1. 백업은 필요하지만 어느 정도 데이터 손실이 발생해도 괜찮은 경우 ..

    [Redis] 자세히 알아보기! (3) - 캐싱 전략

    데이터 유형과 해당 데이터에 대한 액세스 패턴을 잘 고려해서 선택해야 한다. 읽기 전략 Look-Aside(Lazy Loading) 데이터를 읽는 작업이 많을 때 사용 (가장 일반적으로 사용하는 방법) Cache Hit 데이터를 요청한다. 먼저 cache 서버(redis)를 확인한다. cache에 데이터가 있으면 DB를 조회하지 않고 cache에 있는 데이터를 바로 반환한다. (Cache Hit) Cache Miss 데이터를 요청한다. 먼저 cache 서버(redis)를 확인한다. cache 서버에 데이터가 없으면 DB를 조회하여 cache 서버에 저장하고 데이터를 반환한다. (Cache Miss) Lazy Loading cache는 찾는 데이터가 없을 때에만 입력되기 때문에 lazy loading이라고..

    [Redis] 자세히 알아보기! (2) - 데이터 타입

    Redis는 다양한 데이터 타입과 데이터 타입별 커맨드를 제공합니다. Key 설정 포인트 Key는 문자열이므로 최대 512MB까지 가능 길이 등 가독성을 고려해야하고, 스키마를 유지할 수 있도록 설계할 것 ex) user:1000:followers Strings 가장 기본적인 Redis 데이터 유형 텍스트, 직렬화된 개체 및 이진 배열을 포함한 바이트 시퀀스를 저장, 이미지 저장 가능 캐싱에 자주 사용되지만 카운터를 구현하고, 비트 연산을 수행할 수 있는 기능도 제공 단일 문자열은 최대 512MB 예 문자열 저장하고 검색 > SET user:1 minju OK > GET user:1 "minju" 직렬화된 JSON 문자열 저장하고 지금부터 100초 후에 만료되도록 설정 > SET ticket:27 "\"..

    [Redis] 자세히 알아보기! (1) - 개념 및 특징

    redis란? ✅ 공식문서에서는 다음과 같이 정의되어 있습니다. Redis는 데이터베이스, 캐시, 메시지 브로커 및 스트리밍 엔진으로 사용되는 오픈 소스(BSD 라이센스), 메모리 내 데이터 구조 저장소입니다. Redis는 strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes, and streams과 같은 데이터 구조를 제공합니다. Redis는 기본 제공 복제, Lua 스크립팅, LRU 제거, 트랜잭션 및 다양한 수준의 온디스크 지속성을 갖추고 있으며 Redis Sentinel을 통한 고가용성 및 Redis 클러스터를 통한 자동 파티셔닝을 제공합니다. redis는 remot..

    데이터베이스 첫걸음 | 3장

    왜 우리는 시스템에 돈을 내는가 시스템이란 무엇을 위해 도입하는가? → 데이터베이스란 무엇을 위해 도입하는가? → 왜 시스템에 돈을 내는가? 데이터베이스의 초기비용 시스템의 전체비용 내역 초기비용 : 최초에 지급하는 돈 운영비용 : 서비스를 이용하는 기간에 계속해서 지급하는 돈 일반적으로 운영비용의 단위 금액(월 비용이나 연간 비용)은 초기비용보다 낮게 설정됨 하지만 초기비용 < 운영비용 합인 경우도 드물지 않음 초기비용과 운영비용의 비율을 바꿔서 전체비용을 낮게 보이려는 심리적인 트릭도 있음 라이선스 요금과 가격의 차이 라이선스 : 데이터베이스 도입할 때 초기비용, 소프트웨어 사용허가료 차이 판매단위가 특수하다 운영비용을 지급하지 않으면 현실적으로 사용할 수 없다. 프로세서 라이선스와 사용자 라이선스 ..

    Yum이란? 개념, 사용법 및 동작방식에 대해서

    yum에 대해서 개념 Yellowdog Update Modified의 약자 레드햇 계열의 리눅스에서 사용하는 패키지 설치 관리 도구 rpm이 해결하지 못했던 패키지 의존성 문제를 해결한 스마트한 패키지 관리 툴 패키지 의존성 문제를 자동으로 처리하면서 설치, 업데이트, 삭제를 진행 → Spring(=rpm)에서 안되던 dependency 주입을 Springboot(=yum)에서 해주는 느낌 발음은 대부분 염이라고 한다..! 💡 패키지 의존성 이란? 더보기 A라는 패키지를 설치하려면 B 패키지를 먼저 설치해야 하는 것이다. A라는 패키지를 B 패키지의 기능을 사용하도록 제작되었기 때문이다. 서로 여러 패키지들이 의존성을 갖게 되어 패키지 간의 의존 관계가 점점 복잡해지게 되고, 관리가 어려워지는 문제가 있..

    [Error] bash: mysql: command not found 환경변수 설정

    분명 설치 잘 돼서 데이터 입출력까지 하고, 다시 켰는데 mysql --version 도 안되고 그냥 mysql 커맨드가 다 안 됐다. 에러는 Error - bash: mysql: command not found 라고 났다. 뭐지 싶어서 구글링 엄청 했는데 검색했을 때 보통 PATH에 추가하라고 나오는 경로가 있는데 나는 mysql이 설치된 경로가 달라서 맞지 않았다. 이런 경우 본인의 mysql이 어느 경로에 설치되어 있는지 확인해보는걸 추천한다. 참고) PATH에 넣을 경로는 my.cnf 에 basedir 경로에 bin만 추가한 것과 같다. 🧐 압축파일로 설치했을 때만 문제가 있었고, yum으로 설치한거는 따로 설정없이도 잘 동작했다. 왜일까? ⭐️ 이 과정을 거쳐야 mysql 커맨드를 사용할 수 있..

    Ansible과 Vagrant에 대해서

    Ansible과 Vagrant는 둘 다 구성 관리 및 자동화에 사용할 수 있는 도구이지만 사용 사례 및 작동 방식 측면에서 몇 가지 주요 차이점이 있습니다. Ansible 서버 및 기타 네트워크 장치를 관리하고 구성하는 데 사용할 수 있는 Python 기반의 구성 관리 및 자동화 도구 간단하게 말하면 네트워크 자동화 시스템 코드로 인프라를 구축하기 때문에 IaC(Infrastructure as Code)라고 불리기도 함 특징 yaml 형식의 playbook를 사용해서 이해하기 쉽고 러닝 커브가 낮음 제어 시스템이 구성 변경 사항을 대상 시스템으로 푸시하는 푸시 기반 아키텍처를 사용 소프트웨어 설치, 사용자 및 그룹 관리, 서비스 설정 및 구성과 같은 작업을 자동화하는 데 사용 비슷한 도구 : Chef, ..

    NHN Cloud 인스턴스간 통신하기

    시나리오 client1 인스턴스에서 공개키(id_rsa.pub)를 생성하고, host 인스턴스로 보낸다. 받은 공개키 내용을 host 인스턴스에 등록한다. 왜? 기존에 비밀번호를 네트워크를 통해 보내는 비밀번호 인증은 네트워크 상에서 ID/비밀번호가 그대로 노출되는 문제가 있고, 접속할 때마다 입력해야 하는 번거로움이 있다. SSH 키는 이와 달리 공개키 암호 방식을 사용하여 서버에서 인증받을 수 있으며, 암호를 생략하고 원격 호스트로 접속할 수 있다. 실습 환경 client1 인스턴스 : CentOS 7.9 host 인스턴스 : CentOS 7.9 준비할 항목 1. client1에서 실행 sudo vi /etc/ssh/sshd_config PubkeyAuthentication yes PasswordAu..

    Ansible이란?

    Ansible은 서버 및 기타 네트워크 장치를 관리하고 구성하는 데 사용할 수 있는 구성 관리 및 자동화 도구입니다. 특징 소프트웨어 설치,사용자 및 그룹 관리, 서비스 설정 및 구성과 같은 작업을 자동화하는 데 사용할 수 있습니다. 일관되고 자동화된 방식으로 많은 수의 서버 및 기타 리소스를 관리하고 구성하는 데 사용할 수 있는 클라우드 환경에서 사용하기에 특히 적합합니다. YAML이라는 간단하고 읽기 쉬운 언어를 사용하며 제어 시스템이 구성 변경 사항을 대상 시스템으로 푸시하는 푸시 기반 아키텍처를 사용합니다. 에이전트가 없습니다. 즉, 대상 머신에 소프트웨어를 설치할 필요가 없으며 대상 머신에서 작동하려면 SSH 및 Python만 필요합니다. 사용 예시 Ansible은 다음과 같은 작업에 사용할 수..

    #!/bin/bash 대신 #!/usr/bin/env 사용하기

    #! sharp(#) + bang(!)의 합성어, shebang이라 한다. 2byte의 매직 넘버(magic number)로 이 자체가 하나의 기호 스크립트를 실행시킬 프로그램의 경로를 지정하는 역할 이 뒤에 나오는 것은 경로명, 명령어들을 해석할 프로그램의 위치를 나타냄 경로가 정확하지 않다면 bad interpreter 발생 다른 인터프리터를 지정하면 문법 오류 발생 문법 #! [optional-arg] #! 뒤에 공백이 하나 있어도 동작 에는 프로그램의 절대경로 입력 예시 #!/bin/sh #!/bin/bash #!/usr/bin/php #!/usr/bin/python -O #!/usr/bin/env bash #!/usr/bin/env interpreter에 들어갈 프로그램의 절대 경로는 시스템에 ..

    NHN Cloud 인스턴스 생성하기

    ✅ 공식문서 NHN Cloud : https://console.nhncloud.com/project/VMltoqPh/compute/instance NHN Cloud 사용자 가이드 : https://docs.nhncloud.com/ko/Compute/Instance/ko/overview/ 인스턴스 생성 과정 조직 생성 (그룹의 개념, 프로젝트를 여러개 소유할 수 있음) 프로젝트 생성 서비스 추가 Compute > Instance > + 인스턴스 생성 이미지 설정 이미지 종류(CentOS, Ubuntu, Windows 등), 최소 블록 스토리지(저장공간 크기), 비트 인스턴스 정보 설정 인스턴스 이름, 타입(리소스 사양) 수, 키 페어(ssh -i [키페어파일] [OS]@[IP]) 네트워크 플로팅 IP (외..

    bash, shell로 간단한 계산기 스크립트 구현하기

    구현 개요 Bash로 작성된 간단한 계산기 스크립트입니다. 사용자로부터 두 개의 숫자와 연산자를 읽고 계산을 수행한 다음 사용자가 중지를 선택할 때까지 이전 계산의 결과로 계산을 계속할 수 있습니다. 사용 언어 bash, shell script 코드 및 함수 스크립트는 나중에 사용자 입력의 유효성을 검사하는 데 사용되는 두 개의 정규식 REGEX_NUMBER 및 REGEX_OPERATION을 정의하는 것으로 시작합니다. 그런 다음 스크립트는 여러 기능을 정의합니다. #!/bin/bash : 해당 파일을 bash 쉘로 실행시킨다는 의미 TOTAL : 연산 결과를 저장하는 전역 변수 FLAG : 연산을 계속 할 지 여부를 저장하는 전역 변수 REGEX_NUMBER : 숫자 확인 정규표현식 REGEX_OPER..

    [zsh] zsh-syntax-highlight 안될 때

    git clone, .zshrc 설정 등 다 했는데도 파일에 색이 하나도 안 칠해져있었다. 참을 수가 없어서 구글링 엄청 하다가 드디어 해결 방법을 찾았다.. 처음 맥북 샀을 때도 이랬던거 같은데 다음에 또 필요할 때를 위해서 남겨야겠다.. ls -alh 를 해서 .vimrc 가 있는지 확인한다. 아마 없을 것이다.. vi .vimrc 로 파일을 생성해서 syntax on 을 쓰고 저장하면 색이 잘 나오는 것을 확인할 수 있다!

    스크럼(Scrum) 알아보기

    매일 오전 10시에 멘토님과 스크럼을 진행한다. 스크럼을 들어본 적은 많지만 실제로 해보는 건 처음이어서 이번 기회에 관련 용어와 특징을 간단히 정리해보고자 한다. 스크럼이란? 스크럼은 럭비에서 경기가 잠시 중단되었을 때 양 팀 선수들이 공을 중간에 놓고 서로 어깨를 밀착하여 형성하는 전술 대형을 가리키는 말입니다. 오늘날에는 애자일 기법 중 하나로 점진적이고 반복적인 개발 방법을 뜻합니다. 주요 개념 제품 책임자(project owner) 제품 백로그를 관리하는 사람으로 단 한 명이어야 함 제품 백로그 항목의 우선순위를 결정하고, 매 스프린트 결과를 검토하여 우선순위를 지속적으로 관리 스크럼 마스터(scrum master) 일일 스크럼 회의(daily scrum meeting)를 주관하여 진척도를 모니..

    bash, vi 명령어 정리

    1. bash 커맨드 ls 현재 디렉토리 파일 목록 나열 ls -F : 파일과 디렉토리를 구분하여 출력 ls -a : 숨겨진 파일, 디렉토리도 함께 출력 ls -l : 자세한 내용 ls -al : a와 l의 기능 모두 포함 ls -h -al : 파일크기도 함께 출력 ll : 한 줄씩 파일의 상세 정보 mv 파일 또는 디렉토리의 이동 또는 이름 변경 mv [원본 파일명] [옮기고 싶은 디렉토리명] : 해당 디렉토리로 파일 이동 mv [원본 파일명] [바꾸고 싶은 파일명] : 원본 파일 이름 변경 mv [원본 디렉토리명] [옮기고 싶은 디렉토리명] : 해당 디렉토리로 디렉토리 이동 mv [원본 디렉토리명] [바꾸고 싶은 디렉토리명] : 원본 디렉토리 이름 변경 cp 파일 또는 디렉토리의 복사 cp [원본 파..