Spring Data JPA
윈도우 프로그래밍과 java 어플리케이션 개발 과정 중, DB를 사용하기 위해 이런 저런 환경설정으로 매우 많은 번거로움이 있었다. JPA를 알게 된 이후로 이 모든 설정 및 쿼리 사용에 대한 부담감이 완전 줄어 든 데에 Spring을 만든사람에게 박수를 보내고 싶다.
자 그럼 이번 시간은 JPA가 무엇이고, JPA를 사용하기위한 환경설정을 알아보자.
1. JPA소개
- Spring Data JPA는 JPA(Java Persistence API)란 기술을 스프링에서 개발할 수 있도록 돕는 라이브러리다.
- 다양한 데이터베이스에 종속적인 SQL문 없이도 개발이 가능해졌다.
- Java를 이용해 데이터 관리 기법의 하나의 스펙 표준이다.
- JPA를 구현한 구현체 중 스프링 부트에선 'Hibernate'를 이용한다.
- JPA를 이용하면 Java로 작성된 클래스, 객체, 데이터베이스 테이블, 레코드를 자동으로 관리된다.
2. 용어를 알아보자
- 엔티티(Entity) : 데이터베이스상 데이터로 관리하는 대상. JPA에선 Java를 이용해 엔티티 관리하는데, 엔티티 타입의 존재는 클래스이다.
- 엔티티매니저 : 자신이 관리해야 하는 엔티티 객체들을 '영속컨텍스트'란 곳에 넣어 객체들의 생사를 관리한다.
- 영속 컨텍스트 : JPA가 엔티티 객체들을 모아두는 공간이다. 다음 상태가 있다.
1) 비영속(New) : Java 영역에 객체만 존재하고, 데이터베이스와 연동이 없는 상태.
2) 영속(Managed) : 데이터베이스에 저장되고 메모리상에도 존재. 객체가 영속 컨텍스트에 들어가고 id(PK)로 엔티티 객체를 꺼내 사용할 수 있다.
3) 삭제(Removed) : 데이터베이스상에서 삭제된 상태
4) 준영속(Detached) : 영속 컨텍스트에서 객체를 꺼내 사용하는 상태.
3. Spring Data JPA 특징
- 기존에 그냥 JPA를 통해 개발을 했었다.
- JPA는 EntityManager를 이용해 '영속성'을 관리했다.
- EntityManager를 이용해 객체를 보관(persist())한다.
- 이를 사용하기 위해선 EntityManagerFatory를 생성하고, 이것으로 EnriryManager를 만들고, 또 이 사용이 끝나면 닫아줘야 하는 번거로움이 있었다.
- Spring Data JPA는 이러한 번거로움 없어졌다.
- 동적으로 인터페이스를 구현하는 클래스를 만들어내는 방식(동적프록시)를 이용해 인터페이스를 구현한 클래스를 작성하지 않아도 된다.
4. 프로젝트를 생성해 보자.
- 먼저 File --> New --> Project --> Spring Initalizr를 클릭하고 Next를 누르자.
- 해당 프로젝트 명을 설정하고 메이븐 프로젝트로 만들고 다음을 누르자.
- Dependecies를 추가하는게 나오는데, DevTools, Lombock, Web, 타임리프, JPA, MYSQL을 선택하고 Next를 누르자.
- 다음 프로젝트가 완성되고 실행을 누르면 에러 메시지가 나오면서 실행이 안된다.
- 아니 설정 다 한거 같은데 왜 안되는 것일까??
- 스프링 부트가 자체적으로 자동 설정을 구성하기 떄문인데, 스프링 부트가 동작할 때 JDBC 등과 같은 라이브러리가 포함되 있으면 라이브러리를 이용해 필요한 객체를 구성하려 하기 때문이다.
- 데이터 베이스 관련 설정이 없었음로 이를 추가해 보자.
- 필요한 데이터베이스를 구성하고 DataSource를 지정해 주도록 하자.
- MySql 설치는 친절한 블로거님들이 많으므로 '윈도우or맥 Mysql설치'를 검색해 설치를 진행하자.
- 설치가 다 되었으면 MySQL 터미널에 접속해 보자.
- 해당 ID, PW를 치면 MySQL사용할 수 있도록 화면이 나온다.
- 임의로 명령어 'create databases board_ex'를 쳐보자.(따옴표는 치면 안됨. databases 복수임).
- 그럼 database가 만들어지는데 잘 만들어 졌는지 'show databases'를 눌러 잘 들어갔나 확인해 보자.
- 아주 잘 들어갔다.
- 그다음은 DataSource를 설정해 보자.
- 설정 방법은 application.properties를 이용하거나, @Bean과 같은 어노테이션을 이용하거나, YAML을 이용하는 방법이 있다.
- 우리는 application.properties를 이용해 설정을 해보자.
- 프로젝트 'src/main/resources/application.propertis를 띄워 보자.
- 처음엔 빈 백지 상태일 텐데 다음 4줄을 추가해 보자.
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/board_ex?useSSL=false
spring.datasource.username=root
spring.datasource.password=1111
- username과 password는 본인이 mysql설치시 생성했던 정보를 입력하면 된다.
- password가 없다면 빈칸으로 두자.
- 자 이제 한번 실행해 보면 정상으로 프로젝트가 실행되는 것을 볼 수 있다.
스프링 부트도 나름 설정아닌 설정을 해주었는데, 스프링 부트를 사용하지 않았을 때를 생각해보면 정말 설정걱정 없이 개발에 집중할 수 있게 되었다.
그럼 끝~!!
윈도우 프로그래밍과 java 어플리케이션 개발 과정 중, DB를 사용하기 위해 이런 저런 환경설정으로 매우 많은 번거로움이 있었다. JPA를 알게 된 이후로 이 모든 설정 및 쿼리 사용에 대한 부담감이 완전 줄어 든 데에 Spring을 만든사람에게 박수를 보내고 싶다.
자 그럼 이번 시간은 JPA가 무엇이고, JPA를 사용하기위한 환경설정을 알아보자.
1. JPA소개
- Spring Data JPA는 JPA(Java Persistence API)란 기술을 스프링에서 개발할 수 있도록 돕는 라이브러리다.
- 다양한 데이터베이스에 종속적인 SQL문 없이도 개발이 가능해졌다.
- Java를 이용해 데이터 관리 기법의 하나의 스펙 표준이다.
- JPA를 구현한 구현체 중 스프링 부트에선 'Hibernate'를 이용한다.
- JPA를 이용하면 Java로 작성된 클래스, 객체, 데이터베이스 테이블, 레코드를 자동으로 관리된다.
2. 용어를 알아보자
- 엔티티(Entity) : 데이터베이스상 데이터로 관리하는 대상. JPA에선 Java를 이용해 엔티티 관리하는데, 엔티티 타입의 존재는 클래스이다.
- 엔티티매니저 : 자신이 관리해야 하는 엔티티 객체들을 '영속컨텍스트'란 곳에 넣어 객체들의 생사를 관리한다.
- 영속 컨텍스트 : JPA가 엔티티 객체들을 모아두는 공간이다. 다음 상태가 있다.
1) 비영속(New) : Java 영역에 객체만 존재하고, 데이터베이스와 연동이 없는 상태.
2) 영속(Managed) : 데이터베이스에 저장되고 메모리상에도 존재. 객체가 영속 컨텍스트에 들어가고 id(PK)로 엔티티 객체를 꺼내 사용할 수 있다.
3) 삭제(Removed) : 데이터베이스상에서 삭제된 상태
4) 준영속(Detached) : 영속 컨텍스트에서 객체를 꺼내 사용하는 상태.
3. Spring Data JPA 특징
- 기존에 그냥 JPA를 통해 개발을 했었다.
- JPA는 EntityManager를 이용해 '영속성'을 관리했다.
- EntityManager를 이용해 객체를 보관(persist())한다.
- 이를 사용하기 위해선 EntityManagerFatory를 생성하고, 이것으로 EnriryManager를 만들고, 또 이 사용이 끝나면 닫아줘야 하는 번거로움이 있었다.
- Spring Data JPA는 이러한 번거로움 없어졌다.
- 동적으로 인터페이스를 구현하는 클래스를 만들어내는 방식(동적프록시)를 이용해 인터페이스를 구현한 클래스를 작성하지 않아도 된다.
4. 프로젝트를 생성해 보자.
- 먼저 File --> New --> Project --> Spring Initalizr를 클릭하고 Next를 누르자.
- 해당 프로젝트 명을 설정하고 메이븐 프로젝트로 만들고 다음을 누르자.
- Dependecies를 추가하는게 나오는데, DevTools, Lombock, Web, 타임리프, JPA, MYSQL을 선택하고 Next를 누르자.
- 다음 프로젝트가 완성되고 실행을 누르면 에러 메시지가 나오면서 실행이 안된다.
- 아니 설정 다 한거 같은데 왜 안되는 것일까??
- 스프링 부트가 자체적으로 자동 설정을 구성하기 떄문인데, 스프링 부트가 동작할 때 JDBC 등과 같은 라이브러리가 포함되 있으면 라이브러리를 이용해 필요한 객체를 구성하려 하기 때문이다.
- 데이터 베이스 관련 설정이 없었음로 이를 추가해 보자.
- 필요한 데이터베이스를 구성하고 DataSource를 지정해 주도록 하자.
- MySql 설치는 친절한 블로거님들이 많으므로 '윈도우or맥 Mysql설치'를 검색해 설치를 진행하자.
- 설치가 다 되었으면 MySQL 터미널에 접속해 보자.
- 해당 ID, PW를 치면 MySQL사용할 수 있도록 화면이 나온다.
- 임의로 명령어 'create databases board_ex'를 쳐보자.(따옴표는 치면 안됨. databases 복수임).
- 그럼 database가 만들어지는데 잘 만들어 졌는지 'show databases'를 눌러 잘 들어갔나 확인해 보자.
- 아주 잘 들어갔다.
- 그다음은 DataSource를 설정해 보자.
- 설정 방법은 application.properties를 이용하거나, @Bean과 같은 어노테이션을 이용하거나, YAML을 이용하는 방법이 있다.
- 우리는 application.properties를 이용해 설정을 해보자.
- 프로젝트 'src/main/resources/application.propertis를 띄워 보자.
- 처음엔 빈 백지 상태일 텐데 다음 4줄을 추가해 보자.
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/board_ex?useSSL=false
spring.datasource.username=root
spring.datasource.password=1111
- username과 password는 본인이 mysql설치시 생성했던 정보를 입력하면 된다.
- password가 없다면 빈칸으로 두자.
- 자 이제 한번 실행해 보면 정상으로 프로젝트가 실행되는 것을 볼 수 있다.
스프링 부트도 나름 설정아닌 설정을 해주었는데, 스프링 부트를 사용하지 않았을 때를 생각해보면 정말 설정걱정 없이 개발에 집중할 수 있게 되었다.
그럼 끝~!!
댓글
댓글 쓰기