CS 69

저장 프로시저 (Stored Procedure, SP)

🗂️ 저장 프로시저(Stored Procedure, SP)일련의 쿼리들을 마치 함수처럼 DB에 저장하고 실행하는 기능, 즉 쿼리의 집합이다. ✔️ 특정 로직의 쿼리들을 묶어두는 것🔍 저장 프로시저와 함수의 차이 프로시저 : 여러 쿼리문을 묶어 고급언어처럼 분기/반복 제어하는 묶음함수 : 간단하고 짧은 계산 또는 변환 후 단일 값 반환하는 용도 저장 프로시저저장 함수🛠️ 기능일련의 작업 (절차적 처리)반환 값 중심의 기능🔄 리턴값없음 또는 여러 개반드시 RETURN으로 1개 값 반환⚡ 실행 위치DB 서버DB 서버 🧩 호출 방식CALL 프로지서명()SELECT 함수명()🚀 속도뻐름상대적으로 느릴 수 있음📚 용도복잡한 로직 처리계산, 변환, 조회 등 간단한 처리 🗂️ 일반 쿼리문 vs 저장 프..

CS/Database 2025.07.14

인덱스 (Index)

🔖 Index (인덱스)인덱스(Index)는 데이터베이스에서 검색 속도를 높이기 위해 사용하는 자료구조이다.즉, 테이블의 특정 컬럼의 값을 기준으로 정렬된 별도의 자료구조(B-Tree, Hash 등)로, **데이터의 위치(주소)**를 빠르게 찾아갈 수 있게 도와주는 목차 역할이다.📚 비유로 이해하기도서관에서 책을 찾는 과정과 비슷하다.책 제목 순서대로 정리된 목차(인덱스)가 있다면 → 빠르게 책 위치 찾음목차 없이 처음부터 하나하나 살펴보면 → 전체 검색(Full Scan)Full Scan (=table scan) : row를 하나하나씩 모두 확인하는 것을 의미 시간 복잡도 : O(N)Index를 사용한다면 시간복잡도 O(logN) - B-Tree based index🛠️ 인덱스의 특징🔎 조회 성..

CS/Database 2025.07.14

RDBMS vs NoSQL

