CS
-
4장 - InnoDB 스토리지 엔진 아키텍처CS/Real MySQL 8.0 요약 2023. 10. 16. 00:01
개요 이전 챕터인 MySQL 엔진 아키텍처에 이어 InnoDB 스토리지 엔진 아키텍처에 대해 알아보고자 합니다. InnoDB 스토리지 엔진 아키텍처 InnoDB는 MySQL에서 가장 많이 사용됩니다. 거의 유의할게 레코드 기반 잠금을 제공하기 때문에 높은 동시성 처리가 가능하고 안정적이며 성능이 뛰어납니다. 프라이머리 키에 의한 클러스터링 InnoDB의 모든 테이블은 기본적으로 PK를 기준으로 클러스터링 되어 저장됩니다. 즉, PK의 순서대로 디스크에 저장되며 세컨더리 인덱스는 레코드의 주소 대신 PK의 값을 논리적인 주소로 사용합니다. 이로 인해 PK로 인한 레인지 스캔은 굉장히 빨리 처리되며 실행계획에서도 다른 인덱스보다 PK가 선택될 확률이 높습니다. 외래 키 지원 외래 키에 대한 지원은 InnoD..
-
PostgreSQL 데드락 발생시키기CS/데이터베이스 2023. 8. 23. 00:01
데드락이란? Dead Lock 다른 말로는 교착상태를 뜻합니다. 동일한 자원을 공유하고 있는 두 개 이상의 작업이 자신들의 작업을 수행하기 위해 사용해야 하는 리소스를 서로 미리 선점함으로써 상대방이 자원에 접근하지 못하도록 막습니다. 컴퓨터 사이언스에서 많이 나오는 용어로 데이터베이스에서는 여러 개의 트랜잭션이 실행을 하지 못하고 서로 무한정 기다리는 상태를 말합니다. 조금 더 학문적으로 보면 데드락이 발생하기 위한 조건 4가지가 있습니다. (동시에 성립해야 함) 상호 배제 - 자원은 한 번에 하나씩만 사용 점유 대기 - 자원을 점유하기 위해 대기하는 시간이 존재 비선점 - 자원을 강제로 빼앗을 수 없음 순환대기 - P0은 P1가 점유한 자원을 대기하고, P1은 P0가 점유한 자원을 대기 데이터베이스의..
-
HTTP/TCP 지연과 성능개선법CS/네트워크 2023. 8. 13. 00:01
개요 "HTTP 완벽 가이드"라는 책을 읽으며 HTTP 프로그래머에게 영향을 주는 가장 일반적인 TCP 관련 지연들에 대해 정리해보고자 합니다. TCP 커넥션 핸드셰이크 지연 어떤 데이터를 전송하든 새로운 TCP 커넥션을 열고 IP 패킷을 교환합니다. SYN, ACK 등의 플래그를 포함하는 패킷을 주고받고 커넥션이 잘 맺어졌음을 서버에게 알리고 데이터 전송이 이루어집니다. HTTP 트랜잭션이 아주 큰 데이터를 주고받지 않는 평범한 경우라면 이런 핸드셰이크과정이 눈에 띄는 지연을 발생시킵니다. 예를 들어 크기가 작은 HTTP 트랜잭션은 50% 이상의 시간을 여기에 사용합니다. 이미 존재하는 커넥션을 재활용하여 이 문제를 해결합니다. 확인응답 지연 인터넷 자체가 패킷 전송을 완벽하게 보장하지 않기 때문에 T..
-
4장 - MySQL 엔진 아키텍처CS/Real MySQL 8.0 요약 2023. 7. 24. 00:01
개요 MySQL 아키텍처를 정리해 보고, 더 잘 이해해보고자 합니다. MySQL 아키텍처 구성도 MySQL 서버는 MySQL 엔진과 스토리지 엔진으로 구성되어 있습니다. MySQL 엔진은 사람의 머리 역할을 담당하고, 스토리지 엔진은 손과 발의 역할을 담당합니다. MySQL 엔진에는 Connection Handler, SQL Interface, SQL Parser, Optimizer, Caches & Bufferes가 있습니다. 스토리지 엔진에는 InnoDB, MyIsam, Memory 등이 존재합니다. File System와 Files & Logs 부분은 운영체제 & 하드웨어에 부분에 해당합니다. MySQL Connectors 다양한 언어들의 애플리케이션이 MySQL 데이터베이스에 연결하고 상호작용할 ..
-
Hard Delete와 Soft DeleteCS/데이터베이스 2023. 7. 17. 00:01
개요 데이터베이스에서 회원탈퇴와 같은 일이 일어났을 때 userStatus를 탈퇴상태로 바꿀 건지, 회원의 정보를 모두 삭제할지 고민하곤 합니다. hard delete와 soft delete에 대해 알아보고, 어떤 장단점이 있는지 알아보고자 합니다. Soft Delete란? 논리적으로만 삭제하는 방법입니다. 사용자가 한때 접근할 수 있었지만 더 이상 접근할 수 없는 데이터로 만들어 사용할 수 없게 만드는 프로세스입니다. 회원상태가 USING(이용 중)이라면 WITHDRAW(탈퇴)로 상태만 변경하여 해당 데이터는 DB에 그대로 남아있게 됩니다. UPDATE 쿼리가 발생합니다. Hard Delete란? 데이터베이스에서 영구적으로 데이터를 삭제하는 일입니다. DELETE 쿼리가 발생합니다. 다양한 관점에서 s..
-
캐시 전략CS/데이터베이스 2023. 7. 10. 00:01
캐시 전략이란? 시스템 아키텍처와 Cache Layer를 구성하면서 캐싱전략에 따라 시스템 구성 및 서비스 성능에 영향을 줄 수 있습니다. 이에 따라 상황에 맞는 캐싱 전략을 세우는 것이 좋습니다. 캐시전략을 잘 세우기 위해서는 다음과 같은것들 잘 파악하고 있으면 좋습니다. 어느 종류의 데이터를 캐시에 저장할지 얼만큼 데이터를 캐시에 저장할지 얼마동안 오래된 데이터를 캐시에서 제거할지 자주 조회되는 데이터인지 결괏값은 자주 변동되는지 어떤 전략들이 존재하고 어떨 때 사용하면 좋은지에 대해 알아보고자 합니다. Cache Aside Aside란 ~곁에라는 뜻입니다. 가장 많이 사용하는 전략이며, 캐시를 곁에 두고 필요할 때만 데이터를 캐시에 로드하는 전략입니다. 처음 사용자가 요청하게 되면, 캐시에는 아무런..
-
Redis Intellij DataGrip 적용CS/데이터베이스 2023. 7. 2. 00:01
개요 DB의 경우에는 IntelliJ SQL으로 조회하는 게 익숙하지만 Redis의 경우에는 데이터를 조작하는 게 익숙하지 않기 때문에 Document들을 살펴보며 익숙해지는 과정을 거치고자 합니다. IntelliJ DataGrip, Redis 지원 시작 https://www.jetbrains.com/ko-kr/datagrip/whatsnew/2022-3/ DataGrip 2022.3의 새로운 기능 www.jetbrains.com 2022.3 버전부터 Redis 지원이 시작됩니다. Redis 연결법 Host와 Port를 입력하면 바로 연결이 됩니다. sets에 2개의 qr-session, refresh-token이 보입니다. hash tables은 979개가 존재합니다. hash table은 SET에 저..
-
docker에서 postgresql table 확인CS/데이터베이스 2023. 6. 27. 00:01
docker-compose.yaml version: '3.8' services: postgresql: image: postgres:14.6 # volumes: # - ~/volumes/jhipster/jhip_api_first/postgresql/:/var/lib/postgresql/data/ environment: - POSTGRES_DB=postgresdb - POSTGRES_USER=admin - POSTGRES_PASSWORD=psltest - POSTGRES_HOST_AUTH_METHOD=trust # If you want to expose these ports outside your dev PC, # remove the "127.0.0.1:" prefix ports: - 127.0.0.1:54..