SQL 5

Database Series를 마치며

이 글의 목적데이터베이스 따라잡기 본편 24편을 마쳤다. 이 글은 시리즈 전체를 압축·연결하고 다음에 어디로 갈지 짚는 에필로그다.24편 동안 본 개념을 한 장 지도로 다시 본다DB에서 뻗어 나가는 주제와 블로그 내 다른 시리즈를 연결한다DB 지식이 어떤 직업·역할과 맞닿는지 정리한다손으로 확인하는 방법과 읽을거리를 남긴다1. 24편이 만든 큰 그림데이터베이스는 한 쿼리가 아니라 저장·인덱스·트랜잭션·복제·운영이 겹친 시스템이다.Part핵심 질문기억할 키워드0~1 관계형 기초데이터를 어떻게 모델링하고 질의하나릴레이션, SQL, 정규화, 쿼리 처리 파이프라인2 저장·인덱스디스크에서 어떻게 빨리 찾나페이지, B+ Tree, EXPLAIN, ACID3 동시성·복구동시에 쓰면 뭐가 깨지고 어떻게 복구하나격리 수..

Injection

학습 목표Injection이 신뢰할 수 없는 입력이 인터프리터(SQL·OS·LDAP)에 명령으로 섞일 때 발생함을 설명할 수 있다.SQL injection에서 문자열 연결·동적 쿼리가 쿼리 구조를 바꾸는 방식을 설명할 수 있다.Prepared statement(파라미터 바인딩)로 데이터와 코드를 분리하는 이유를 설명할 수 있다.Command injection과 allowlist·API 대체 실행 방어를 설명할 수 있다.최소 DB 권한·입력 검증·ORM이 defense in depth에서 맡는 역할을 설명할 수 있다.문제 상황로그인 username에 ' OR '1'='1 — 전 사용자 로그인쿼리가 문자열 붙이기로 만들어짐검색 q=; DROP TABLE orders;--` — 백업 없으면 종료앱 DB 계정에..

SQL 기초

학습 목표DDL과 DML을 구분하고 대표 문법을 읽을 수 있다.SELECT 절의 논리적 처리 순서를 설명할 수 있다.INNER JOIN과 LEFT JOIN의 결과 차이를 예로 설명할 수 있다.GROUP BY·HAVING으로 집계·필터를 할 수 있다.서브쿼리가 쓰이는 대표 패턴을 인식할 수 있다.문제 상황ORM이 만든 SQL이 SELECT *에 JOIN이 여러 개라 느리다어떤 절이 먼저 적용되는지 모르면 튜닝이 막막하다LEFT JOIN인데 WHERE orders.id IS NOT NULL을 쓰면 INNER처럼 동작한다GROUP BY 없이 COUNT(*)와 컬럼을 섞으면 DB가 에러를 낸다"서브쿼리 vs JOIN" 논쟁만 듣고 언제 무엇을 쓸지 기준이 없다관계형 모델에서 릴레이션·키·제약을 봤다. SQL은 ..

관계형 모델

학습 목표릴레이션·튜플·속성·도메인을 설명할 수 있다.슈퍼키·후보키·기본키·외래키를 구분할 수 있다.스키마와 인스턴스의 차이를 설명할 수 있다.ER 다이어그램으로 엔티티·관계를 표현할 수 있다.무결성 제약(엔티티·참조·도메인)을 설명할 수 있다.문제 상황users 테이블에 email이 두 번 들어가도 DB가 막지 않는다유일성을 어디서 보장할지 모른다orders.user_id에 없는 사용자 ID가 들어간다주문과 사용자 관계가 깨져도 조회는 된다스프레드시트에 고객 주소를 주문마다 복사한다한쪽만 수정되면 불일치가 난다오리엔테이션에서 DBMS가 풀 문제를 봤다. 관계형 모델은 표(릴레이션) 와 키·제약으로 구조를 고정한다.1. 릴레이션(Relation)관계형 DB의 기본 단위. 수학의 관계(relation) 를..

데이터베이스 오리엔테이션

학습 목표DBMS가 왜 필요한지 설명할 수 있다.파일 저장과 DBMS 저장의 차이를 설명할 수 있다.데이터 관리의 핵심 문제(중복·일관성·동시성·복구)를 설명할 수 있다.DBMS의 주요 구성 요소를 구분할 수 있다.20편 로드맵을 보고 학습 순서를 잡을 수 있다.1. 데이터베이스란?데이터(Data)애플리케이션이 다루는 사실·기록사용자, 주문, 로그, 설정 등데이터베이스(Database)관련 데이터를 구조화해 모아 둔 집합스키마(테이블·컬럼·제약)로 형식을 정의DBMS(Database Management System)데이터베이스를 생성·조회·갱신·관리하는 소프트웨어PostgreSQL, MySQL, Oracle, SQLite 등애플리케이션은 DBMS에 SQL(또는 API)로 접근왜 DBMS인가데이터가 커지고..