일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 구글
- @Query
- @Entity
- 데이터베이스
- SEO
- 리액트오류
- Polylang
- GET
- mergeattributes()
- firebase
- addflashattribute()
- 플러그인
- JPA
- HttpSession
- GA4
- 인텔리제이
- Thymeleaf
- router
- linkedhastset
- Login
- set
- useEffect
- addallattributes()
- ChatGPT
- configureviewresolvers()
- 워드프레스
- @Repository
- post
- 구글애널리틱스
- 구글알고리즘
- Today
- Total
개발천재
[Spring Boot] JPA와 Hibernate 본문
Hibernate 이해하기
Hibernate는 자바에서 데이터베이스와 객체를 연결해주는 프레임워크이다. 데이터를 자바 객체(클래스 형태)로 다루면서, 이를 데이터베이스의 테이블과 자동으로 매핑해주는 역할을 한다. 쉽게 말하면, 자바 객체와 데이터베이스 간의 번역기라고 할 수 있다.
예를 들어 자바 객체는 언어를 잘하는 사람이고, 데이터베이스는 다른 언어를 사용하는 사람이라고 생각해 보자. 이 두 사람은 서로 소통할 필요가 있지만, 언어가 다르기 때문에 대화가 되지 않는다. 이 두 사람 사이에 자동 번역기 역할을 하는 것이 Hibernate이다. 자바 객체가 이야기한 내용을 데이터베이스가 이해할 수 있도록 변환해주고, 데이터베이스에서 나온 결과를 자바 객체로 다시 변환해주는 역할을 하는 것이다.
Hibernate를 사용하지 않으면 자바 객체를 데이터베이스에 저장하거나 조회할 때, SQL 쿼리를 직접 작성해야 한다.
예를 들어, 데이터를 객체 형태로 다루고 싶다면, 매번 SQL을 작성하고 결과를 자바 객체로 변환하는 작업을 수동으로 해야 한다. 그래서 사용하는 것이다.
Hibernate 사용하기
프로젝트에 Hibernate 추가하기
Spring Boot 프로젝트라면 build.gradle이나 pom.xml에 Hibernate 관련 라이브러리를 추가해야 한다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.mysql:mysql-connector-j'
}
application.properties에서 데이터베이스 연결 설정하기
데이터베이스 정보를 입력해야 Hibernate가 MySQL과 연결할 수 있다. 아래의 코드에서 ddl-auto=create은 테이블을 자동으로 만들어주는 것을 말한다. 여기에는 값이 총 4가지가 들어갈 수 있는데 create(신규 생성), validate(문법검증), update(변경 적용), none(아무것도 안함)이 있다. show-sql=true는 실행되는 SQL 쿼리를 확인할 수 있다.
#MySQL 연결 설정
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/member_db
spring.datasource.username=${USER_NAME}
spring.datasource.password=${USER_PASSWORD}
#Hibernate가 DB에 날리는 쿼리를 화면에 보여주기
spring.jpa.properties.hibernate.show_sql=true
#보여지는 쿼리를 이쁘게 포맷팅
spring.jpa.properties.hibernate.format_sql=true
#데이터베이스에 테이블 자동 생성
#DDL(Data Definition Language)
# create - 신규생성
# validate - 문법검증
# update - 변경 적용
# none-아무것도 안함
spring.jpa.hibernate.ddl-auto=create
spring.jpa.show-sql=true
⚠️ddl-auto=create는 기존 데이터를 없애고 새로운 테이블을 생성하기 때문에 개발 초기에만 주로 사용하고, 개발 중기 단계에서는 변경된 부분만 적용되도록 validate, update를 사용한다. 개발 마무리 단계에서는 none으로 바꾸고 배포한다.
매번 작업할 때마다 데이터가 사라진다면 ddl-auto가 create로 되어있지 않은지 확인!
@Entity로 테이블 만들기
@Entity는 이 클래스는 데이터베이스 테이블이라는 것을 의미하고 @Id는 기본키(Primary Key)를 지정하는 것을 말한다.
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
@Entity
public class User {
@Id
private Long id; // 기본키
private String username;
private String password;
}
Repository 만들어서 데이터 관리하기
JpaRepository를 사용하면 SQL 작성 없이 데이터를 관리할 수 있다.
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
}
save() : 데이터 저장
findAll() : 모든 데이터 조회
deleteById() : 데이터 삭제
Hibernate의 주요 기능
객체-관계 매핑 (ORM)
자바 객체와 데이터베이스 테이블 간의 매핑을 자동으로 처리해준다. 예를 들어, 자바 클래스와 테이블의 컬럼을 서로 연결해준다.
SQL 자동 생성
Hibernate는 자바 객체에 맞는 SQL 쿼리를 자동으로 만들어서 데이터베이스에 전달합니다. 즉, 자바 코드로 데이터를 처리하면 Hibernate가 이를 바탕으로 SQL을 자동으로 작성해준다.
데이터베이스 독립성
Hibernate는 데이터베이스 종류에 관계없이 동일한 코드로 작업할 수 있도록 도와준다. MySQL, Oracle, PostgreSQL 등 여러 데이터베이스에서 호환성을 보장한다.
캐시 기능
Hibernate는 캐시를 사용하여 자주 조회되는 데이터를 메모리에 저장해두고, 불필요한 데이터베이스 쿼리를 줄여 성능을 향상시킨다.
Hibernate 사용 시의 장점
1. 자동으로 SQL을 생성해주므로, SQL을 직접 작성할 필요가 없다.
Hibernate는 자바 코드로 작성한 내용을 바탕으로 자동으로 SQL 쿼리를 만들어준다. 개발자는 복잡한 SQL 문법을 직접 작성하지 않아도 되며, 자바 코드만으로 데이터베이스 작업을 할 수 있어 개발 시간이 줄어들고 실수도 줄일 수 있다.
2. 객체 지향 프로그래밍의 장점을 살릴 수 있어 자바 객체로 데이터를 다루기 쉽다.
Hibernate는 데이터베이스의 테이블을 자바 객체로 표현할 수 있다. 덕분에 개발자는 객체 지향적인 방법으로 데이터를 다룰 수 있고, 자바의 클래스, 상속, 관계 등을 활용하여 더 직관적이고 유연한 코드 작성이 가능하다.
3. 데이터베이스 간에 호환성 문제를 해결해주므로 같은 코드로 여러 데이터베이스에서 동작할 수 있다.
Hibernate는 MySQL, Oracle, PostgreSQL 등 다양한 데이터베이스를 지원한다. 한 번 작성한 Hibernate 코드는 데이터베이스를 바꿔도 그대로 사용할 수 있어 데이터베이스 변경 시에도 별도의 수정 작업이 줄어든다.
4. 성능 향상을 위한 캐시 기능을 제공하여 빠른 데이터 조회가 가능하다.
Hibernate는 캐시 기능을 제공하여, 자주 사용되는 데이터를 메모리에 저장해둔다. 덕분에 매번 데이터베이스에 접근할 필요가 없어 더 빠른 데이터 조회가 가능하고, 애플리케이션의 성능이 눈에 띄게 향상된다.
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity // 이 클래스는 데이터베이스 테이블과 매핑됨을 나타냄
public class User {
@Id
private Long id;
private String name;
// Getter, Setter
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Hibernate 설정 및 데이터 저장
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class Main {
public static void main(String[] args) {
// Hibernate 세션 팩토리 생성
SessionFactory factory = new Configuration()
.configure("hibernate.cfg.xml") // Hibernate 설정 파일
.addAnnotatedClass(User.class) // 매핑할 엔티티 클래스 지정
.buildSessionFactory();
// 세션 열기
Session session = factory.getCurrentSession();
try {
// 새로운 User 객체 생성
User user = new User();
user.setName("John Doe");
// 트랜잭션 시작
session.beginTransaction();
// User 객체 저장
session.save(user);
// 트랜잭션 커밋
session.getTransaction().commit();
} finally {
factory.close(); // 세션 팩토리 닫기
}
}
}
Hibernate는 자바 객체와 데이터베이스 간의 자동 변환기 역할을 한다. 데이터베이스에 저장된 데이터를 자바 객체로 다룰 수 있도록 돕고, SQL 쿼리를 자동으로 생성해준다. 또한 객체 지향적으로 데이터를 다룰 수 있게 해주며, 데이터베이스 독립성도 제공한다. Hibernate를 사용하면 SQL을 직접 작성하지 않고, 자바 코드로 데이터베이스 작업을 할 수 있어 효율적이고 직관적인 개발이 가능하다.
'개발 준비 > Spring Boot' 카테고리의 다른 글
[Spring Boot] Intercepter와 HandlerInterceptor (1) | 2025.02.18 |
---|---|
[Spring Boot] JPA에서 save()가 update 역할을 하는 이유 (1) | 2025.02.18 |
[Spring Boot] 인텔리제이에서 DB 정보 환경 변수 설정하기 (2) | 2025.02.17 |
[Spring Boot] Hibernate와 JPA: @Entity부터 @Table까지 한 번에 이해하기 (0) | 2025.02.17 |
[Spring Boot] 꼭 알아야 할 필수 프로퍼티 설정 총정리 (2) | 2025.02.17 |