CS

CS

REPEATBLE READ에서의 PHANTOM READ 현상

요즘 CS스터디를 진행하고 있는데, 트랜잭션을 정리하고 있던 와중에 REPEATABLE READ에서 InnoDB는 RHANTOM READ가 발생하지 않는다는 정리글을 보았다. 내가 정리했던 글에서도 이를 찾아볼 수 있었는데 단순하게 글로만 표현되어 있어 나조차도 이해하기 힘들었다. 그래서 이를 좀 더 찾아보고 이게 무엇을 뜻하는지 찾아보고 정리하려고 글을 작성한다. REPEATABLE READ REPEATABLE READ는 동일 트랜잭션 내에서는 동일한 결과를 보장할 수 있는 격리 수준으로 MySQL의 InnoDB 스토리지 엔진에서 기본으로 사용되는 격리 수준이다. 어떻게 동일한 결과를 보장해 줄 수 있을까? MVCC(Multi Version Concurrency Control)라는 메커니즘을 이용해 언..

CS

네트워크 기본 정리

네트워크란? 노드와 링크가 서로 연결되어 있으며 리소스를 공유하는 집합 노드: 서버, 라우터, 스위치 등 네트워크 장치를 의미 링크: 유선, 무선을 의미 처리량 처리량은 링크 내에서 성공적으로 전달된 데이터의 양을 말하며 보통 얼마 큼의 트래픽을 처리했는지를 나타냄 단위는 bps를 사용함 - 초당 전송 또는 수신되는 비트 수 네트워크 중간에 발생하는 에러, 장치의 하드웨어 스펙 등에 영향을 받음 지연 시간 지연 시간은 요청이 처리되는 시간을 의미함 네트워크 토폴로지 네트워크 토폴로지는 노드와 링크가 어떻게 배치되어 있는지에 대한 방식이자 연결 형태를 의미 트리 토폴로지: 트리 형태로 배치한 네트워크 구성 노드의 추가, 삭제가 쉬움 특정 노드에 트래픽이 집중될 때 하위 노드에 영향을 끼칠 수 있음 버스 토..

CS

인덱스

디스크 읽기 방식 데이터베이스 성능 튜닝은 어떻게 디스크 IO를 줄이느냐가 관건일 때가 상당히 많다. 랜덤 IO, 순차 IO와 같은 디스크 읽기 방식을 먼저 알아보자. 하드 디스크 드라이브(HDD)와 솔리드 스테이트 드라이브(SSD) SSD는 기존 하드 디스크 드라이브에서 데이터 저장용 플래터(원판)를 제거하고 그 대신 플래시 메모리를 장착하고 있다. 그래서 아주 빠르고, 전원이 공급되지 않아도 데이터가 삭제되지 않는다. SSD의 장점은 기존 하드 디스크 드라이브보다 랜덤 IO가 훨씬 빠르다는 것이다. 데이터베이스 서버에서 순차 IO 작업은 그다지 비중이 크지 않고, 랜덤 IO를 통해 작은 데이터를 읽고 쓰는 작업이 대부분이므로 SSD의 장점은 DBMS용 스토리지에 최적이다. 랜덤 I/O 와 순차 I/O..

CS

트랜잭션과 잠금

트랜잭션 논리적인 작업 셋에 하나의 쿼리가 있든 두 개 이상의 쿼리가 있든 관계없이 논리적인 작업 셋 자체가 100% 적용되거나, 아무것도 적용되지 않아야 함을 보장해 주는 것 데이터의 정합성을 보장해 줌 MySQL에서의 트랜잭션 InnoDB스토리지엔진은 트랜잭션을 제공함. MEMORY와 MyISAM 스토리지 엔진은 트랜잭션을 제공하지 않음 이로 인해 MyISAM에서는 부분 업데이트(Partial Update)가 발생하고, 이러한 부분 업데이트 현상은 테이블 데이터의 정합성을 맞추는데 상당히 어려운 문제를 만듦 -> 데이터 클렌징 코드를 따로 작성해주어야 함 주의사항 트랜잭션 또한 DBMS의 커넥션과 동일하게 꼭 필요한 최소의 코드에만 적용하는 것이 좋음 일반적으로 데이터베이스 커넥션은 개수가 제한적임 ..

CS

이터레이터 패턴(Iterator Pattern)

이터레이터 패턴 행위 패턴 컬렉션 구현 방법을 노출시키지 않으면서도 그 집합체 안에 들어있는 모든 항목에 접근할 수 있게 해주는 방법을 제공해 주는 패턴 이터레이터 패턴을 사용하면 집합체 내에서 어떤 식으로 일이 처리되는지 몰라도 그 안에 들어있는 항목들에 대해서 반복작업을 수행할 수 있다. 보통 프로그래밍을 하면서 반복문을 돌리려면 for문을 사용한다. for (int i = 0; i < n; i++) { System.out.println(array[i]); } for 문의 초기화문에서 흔희 사용되는 변수 i는 배열이 주어질 때 각각의 요소에 차례대로 접근하기 위해 사용된다. 이렇게 사용되는 변수 i의 역할을 추상화한 것이 Iterator 패턴이다. 이터레이터 패턴 사용 예시 Iterator 집합체의 ..

