본문 바로가기
Spring

InMemory-H2

by 스르나 2021. 2. 23.

이번글은 스프링에서 H2-Database를 사용하는 설명할 것이다.

H2-Database는 Mysql,MariaDb등과 다르게 따로 설치하지 않고 의존성만 추가해주면 사용할 수 있는 인메모리 데이터베이스이다. H2-Database를 사용해서 DB를 설치하기전에 미리 테스트를 해볼 수 있다.

 

//Maven
<dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
</dependency>

//gradle
testImplementation group: 'com.h2database', name: 'h2', version: '1.4.200'

우선 메이븐,그레이들 각각 사용하는것에 맞게 의존성을 추가해주자.

다음으로는 resources디렉토리 밑에 위처름 schema.sql을 만들어주자.

ql파일은 각각 database에 들어갈 DDL문을 넣어놨다

 

테스트용 sql 내용은 아래와 같다.

//schema.sql
CREATE TABLE user (
  id VARCHAR(45) NOT NULL,
  password VARCHAR(45) NULL,
  name VARCHAR(45) NULL,
  PRIMARY KEY (id));

 

다음으로는 h2데이터베이스가 정삭적으로 작동하는지 jpa와 함께 알아보자.

 

우선 jpa로 DDL문으로 만든 테이블을 만들어주자.

 

@Getter
@Setter
@Entity(name = "User")
public class User {
    @Id
    private String id;
    private String password;
    private String name;
}

 

그 다음으로는 테이블을 이용해서 쿼리문을 수행할 repository를 만들자.

 

@Repository
public interface UserRepository extends JpaRepository<User,String> {
    User getUserById(String id);
}

 

다음으로는 이제 컨트롤러로 직접 확인해보자.,

 

@RestController
public class IndexController {
    private UserRepository userRepository;
    public IndexController(UserRepository userRepository){
        this.userRepository=userRepository;
    }

    @GetMapping("/user/{id}")
    public User getUser(@PathVariable String id){
        User user=new User();
        user.setId(id);
        user.setName("testMan");
        user.setPassword("123456");
        userRepository.save(user);
        return userRepository.getUserById(id);
    }
}

id를 가져와서 미리 준비해준 name과 password를 줘서 h2데이터베이스에 저장한뒤 리턴해주는 컨트롤러이다. 실행결과는 아래와 같이 잘된다.

 

 

다음으로는 h2의 특징인 h2-console사용법이다 h2-console은 다른 database와 같이 gui를 지원해주는 기능이다.

 

사용방법은 우선 application.properties에 아래의 문장을 넣어준다.

spring.h2.console.enabled=true

 

그 다음 h2-console에 접속하기 위해 url과 username을 알아야하기때문에 아래의 클래스파일을 만들어준다.

@Component
public class AppRunner implements ApplicationRunner {

    @Autowired
    DataSource dataSource;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        Connection connection=dataSource.getConnection();

        System.out.println(connection.getMetaData().getURL());
        System.out.println(connection.getMetaData().getUserName());
    }
}

 

그리고 앱을 재실행하면 콘솔창에 아래와같이 나올것이다.

윗줄이 url 아래줄이 username이다.

 

그다음에 localhost:8080/h2-console에 접속하면 아래와 같이 나온다.

저기셔 jdb url과 username을 콘솔에 나온것과 같이 바꿔주고 Connect를 누르면 아래와 같이 나온다

 

보면 아까 만든 User테이블이 존재한다.

'Spring' 카테고리의 다른 글

Spring 단위테스트 -2 Data  (0) 2021.02.28
Spring 단위테스트 - 1  (0) 2021.02.28
스프링 HttpMessageConverters  (0) 2021.01.27
Autowired  (0) 2020.05.11
Environment  (0) 2020.05.11