Programming/Computer Science 29

[DB 데이터베이스] 클러스터형 vs 비클러스터형

이전 포스트에서 인덱스의 논리적 구조인 B+Tree에 대해 알아보았다. 하지만 B+Tree가 실제 스토리지 엔진에서 데이터와 '어떻게 결합되는가'에 따라 성능 특성은 완전히 달라진다.데이터베이스는 인덱스를 물리적으로 저장하는 방식에 따라 클러스터형 인덱스(Clustered Index)와 비클러스터형 인덱스(Non-Clustered Index)로 나뉜다.이 둘의 차이를 이해하는 것은 인덱스 설계의 핵심이다.클러스터형 인덱스 (Clustered Index): 데이터 그 자체클러스터형 인덱스는 '영어 사전'에 비유할 수 있다. 사전은 단어(Key) 순서대로 내용(Data)이 정렬되어 있다. 즉, 별도의 찾아보기가 필요한 것이 아니라 책의 내용 자체가 순서대로 정렬돼 있는 것이다.구조와 특징데이터와 인덱스의 일..

[DB 데이터베이스] 🌳 B+Tree 알아보기

인덱스는 왜 필요한가? (Full Scan의 비효율)가장 단순한 데이터 조회 방식은 처음부터 끝까지 다 읽는 것이다. 이를 Full Table Scan이라 한다. 데이터가 N개일 때, 시간 복잡도는 O(N)이다.데이터가 100건이라면 문제가 없지만, 1,000만 건이 넘어간다면 이야기는 달라진다. 디스크 I/O는 메모리 접근보다 수십만 배 느리다. 인덱스 없이 데이터를 찾는 것은 서울 시내 모든 건물을 뒤져서 특정 상점을 찾는 것과 같다. '지도'나 '주소 체계'가 상점을 찾는데 큰 도움을 주는데 이것이 바로 인덱스다.인덱스를 사용하면 데이터 탐색의 시간 복잡도를 O(log N)으로 획기적으로 줄일 수 있다.B-Tree: 균형 잡힌 트리의 시초B+Tree를 이해하기 위해서는 먼저 그 원형인 B-Tree를..

[DB 데이터베이스] 🔫 저장 프로시저(SP) vs 트리거(Trigger)

이전 포스트들을 통해 트랜잭션과 격리 수준을 통해 데이터의 '안정성'과 '일관성'을 지키는 수비적인 측면을 다뤘다. 이번에는 데이터베이스의 또 다른 강력한 기능, 즉 '자동화'와 '프로그래밍' 측면에서 알아보고자 한다. 데이터베이스가 단순히 데이터를 저장하는 창고가 아니라 스스로 정해진 로직을 수행하는 '능동적인' 시스템이 될 수 있게 하는 두 가지 핵심 기술인 저장 프로시저(Stored Procedure)와 트리거(Trigger)입니다.저장 프로시저 (Stored Procedure)저장 프로시저(SP)란 자주 사용되는 일련의 SQL 쿼리나 복잡한 비즈니스 로직을 데이터베이스 서버에 미리 컴파일하여 '저장(Store)'해 두고 필요할 때마다 '호출(Call)'해 사용하는 프로그래밍 기능이다.장점성능 향상..

[DB 데이터베이스] 🥲 동시성 문제와 격리 수준(Isolation Level)

이전 포스트를 통해서 트랜잭션의 기본 원칙인 ACID를 통해 데이터베이스가 어떻게 '신뢰할 수 있는' 데이터를 보장하는지 살펴봤다. 특히 ACID의 I (Isolation, 고립성)는 "여러 트랜잭션이 동시에 실행될 때 서로 영향을 주지 않아야 한다"는 원칙을 의미했다. 이 '고립성'을 100% 완벽하게 지키는 가장 간단한 방법은 모든 트랜잭션을 순서대로, 하나씩 차례로 실행(직렬 수행, Serializable)하는 것이다. 이 방법은 데이터의 무결성을 완벽하게 보장하지만 현대적인 멀티유저, 멀티스레드 환경에서는 치명적인 성능 저하를 유발한다. 현실의 데이터베이스는 '완벽한 고립성'과 '높은 동시 처리 성능(Throughput)'이라는 두 마리 토끼 사이에서 아슬아슬한 줄타기를 해야 한다. 이 고립성을 ..

[DB 데이터베이스] 💂 트랜잭션과 ACID

데이터베이스 시스템에는 '데이터의 신뢰성'이라는 핵심 가치가 있다. 수많은 사용자의 요청이 동시에 발생하고 예기치 못한 시스템 장애가 언제든 일어날 수 있는 환경에서 데이터가 손상되거나 오염되기 쉽상이다.이를 방지하기 위한 해답으로 트랜잭션(Transaction)과 ACID 원칙이 있다. 이번 글에서는 데이터베이스의 안정성과 일관성을 보장하는 이 근본적인 개념에 알아보겠다.트랜잭션(Transaction)이란 무엇인가?가장 간단하게 정의하자면 트랜잭션은 '더 이상 쪼갤 수 없는 하나의 논리적 작업 단위(Logical Unit of Work)'이다.여러 개의 데이터베이스 연산(INSERT, UPDATE, DELETE 등)이 하나의 작업처럼 묶여 전부 성공적으로 실행되거나 아니면 전부 실행되지 않아야 함을 의..