CS

프록시 패턴(Proxy Pattern)

프록시 패턴 프록시는 대리인이라는 뜻으로, 무엇인가를 대신 처리하는 의미이다. 일종의 비서라고 생각하면 쉽다. 사장실에 바로 들어가서 사장님을 바로 만나는 게 아닌 비서를 통해 사장님을 만나는 개념이라 생각할 수 있다. 어떤 객체를 사용하고자 할 때, 객체를 직접 참조하는 것이 아니라 해당 객체를 대행하는 객체를 통해 대상 객체에 접근하는 방식을 사용하면 해당 객체가 메모리에 존재하지 않아도 기본적인 정보를 참조하거나 설정할 수 있고, 실제 객체의 기능이 반드시 필요한 시점까지 객체의 생성을 미룰 수 있다. 프록시가 사용되는 대표적인 3가지 가상프록시 꼭 필요로 하는 시점까지 객체의 생성을 연기하고, 해당 객체가 생성된 것처럼 동작하도록 만들고 싶을 때 사용하는 패턴이다. 프록시 클래스에서 자잘한 작업들..

CS

옵저버 패턴(Observer Parttern)

옵저버 패턴 옵저버패턴이란 객체의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴이다. 어떤 객체의 변경 사항이 발생하였을 때 이와 연관된 객체들에게 알려주는 디자인 패턴이라고 생각하면 된다. 옵저버 패턴에는 주체 객체와 상태의 변경을 알아야 하는 관찰 객체(Observer Object)가 존재하며 이들의 관계는 1:1이 될 수도 있고 1:N이 될 수 있다. 옵저버 패턴 사용 예시 공지사항을 알릴 때를 예제로 공지사항을 전파할 때(상태변화) 옵저버와 관련된 객체들(유저들)에게 통지하도록 하는 간단한 예제를 옵저버 패턴으로 만들 수 있다. public interface Observ..

CS

전략 패턴(Strategy Pattern)

소프트웨어 개발 과정에서 코드의 유연성과 재사용성은 매우 중요하다. 이를 위해 객체 지향 프로그래밍에서 다양한 디자인 패턴들이 개발되었는데, 그중에서도 전략 패턴은 유연한 소프트웨어 설계를 구현하는 핵심적인 기법 중 하나이다. 전략 패턴은 알고리즘을 독립적으로 정의하고, 실행 시에 필요한 알고리즘을 동적으로 변경할 수 있는 방법을 제공한다. 전략 패턴 전략 패턴은 알고리즘을 정의하는 인터페이스를 만들고, 이를 구체적인 알고리즘 클래스들로 구현하여 실행 시에 알고리즘들을 변경할 수 있도록 한다. 이를 통해 동일한 작업을 수행하는 여러 알고리즘들을 쉽게 추가하고 변경할 수 있다. 이를 통해 코드의 유연성과 확장성을 크게 향상할 수 있다. 아래와 같은 구조를 가진다. 시나리오는 간단하다. 쇼핑카드에 여러 가지..

CS

팩토리 메소드 패턴(Factory Method Pattern)

팩토리는 공장이란 뜻을 내포하고 있다. 따라서 팩토리 메서드 패턴도 무언가를 위한 공장이라 봐도 무방하다. 일반적으로 팩토리 메서드 패턴을 객체를 만들어내는 부분을 서브 클래스에 위임하는 패턴이라고 말할 수 있다. Factory Method Pattern 객체를 생성하기 위해 인터페이스를 정의하지만, 어떤 클래스의 인스턴스를 생성할지에 대한 결정은 서브 클래스가 내린다. 객체 생성을 캡슐화하는 패턴이다. 아래 예시를 보면 쉽게 파악할 수 있다. 로봇이 있고, 이를 슈퍼로봇과 파워로봇으로 구체화할 수 있다. 로봇팩토리를 통해 로봇을 생산할 수 있다. 우선 간략한 구조는 이러하다. Robot(abstract class) ┗ SuperRobot ┗ PowerRobot RobotFactory(abstract c..

CS

싱글톤 패턴(Singleton Pattern)

싱글톤 패턴 싱글톤 패턴은 특정 클래스의 인스턴스가 오직 하나임을 보장하고, 이 인스턴스에 접근할 수 있는 방법을 제공한다. 즉, 특정 클래스의 객체는 하나만 생성되도록 하여 동일 인스턴스를 재사용하는 패턴이다. Singleton 생성자의 접근자를 private로 설정하여 새로운 인스턴스를 생성하지 못하도록 함 인스턴스의 접근을 위한 오퍼레이션을 static으로 정의하여 해당 메서드에 의해서만 인스턴스에 접근 인스턴스는 싱글턴 객체의 클래스 변수로 설정되어 클래스가 메모리에 데이터영역에 저장될 때 같이 저장됨 오직 한 번만 인스턴스를 생성할 수 있으며, 싱글톤 객체는 유일한 인스턴스의 생성에 대한 책임이 있음 이른 초기화 방식(Eager Initialization) 이른 초기화 방식은 싱글톤 패턴의 가장..

javajoha
'CS' 카테고리의 글 목록