728x90
✅ ORM이란?
🔸 ORM = Object Relational Mapping
- Object: 자바 객체 (User, Post, Product 같은 클래스)
- Relational: 관계형 데이터베이스 (MySQL, PostgreSQL, Oracle 등)
- Mapping: 서로 연결(Mapping) 한다는 뜻
즉, 자바 객체와 데이터베이스 테이블을 자동으로 매핑해주는 기술
✅ 왜 ORM이 필요해?
전통적인 방식(JDBC)에서는 데이터베이스에 직접 SQL을 짜서 주고받았어야 했어:
// JDBC 방식
Connection conn = getConnection();
PreparedStatement stmt = conn.prepareStatement("SELECT * FROM user WHERE id = ?");
stmt.setLong(1, 1L);
ResultSet rs = stmt.executeQuery();
➡ 이런 코드 너무 복잡하고, 실수도 많고, 재사용하기도 어려움 😩
그런데 ORM을 쓰면?
User user = entityManager.find(User.class, 1L);
➡ 끝! 자동으로 SQL 짜고 실행하고 객체로 바꿔줌. 👏
✅ ORM의 대표 기술들
기술 | 설명 |
JPA | 자바 ORM을 위한 공식 인터페이스 (Java 표준) |
Hibernate | JPA의 가장 대표적인 구현체 (실제로 일하는 애) |
Spring Data JPA | JPA를 더 쉽게 쓸 수 있게 도와주는 Spring 프레임워크 |
✅ 그럼 정리하면...
- ORM은 개념이자 기술 전반을 말해
- JPA는 ORM을 위한 표준 인터페이스
- Hibernate는 JPA를 실제로 구현한 라이브러리
- Spring Data JPA는 JPA를 더 쉽게 쓸 수 있게 도와주는 도구
🔁 관계 요약!
ORM (개념)
└─ JPA (자바 ORM 표준)
└─ Hibernate (JPA 구현체)
└─ Spring Data JPA (JPA + Hibernate를 더 쉽게!)
✅ ORM(JPA)을 Spring에서 사용하기 위한 초기 세팅
1️⃣ 의존성 추가 (build.gradle 또는 pom.xml)
// build.gradle
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'com.h2database:h2' // 테스트용 인메모리 DB (또는 MySQL, PostgreSQL 등)
}
2️⃣ application.yml 또는 application.properties 설정
spring:
datasource:
url: jdbc:h2:mem:testdb
username: sa
password:
driver-class-name: org.h2.Driver
jpa:
hibernate:
ddl-auto: update # create, update, validate 등
show-sql: true # 콘솔에 SQL 보이기
properties:
hibernate:
format_sql: true
✅ ddl-auto 옵션 설명:
옵션 | 설명 |
create | 실행할 때마다 테이블 새로 생성 |
update | 변경된 엔티티 정보로 테이블 수정 |
validate | 테이블 구조 확인만, 수정 안 함 |
none | 아무것도 안 함 |
✅ ORM 사용 흐름 (기본 예제)
예를 들어 "User"라는 사용자를 저장하고 싶다고 해보자!
🔸 1. Entity 클래스 만들기
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
@Entity
@Getter @Setter
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // auto-increment
private Long id;
private String username;
private int age;
}
✅ @Entity: 이 클래스는 테이블과 매핑된다
✅ @Id: 기본 키
✅ @GeneratedValue: 자동 생성 전략
🔸 2. Repository 인터페이스 만들기
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
// 기본 CRUD는 자동 제공
// 여기에 메서드 이름만으로 쿼리를 추가로 만들 수 있음
List<User> findByUsername(String username);
}
✅ JpaRepository를 상속받으면
👉 CRUD, 페이징, 정렬, 커스텀 쿼리 등을 자동으로 사용할 수 있음
🔸 3. Service 또는 Controller에서 사용
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class UserService {
private final UserRepository userRepository;
public void createUser() {
User user = new User();
user.setUsername("지은");
user.setAge(24);
userRepository.save(user); // SQL 없이 저장!
}
}
✅ 핵심 정리
구성 | 요소역할 |
@Entity | 자바 클래스 → DB 테이블로 매핑 |
JpaRepository | ORM 기반으로 DB 접근하는 인터페이스 (SQL 거의 안 씀) |
@Service, @Controller | 로직과 사용자 요청 처리, 리포지토리 사용 |
✅ ORM 시작 요약 흐름
🧑💻 자바 클래스 작성 (@Entity)
⬇️
📄 테이블로 자동 매핑 (ORM)
⬇️
📦 Repository로 DB 접근 (SQL 직접 작성 X)
⬇️
🌐 Controller/Service에서 호출
이제 ORM으로 자바 객체만 잘 만들고 save(), findById() 같은 메서드를 쓰면
💥 알아서 SQL 날리고, 결과를 객체로 변환해줌!
728x90
'프로그래밍 > Spring' 카테고리의 다른 글
🌿 JPA의 핵심! Persistence Context(영속성 컨텍스트) 완벽 정리 (0) | 2025.04.07 |
---|---|
🌱 Spring Data JPA 완전 정복 가이드 (0) | 2025.04.04 |
JDBC란? (0) | 2025.04.04 |
REST API란? (0) | 2025.04.04 |
http응답 상태 코드 참조 사이트 (0) | 2025.04.03 |