h2 데이터베이스를 설치를 해보자. 여기 클릭
링크에 들어가서 1.4.200 버전을 설치한다.
터미널에서 아래와 같이 명령어를 쳐준다.
// h2 폴더로 이동
open .
ls
cd bin
// Mac에서 실행권한을 주기 위해서 아래 명령어를 입력
chmod 755 h2.sh
./h2.sh
아래와 같이 h2 데이터베이스가 뜨게 된다.
JDBD URL의 ~/test는 home에 있는 test 폴더 경로를 의미한다. 그대로 connect를 시켜주면 아래와 같이 뜨게 된다.
좌측 상단을 클릭하면 나갈 수 있게 된다. terminal창에서 home directory를 가보자.
파일 목록들을 보게 되면 test.mv.db가 있다. 이 파일은 꼭 있어야 한다.
이제부터 접속을 할 때는 파일로 접근하지 말고(동시에 application과 web console이 같이 접근이 안될 수 있다. 즉 파일 충돌이 일어날 수도 있다.) 아래와 같이 하자. 파일을 직접 접근하는 것이 아니고 소켓을 통해 접근하게 된다. (즉 여러군데에서 접근 가능해짐)
다시 접근하려고 하는데 터미널에서 아래와 같은 에러가 발생
milaju@MacBook-Pro bin % chmod 755 h2.sh
milaju@MacBook-Pro bin % ./h2.sh
The Web Console server could not be started. Possible cause: another server is already running at http://localhost:8082?key=c1d298524dc0823da6857ae81d389480057e630881003a15c6e3198a596354aa
Root cause: Exception opening port "8082" (port may be in use), cause: "java.net.BindException: Address already in use" [90061-200]
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" [90061-200]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:622)
at org.h2.message.DbException.getJdbcSQLException(DbException.java:429)
at org.h2.message.DbException.get(DbException.java:194)
at org.h2.util.NetUtils.createServerSocketTry(NetUtils.java:180)
at org.h2.util.NetUtils.createServerSocket(NetUtils.java:146)
at org.h2.server.web.WebServer.start(WebServer.java:389)
at org.h2.tools.Server.start(Server.java:511)
at org.h2.tools.Console.runTool(Console.java:208)
at org.h2.tools.Console.main(Console.java:72)
Caused by: java.net.BindException: Address already in use
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:643)
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:176)
... 5 more
milaju@MacBook-Pro bin %
terminal 다시 실행시켜서 해결
이제 table을 생성시켜보자. 아래와 같이 생성을 하게되면 MEMBER 테이블에 ID NAME column이 생성된다.
drop table if exists member CASCADE;
create table member
(
// 이 부분에서 값을 세팅하지 않고 insert를 하면 db가 들어왔을 때 자동으로 id값을 채워준다.
id bigint generated by default as identity,
name varchar(255),
primary key (id)
);
이 부분은 지워도 된다.
drop table if exists member CASCADE;
MEMBER부분을 살짝 클릭하면 아래와 같이 나오게 된다.(조회)
SELECT * FROM MEMBER
아래와 같이 데이터를 삽입해보자.
insert into member(name) values("spring")
insert into member(name) values("spring2")
조회하면 아래와 같이 뜨게 된다.
전에 만들었던 memorymemberRepository도 sequence가 아래처럼 db에 save됐을 때 자동으로 증가되게 만들어 주었다.
public class MemoryMemberRepository implements MemberRepository {
private static Map<Long, Member> store = new HashMap<>();
//sequence가
private static long sequence = 0L;
// db에 save됐을 때 자동으로 증가
@Override
public Member save(Member member) {
member.setId(++sequence);
store.put(member.getId(), member);
return member;
}
<출처 김영한: 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 >
[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의
스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런...
www.inflearn.com
'Spring > SpringCore' 카테고리의 다른 글
스프링 핵심 원리 이해1 - 회원 도메인 설계 (0) | 2022.03.24 |
---|---|
스프링 핵심 원리 이해1 - 비즈니스 요구사항 설계 (0) | 2022.03.24 |
스프링 핵심 원리 이해1 - 프로젝트 생성 (0) | 2022.03.23 |
좋은 객체 지향 프로그래밍 (0) | 2022.03.23 |
스프링 DB 접근 기술 - 스프링 데이터 JPA error (0) | 2022.03.23 |