JPA
-
데이터를 저장하거나 조회하거나 수정하는 등의 기능을 구현해야 한다.
-
웹 서비슨느 데이터를 처리할 때 대부분 데이터베이스를 사용
-
데이터베이스를 사용하려면 SQL쿼리문을 작성하고 실행해야한다.
-
ORM(Object relational mapping)을 이용하면 자바 문법만으로 db다룰 수 있다.
-
ORM을 사용하면 쿼리를 직접 작성하지 않아도 db의 데이터를 처리할 수 있다.
ORM vs SQL쿼리
- question 테이블
SQL
insert into question (subject, content) values ("안녕하세요, 가입 인사드립니다 ^^");
ORM
Question q1 = new Question();
q1.setSubject("안녕하세요");
q1.setContent("가입 인사드립니다 ^^");
this.questionRepository.save(q1);
Question q2 = new Question();
q2.setSubject("질문 있습니다");
q2.setContent("ORM이 궁금합니다");
this.questionRepository.save(q2);
- 코드에서 Question은 자바 클래스, 이처럼 데이터를 관리하는데 사용하는 ORM클래스를 엔티티(Entity)라고 한다.
- ORM을 사용하면 내부에서 SQL쿼리를 자동으로 생성해준다.
- db 종류에 상관없이 일관된 코드를 유지할 수 있어 유지 보수가 좋다.
- 내부에서 쿼리를 생성해주기에 개발자가 달라도 통일된 쿼리를 작성하여 오류 줄임
JPA란?
- JPA는 자바 진영에서 ORM의 기술 표준으로 사용하는 인터페이스 모음
- JPA는 인터페이스이다. 따라서 인터페이스를 구현하는 실제 클래스가 필요
- implementation 'org.springframework.boot:spring-boot-starter-data-jpa' 그레들에 추가해야한다.
- properties에 추가
# JPA
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=update
H2데이터베이스
-
build.gradle에 runtimeonly로 작성
-
runtimOnly란 해당 라이브러리가 런타임시에만 필요한 경우에 사용
-
컴파일시에만 필요한 경우에는 compileOnly사용
-
- spring.h2.console.enabled - H2 콘솔의 접속을 허용할지의 여부 true
- spring.h2.console.path - 콘솔 접속을 위한 URL 경로이다.
- spring.datasource.url - 데이터베이스 접속을 위한 경로이다.
- spring.datasource.driverClassName - 데이터베이스 접속시 사용하는 드라이버이다.
- spring.datasource.username - 데이터베이스의 사용자명이다. (사용자명은 기본 값인 sa로 설정한다.)
- spring.datasource.password - 데이터베이스의 패스워드이다. 로컬 개발 용도로만 사용하기 때문에 패스워드를 설정하지 않았다.