본문 바로가기
728x90

ComputerScience22

Singleton Pattern Singleton Pattern 이란? 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴입니다. 인스턴스 생성을 제어할 수 있어야 합니다. 1개뿐인 인스턴스에 쉽게 접근할 수 있어야 합니다. Singleton pattern의 장점 하나의 인스턴스만을 생성하여 메모리 낭비를 방지할 수 있습니다. 싱글톤으로 구현한 인스턴스는 전역적으로 사용이 가능하여 다른 클래스의 인스턴스들이 데이터를 공유하기 쉽습니다 Singleton pattenr의 단점 SOLID 원칙인 DIP, OCP 위반 가능성이 높아지고 이를 위반하기 때문에 유지 보수가 힘들고 테스트가 어려워집니다. 제대로 구현하지 않으면 멀티 스레드 환경에서 여러 인스턴스개 생성되는 문제가 발생할 수 있습니다. Singleton pattern .. 2023. 1. 30.
8.인덱스 - 클러스터링 인덱스 이번 포스트에서는 MySQL InnoDB 스토리지 엔진의 클러스터링 인덱스에 대해서 알아보도록 하겠습니다. 클러스터링 인덱스 클러스터링이란 여러 개를 하나로 묶는다는 의미로 주로 사용됩니다. MySQL 서버에서 클러스팅이란 테이블의 레코드를 비슷한 것(프라이머리 키를 기준으로)들 끼리 묶어서 저장하는 형태로 구현되는데, 이는 주로 비슷한 값들을 동시에 조회하는 경우가 많다는 점에서 착안되었고 MySQL에서는 InnoDB 스토리지 엔진에서만 지원합니다. 프라이머리 키 값이 비슷한 레코드끼리 묶어서 저장하기 때문에 프라이머리 키에 대해서만 적용됩니다. 여기서 중요한 것은 프라이머리 키 값에 의해 레코드의 저장 위치가 결정되고 프라이머리 키 값이 변경되면 레코드의 물리적인 저장 위치가 바뀌어야 한다는 것을 의.. 2023. 1. 2.
8.인덱스 - B-Tree Index의 가용성과 효율성 이번 포스트에서는 B-Tree Index의 가용성과 효율성에 대해 알아보도록 하겠습니다. 비교 조건의 종류와 효율성 다중 컬럼 인덱스에서 각 컬럼의 순서와 그 컬럼에 사용되는 조건이 동등 비교("=", "IN")인지 또는 범위 조건(">", ">=", "", " 2022. 12. 25.
8.인덱스 - B-Tree Index를 통한 데이터 읽기 이번 포스트에서는 B-Tree Index를 통한 데이터 읽기에 대해서 알아보도록 하겠습니다. 인덱스 레인지 스캔 검색해야 할 인덱스의 범위가 결정됐을 때 사용하는 방식입니다. 인덱스의 접근 방법 가운데 가장 대표적인 방법이고 밑에서 설명할 두 방식보다 빠른 방식입니다. 루트 노드부터 브랜치 노드와 최종 리프 노드까지 찾아 들어가 필요한 레코드의 시작점을 찾고 리프 노드의 레코드를 순서대로 읽습니다. 만약 스캔하다가 리프 노드의 끝까지 읽으면 리프 노드간의 링크를 이용해 다음 리프 노드를 찾아서 스캔하고 최종적으로 스캔을 멈춰야 할 위치에 다다르면 지금까지 읽은 레코드를 사용자에게 반환하고 쿼리를 종료합니다. 위 사진은 인덱스만 읽는 경우를 보여주는 사진입니다. 하지만 B-Tree 인덱스의 리프 노드를 스.. 2022. 12. 21.
8.인덱스 - B-Tree Index 2022.12.14 - [RealMySQL] - 8.인덱스 - 인덱스란? 8.인덱스 - 인덱스란? 이번 포스트에서는 MySQL의 인덱스에 대해서 알아보겠습니다. 인덱스 DBMS에서 데이터의 저장(INSERT, UPDATE, DELETE)성능을 희생하고 그 대신 데이터의 읽기 속도를 높이는 기능입니다. SELECT 쿼리 문장 rbsks.tistory.com 전 포스트에 이어서 B-Tree 인덱스에 대해서 자세히 알아보도록 하겠습니다. B-Tree Index(Balanced Tree Index) B-Tree는 컬럼의 원래 값을 변경하지 않고 인덱스 구조체 내에서 항상 정렬된 상태로 유지됩니다. 전문 검색과 같은 특수한 요건이 아닌 경우를 제외하고 대부분의 인덱스는 거의 B-Tree를 사용할 정도로 일반적인 .. 2022. 12. 18.
8.인덱스 - 인덱스란? 이번 포스트에서는 MySQL의 인덱스에 대해서 알아보겠습니다. 인덱스 DBMS에서 데이터의 저장(INSERT, UPDATE, DELETE)성능을 희생하고 그 대신 데이터의 읽기 속도를 높이는 기능입니다. SELECT 쿼리 문장 WHERE 조건절에 사용되는 컬럼이라고 해서 전부 인덱스로 생성하면 데이터 저장 성능이 떨어지고 인덱스의 크기가 비대해져 오히려 역효과가 날 수 있습니다. 인덱스는 크게 프라이머리 키(Primary Key)와 보조 키(Secondary Key)로 구분할 수 있습니다. 프라이머리 키(Primary Key) 그 레코드를 대표하는 컬럼의 값으로 만들어진 인덱스를 의미합니다. 이 컬럼은(때로는 복합 키로 컬럼의 조합이 될 수 있음) 테이블에서 해당 레코드를 식별할 수 있는 기준값이 되기 .. 2022. 12. 14.
728x90