ORM 이란?
Object-Relational Mapping, 객체지향 프로그래밍 언어와 관계형 DB간의 데이터 변환 기법
객체와 관계형 데이터베이스의 테이블을 자동으로 매핑하는 기술
특징
- 데이터베이스 종류에 관계없이 일관된인터페이스 제공
- ORM은 인터페이스입니다.
스프링 입장에서 DB가 MySql인지 Postgresql인지 Oracle인지 알지 못해도 상관 없습니다,
ORM을 사용한다면, 추상화된 인터페이스를 활용하여 DB의 종류와 상관없이 코드 작서을 할 수있습니다.
- ORM은 인터페이스입니다.
- 개발자가 직접 SQL을 작성하지 않고도 데이터베이스 조작 가능( SQL을 작성하지 않고 자바코드로 데이터베이스를 조작할 수 있다.)
ORM을 사용한 패러다임 불일치 해결
관계형 데이터베이스의 테이블 기반 구조 와 객체지향 프로그래밍의 객체 기반 구조 간의 패러다임 차이.
관계형 데이터베이스의 테이블 기반 구조
Movie 테이블
| id | title |
| 1 | 파묘 |
| 2 | 황해 |
MovieReview 테이블
| id | content | movie_id |
| 1 | 파묘 엄청 재밌어요! | 1 |
| 2 | 파묘 또 보러 갈거임ㅋㅋ | 1 |
데이터 베이스 한칸에 객체 , 리스트 등이 들어갈수 없다.
이런 식의 테이블은 불가능! >>>>
| id | title |
| 1 | 파묘, 황해, 범죄도시 |
| 2 | 기생충, 히말라야, 독전, 명량, 괴물 |
객체지향 프로그래밍의 객체 기반 구조
public class Movie {
private Long id;
private String title;
private List<MovieReview> movieReviews;
}
public class MovieReview {
private Long id;
private String content;
private Movie movie;
}
필드값에 리스트, 객체 형식이 들어갈 수 있다!
데이터베이스의 데이터(한 칸)에는 String 혹은 Integer 같은 단일 값만 넣을 수 있습니다.
하지만, 자바 코드에서는 데이터(필드 값)에 객체나 리스트까지도 모두 넣을 수 있습니다.
이게 바로 대표적인 패러다임의 불일치입니다
이 외에 데이터 타입, 데이터 관계 표현 방식 등 애초에 DB와 Java는 다르기 때문에 모든 것이 어긋나게 되는데 이를 ORM이 중간에 interface로 존재하여 여러 패러다임의 불일치를 해결해줍니다.
따라서 ORM을 사용한다면, DB를 마치 자바의 일부인 것처럼 편하게 자바 코드로 다룰 수 있게 됩니다.
JPA
JPA란 객체지향 프로그래밍과 관계형 DB간의 패러다임 불일치 문제를 해결 하고, DB작업을 객체 지향적으로 할 수 있도록 지원해주는 ORM이다,SQL을 직접 작성하지 않고도 객체 조작을 통해 DB작업을 수행할 수 있도록 표준화된 인터페이스를 제공한다.
만약 JDBC를 이용해서 개발을한다면 아래와 같은 복잡한 로직을 사용해야 할 것입니다
// JDBC
public class UserDaoJdbc {
public User findByName(String name) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
User user = null;
try {
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/hello", "user", "password");
String sql = "SELECT id, name, email, age FROM users WHERE name = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, name);
rs = pstmt.executeQuery();
if (rs.next()) {
user = new User();
user.setId(rs.getLong("id"));
user.setName(rs.getString("name"));
user.setEmail(rs.getString("email"));
user.setAge(rs.getInt("age"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) rs.close();
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return user;
}
}
*JDBC : 자바 프로그램에서 데이터베이스에 접속하고 SQL문을 실행하기 위한 도구.
하지만 JPA로 코드를 작성할 경우
public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findByName(String name);
}
이렇게 훨씬 간단하고 사용하기 편한 것을 확인 할 수 있습니다.
JPA는 인터페이스 입니다, 그럼 그 구현체는 무엇일까요? 보통 Hibernate 라는 것을 사용합니다.
즉 Hibernate는 구현체이므로 Hibernate 설정(=방언, dialect)을 통해 어떤 RDBMS를 사용할지 결정할 수 있습니다.

'TIL' 카테고리의 다른 글
| github - 협업준비하기. (0) | 2026.02.15 |
|---|---|
| SOLID 원칙 (1) | 2026.02.06 |
| 개발자 대화법 (0) | 2026.02.03 |
| 데이터베이스 (0) | 2026.01.30 |
| 인덱스가 많아지면 수정 삽입등 성능에 영향이 미치는 이유 (0) | 2026.01.30 |