📦 RDBMSRelational Database Management System이다. RDBMS는 관계형 데이터베이스 관리 시스템으로, 1970년대에 개발된 DBMS이다. 데이터를 행(Row)과 열(Column)로 구성된 테이블 형식으로 저장한다. 테이블 간 관계는 외래키(Foreign Key)를 통해 표현대표 RDBMS : MySQL, Oracle, PostgreSQL, SQLite 등📌 RDBMS 특징 및 장점1️⃣ 정형화된 데이터 저장데이터 구조(스키마)를 사전에 정의테이블 단위로 명확하게 구분하여 저장2️⃣ SQL 기반 조작표준 SQL을 사용해 데이터 삽입, 조회, 갱신, 삭제 가능복잡한 조건의 쿼리와 조인 처리에 강함3️⃣ ACID 보장트랜잭션 처리에서 ACID(원자성, 일관성, 격리성, 지..

CS/Database 2025.07.06

Transaction(3) - Isolation Level (격리 수준)

🔐 격리 수준과 이상 현상트랜잭션의 ACID 속성 중 Isolation은 여러 트랜잭션이 동시에 실행되더라도 서로 간섭하지 않고 독립적으로 작동해야 함을 의미한다. 하지만 완벽한 격리를 구현하려면 성능 저하가 발생할 수 있어DBMS는 다양한 Isolation Level을 제공하여 성능과 정합성 사이의 트레이드오프를 가능하게 한다. 💥 Isolation이 약할 때 발생하는 이상 현상1️⃣ Dirty Read (더티 리드)커밋되지 않은 데이터를 읽는 현상아직 확정되지 않은 변경값을 읽어 잘못된 결과를 낼 수 있음🧪 예시:A사용자가 키를 171 → 177로 변경 (커밋 전),B사용자가 조회 → 177로 보임→ 나중에 A가 롤백하면 B는 존재하지 않는 값을 읽은 셈 2️⃣ Non-Repeatable Rea..

CS/Database 2025.06.23

Transaction (2) - 동시성 제어

🔒 Serializability & Recoverability트랜잭션의 ACID 속성 중 'Isolation(격리성)'을 보장하기 위한 두 핵심 개념인 Serializability와 Recoverability에 대해 알아보자.🧩 동시성 제어 (Concurrency Control)여러 트랜잭션이 동시에 실행되더라도 데이터 정합성과 무결성을 보장하는 기능DBNS는 이 기능을 위해 2가지 속성을 보장해야 한다.✅ Serializability (직렬 가능성)✅ Recoverability (회복 가능성)1️⃣ Serializability (직렬 가능성)📌 개념여러 트랜잭션이 병렬로 실행되더라도, 결과는 마치 순차적으로 실행된 것처럼 나와야 한다. 즉, non-serial schedule이라 하더라도 seri..

CS/Database 2025.06.23

Transaction (1)

🔄 트랜잭션(Transaction)이란? 데이터베이스에서 하나의 논리적 작업 단위여러 SQL 쿼리를 묶어 하나의 작업처럼 처리할 수 있게 한다. ✅All or Nothing트랜잭션 내의 작업은 모두 성공(Commit)하거나,하나라도 실패하면 모두 취소(Rollback) 해야 한다. 📌 트랜잭션의 목적데이터 정합성 유지부분 적용 방지장애/예외 상황에서의 복구 가능성 확보✅ 트랜잭션 제어 명령어명령어설명START TRANSACTION트랜잭션 시작 (autocommit 비활성화)COMMIT지금까지의 작업을 DB에 반영하고 트랜잭션 종료ROLLBACK지금까지의 작업을 취소하고 이전 상태로 복원SET AUTOCOMMIT = 1/0트랜잭션 자동 커밋 여부 설정 (MySQL은 기본값이 1)🏦 예시: 계좌 이체 ..

CS/Database 2025.06.23

데이터베이스 정규화

📚 데이터베이스 정규화 (Normalization)데이터베이스 내의 중복을 최소화하고, 데이터의 일관성과 무결성을 유지하기 위해 테이블 구조를 체계적으로 분해해 나가는 과정이다. 즉, 중복 데이터를 제거하고, 수정/삽입/삭제 시 이상 현상이 발생하지 않도록 테이블을 설계하는 기법 🎯 정규화의 목적목적설명중복 제거데이터를 효율적으로 저장하고 용량 낭비를 방지삽입 이상 방지일부 데이터만 입력할 때 생기는 문제 예방삭제 이상 방지일부 정보만 삭제하려다 관련된 다른 정보까지 날아가는 문제 예방수정 이상 방지중복 데이터 수정을 일일이 하지 않아도 되게끔데이터 무결성 방지논리적으로 일관성 있고, 오류 없는 데이터 관리 가능🔹 제1정규형 (1NF: First Normal Form)✔️ 속성의 원자성(Atomic..

CS/Database 2025.06.23

ERD (Entity Relationship Diagram)

🧩 ERD란? 엔티티와 속성들의 관계를 그림으로 나타낸 개체-관계 모델이다. 테이블과의 관계를 설명하는 다이어그램이며 이를 통해 데이터베이스의 구조를 한눈에 파악할 수 있다. 데이터베이스 구축 시 뼈대 역할을 하며 효율적인 API를 뽑아낼 수 있다. 🎨 ERD 구성 요소구성 요소설명DB 대응 요소예시 (학생 엔티티 기준)엔티티 (Entity)현실 세계에서 정의 가능한 사물이나 개념테이블학생 테이블속성 (Attribute)엔티티가 가지는 고유한 정보들컬럼학번, 이름, 주소, 전공도메인 (Domain)속성이 가질 수 있는 값의 범위 및 타입데이터 타입 + 제약 조건전공 → VARCHAR(30)🧾 Entity 분류 엔티티는 저장하는 데이터 정보 주제에 따라 종류가 다양하다. 엔티티 분류 구분을 잘 해주어..

CS/Database 2025.06.21

🗝️ Database Key

🗝️ Key키는 각 레코드(튜플)를 고유하게 식별하거나 릴레이션 간의 관계를 정의하는 기준이 되는 속성이다. 📘 데이터베이스 기본 용어 정리용어 쉽게 말하면 현실 비유 예시용어쉽게 말해서현실 비유예시릴레이션 (Relation)테이블(table)엑셀 시트 하나회원 정보, 상품 목록튜플 (Tuple)한 줄(row), 하나의 데이터 행한 사람의 이력서회원번호=001, 이름=말랑이속성 (Attribute)열(column), 필드항목 이름회원번호, 이름, 등급도메인 (Domain)속성이 가질 수 있는 값의 범위칸에 들어갈 수 있는 값의 종류등급 → 실버/골드/플래티넘레코드 (Record)= 튜플 (같은 의미, 용어만 다름)--📚 데이터 무결성 제약 조건✅ 개체 무결성 (Entity Integrity)기본키는..

CS/Database 2025.06.20

JPA Cache

⚡ 1차 캐시 JPA의 영속성 컨텍스트 (Entity Manager) 내부에 있는 메모리 저장소이다. 엔티티가 영속 상태가 되면 JPA는 이를 1차 캐시에 저장하고이후 동일한 ID로 조회되는 엔티티는 DB를 거치지 않고 메모리에서 바로 반환한다. ✔️ 1차 캐시에 엔티티가 있는 경우 조회 과정엔티티 조회1차 캐시에서 결과 반환Member m1 = em.find(Member.class, 1L); // → DB에서 조회, 1차 캐시에 저장Member m2 = em.find(Member.class, 1L); // → 1차 캐시에서 즉시 반환System.out.println(m1 == m2); // true (객체 동일성 보장) ✖️ 1차 캐시에 엔티티가 없는 경우 조회 과정엔티티 조회DB 조회1차 캐시에 결과..

CS/JPA 2025.06.17