본문으로 바로가기

목차

    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 

    H2DB download Page

    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

    H2DB web console

    7. H2DB DB 생성

    • 웹 콘솔의 JDBC URL: 에 jdbc:h2:~/test 입력하고 [Connect]를 클릭하면 DB가 생성 및 접속됩니다.
    • 해당 경로에 DB파일(test.mv.db)이 생성된 것을 확인할 수 있습니다.
    • JDBC URL을 수정하여 관리하기 편한 경로로 변경해도 됩니다.

    DB 생성

    # 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)
    );

    table 생성

    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을 이용해 관리할 경우 같이 관리할 수 있습니다.