결국 무엇이든 해내는 사람

Spring boot - h2 데이터베이스 연동 본문

두서없는 공부 노트/Spring boot

Spring boot - h2 데이터베이스 연동

kkm8257 2021. 4. 3. 17:05
반응형

최대한 간결하게 아주 빠르게 작성할 예정

 

우선 pom.xml에 

 

    <!--h2 -->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.200</version>
        </dependency>
        
         <!--jpa-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

 

 

그다음에 entity 라는 패키지 밑에 User라는 클래스를 예로 만들었씁니다.

 

User라는 클래스를 이용해서 바로 테이블을 생성할겁니다.

 

 

 

 

테이블 이름은 UserTable 이고  컬럼은 총 3개, 그중 userIdx는  @Id 어노테이션을 통해 PK로 지정

name에 빨간줄 걍 무시하세요

하단에는 getter setter를 작성하는데  단축키는 커맨드 N 키눌르면 바로 관련 알림창 뜹니다

 

 

 

 

이제는 h2 데이터베이스 설정을 위한 yml 파일을 작성할겁니다.

좌측에 존재하는

 

 

 

이거 쓰셔도되는데 그냥 저는 지우고 yml 형식의 파일을 만들어서 쓸껍니다

이름은 동일

 

spring:
  jpa:
    hibernate:
      ddl-auto: create
      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
    show-sql: true


  h2:
    console:
      enabled: true
      path: /h2_db
  datasource:
    url: jdbc:h2:file:~/tistoryDb/testdb;DB_CLOSE_ON_EXIT=FALSE;AUTO_SERVER=TRUE
    driver-class-name: org.h2.Driver
    username: kim
    password: 1234






 

 

위코드를 작성

 

url 경로보면 ~/tistoryDb라고 되어있지요?  루트에서 저기에 폴더를 만들고 그안에 testdb라는 파일을 만들거에요. 만약 이게 안된다면 , 구글에서 원인 찾아서 해결하셔야합니다

 

 

이제 yml 설정이 끝났으면  시원하게 프로그램돌리세요

 

그리고 경로를 한번 체크해봅시다 

db 파일이 존재하는 경로입니다

 

 

 

자그럼 해당위치에 이렇게 생성될겁니다 ㅇㅇ

 

 

이제는 크롬으로오세요

 

 

 

 

 

이렇게 쳐봅시다 맨뒤에 슬래쉬 없어도됩니다 . 

 

엔터치면

 

이렇게 뜨지요 저기 JDBC URL에

아까 위에 작성한  

 

jdbc:h2:file:~/tistoryDb/testdb;DB_CLOSE_ON_EXIT=FALSE;AUTO_SERVER=TRUE

 

이거 넣어주세요 . 저는 지금 저거 크롬 자동완성으로 따른 주소 들어가있습니다 제발  수정하세요

 

테스트 커넥션 누르면 오류 뜰수있어요 그냥 시원하게 커넥트 누르세요  그리고 혹시나 뭐 오류뜨거나 이러면 

 

인텔리제이에스 프로그램 정지시키세요.

그담에 

바로 위에 그 디비 파일 담겨있는 폴더있지요? 그 폴더 통쨰로 지우세요. 근데 지웟는데 바로 또 생성될수도있어요

 

그럴떄는 포트 종료 안된거에요

 

커맨드 창 키셔가지고( mac 기준)

sudo lsof -i :8080  치시면 뭐 한줄 뜰겁니다 . 그거 pid (프로세스아이디) 이거 찾아서 

sudo kill -9 "프로세스 번호"   이명령어 써주시면 종료됩니다

그담에 다시 디비 담고있는 폴더 지워보세요.

그러면 이제 막 생성되거나 그러지 않을껍니더 ㅎㅎ;

 

그래도 연동이 안 되면 

위방법대로 포트 종료 시키고 ,  db정보 담긴 파일 삭제하고(폴더째) , 인텔리제이를 아예 껏다가 다시 키면 됩니다.

 

 

이거안되면 나도몰라

 

자이제 아이디 kim에 비밀번호 1234 치고  connect 누르시면

 

 

들어왓지요?

좌측에 USERTABLE 보이시져

아까 User 클래스에서 생성한거에요

 

 

테이블 네임 대로 생성됬어요 (대문자로 자동으로 박힘)

 

아까 yml에 

physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

써준이유는 나중에 쿼리던질때   대소문자를 jpa가 구분해버리는거 방지하는 코드입니다. 저도 그정도로만 알고있어요

 

그리고  ddl-auto: create  줫지요?

이거는 프로그램 실행할때마다 매번 새로 생성한다는 얘기에요

create-drop은 매번생성하고 종료하면 드롭해버린다는거에여

 

그래서 create 한번하고 그다음에는 none으로 바꾸어주면 생성한 테이블을 그대로 유지가능해요  알아서 잘 이용하시면 됨니다

 

참고로 yml 수정시 서버가 자동으로 재실행 될수있으니 create 하고나서 none 바꾸고 싶으면 중지하고 none 바꾸시고 실행하시면됩니다

 

 

웹 콘솔에서 이런식으로 쿼리사용도 가능합니다.

한 줄 실행은 쉬프트 엔터 ㅇㅇ

 

 

 

 

근데 꼭 이렇게 웹 콘솔을 써야하는가?

NO  인텔리제이에서도 사용가능함니다

 

 

 

우측 사이드바에 Database 가 있으니 누르면 저렇게 창이열리고 + 모양 아이콘을누르세요

 

 

 

url 에는 아까 콘솔에 적었던 url과 동일하게 적어주시면 됨니다

 

그러면 알아서 뾰로록 하고 화면이 바뀝니다

 

name은 알아서 적어주시고

유저 아이디와 비밀번호 잘 입력해주세요

 

이는 아까 만든 db 파일을 참조해서 인텔리제이에 Database를 확인할수있게 띄우겠다는 겁니다.

테스트 커넥트클릭

 

 

 

 

 

아마드라이버 설치하라고 뜰수도있는데 그냥 설치하세요 ㅇㅇ

시원하게 OK 클릭

 

 

 

 

자 뜨지요 ? 별거업읍니다 ㅇㅇ;

테이블 더블클릭시

 

 

 

이렇게 보여줍니다. 

 

연동 끝 

 

그리고 자세한건 모르겠으나,와이파이가 바뀌거나하면 웹콘솔은 되는데 인텔리제이에서 안되는 경우가 있는데 원인은 모르겠습니다 ㅎㅎ;

 

 

 

반응형
Comments