목차
0. 환경
- m1 macbook
- IntelliJ IDEA(m1) - 202102
- java 11(AdoptOpenJDK-11.0.11)
1. H2DB
- 이전의 프로젝트에서는 메모리 기반의 데이터 저장소를 이용해서 회원 정보를 저장하면서 사용했는데, 이 방식은 임시방편일 뿐 서버를 다시 시작하게 되면 데이터가 날아가게 됩니다.
- 따라서 H2DB를 설치해서 저장소를 변경할 예정입니다.
-
public class MemoryMemberRepository implements MemberRepository { //메모리에 저장을 하기 위해 Map선언 private static Map<Long, Member> store = new HashMap<>(); private static long sequence = 0L; }
-
- H2DB는 개발이나 테스트 용도로 가볍고 편리한 DB, 웹 콘솔 화면도 제공합니다.
2. H2DB 다운로드
- 아래의 링크로 접속해 사용자 환경에 맞게 h2db를 설치합니다. (필자는 Mac이므로 All Platforms 파일을 다운로드했습니다.)
- https://www.h2database.com
3. 압축해제
- 원하는 경로에 압축을 해제합니다.
- 압축을 풀고난 후 해당 디렉터리에 다음과 같은 파일들이 있습니다.
# ls
bin build.bat build.sh docs service src
4. 실행 파일 권한 변경
- h2/bin/h2.sh 파일의 권한을 변경합니다.
# chmod 755 h2.sh
# ll
total 4504
-rw-r--r--@ 1 veneas staff 2.2M 10 14 2019 h2-1.4.200.jar
-rw-r--r--@ 1 veneas staff 98B 10 14 2019 h2.bat
-rwxr-xr-x@ 1 veneas staff 109B 10 14 2019 h2.sh
-rw-r--r--@ 1 veneas staff 105B 10 14 2019 h2w.bat
5. 실행
[포그라운드 실행]
# ./h2.sh
[백그라운드 실행]
# ./h2.sh &
[백그라운드 실행(터미널이 연결이 끊겨도 종료 되지 않습니다.) ]
# nohup ./h2.sh &
[실행 확인]
# jobs
[1] + running ./h2.sh
[백그라운드 작업 종료]
# kill %작업번호
6. H2DB 웹 콘솔
- 실행에 성공한 경우 웹 콘솔이 자동으로 뜨게 됩니다.
- 접속이 잘 안된 경우 주소의 앞부분을 localhost로 변경해 줍니다.
- 뒤의 세션ID 값은 변경하면 안됩니다.
- http://218.232.123.12:8082/login.jsp?jsessionid=adnjkansdkj2138
- http://localhost:8082/login.jsp?jsessionid=adnjkansdkj2138
7. H2DB DB 생성
- 웹 콘솔의 JDBC URL: 에 jdbc:h2:~/test 입력하고 [Connect]를 클릭하면 DB가 생성 및 접속됩니다.
- 해당 경로에 DB파일(test.mv.db)이 생성된 것을 확인할 수 있습니다.
- JDBC URL을 수정하여 관리하기 편한 경로로 변경해도 됩니다.
# ls
Applications Desktop Documents Downloads Library Movies Music Pictures Public test.mv.db
8. H2DB DB 접근
- DB 생성 시에만 JDBC URL: jdbc:h2:~/test를 이용해 생성해주고, 이후의 접근은 JDBC URL: jdbc:h2:tcp://localhost/~/test 형태로 소켓을 통해 접근해줍니다.
- jdbc:h2:~/test로 접근할 경우 동시 접근 시 에러를 발생시킬 가능성이 있으므로 소켓을 통해 접근해 줍니다.
9. TABLE 생성
- H2DB 웹 콘솔을 이용해서 해당 쿼리를 작성 후 실행해 member 테이블을 생성해줍니다.
- Member 클래스(도메인)와 같은 형태로 생성하게 됩니다.
- id bigint generated by default as identity
- mysql Auto_Increment(자동 증가 번호)와 동일한 기능
- private static long sequence = 0L; //메모리 저장소 방식에선 이 필드를 이용해 구현
package hello.test.domain;
public class Member {
private Long id;
private String name;
//control + enter로 편하게 생성 가능합니다.
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
drop table if exists member CASCADE;
create table member
(
id bigint generated by default as identity,
name varchar(255),
primary key (id)
);
10. 테이블 테스트
- 다음과 같이 데이터를 넣어 줍니다.
insert into member(name) values('veneas1');
insert into member(name) values('veneas2');
- 넣은 데이터를 조회해봅니다. 자동으로 id 값이 증가한 것을 알 수 있습니다.
select * from member;
11. DDL(Data Definition Language) 관리
- sql/ddl.sql
- 테이블 관리를 위해 프로젝트 루트에 디렉터리를 추가해 ddl.sql 파일을 생성합니다.
- git이나 svn을 이용해 관리할 경우 같이 관리할 수 있습니다.
'Backend > 코드로 배우는 스프링 부트' 카테고리의 다른 글
[코드로 배우는 스프링 부트] 10. 스프링 통합 테스트 (0) | 2021.11.06 |
---|---|
[코드로 배우는 스프링 부트] 9. 순수 Jdbc H2DB 연동하기 (0) | 2021.11.05 |
[코드로 배우는 스프링 부트] 7. 웹 MVC 개발 (회원 웹 기능) (0) | 2021.11.03 |
[코드로 배우는 스프링 부트] 6. 스프링 빈과 의존관계 (의존성 주입 방식) (0) | 2021.11.02 |
[코드로 배우는 스프링 부트] 5. 스프링 빈과 의존관계 (자바 코드로 직접 스프링 빈 등록하기) (0) | 2021.11.01 |