본문 바로가기
Java/Spring입문

Spring 입문(11) 스프링 DB 접근 기술: H2 데이터베이스 설치

by 이쟝 2023. 5. 4.
인프런의 김영한님의 스프링입문 강의를 듣고 정리한 내용입니다.
스프링 입문 강의
1. H2 데이터베이스 설치
2.  순수 Jdbc(스프링 통합테스트)
3.  스프링 Jdbc Template
4. JPA
5. 스프링 데이터 JPA

 

1. H2 데이터베이스 설치

개발이나 테스트 용도로 가볍고 편리한 DB, 웹 화면 제공

다운로드 및 설치

https://www.h2database.com/html/download-archive.html
h2 데이터베이스는 *1.4.200* 버전을 설치한다. 

h2 경로: C:\Program Files (x86)\H2

실행 : `C:\Program Files (x86)\H2\bin>h2.bat`

-> 윈도우는 h2.bat, 맥은 h2.sh

데이터베이스 파일 생성 방법
-> 최초 한번 `jdbc:h2~/test` , 파일 생성 확인 `~/test.mv.db` 
-> 이후부터는 `jdbc:h2:tcp://localhost/~/test`이렇게 접속한다. 

연결 누른다!!!

 

 

JDBC URL: jdbc:h2~/test =>  파일 경로

1-1. 데이터베이스 생성 

그냥 연결하려고 하면 Database not found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-200] 90149/90149 에러가 발생하기 때문에 연결 전에 데이터베이스를 생성해야 한다.

-> 구글링을 하며 별짓을 다했지만,, 안돼서 h2 console을 열어서 그림과 똑같이 적었더니 실행되었다... 

-> h2.bat으로 열 때 어드민 세션을 가지고 열린 것 같아서 localhost로 안 바꾸고 해서 오류가 안 없어진 것 같다... 하지만 console로 여니까 너무 편했다...

-> console로 여니까 나중에 DB랑 연결이 안되었다... 해결방안1로 하니까 잘되어서,,, 해결방안 1로 하면 될 것 같다...

해결방안 1
1. h2.bat 파일을 실행하면 웹 사이트가 자동으로 열리는데 이때 열리는 웹사이트는 어드민 세션을 가지고 열린다. (url 잘 보면 뒤에 세션 키가 있다.) 예:)  http://111.11.111.11:8082/?key=xxxxxx...
2. URL에서 앞에 ip를 localhost로만 딱 바꿔주고 뒤에 key는 건들지 않는다.! 예:)  http://localhost:8082/?key=xxxxxx...
3. H2 데이터베이스 화면의 접속 URL에 jdbc:h2:~/test등 강의에 맞는 내용을 입력한다.
4. C:\Users\home(본인 홈 폴더)에 test.mv.db 파일이 생성되었는지 확인한다.
5. 나갔다가 다시 들어와서 H2 데이터베이스 화면의 접속 URL에 jdbc:h2:tcp://localhost/~/test 강의에 맞는 내용을 입력해서 접속한다.

=> 최종 해결방안 : localhost로 바꾸고 JDBC URL은 아래 그림처럼 하면 됨..!

test.my.db가 생성되었다. 

생성된 것을 확인했으면 `jdbc:h2:tcp://localhost/~/test`를 적어서 연결한다. (소켓을 통해서 접근)

-> 이렇게 하는 이유는 JDBC URL에 ~/test 이렇게 파일로 접근하게 되면 애플리케이션이랑 웹 콘솔이 동시에 접근이 안되고 파일이 충돌 나면서 오류가 날 수 있다. 

 

-> 소켓을 통해서 접근하게 되면 여러 군데에서 접근할 수 있다.

 

-> 소켓으로 연결할 때 test.mv.db가 없으면 안돼서 최초 연결 시에는 ~/test로 접근해 test.mv.db를 만들고 난 뒤에 소켓 연결을 하는 것이다. 

 

-> 만약 문제가 생겼을 때는 서버를 내리고, test.mv.db를 지우고 다시 생성한다. 

 

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

bigint:  자바에서는 long(long id;)인데 DB에서는 bigint이다. 
generated by default as identity : 값을 넣지 않으면 DB가 알아서 값을 넣어준다. 

쿼리문을 작성하고 실행을 누르면 MEMBER라는 테이블이 생성된다!!!

 

select * from member; 이렇게 쿼리문을 작성하면 밑에서 결과를 볼 수 있다. 

 

insert into member(name) values('spring'); + ctrl + enter => DB(member)에 insert 되었다. 

ID는 생략되었지만 DB가 알아서 넣어주었다. (MemoryMemberRepository의 ststic long sequence = 0L과 같은 역할)


이렇게 src 상위 폴더에 sql 폴더를 만들고  ddl.sql 파일을 만들어서 쿼리 관리하면 편하고, git 할 때도 소스가 관리되어서 좋다.