Spring/Spring Boot

[Spring] 03. Spring H2 데이터베이스 연동하기 (Repository 레이어, JPA)

민돌v 2021. 11. 4. 18:40

시작전에, 데이터베이스 설정

일단 지금은 테스트를 위해, 인메모리 데이터베이스인 H2 데이터베이스를 사용한다,

H2 데이터베이스는 프로젝트 시작할 때 install을 해주었으며, 간단하게 설정해 줄 수 잇다.

 

src > main > resources > application.properties 파일에 다음 아래의 명러어 3개를 입력하면 끝!

spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:testdb
spring.jpa.show-sql=true

http://localhost:8080/h2-console 접속 - url에 testdb url에 입력!

Spring 레이어 구조

Spring은 Controller, Service, Repository 3개의 레이어로 나누어지는데,

오늘은, Repository 레이어, 즉 데이터 처리 관련된 부분을 정리해보자.

 

1. 우선 JPA

JPA란,

SQL  쿼리문을 사용하지 않고 데이터를 생성, 조회.수정, 삭제할 수 있도록 해주는 번역기 입니다. (JPA ORM 이라고도 함)

ORM 이란, (Object Relational Mapping)  객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말합니다.

 

따라서, Spring은 JPA라는 ORM기능을 제공하는데, JPA를 사용함으로써, 개발자가 더욱 더 쉽게(쿼리문을 사용하지 않고) 데이터를 처리할 수 있도록 해준다.

 

 

2. JPA 사용하기

JPA는 관계형 데이터베이스(RDBMS)와 실제 데이터를 매핑시켜주는 역할을 해주기 때문에, 먼저 데이터를 담을 그룻, 테이블이 필요하겠죠?

 

Spring에서 "테이블" = "Domain" / "SQL" = Repository 입니다.

 

Domain, Repository 설정하기

1. src > main > java > com.sparta.item01 에 domain 이라는 패키지를 만듭니다.

2. Lecture.java, LectureRepository.java 파일을 만듭니다. 

  • Lecture 는 테이블
  • LectureRepository는 Lecture 테이블에 1대1로 매핑되는, Repository 입니다.

 

Lecture 라는 테이블을 만들고, 이 테이블을 SQL처럼 이용하기 위해 JPARepository라는 SQL을 사용할 수 있도록 해주는 패키지를 이용하는 것입니다.

 

Lecture.java

  • @Entity : 어노테이션을 정의해 줌으로써, Lecture Class가 테이블임을 명시하는 것입니다.
  • 그외에, @Id, @GeneratiedValue(=auto increament), @Column 등을 이용하여 최대한 테이블에 가깝게 사용할 수 있도록 해줍니다.
  • 이 클래스는 일정의 Model이고, Repository 레이어 안에서 제어됩니다.
@Entity // 테이블임을 나타냅니다.
public class Lecture {

	public Lecture() {}

    @Id // ID 값, Primary Key로 사용하겠다는 뜻입니다.
    @GeneratedValue(strategy = GenerationType.AUTO) // 자동 증가 명령입니다.
    private Long id;

    @Column(nullable = false) // 컬럼 값이고 반드시 값이 존재해야 함을 나타냅니다.
    private String title;

    @Column(nullable = false)
    private String tutor;

    public Long getId() {
        return id;
    }

    public String getTitle() {
        return this.title;
    }

    public String getTutor() {
        return this.tutor;
    }

    public Lecture(String title, String tutor) {
        this.title = title;
        this.tutor = tutor;
    }
}

 

LectureRepository.java

  • SQL문을 사용하지 않고, 데이터를 조작할 수 있도록 JPA기능을 사용하는 인터페이스 입니다.
  • interface로 파일을 만들어야합니다.
  • SQL조작 기능이 정의되어있는 JpaRepository를 상속받아 개발자가 기능을 사용할 수 있도록 합니다.
  • Repository 인터페이스는 도메인과 1대1 매핑입니다.
public interface LectureRepository extends JpaRepository<Lecture, Long> {
}

 

JPA 사용해보기

// item01Application.java 의 main 함수 아래에 붙여주세요.
@Bean
public CommandLineRunner demo(LectureRepository lectureRepository) {
    return (args) -> {
        Lecture course = new Lecture("웹개발의 봄", "남병관");
        lectureRepository.save(course);
        lectureRepository.findAll();
    };
}

JPA를 사용하기위한 테스트코드이다. 

요롷게 LectorRepository를 이용하여 데이터를 찾고, 저장할 수 있다.

실제로 이요할 때는, 이렇게 사용하지 않고, Service와 맞물려서 사용된다. ( 요건 다음에)

 

@Bean 어노테이션

- 이거 머지..? 내일 알아바야지...ㅠ