성실한 사람이 되자

성실하게 글쓰자

This is spear

JAVA_SPRING/SPRING BOOT

스프링 부트 JPA를 이용한 데이터 액세스(h2-console을 이용해 데이터 확인하기)

Imaspear 2020. 7. 7. 15:16
728x90

 

 

 

Spring Data JPA를 사용하여 데이터베이스에 데이터를 1. 저장하고. 2. 검색하는 애플리케이션을 빌드하는 과정을 간단하게 테스트해볼까 합니다. 

 

 

Spring Data JPA를 이용해  메모리에 저장해 프론트 엔드와 데이터를 교류하는 방법입니다. 흔히들 POJO (Plain Old Java Objects)를 메모리 기반 데이터베이스에 저장하는 방법이라고 하죠. 그래서 Spring Data JPA를 사용하여 데이터베이스에 저장된 Blog라는 객체를 생성하고 검색할 수 있는 Spring 애플리케이션을 빌드해볼 겁니다.

 

프로젝트를 생성하며 만든 개발 툴은 이클립스를 이용한 STS4입니다. 다운로드는 이곳에 들어가서 확인하시면 됩니다. 

https://imspear.tistory.com/9

 

Spring Boot) STS4 설치/다운로드 (Spring Tool Suites4)

STS4설치하려고 구글에 검색하니까 잘 안나오더라구요...ㅋㅋ 그래서 저도 찾으려고 영어로 치고 별에 별짓을 다 했습니다. 아래 링크에 들어가면 OS별로 STS4 설치할 수 있는 압축 파일을 다운로��

imspear.tistory.com

 

 

 

 

 

프로젝트 생성


STS4에서 프로젝트를 직접 생성하기

File -> New -> Spring Starter Project순으로 선택해서 생성하면 됩니다.

 

 

 

 

Spring Boot Starter에서 지정해야 할 목록들은

  • Spring Boot DevTools  : 코드를 고칠 때마다 실행되고 있는 스프링 부트를 재시작해주는 역할을 합니다. 
  • Lombok : Data의 간단한 Setter와 Getter를 자동으로 생성해주는 역할을 합니다. 
  • H2 DataBase :자바 기반의 오픈소스 관계형 테이버 베이스 관리 시스템(RDBMS)입니다. 나중에 간단하게 실행해보도록 하겠습니다.
  • Spring Data JPA : 우리가 사용할 데이터베이스 내 데이터를 저장하고 검색해주는 프로세스입니다. 
  • Spring Web : 데이터만 확인할 거면 넣어주지 않아도 되지만 추후에 웹 서비스까지 작성하기 위해서 지금 넣어줬습니다. 

 

 

 

 

다른 개발 툴에서 사용하려면 Spring Initializr을 이용

 

https://start.spring.io/

 

 

Dependencies를 직접 추가해주고 GENERATE키를 눌러 다운로드하면 됩니다.

 

 

 

 

 

 

 

프로젝트 구축하기 


 

domain

  • annotation
    • Data : lombok에서 지원하는 어노테이션입니다. Getter와 Setter, toString()과 같은 메서드를 자동으로 생성해줍니다.
    • RequiredArgsConstructor : lombok에서 지원하는 어노테이션입니다. 안에 변수가 존재하는 Constructor를 자동으로 생성해줍니다.
    • NoArgsContructor: lombok에서 지원하는 어노테이션입니다. 안에 텅 빈 Constructor를 자동으로 생성해줍니다.
    • Entity 
    • Id
    • GeneratedValue 

 

 

package com.spear.blog.domain;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.validation.constraints.NotBlank;
import lombok.AccessLevel;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;

@Data
@RequiredArgsConstructor
@NoArgsConstructor(access=AccessLevel.PRIVATE, force=true)
@Entity
public class Blog {

	private static final long serialVersionUID = 1L;
	  
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	public Long id;
	
	@NotBlank(message = "blog title is blank")
	public final String title;
	
	public final String logoFile;

}

 

springApplication.class

  • SpringBootApplication
  • Bean
package com.spear.blog;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

import com.spear.blog.domain.Blog;
import com.spear.blog.repository.BlogRepository;

@SpringBootApplication
public class JBlogOtherTypeApplication {

	private static final Logger log = LoggerFactory.getLogger(JBlogOtherTypeApplication.class);

	
	public static void main(String[] args) {
		SpringApplication.run(JBlogOtherTypeApplication.class, args);
	}

	 @Bean
	  public CommandLineRunner demo(BlogRepository repository) {
	    return (args) -> {
	    	repository.save(new Blog("thisisstory", "thisIsFilePath1"));
	    	repository.save(new Blog("thisisstory2", "thisIsFilePath2"));
	    	repository.save(new Blog("thisisstory3", "thisIsFilePath3"));
	    	repository.save(new Blog("thisisstory4", "thisIsFilePath4"));
	    	repository.save(new Blog("thisisstory", "thisIsFilePath5"));
	    	
	    	 // fetch all Blog
	        log.info("Customers found with findAll():");
	        log.info("-------------------------------");
	        for (Blog blog : repository.findAll()) {
	          log.info(blog.toString());
	        }
	        log.info("");
	        
	     // fetch an individual Blog by ID
	        Blog blog = repository.findById(1L);
	        log.info("Blog found with findById(1L):");
	        log.info("--------------------------------");
	        log.info(blog.toString());
	        log.info("");
	        
	        // fetch Blog by title
	        log.info("Blog found with findByLastName('Bauer'):");
	        log.info("--------------------------------------------");
	        repository.findByTitle("thisisstory").forEach(thisisstory -> {
	          log.info(thisisstory.toString());
	        });
	        log.info("");

	    };
	 }	 
}

 

repository 

  • CrudRepository
package com.spear.blog.repository;

import java.util.List;

import org.springframework.data.repository.CrudRepository;

import com.spear.blog.domain.Blog;

public interface BlogRepository extends CrudRepository<Blog, Long>{
	List<Blog> findByTitle(String title);
	Blog findById(long id);
}

 

 

 

 

데이터 확인하기 


 

jpa를 이용해 데이터 액세스를 완료한 모습 

 

 

h2-console을 이용해 데이터 확인하기 

 

http://localhost:8080/h2-console

실제로 프로젝트를 실행해야 합니다!! 프로젝트를 실행하고 h2-console을 들어가셔야 합니다. 

h2-console 페이지 들어가면 이런 창이 나옵니다.

 

별도로 지정한 게 없으면 connect를 누르면 들어가집니다. 

들어간다음 안에 데이터들을 생성한 모습이 보입니다. 

 

저 같은 경우에는 미리 domain을 생성했기 때문에 저렇게 데이터베이스가 생성이 됐습니다. 

 

만약 Blog 도메인 하나만 생성했을 경우 하나의 테이블만 생성이 됩니다. 

 

 

 

메모리에다가 생성한 데이터를 Data JPA를 이용해  검색하는 방법을 알아봤습니다. 다음 포스트에서는 JPA와 RESTful를 이용해 프론트 엔드에서 데이터를 전달하는 방법을 포스트 하겠습니다.