하이어코딩 RSS 태그 관리 글쓰기 방명록 mahiru
2025-07-11 09:30:30
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 개발 시 데이터베이스를 빠르게 확인하고 테스트하는 데 매우 유용한 도구입니다. 특히 개발 초기 단계에서 엔티티 매핑이 제대로 되었는지, 관계 설정이 올바른지 확인할 때 필수적입니다.

핵심 포인트

  1. JDBC URL을 정확히 일치시켜야 합니다
  2. 개발 환경에서만 H2 Console을 활성화하세요
  3. 초기 데이터는 data.sql로 관리하면 편리합니다
  4. 복잡한 쿼리는 미리 저장해두고 사용하세요

이제 H2 Console을 활용해서 Spring Boot 개발을 더욱 효율적으로 진행해보세요! 🚀

728x90
반응형
이 페이지는 리디주식회사에서 제공한 리디바탕 글꼴이 사용되어 있습니다.