1. Maven 의존성 설정 (pom.xml)
1) 최상위 루트 태그
- <project>
- pom.xml 파일 전체를 감싸는 최상위 태그(Root Element)
- 이 태그 안에 프로젝트의 이름, 버전, 의존성(라이브러리) 등의 정보가 들어가게 된다.
- xmlns="[http://maven.apache.org/POM/4.0.0](http://maven.apache.org/POM/4.0.0)"
- XML Namespace(네임스페이스)를 정의하는 속성.
- 이 파일이 Maven POM(Project Object Model) 규칙을 따르고 있으며, 파일 내의 모든 태그(<dependencies>, <properties> 등)가 Maven이 정한 표준 의미를 가진다고 알려주는 역할을 한다.
- 4.0.0
- Maven 2 버전 이후부터 표준으로 고정되어 사용 중인 POM 모델의 버전을 의미한다.
<project xmlns="http://maven.apache.org/POM/4.0.0" ...>
...
</project>
2) <properties> 버전 관리
- 내부에서 사용할 버전 변수를 정의하는 영역
- <hibernate.version>: 최신 JPA 3.x 표준을 지원하는 Hibernate 6.x 대 버전을 지정
- <h2db.version>, <mysql.version>, <postgresql.version>: 각 DB에 맞는 JDBC 드라이버 버전을 지정한다.
<properties>
<!-- 인코딩 및 자바 버전 기본 설정 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<!-- JPA / Hibernate 및 DB 드라이버 버전 -->
<hibernate.version>6.6.36.Final</hibernate.version>
<h2db.version>2.2.224</h2db.version>
<mysql.version>8.0.33</mysql.version>
<postgresql.version>42.7.3</postgresql.version>
</properties>
3) Hibernate Core (hibernate-core) 의존성 추가 (없으면 순수 JDBC 환경)
- 역할: 자바의 표준 데이터베이스 추상화 기술인 JPA(Jakarta Persistence API / jakarta.persistence)를 실제로 구현한 핵심 라이브러리.
- 포함 요소:
- jakarta.persistence-api (JPA 표준 인터페이스 및 어노테이션 모음: @Entity, @Id, @Column 등)
- 객체-테이블 매핑(ORM) 엔진 및 JPQL/Criteria 쿼리 변환기
<dependencies>
<!-- Hibernate Core (JPA 구현체) -->
<dependency>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<!-- JDBC 드라이버들 ... -->
</dependencies>
더보기
🔍 ORM-JPA-Hibernate 설명
1) ORM (Object-Relational Mapping)
- 개념: 자바와 SQL 간 자동통역 서비스라는 아이디어/기법(Paradigm).
- 역할: 객체 지향 코드(Java)와 관계형 데이터베이스(SQL)의 테이블을 서로 자동으로 매핑(연결)하는 개념 그 자체를 의한다.
2. JPA (Jakarta Persistence API / 기존 Java Persistence API)
- 개념: 자바라는 언어에서 ORM 개념을 구현하기 위해 만든 표준 기술. 즉, 통역을 위한 작동 방식(규칙)과 구조(인터페이스)을 정해둔 자바의 표준 명세(Interface 모음).
- 역할: 자바에서 ORM을 구현하기 위해 특정 규칙, 어떤 메소드 이름와 어노테이션(@Entity, EntityManager, @Id 등)을 따라야 하는지 지정해 둔 가이드라인 규격(인터페이스).
- 특징: JPA 자체는 인터페이스만 존재하는 껍데기이므로, JPA만 설치한다고 해서 실제로 동작하지는 않는다.
3. Hibernate (하이버네이트)
- 개념: 위를 통해 JPA 표준을 구현한 실제 동작(실행)하는 라이브러리(Implementation).
- 역할: JPA라는 설계도(인터페이스)를 바탕으로 실제 코드(SQL 생성 엔진, 매핑 엔진 등)를 작성하여 동작하게 만든 실체(구현체).
- 관계: JPA 표준을 따르는 구현체 중에서 가장 압도적으로 많이 사용된다. (EclipseLink, DataNucleus 같은 다른 구현체도 있지만 90% 이상 Hibernate를 씀.)
4) JDBC 드라이버 의존성 추가
- 개념 및 역할 (통신 교량):
- 네트워크 통신 모듈: 자바 애플리케이션(JPA/Hibernate)과 실제 데이터베이스(DB) 엔진 간의 네트워크 통신을 연결해 주는 교량(Bridge) 역할을 한다.
- SQL 전달 및 결과 수신: JPA가 자바 객체를 분석하여 SQL문으로 변환하면, JDBC 드라이버가 해당 SQL을 DB 서버로 전송하고 그 결과값을 다시 받아온다.
- JDBC API 구현체: 자바 표준 JDBC 인터페이스를 각 DB 제품(MySQL, H2, PostgreSQL 등)에 맞춰 실제로 작동하도록 구현한 실체(구현체).
- 의존성 추가가 필요한 이유:
- JPA와 Hibernate는 DB를 쉽게 다루기 위한 표준 및 매핑 기술(ORM/인터페이스)일 뿐, DB 서버와 직접 연결되는 통신 기능은 포함되어 있지 않다.
- 따라서 실제 DB 서버와 통신하려면 해당 RDBMS 전용 JDBC 드라이버를 pom.xml에 의존성으로 반드시 추가해야 함.
<dependencies>
<!-- Hibernate Core... -->
<!-- ① H2 Database 드라이버 (개발/테스트용) -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>${h2db.version}</version>
</dependency>
<!-- ② MySQL 드라이버 -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- ③ PostgreSQL 드라이버 -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>${postgresql.version}</version>
</dependency>
</dependencies>
더보기
💡각 데이터베이스별 특징
1) H2 Database 특징
- 가볍고 빠른 임베디드 RDBMS: Java 기반으로 동작하며 메모리(In-Memory) 및 디스크(File) 저장 모드를 모두 지원하는 초경량 데이터베이스.
- 개체/관계형 메모리 및 디스크 기반 데이터베이스
- 주요 용도: 로컬 개발 환경, 빠른 테스트 및 디버깅 용도로 주로 사용된다.
- GUI 환경 제공(+ 실행 방법): 별도의 무거운 클라이언트 프로그램 없이 H2 Console이라는 웹 기반 UI를 통해 관리할 수 있다.
- bin/h2-xxxx.jar 파일: H2 데이터베이스 엔진, 네트워크 서버, H2 Console(웹 UI) 등 모든 코드와 자원이 포함된 단일 파일
- 편의용 실행 스크립트 파일(bat, sh)이나 jar를 실행하면 자동으로 브라우저가 열리면서 H2 Console(http://localhost:8082)에 접속된다. (내부를 열어보면 결국 java -cp h2.jar org.h2.tools.Console ...처럼 h2.jar를 실행하는 명령어)
- Spring Boot 프로젝트의 경우:
- Spring Boot 프로젝트에서 pom.xml이나 build.gradle에 com.h2database:h2 의존성(dependency)만 추가하더라도 H2 Console 서버 클래스가 라이브러리로 함께 들어온다.
- application.properties (또는 yml)에 spring.h2.console.enabled=true 옵션만 켜주면 웹 브라우저(/h2-console)에서 바로 접속이 가능.
- bin/h2-xxxx.jar 파일: H2 데이터베이스 엔진, 네트워크 서버, H2 Console(웹 UI) 등 모든 코드와 자원이 포함된 단일 파일
2) MySQL 특징
- 대표적인 오픈소스 RDBMS: 세계에서 가장 널리 사용되는 오픈소스 관계형 데이터베이스 관리 시스템.
- 높은 범용성과 웹 생태계: PHP, Java, Python 등 다양한 언어 및 프레임워크와의 생태계가 매우 잘 구축되어 있어 실무 및 운용 환경에서 대중적으로 채택된다.
- 문자셋 주의: 한글 및 이모지 처리를 위해 데이터베이스 생성 시 utf8mb4 문자셋 설정을 권장.
- 예시: CREATE DATABASE myapp DEFAULT CHARACTER SET utf8mb4;
- 실행 방법: MySQL Workbench 또는 CLI 터미널(명령어: mysql -u root -p)를 통해 접속 후 데이터베이스(Schema) 생성
3) PostgreSQL 특징
- 강력한 오픈소스 ORDBMS: 단순한 RDBMS를 넘어 객체 관계형 데이터베이스(ORDBMS)로서 표준 SQL 준수율이 매우 높다.
- 복잡한 데이터 구조 처리: JSON 등 비정형 데이터 타입 지원, 복잡한 쿼리 연산 처리, 신뢰성 높은 동시성 제어(MVCC) 능력이 탁월.
- 엔터프라이즈급 성능: 데이터 무결성과 정교한 트랜잭션 처리가 필요한 대규모 서비스에서 활발히 사용된다.
- 실행 방법: pgAdmin 또는 CLI (명령어: psql -U postgres)를 통해 접속 후 데이터베이스 생성
- 공식 인스톨러(Window/macOS)는 설치 과정에서 pgAdmin 다운을 체크박스로 선택할 수 있지만 Linux, Docker 환경에서는 별도로 설치하거나 연결해야한다
5) 편의성 추가
<dependencies>
<!-- Hibernate Core / 데이터베이스 드라이버 등... -->
<!-- 로깅 추상화 인터페이스(SLF4J) -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.13</version>
</dependency>
<!-- 로깅 구현체(Logback) -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.5.6</version>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.32</version>
<scope>provided</scope>
</dependency>
</dependencies>
2. 데이터베이스별 실행 및 DB 생성
① H2 Database
1) H2 Console 실행 및 접속
- H2 Console 실행: H2 설치 경로의 h2.bat (또는 h2.sh)을 실행하여 H2 Console을 연다.
- 연결 방식 설정: 웹 브라우저 창에서 연결 타입(Saved Settings)을 Generic H2 (Server) 모드로 변경한 뒤 DB 정보로 접속(Connect)한다.
- ⚠️ 주의사항 (최초 접속 시): 이 경우, 아래 [2) 신규 DB 생성]이 먼저 선행해서 접속을 진행해야 한다. (최초 실행 시에는 데이터베이스 파일(.mv.db)이 미리 생성되어 있지 않아 바로 접속되지 않고 연결 오류가 발생할 수 있음)
2) 신규 DB 생성
- 작업 표시줄 우측 하단(시스템 트레이)의 H2 아이콘 우클릭 ▶️ [Create a new database]를 클릭한다.
- Database path 및 비밀번호를 설정하여 새로운 데이터베이스 파일을 생성한다.
- 생성 완료 후, 다시 웹 브라우저 H2 Console 창으로 돌아와 설정한 DB 정보(Path/비밀번호)를 입력하고 [Connect] 버튼을 눌러 접속을 완료한다.
ℹ️ H2 Console이란? MySQL Workbench처럼 GUI 환경에서 데이터베이스를 관리하고 SQL을 실행할 수 있는 웹 기반 툴.
② MySQL (MySQL Workbench)
- MySQL Workbench 실행 및 접속: Workbench를 실행하고 연결할 DB 서버 카드(Local instance 등)를 클릭한다.
- 비밀번호 입력: Connection 접속 창이 뜨면 MySQL 설치 시 설정했던 Root 계정 비밀번호를 입력하고 [OK]를 누른다. (자주 사용하는 경우 'Save password in vault' 체크.)
- 신규 Schema 생성: 상단 메뉴바의 [Schema 추가 아이콘] 클릭 (또는 좌측 Navigator 영역 여백 우클릭 ▶️ [Create Schema...])
- 설정 (utf8mb4 인코딩 권장): Name 항목에 생성할 DB 이름을 입력하고, Charset/Collation을 utf8mb4 / utf8mb4_unicode_ci로 설정.
- 적용: 우측 하단의 [Apply] 버튼 ▶️ SQL 확인 창에서 [Apply] ▶️ [Finish]를 클릭하여 생성을 완료.
- DB 선택(접속): 좌측 Navigator의 Schemas 탭에서 생성된 DB를 우클릭 ▶️ [Set as Default Schema]를 클릭하여 해당 DB로 이동. 혹은 더블 클릭
- 애플리케이션에서 사용할 신규 데이터베이스(Schema)를 생성.
CREATE DATABASE myapp DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE myapp;
③ PostgreSQL (pgAdmin4)
- pgAdmin 실행 및 마스터 비밀번호 입력: pgAdmin을 실행하면 애플리케이션 보안을 위한 Master Password 입력창이 나타남. 설정해 둔 비밀번호를 입력하여 pgAdmin을 실행한다.
- 서버 연결 및 계정 비밀번호 입력: 좌측 Object Explorer 패널에서 [Servers] ▶️ [PostgreSQL 서버] 항목을 클릭해 확장한다.
- 비밀번호 입력: 서버 연결 창이 뜨면 PostgreSQL 설치 시 설정한 postgres 계정 비밀번호를 입력하고 [OK]를 누름. ('Save Password' 체크 시 추후 자동 접속 가능)
- 신규 DB 생성: [Databases] 항목 우클릭 ▶️ [Create] ▶️ [Database...]를 클릭.
- 정보 입력: General 탭의 Database 입력란에 생성할 DB 이름을 입력하고 하단의 [Save] 버튼을 클릭한다.
- DB 콘솔 접속: 생성된 데이터베이스 우클릭 ▶️ [Query Tool]을 클릭하여 해당 DB의 SQL 콘솔 창으로 접속한다.
CREATE DATABASE myapp;
\c myapp; -- psql CLI 환경에서 myapp DB로 이동
3. 테이블 생성 DDL 테스트 (접속 테스트)
데이터베이스 연결 후, SQL 입력창에 아래 DDL을 실행하여 정상적으로 동작하는지 확인한다.
CREATE TABLE member (
id VARCHAR(255) PRIMARY KEY,
name VARCHAR(255),
age INTEGER
);
'Tech Stack > Database' 카테고리의 다른 글
| 🔌JDBC 요약 정리 (0) | 2026.07.11 |
|---|---|
| 🗃️JPA 엔티티 매핑 기본 전략 (Identity, Sequence) (0) | 2026.07.10 |
| 🗃️ [JPA-03] JPA 아키텍처 구조 및 주요 API 동작 원리 (0) | 2026.07.09 |
| 🗃️[JPA-02] JPA 엔티티와 영속성 컨텍스트 핵심 (+생명주기) (0) | 2026.07.09 |
| 🔌[JDBC] JDBC 개요 및 데이터베이스 연결 원리 (0) | 2026.07.09 |