1. H2 데이터베이스 설치 : 개발이나 테스트 용도로 가볍고 편리한 DB, 웹 화면 제공
https://www.h2database.com - Windows Installer (6.7 MB) 다운로드 및 설치
h2-setup-2022-06-13.exe 실행해서 설치함 - 좌측 하단 시작 버튼 클릭
- H2 Console을 바탕화면으로 드래그앤드롭으로 넣어줌
2. 데이터베이스 파일 생성 방법
1) 바탕화면에 넣어준 H2 Console 아이콘을 더블클릭 합니다.
2) Chrome 웹 브라우저 연결 확인(h2 DB 기본 포트는 8082 입니다)
* 예시 웹 URL = http://192.168.56.1:8082/login.jsp?jsessionid=15063e28cc5342af608ab4787600975c
3) 좌측 상단 "한국어" 선택하고, 처음에 한번은
저장한 설정: Generic H2 (Embedded), 설정 이름 : Generic H2 (Embedded),
드라이버 클래스: org.h2.Driver, JDBC URL: jdbc:h2:~/SpringBootWeb,
사용자명: sa, 비밀번호: 공란 - 연결 버튼 클릭해서 들어갑니다.
4) 두번째부터는 저장한 설정: Generic H2(Server)
5) 설정 이름: Generic H2(Server) [옆에 저장 버튼 클릭]
4) 드라이버 클래스: org.h2.Driver
5) JDBC URL: jdbc:h2:tcp://localhost/~/SpringBootWeb
6) "연결" 버튼 클릭
7) ~SpringBootWeb.mv.db 파일 생성 확인
(H2 DB 기본 파일 생성 위치는 사용자 계정 폴더입니다.
예제에서는 C:\Users\starh 폴더에 SpringBootWeb.mv.db 파일이 생성되어 있습니다)
(참고로, 만약에 C드라이브에 SpringBootWeb 폴더에 SpringBootWeb.mv.db 파일을 생성하거나
경로 지정하고 싶을 경우에는
JDBC URL: 경로를 jdbc:h2:tcp://localhost/C:/SpringBootWeb/SpringBootWeb 이라고 해주면 됩니다)
[참고 : H2 데이터베이스의 MVCC 옵션은 H2 1.4.198 버전부터 제거되었음.
1.4.200 버전에서는 MVCC 옵션을 사용하면 오류가 발생함]
3. JPA와 DB 설정
1) SpringBootWeb - 우클릭 - Spring - Edit Starters 클릭
- Spring Data JPA 추가해줌 - OK 클릭
2) 아래 메이븐 라이브러리 다운로드 웹사이트 주소에서
h2-2.1.214.jar 파일 다운로드 받아서
SpringBootWeb 프로젝트 안에 webapp 폴더 안에
WEB-INF 폴더 만들고, 그 안에 lib 폴더 만들고,
lib 폴더 안에 h2-2.1.214.jar 파일을 넣어줌.
[아래 : 메이븐 라이브러리 다운로드 웹사이트 주소]
https://mvnrepository.com/artifact/com.h2database/h2/2.1.214
그리고, SpringBootWeb 프로젝트 - 우클릭 - Properties 클릭
- Java Build Path - Web App Libraries 추가해서 /WEB-INF/lib 폴더 인식시켜줌.
3) main/resources/application.properties 파일 내용을 다음과 같이 환경 설정 코딩해줌
server.port=9008
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
spring.datasource.url=jdbc:h2:tcp://localhost/~/SpringBootWeb
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver
spring.jpa.hibernate.ddl-auto=create
spring.jpa.show-sql=true
===================================================================================
spring.jpa.hibernate.ddl-auto: create
이 옵션은 애플리케이션 실행 시점에 테이블을 drop 하고, 다시 생성합니다.
참고: 모든 로그 출력은 가급적 로거를 통해 남겨야 한다.
> show_sql : 옵션은 System.out 에 하이버네이트 실행 SQL을 남깁니다.
실무 리얼 서버 구동 시에는 사용하지 마시기 바랍니다.
=======================================================================================
※ STS(또는 이클립스)의 Navigator 익스플로러 기준 SpringBootWeb 프로젝트 - src - main
- java - com - springboot - first 패키지 안에 다음과 같이 Member.java 소스 코딩해 줌.
[Member.java 소스 코딩]
package com.springboot.first;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import lombok.Getter;
import lombok.Setter;
@Entity
@Getter @Setter
public class Member {
@Id @GeneratedValue
private Long id;
private String username;
}
=============================================================================================
※ STS(또는 이클립스)의 Navigator 익스플로러 기준 SpringBootWeb 프로젝트 - src - main
- java - com - springboot - first 패키지 안에 다음과 같이
MemberRepository.java 소스 코딩해 줌
(참고로, SpringBoot의 Repository 파일은 JAVA/JSP/Spring에서
DAO 파일과 비슷하다고 보시면 되십니다)
[MemberRepository.java 소스 코딩]
package com.springboot.first;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.stereotype.Repository;
// SpringBoot의 Repository 파일은 JAVA/JSP/Spring에서
// DAO 파일과 비슷한 역할을 한다고 보시면 됩니다.
@Repository
public class MemberRepository {
@PersistenceContext
private EntityManager em;
public Long save(Member member) {
em.persist(member);
return member.getId();
}
public Member find(Long id) {
return em.find(Member.class, id);
}
}
==========================================================================================
※ JUnit4 테스트 설정
1) STS(또는 이클립스)의 Navigator 익스플로러 기준 SpringBootWeb 프로젝트 - 우클릭 - Properties
- Java Build Path - Add Library... - JUnit - Next - JUnit library version: JUnit 4 선택 - Finish 클릭
2) STS(또는 이클립스)의 Navigator 익스플로러 기준 MemberRepository.java 클릭 선택 - 우클릭
- New - JUnit Test Case 클릭 - Name: 란에 MemberRepositoryTest 입력 확인 - Finish 클릭
[오류 해결] Junit4 Test 수행 시 "Could not run test ! No tests found with test runner 'JUnit 5'. OK 메시지가 나타난다면,
MemberRepositoryTest.java - 우클릭 - Run As - Run Configurations...
- Test 탭의 중간 하단 부분에서 Test runner: 를 JUnit 5 에서 JUnit 4 로 변경해 줌 - Apply - Run 클릭
[오류 해결] MemberRepositoryTest.java 실행 시, jUnit 테스트에서 public ... 관련 3줄 에러가 나타난다면,
MemberRepositoryTest.java - 우클릭 - Run Configurations - Test runner: 에서 JUnit 5 선택
- Apply - Run 실행하시기 바랍니다.
3) MemberRepositoryTest.java 소스 코딩
package com.springboot.first;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;
@RunWith(SpringRunner.class)
@SpringBootTest
class MemberRepositoryTest { // 클래스 앞에 public 접근제어자가 없는지를 필히! 확인 바랍니다.
@Autowired
MemberRepository memberRepository;
@Test
@Transactional // org.springframework.transaction.annotation.Transactional 사용하기 바람
@Rollback(false)
public void testMember() throws Exception{
//given
Member member = new Member();
member.setUsername("장나라");
// when
Long saveId = memberRepository.save(member);
Member finMember = memberRepository.find(saveId);
// then : Assertions는 org.assertj.core.api 패키지로 선택해야 함. org.junit.jupiter.api 패키지 아님
Assertions.assertThat(finMember.getId()).isEqualTo(member.getId());
Assertions.assertThat(finMember.getUsername()).isEqualTo(member.getUsername());
}
}
===========================================================================================
4) MemberRepositoryTest.java 파일 - 우클릭 - Run As - JUnit Test 클릭 - 우측 하단 JUnit 탭 확인
- 로그에 Spring Data JPA 쿼리 메시지 확인
[오류 해결] Junit4 Test 수행 시 "Could not run test ! No tests found with test runner 'JUnit 5'. OK 메시지가 나타난다면,
MemberRepositoryTest.java - 우클릭 - Run As - Run Configurations...
- Test 탭의 중간 하단 부분에서 Test runner: 를 JUnit 5 에서 JUnit 4 로 변경해 줌 - Apply - Run 클릭
5) H2 Console 웹 사이트 확인
http://192.168.56.1:8082/login.jsp?jsessionid=15063e28cc5342af608ab4787600975c
[H2 DB SQL 쿼리문 확인]
--오라클 DESC 와 같은 H2 DB 테이블 칼럼 형식 보는 SQL문
SHOW COLUMNS FROM MEMBER;
-- SQL 쿼리문 실행 후 아래 내용을 확인해 봅니다.
SELECT * FROM MEMBER;
[SQL 쿼리문 실행 후 아래 확인 내용]
SELECT * FROM MEMBER;
ID USERNAME
1 장나라
(1 row, 2 ms)
※ SpringBoot SQL 쿼리 파라미터 로그 확인 가능함
1) 참고 웹사이트 : https://github.com/gavlyukovskiy/spring-boot-data-source-decorator
2) p6spy 라이브러리 maven <dependency> 추가
<dependency>
<groupId>com.github.gavlyukovskiy</groupId>
<artifactId>p6spy-spring-boot-starter</artifactId>
<version>1.7.0</version>
</dependency>
[참고 : gradle의 경우 다음과 같이 추가해 줌]
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.7.0'
3) SpringBoot SQL 쿼리 파라미터 로그 확인 가능함
Hibernate: insert into member (username, id) values (?, ?)
2021-04-04 23:57:15.410 INFO 7080 --- [ main] p6spy : #1617548235410 | took 0ms | statement | connection 3| url jdbc:h2:tcp://localhost/~/SpringBootWeb
insert into member (username, id) values (?, ?)
insert into member (username, id) values ('장나라', 1);
https://www.h2database.com/html/download.html
설치하기
실행
연결 완료!
h2설정에서 빠진 데이터를 추가할 수 있다.
jar 다운로드
lib 폴더에 jar 붙여넣기
jar 잘 들어왔는 지 확인
https://github.com/gavlyukovskiy/spring-boot-data-source-decorator
'☭DEVELOPER > #2 웹개발(자바기반 풀스택)' 카테고리의 다른 글
[BACKEND]리소스 파일과 저장폴더 (0) | 2023.10.17 |
---|---|
[BACKEND]안드로이드앱 아이콘 변경 (1) | 2023.10.17 |
[BACKEND]SpringBoot 웹 개발 환경 구축 (1) | 2023.10.12 |
[BACKEND]BOARDMS 공지사항 BOARDMS 공지사항 회원가입 회원 정보 수정 프로그램 (0) | 2023.10.12 |
[BACKEND]ESHOP 게시판 프로그램 (0) | 2023.10.12 |