legacy
-
[Database] Redis를 사용하는 이유, 그리고 어떻게 성능 최적화를 했을까?legacy/Database 2024. 10. 18. 14:37
1. Redis란?Redis는 Key:Value 구조의 비정형 데이터를 저장하고 관리하는 비관계형 데이터베이스이다. 데이터를 디스크가 아닌 메모리에 저장하므로 인메모리 DB(In-Memory DB)라고 부른다. 2. 데이터베이스가 있는데, 왜 Redis를 사용할까?데이터베이스가 있음에도 Redis를 사용하는 이유는 CPU가 계산에 필요한 데이터를 얻기 위한 속도 차이가 발생하기 때문이다. 데이터베이스는 물리 디스크에 직접 데이터를 쓰기 때문에 서버에 장애가 발생하더라도 데이터가 손실되지 않는다. 그러나 데이터가 필요할 때마다 매번 디스크에 접근하게 되면 사용자가 많아질수록 데이터베이스에 부하가 발생하게 된다. 따라서 사용자가 많을 때 데이터베이스의 과부하를 줄이기 위해서 Redis와 같은 캐시 서버를 도..
-
[Database] InnoDB의 MVCC와 트랜잭션 처리legacy/Database 2024. 10. 18. 11:03
InnoDB 버퍼 풀(Buffer Pool) : 메모리 내의 캐시 영역으로, 실제 데이터를 디스크에서 읽어오지 않고 메모리에서 바로 접근할 수 있도록 하는 공간이다.데이터 파일(Data File) : 디스크에 저장된 실제 데이터 파일이다. 모든 변경 사항은 결국 디스크에 반영되어야 한다. 1. INSERT 발생INSERT INTO User(m_id, m_name, m_area)VALUES(1, '이희망', '부산'); 데이터가 새로 삽입되면, InnoDB 버퍼 풀에 해당 데이터가 먼저 기록된다. 버퍼 풀에 저장된 데이터는 백그라운드 프로세스에 의해 나중에 데이터 파일에 기록된다. 2. UPDATE 발생UPDATE SET m_area = '서울' WHERE m_id = 1; UPDATE 작업이 발생하면서 ..
-
[Database] 데이터베이스 격리 수준legacy/Database 2024. 10. 13. 15:57
1. READ UNCOMMITTED READ UNCOMMITTED는 커밋되지 않은 데이터에 접근이 가능하다.1-1. Dirty ReadREAD UNCOMMITTED 격리 수준에서는 Dirty Read가 발생한다. Dirty Read는 커밋되지 않은 데이터를 다른 트랜잭션에서 읽음으로써 발생하는 문제이다. 이는 아직 데이터베이스에 반영되지 않은 변경 사항을 읽기 때문에, 이후에 변경 작업을 수행한 트랜잭션이 ROLLBACK 될 경우 문제가 발생한다.트랜잭션 1이 공유 데이터 MIN을 KIM으로 UPDATE 한다.아직 데이터베이스에 커밋되지 않은 상태이다.이때, 트랜잭션 2는 트랜잭션 1이 커밋하지 않은 KIM 데이터를 읽는다.만약 트랜잭션 1이 중간에 문제가 발생하여 ROLLBACK 할 경우, 데이터는 다..
-
[MySQL] SELECT FOR UPDATE란?legacy/Database 2024. 10. 13. 11:24
1. SELECT FOR UPDATESELECT * FROM Student WHERE id = 1 FOR UPDATE;SELECT FOR UPDATE를 실행하면 조회된 레코드에 대해 LOCK이 설정되어 해당 세션이 UPDATE 쿼리를 완료하고 COMMIT 또는 ROLLBACK 할 때까지 다른 세션에서 해당 레코드를 수정할 수 없다. 2. SELECT FOR UPDATE FlOW2-1. 테스트 환경도커를 사용하여 테스트 환경을 구성한다.MysQL 이미지 설치 : docker pull mysql:latestMySQL 컨테이너 실행 : docker run --name test-mysql-container -e MYSQL_ROOT_PASSWORD=1234 -d -p 3313:3306 mysql:latest My..
-
블로킹 큐(Blocking Queue)legacy/Operating System 2024. 10. 5. 21:19
블로킹 큐(Blocking Queue)는 동기화와 스레드 안전성을 보장하는 자료구조이다. 주로 멀티 스레드 환경에서 사용되며, 생산자-소비자 패턴과 같은 문제를 해결할 때 유용하다.블로킹 큐의 동작 방식블로킹 큐는 큐가 비어 있거나 가득 찼을 때, 큐에 데이터를 넣거나 빼려는 스레드가 일정 조건을 만족할 때까지 대기 상태(블로킹)에 들어간다. 이를 통해 스레드 간의 안전한 데이터 공유가 가능하다.삽입 시 대기큐가 가득 찬 경우, 데이터를 삽입하려는 스레드는 큐에 빈 공간이 생길 때까지 대기한다.다른 스레드가 큐에 데이터를 소비해서 자리가 생기면, 삽입하려는 스레드는 대기 상태에서 깨어나고 데이터를 큐에 넣을 수 있다.삭제 시 대기큐가 비어 있는 경우, 데이터를 꺼내려는 스레드는 큐에 새로운 데이터가 삽입..
-
논 블로킹 I/O (비동기 방식)legacy/Operating System 2024. 10. 5. 15:39
동기 방식은 블로킹 I/O에서는 실행 상태에서 CPU 자원을 사용하던 프로세스가 입출력 작업이 발생하면 대기 상태로 이동한다. 대기 상태로 이동하면 사용하던 CPU 자원은 운영체제의 CPU 스케줄링에 의해 준비 상태에 있는 다른 프로세스에게 할당한다. 입출력 작업이 종료되면 대기 상태에서 준비 상태로 이동되어 CPU 스케줄링을 대기하게 된다. 비동기 방식인 논 블로킹 I/O에서는 실행 상태에 있는 프로세스가 입출력 작업이 발생하더라도 실행 상태를 유지하면서 CPU 자원을 사용한다. 이는 운영체제의 비동기 처리 메커니즘 덕분이다. 이 메커니즘은 CPU가 입출력 작업이 완료되기까지 기다리지 않고, 그 사이에 다른 작업을 할 수 있도록 하여 CPU 자원을 보다 효율적으로 사용할 수 있게 한다. 비동기 방식 메..