본문 바로가기
강의 실습/스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

H2 데이터베이스 설치

by jint 2026. 3. 11.

1. H2 데이터베이스 설치
개발이나 테스트 용도로 가볍고 편리한 DB로 웹 화면도 제공한다.

링크 : https://www.h2database.com/

 

H2 Database Engine (redirect)

H2 Database Engine Welcome to H2, the free SQL database. The main feature of H2 are: It is free to use for everybody, source code is included Written in Java, but also available as native executable JDBC and (partial) ODBC API Embedded and client/server mo

www.h2database.com


1) 다운로드 및 설치시, 스프링 부트 버전에 맞춘다.
스프링 부트 2.x : 1.4.200 버전
스프링 부트 3.x : 2.1.214 버전 이상
스프링 부트 4.0.3 이므로, 가장 최신 버전인 2.2.232 버전 설치

다운로드 링크 : https://www.h2database.com/html/download-archive.html

 

Archive Downloads

 

www.h2database.com


2) 파일 권한
chmod 755 h2.sh (윈도우 사용자는 X)

3) 실행
./h2.sh (윈도우 사용자는 h2.bat)

4) 데이터베이스 파일 생성 방법
h2.sh 또는 h2.bat 파일을 실행하면, 브라우저에 창이 뜬다.

여기서 오류 발생

- CMD

The Web Console server could not be started. Possible cause: another server is already running at http://IP:8082
Root cause: Exception opening port "8082" (port may be in use), cause: "java.net.BindException: Address already in use: bind" [90061-232]
Exception in thread "main" org.h2.jdbc.JdbcSQLNonTransientConnectionException: Exception opening port "8082" (port may be in use), cause: "java.net.BindException: Address already in use: bind" [90061-232]
        at org.h2.message.DbException.getJdbcSQLException(DbException.java:690)
        at org.h2.message.DbException.getJdbcSQLException(DbException.java:489)
        at org.h2.message.DbException.get(DbException.java:212)
        at org.h2.util.NetUtils.createServerSocketTry(NetUtils.java:206)
        at org.h2.util.NetUtils.createServerSocket(NetUtils.java:172)
        at org.h2.server.web.WebServer.start(WebServer.java:412)
        at org.h2.tools.Server.start(Server.java:551)
        at org.h2.tools.Console.runTool(Console.java:216)
        at org.h2.tools.Console.main(Console.java:72)
Caused by: java.net.BindException: Address already in use: bind
        at java.base/sun.nio.ch.Net.bind0(Native Method)
        at java.base/sun.nio.ch.Net.bind(Net.java:555)
        at java.base/sun.nio.ch.Net.bind(Net.java:544)
        at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648)
        at java.base/java.net.ServerSocket.bind(ServerSocket.java:388)
        at java.base/java.net.ServerSocket.<init>(ServerSocket.java:274)
        at java.base/java.net.ServerSocket.<init>(ServerSocket.java:167)
        at org.h2.util.NetUtils.createServerSocketTry(NetUtils.java:202)
        ... 5 more


8082 포트가 이미 사용중이라고 나온다. 따라서 확인 후 종료시킨다.

- CMD

C:\Users\admin>netstat -ano | findstr :8082
  TCP    0.0.0.0:8082           0.0.0.0:0              LISTENING       18876

C:\Program Files\h2\bin> tasklist | findstr 18876
WediskLocal.exe              18876 Console                    2     17,508 K

C:\Users\admin>taskkill /pid 18876 /f
성공: 프로세스(PID 18876)가 종료되었습니다.


다시 h2.bat 파일 실행한다. 브라우저 창에서 실행된 주소에 IP 부분을 localhost로 고친다. "http://localhost:8082/test.do?jsessionid=세션아이디"로 접속한다.

드라이버 클래스: org.h2.Driver
JDBC URL: jdbc:h2:~/test
사용자명: sa
비밀번호: (비우기)

"연결" 버튼 클릭

브라우저에 H2 콘솔 화면으로 이동되고, 홈 디렉토리에 test.mv.db 파일이 생성된 것을 확인할 수 있다.

H2 웹 콘솔 JDBC URL이 jdbc:h2:~/test로 설정하여 파일로 접근하면 애플리케이션과 동시 접속시 충돌이 일어날 수 있기 때문에, 이후부터 H2 콘솔 접근시, JDBC URL을 jdbc:h2:tcp://localhost/~/test 로 설정하여 접근한다.
이렇게 DB 서버를 통해 접근하도록 하면 여러 곳에서 접근할 수 있다.

만약 문제가 생기면 test.mv.db 파일을 지우고 H2 실행파일을 다시 시작한다.

설치 참고 : https://steady-eschoi.tistory.com/54#google_vignette

 

[JAVA-jdbc] Window H2 Database 설치/서버 실행

더보기 사담) 오랜만에 블로그에 방문하니 방문자수가 200명이 넘었다. 사실, 그동안 어떤 방향으로 진로를 잡아야 할지 방황하고 있었는데, 아마 블로그에도 그러한 흔적이 조금은 드러나 있는

steady-eschoi.tistory.com



2. 테이블 생성하기
H2 데이터베이스에 접근해서 member 테이블 생성

- SQL

drop table if exists member CASCADE;
create table member (
    id bigint generated by default as identity
  , name varchar(255)
  , primary key (id)
);

SELECT * FROM member;


문법 설명)
#1 generated by default as identity
id 에 값을 세팅하지 않고 INSERT 시, DB가 자동으로 id 값을 채워준다.

테이블 관리를 위해 프로젝트 루트에 sql/ddl.sql 파일을 생성하여 사용했던 DDL 문들을 기입하여 관리한다.


3. 데이터 넣기
테이블을 생성했으니 데이터를 INSERT 한다.

- SQL

INSERT INTO member (name) VALUES ('spring');
INSERT INTO member (name) VALUES ('spring2');

 

DB INSERT 결과


id 넣지 않아도 DB가 넣어준다.


참고링크 : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8?cid=325630

 

[지금 무료]스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술| 김영한 - 인프런 강의

현재 평점 5.0점 수강생 120,696명인 강의를 만나보세요. 스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다. 예제를 만들면서 자연스럽게 스

www.inflearn.com

댓글