[DB 데이터베이스] 👾 SQL Injection

데이터베이스 정규화를 통해 무결성과 효율성을 확보했다면 다음으로 데이터베이스를 외부로 부터 안전하게 보호하는 것이 중요하다. 아무리 잘 설계된 데이터베이스라도 애플리케이션 보안 취약점을 통해 데이터가 탈취되거나 변조될 수 있기 때문이다.다양한 공격 기법이 있지만 그중에서 'SQL Injection(SQL 주입)'에 대해서 알아보고자 한다.SQL InjectionSQL Injection이란 공격자가 애플리케이션의 입력값(로그인, 검색창 등)에 악의적인 SQL 쿼리 구문을 입력해 개발자가 의도하지 않은 SQL문을 데이터베이스에서 실행되게 만드는 공격 기법이다.이 공격을 하게 되면 공격자는 인증을 우회해 데이터베이스에 저장된 민감한 정보(개인정보, 기밀 데이터)를 조회하거나, 데이터를 임의 수정, 삭제 할 수..

[DB 데이터베이스] 정규화(Normalization)의 필요성

데이터베이스 설계 시 정규화(Noramalization)는 데이터의 일관성과 무결정을 보장하는 핵심적 과정이다. 테이블에 데이터를 저장할 때 발생하는 불필요한 중복을 제거하고, 잠재적인 데이터 '이상(Anomaly)'현상을 방지하는 것이 주 목적이다.이상 현상데이터베이스의 정규화 수준이 낮을 경우 데이터의 '이상 현상(Anomaly)'에 노출 될 수 있다. 이는 데이터의 중복 저장으로 인해 일관성이 깨지는 문제를 의미하며 대표적으로 세 가지 유형이 존재한다. 예시용 비정규형 테이블학생ID학생이름학과학과사무실수강과목1001강송훈컴퓨터공학201호데이터베이스1001강송훈컴퓨터공학201호운영체제1002박준영경영학301호회계원리1003권지만컴퓨터공학201호데이터베이스[수강_테이블]삽입 이상(Insertion An..

[DB 데이터베이스] 🪄 SQL - Join

JOIN관계형 데이터베이스는 데이터의 중복을 최소화하기 위해 정규화(Normalization)라는 과정을 거친다. 이 과정에서 데이터는 주제에 따라 여러 개의 테이블로 분리가 되는데 분리된 데이터는 관리하기 용이하지만 분리된 테이터 간의 관계성이 짙은 정보를 찾을 때는 다시 여러 테이블 정보를 합쳐야 한다.이때 SQL의 JOIN을 사용하게 된다. JOIN은 두 개 이상의 테이블에 있는 행들을 공통된 열(주로 기본키와 외래 키)를 기준으로 연결해 하나의 결과집합으로 만들어주는 SQL의 핵심 기능이다. JOIN을 통해 정규화로 분리된 데이터 조각들을 다시 의미 있는 정보로 재조립할 수 있다.INNER JOININNER JOIN은 가장 기본적이고 널리 사용되는 조인 방식이다. 두 테이블을 조인할 때 조인 조건..

[DB 데이터베이스] 🔑 데이터베이스 설계 (키, 제약조건, 모델링)

지난 포스팅에서 '데이터베이스의 기초'를 맛보았다면 이번에는 데이터베이스를 잘 '설계하는 방법'에 대해 알아보고자 한다.잘 설계된 데이터베이스는 데이터의 중복을 방지하고, 정확성과 일관성을 유지하며, 시스템 전체의 안정성을 보장한다.키(Key)관계형 데이터베이스에서 키(Key)는 테이블의 행을 고유하게 식별하거나 테이블 간의 관계를 맺어주는 핵심적인 장치이다.후보키 (Candidate Key)테이블의 각 행을 유일하게 식별할 수 있는 속성 또는 속성의 집합이다. 후보키는 두 가지 중요한 조건을 만족해야하는데 유일성(모든 행에 대해 유일한 값을 가짐)과 최소성(유일성을 만족하는 데 필요한 최소한의 속성으로만 구성됨)이다.'학생'테이블에서 '학번'과 '주민번호'는 모두 후보 키가 될 수 있다.슈퍼키 (Sup..

[DB 데이터베이스] 💾 데이터베이스 기초(DB, DBMS, CURD, 테이블, 스키마 구조)

데이터베이스 (Database, DB)데이터베이스란 여러 사람이 공유해 사용할 목적으로 체계화해 통합/관리 하는 데이터의 집합이자 데이터 저장소이다.논리적으로 연관된 하나 이상의 자료의 모음으로 그 내용을 구조화해 검색/갱신의 효율성을 높인다. 즉 몇 개의 자료 데이터를 통합하고 중복을 없애면서 구조화해 저장해 놓은 데이터 집합이라고 할 수 있다.여러 사람이 함께 사용해 각 사용자는 같은 데이터라 할지라도 각자의 목적에 따라 다르게 사용할 수 있다.통합된 데이터 (Integrated Data)중복을 최소화하고 여러 사람이 함께 쓰는 데이터 모음저장된 데이터 (Stored Data)컴퓨터 저장장치에 물리적으로 저장공유 데이터 (Shared Data)여러 사용자와 프로그램이 동시에 접근 및 사용 가능운영 데..