# 데이터베이스 원리와 JPA

[원문](https://www.linkymeadow.com/w/32a71f/)

마지막 수정: 2026-10-05 21:40 (KST)

데이터 모델링, 트랜잭션과 동시성 제어, 조회 성능, ORM을 순서대로 살펴보는 자료입니다. JPA는 영속성 명세, Hibernate는 그 구현체 중 하나이며 Spring Data JPA는 저장소 추상화를 제공하는 계층으로 구분합니다.

## 데이터 모델과 저장 방식

- [Database normalization description — Microsoft](https://learn.microsoft.com/en-us/previous-versions/troubleshoot/microsoft-365/microsoft-365-apps/access/database-normalization-description)

  중복 데이터와 종속성을 정리하는 정규화의 목적과 제1·제2·제3정규형을 예제로 설명합니다.
- [What Is NoSQL? — MongoDB](https://www.mongodb.com/resources/basics/databases/nosql-explained)

  문서형·키 값·와이드 컬럼·그래프 데이터베이스의 구분과 관계형 모델과의 차이를 소개합니다.
- [What is a columnar database? — ClickHouse](https://clickhouse.com/resources/engineering/what-is-columnar-database)

  행과 열 단위 저장의 차이를 설명하며 관계형 여부와 행·열 저장 방식이 별개의 구분임을 다룹니다.

## 트랜잭션과 동시성 제어

- [Transactions — PostgreSQL](https://www.postgresql.org/docs/current/tutorial-transactions.html)

  여러 변경을 하나로 묶는 트랜잭션과 COMMIT·ROLLBACK·SAVEPOINT의 기본 동작을 설명합니다.
- [Transaction Isolation — PostgreSQL](https://www.postgresql.org/docs/current/transaction-iso.html)

  격리 수준별 읽기 현상과 직렬화 이상, PostgreSQL의 구현 차이 및 재시도 조건을 설명합니다.
- [InnoDB Locking — MySQL](https://dev.mysql.com/doc/refman/8.4/en/innodb-locking.html)

  공유·배타 락, 레코드 락, 갭 락과 넥스트키 락이 잠그는 범위를 설명합니다.
- [High Availability, Load Balancing, and Replication — PostgreSQL](https://www.postgresql.org/docs/current/high-availability.html)

  복제·대기 서버·장애 조치와 읽기 부하 분산의 선택지를 설명합니다.

## 인덱스와 쿼리

- [Indexes — PostgreSQL](https://www.postgresql.org/docs/current/indexes.html)

  인덱스 종류와 다중 열·부분·표현식 인덱스, 인덱스 사용의 비용을 다룹니다.
- [Using EXPLAIN — PostgreSQL](https://www.postgresql.org/docs/current/using-explain.html)

  실행 계획과 추정 비용을 읽고 EXPLAIN ANALYZE의 실제 실행 결과와 비교하는 방법을 설명합니다.
- [LIMIT and OFFSET — PostgreSQL](https://www.postgresql.org/docs/current/queries-limit.html)

  페이지별 조회에서 정렬의 필요성과 큰 OFFSET의 처리 비용을 설명합니다.
- [Subquery Expressions — PostgreSQL](https://www.postgresql.org/docs/current/functions-subquery.html)

  EXISTS·IN·NOT IN의 의미와 NULL이 포함될 때의 결과를 비교할 수 있습니다.
- [Using Prepared Statements — Oracle Java Tutorials](https://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html)

  Statement와 비교해 SQL 값 바인딩을 분리하는 PreparedStatement의 사용법을 설명하는 JDBC 기초 자료입니다.
- [SQL Injection Prevention Cheat Sheet — OWASP](https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html)

  매개변수화 쿼리·허용 목록 검증·최소 권한으로 SQL 인젝션을 방어하는 기준을 설명합니다.

## JPA와 조회 최적화

- [Jakarta Persistence 3.2 Specification](https://jakarta.ee/specifications/persistence/3.2/jakarta-persistence-spec-3.2)

  EntityManager·엔티티 생명주기·ID 생성·연관관계·낙관적 및 비관적 잠금의 명세를 제공합니다.
- [Hibernate ORM User Guide](https://docs.hibernate.org/orm/current/userguide/html_single/)

  연관관계와 지연 로딩, N+1·Fetch Join·페이징, 스키마 생성과 Soft Delete 등 Hibernate 구현을 다룹니다.
- [Persisting Entities — Spring Data JPA](https://docs.spring.io/spring-data/jpa/reference/jpa/entity-persistence.html)

  엔티티가 새 객체인지 판별해 persist 또는 merge를 선택하는 저장 동작을 설명합니다.
- [HikariCP](https://github.com/brettwooldridge/HikariCP)

  JDBC 연결을 재사용하는 커넥션 풀의 구성과 대기 시간·최대 연결 수 등의 설정을 살펴볼 수 있습니다.

## 관련 문서

- [데이터베이스·SQL·ERD](https://www.linkymeadow.com/w/6a1843/)
- [Spring 애플리케이션과 트랜잭션](https://www.linkymeadow.com/w/59c20a/)
- [분산 시스템과 운영](https://www.linkymeadow.com/w/913d6a/)
- [백엔드 개발 학습 자료](https://www.linkymeadow.com/w/e48b27/)
