이전까지 했던 것은 사실 메모리에 저장을 했다가 서버가 내려가면 데이터가 모두 사라지기 떄문에 실무에서는 모두 데이터베이스에 데이터들을 저장하고 관리한다.
그러기 위해서 필요한 H2 데이터 베이스를 설치해 볼 것이다.
보통 실무에서는 mysql이나 oracle 같은 DB를 많이 사용한다.
H2 데이터베이스는 교육용으로 매우 좋은,
용량도 가볍고 웹 화면도 제공해주는 데이터베이스이다.
다음 링크에 들어가서 1.4.200 버전을 설치하였다.
https://www.h2database.com/html/download-archive.html
압축을 해제하고
terminal을 켜서
download 폴더에 있는
h2파일에 들어가서
bin에 들어가서
chmod 755 h2.sh
로 권한을 허용시켜 주었다.
./h2.sh
home directory에 test.mv.db가 존재하는지 확인까지 해 준 후,
실행시켜 주었더니 몇 초 후,
위와 같은 창이 떴다.
현재 JDBC URL은 jdbc:h2:~/test 로 되어 있는데,
이렇게 파일로 접근을 하게 되면 애플리케이션과 웹 콘솔리 동시에 접근이 안 될 수가 있기 때문에
jdbc:h2:tcp://localhost/~/test
로 socket을 통해 접근하도록 바꾸어 주었다.
이렇게 해야 여러 군데에서 접근을 할 수가 있게 된다.
바꾸어 준 후 연결을 누르면,
창이 하나 뜨는데
여기에 member table을 만들어 주고,
command + enter을 눌러 실행해준다.
drop table if exists member CASCADE;
create table member
(
id bigint generated by default as identity,
name varchar(255),
primary key (id)
);
실행을 하면,
이렇게 MEMBER가 만들어진 것을 볼 수 있다.
이후부터는 select * from member;로 조회를 할 수가 있게 되는데,
그냥 아무것도 없는 상태에서 MEMBER를 누르면 select * from member가 저절로 뜬다.
실행을 해보면,
위와 같이 만들어져 있는 것을 볼 수가 있다.
sql문을 잠깐 살펴보면,
create table member
(
id bigint generated by default as identity,
name varchar(255),
primary key (id)
);
member 클래스에서 만들어놨던 id가 있고, (type이 자바에서는 long이고 db에서는 bigint라고 한다)
그 다음에 나오는 generated by default as identity는 값을 세팅하지 않고 insert하면, db가 자동으로 id 값을 채워준다는 뜻이다.
name은 varchar(255)로 그냥 만들어 놓았고,
pk는 id로 잡아놓았다.
이제 insert를 해보겠다.
insert into member(name) values('spring')
을 실행하고,
select * from member
를 하면,
이렇게 id 1번이 자동으로 들어가 있는 것을 볼 수 있다.
insert into member(name) values('spring2')
로 id를 하나 더 만들어 보면,
(다음은 똑같이 실행)
이렇게 id 2번까지 들어가 있는 것을 볼 수 있다.
MemoryMemberRepository의 코드와 같은 원리이다.
테이블 관리를 위해 프로젝트 루트에 sql/ddl.sql 파일을 생성하였다.