728x90
반응형
Spring Boot H2 Console 사용 완벽 가이드
🗄️ H2 Console이란?
H2 Database는 자바 기반의 경량 인메모리 데이터베이스로, 개발 중에 매우 유용합니다. H2 Console은 웹 기반 데이터베이스 관리 도구로, 별도의 프로그램 설치 없이 브라우저에서 직접 데이터베이스를 조회하고 관리할 수 있습니다.
1. H2 Console 설정하기
application.properties 설정
properties
# H2 Console 활성화
spring.h2.console.enabled=true
# H2 Console 경로 설정 (기본값: /h2-console)
spring.h2.console.path=/h2-console
# 외부 접속 허용 (개발 환경에서만 사용)
spring.h2.console.settings.web-allow-others=true
# H2 Database 설정
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
# JPA 설정
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.show-sql=true
2. H2 Console 접속하기
Step 1: 애플리케이션 실행
bash
mvn spring-boot:run
# 또는
./mvnw spring-boot:run
Step 2: 브라우저에서 H2 Console 열기
http://localhost:8080/h2-console
Step 3: 로그인 화면 설정
이미지 표시
로그인 화면에서 다음과 같이 입력합니다:
필드값설명Driver Class | org.h2.Driver | H2 드라이버 클래스 |
JDBC URL | jdbc:h2:mem:testdb | 인메모리 DB URL |
User Name | sa | 기본 사용자명 |
Password | (비워둠) | 비밀번호 없음 |
⚠️ 중요: JDBC URL은 application.properties의 spring.datasource.url과 정확히 일치해야 합니다!
Step 4: Connect 클릭
3. H2 Console 주요 기능
3-1. 테이블 목록 보기
접속 후 왼쪽 패널에서 테이블 목록을 확인할 수 있습니다:
MEMBERS
PROJECTS
EVENTS
PROJECT_MEMBERS (조인 테이블)
3-2. 테이블 구조 확인
테이블 이름을 클릭하면 자동으로 SQL이 생성됩니다:
sql
-- MEMBERS 테이블 구조 보기
SHOW COLUMNS FROM MEMBERS;
-- 또는 테이블 생성 스크립트 보기
SCRIPT NODATA;
3-3. 데이터 조회
sql
-- 모든 회원 조회
SELECT * FROM MEMBERS;
-- 조건부 조회
SELECT * FROM MEMBERS WHERE STATUS = 'ACTIVE';
-- 조인 쿼리
SELECT m.*, p.TITLE
FROM MEMBERS m
JOIN PROJECT_MEMBERS pm ON m.ID = pm.MEMBER_ID
JOIN PROJECTS p ON pm.PROJECT_ID = p.ID;
3-4. 데이터 삽입
sql
-- 회원 추가
INSERT INTO MEMBERS (STUDENT_ID, NAME, EMAIL, DEPARTMENT, ROLE, STATUS, JOIN_DATE)
VALUES ('20240001', '김한동', 'kim@handong.edu', '전산전자공학부', 'MEMBER', 'ACTIVE', CURRENT_DATE);
-- 여러 회원 한번에 추가
INSERT INTO MEMBERS (STUDENT_ID, NAME, EMAIL, DEPARTMENT, ROLE, STATUS, JOIN_DATE) VALUES
('20240002', '이한동', 'lee@handong.edu', '전산전자공학부', 'MEMBER', 'ACTIVE', CURRENT_DATE),
('20240003', '박한동', 'park@handong.edu', 'AI융합교육원', 'VICE_PRESIDENT', 'ACTIVE', CURRENT_DATE),
('20240004', '최한동', 'choi@handong.edu', '경영경제학부', 'SECRETARY', 'ACTIVE', CURRENT_DATE);
3-5. 데이터 수정
sql
-- 회원 정보 수정
UPDATE MEMBERS
SET ROLE = 'PRESIDENT',
UPDATED_AT = CURRENT_TIMESTAMP
WHERE STUDENT_ID = '20240001';
-- 여러 회원 상태 변경
UPDATE MEMBERS
SET STATUS = 'INACTIVE'
WHERE JOIN_DATE < '2023-01-01';
3-6. 데이터 삭제
sql
-- 특정 회원 삭제
DELETE FROM MEMBERS WHERE ID = 1;
-- 조건부 삭제
DELETE FROM MEMBERS WHERE STATUS = 'GRADUATED';
4. 실전 활용 팁
4-1. 초기 데이터 설정
src/main/resources/data.sql 파일을 생성하면 애플리케이션 시작 시 자동 실행됩니다:
sql
-- data.sql
INSERT INTO MEMBERS (STUDENT_ID, NAME, EMAIL, DEPARTMENT, PHONE_NUMBER, ROLE, STATUS, JOIN_DATE, INTRODUCTION) VALUES
('20240001', '김한동', 'kim@handong.edu', '전산전자공학부', '010-1234-5678', 'PRESIDENT', 'ACTIVE', '2024-03-01', '안녕하세요, 회장 김한동입니다.'),
('20240002', '이한동', 'lee@handong.edu', '전산전자공학부', '010-2345-6789', 'VICE_PRESIDENT', 'ACTIVE', '2024-03-01', '부회장을 맡고 있습니다.'),
('20240003', '박한동', 'park@handong.edu', 'AI융합교육원', '010-3456-7890', 'SECRETARY', 'ACTIVE', '2024-03-15', '총무를 담당하고 있습니다.'),
('20240004', '최한동', 'choi@handong.edu', '경영경제학부', '010-4567-8901', 'MEMBER', 'ACTIVE', '2024-04-01', '열심히 활동하겠습니다!'),
('20240005', '정한동', 'jung@handong.edu', '기계제어공학부', '010-5678-9012', 'MEMBER', 'ACTIVE', '2024-04-15', '미디어 제작에 관심이 많습니다.');
INSERT INTO PROJECTS (TITLE, DESCRIPTION, PROJECT_TYPE, STATUS, START_DATE, END_DATE, LEADER_ID) VALUES
('2024 홍보 영상 제작', '학회 홍보를 위한 공식 영상 제작 프로젝트', '영상', 'IN_PROGRESS', '2024-05-01', '2024-06-30', 1),
('웹사이트 리뉴얼', '학회 공식 웹사이트 전면 개편', '웹개발', 'PLANNING', '2024-07-01', '2024-09-30', 2),
('사진전 준비', '연말 사진전시회 준비', '사진', 'PLANNING', '2024-10-01', '2024-12-20', 3);
INSERT INTO EVENTS (TITLE, DESCRIPTION, LOCATION, EVENT_DATE_TIME, EVENT_TYPE, MAX_PARTICIPANTS, CURRENT_PARTICIPANTS, ORGANIZER_ID) VALUES
('영상 편집 워크샵', 'Premiere Pro 기초부터 심화까지', '뉴턴홀 313호', '2024-05-15 14:00:00', 'WORKSHOP', 30, 15, 1),
('정기 총회', '2024년 상반기 정기 총회', '학생회관 세미나실', '2024-06-01 18:00:00', 'MEETING', 50, 0, 1),
('네트워킹 파티', '신입 회원 환영회 겸 네트워킹', '카페 한동', '2024-05-20 19:00:00', 'SOCIAL', 40, 25, 4);
-- 프로젝트 참여자 매핑
INSERT INTO PROJECT_MEMBERS (PROJECT_ID, MEMBER_ID) VALUES
(1, 1), (1, 2), (1, 4),
(2, 2), (2, 3), (2, 5),
(3, 3), (3, 4), (3, 5);
4-2. 유용한 쿼리 모음
sql
-- 1. 회원별 참여 프로젝트 수
SELECT m.NAME, COUNT(pm.PROJECT_ID) as PROJECT_COUNT
FROM MEMBERS m
LEFT JOIN PROJECT_MEMBERS pm ON m.ID = pm.MEMBER_ID
GROUP BY m.ID, m.NAME
ORDER BY PROJECT_COUNT DESC;
-- 2. 역할별 회원 수
SELECT ROLE, COUNT(*) as MEMBER_COUNT
FROM MEMBERS
WHERE STATUS = 'ACTIVE'
GROUP BY ROLE;
-- 3. 이번 달 예정된 이벤트
SELECT * FROM EVENTS
WHERE MONTH(EVENT_DATE_TIME) = MONTH(CURRENT_DATE)
AND YEAR(EVENT_DATE_TIME) = YEAR(CURRENT_DATE)
ORDER BY EVENT_DATE_TIME;
-- 4. 프로젝트별 참여 인원
SELECT p.TITLE, p.STATUS, COUNT(pm.MEMBER_ID) as PARTICIPANT_COUNT
FROM PROJECTS p
LEFT JOIN PROJECT_MEMBERS pm ON p.ID = pm.PROJECT_ID
GROUP BY p.ID, p.TITLE, p.STATUS;
-- 5. 참가 가능한 이벤트 (정원 미달)
SELECT TITLE, EVENT_DATE_TIME,
MAX_PARTICIPANTS - CURRENT_PARTICIPANTS as AVAILABLE_SEATS
FROM EVENTS
WHERE EVENT_DATE_TIME > CURRENT_TIMESTAMP
AND CURRENT_PARTICIPANTS < MAX_PARTICIPANTS
ORDER BY EVENT_DATE_TIME;
4-3. 데이터 내보내기
sql
-- 전체 데이터를 SQL 스크립트로 내보내기
SCRIPT;
-- 특정 테이블만 내보내기
SCRIPT SIMPLE NODATA FROM MEMBERS;
-- CSV로 내보내기
CALL CSVWRITE('~/members.csv', 'SELECT * FROM MEMBERS');
5. 문제 해결
5-1. H2 Console 접속 불가
문제: localhost:8080/h2-console 접속 시 404 에러
해결방법:
properties
# application.properties 확인
spring.h2.console.enabled=true
5-2. Database "testdb" not found
문제: JDBC URL이 맞지 않음
해결방법:
properties
# application.properties의 URL과 동일하게 입력
spring.datasource.url=jdbc:h2:mem:testdb
5-3. 테이블이 보이지 않음
문제: DDL이 실행되지 않음
해결방법:
properties
# JPA 설정 확인
spring.jpa.hibernate.ddl-auto=create-drop
# 또는
spring.jpa.hibernate.ddl-auto=update
5-4. 한글 깨짐
문제: 한글 데이터가 ???로 표시
해결방법:
properties
# URL에 인코딩 추가
spring.datasource.url=jdbc:h2:mem:testdb;MODE=MySQL;DATABASE_TO_LOWER=TRUE;CASE_INSENSITIVE_IDENTIFIERS=TRUE;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS testdb\\;SET SCHEMA testdb
6. 보안 주의사항
🚨 운영 환경에서는 H2 Console 비활성화!
properties
# application-prod.properties
spring.h2.console.enabled=false
프로파일별 설정
properties
# application-dev.properties (개발용)
spring.h2.console.enabled=true
spring.h2.console.settings.web-allow-others=true
# application-prod.properties (운영용)
spring.h2.console.enabled=false
7. H2 Console 단축키
단축키기능Ctrl + Enter | 쿼리 실행 |
Ctrl + Space | 자동완성 |
Ctrl + Shift + F | 쿼리 포맷팅 |
Ctrl + H | 히스토리 |
F5 | 스키마 새로고침 |
마무리
H2 Console은 Spring Boot 개발 시 데이터베이스를 빠르게 확인하고 테스트하는 데 매우 유용한 도구입니다. 특히 개발 초기 단계에서 엔티티 매핑이 제대로 되었는지, 관계 설정이 올바른지 확인할 때 필수적입니다.
핵심 포인트
- JDBC URL을 정확히 일치시켜야 합니다
- 개발 환경에서만 H2 Console을 활성화하세요
- 초기 데이터는 data.sql로 관리하면 편리합니다
- 복잡한 쿼리는 미리 저장해두고 사용하세요
이제 H2 Console을 활용해서 Spring Boot 개발을 더욱 효율적으로 진행해보세요! 🚀
728x90
반응형
'유용한 컴공 테크닉' 카테고리의 다른 글
Spring Boot와 MariaDB/MySQL 연결하기: H2에서 실전 DB로 레벨업 (0) | 2025.07.21 |
---|---|
Spring Boot + Thymeleaf로 웹 페이지 만들기: Bootstrap을 곁들인 CRUD 완성하기 (1) | 2025.07.20 |
Spring Boot로 CRUD REST API 만들기: 제로부터 배포까지 (3) | 2025.07.10 |
Postman 완벽 가이드: REST API 테스트부터 협업까지 (1) | 2025.07.10 |
Java와 SQLite JDBC 연결 완벽 가이드 (0) | 2025.07.05 |