ORM(Object-Relational Mapping)이란?
ORM(Object-Relational Mapping)은 객체 지향 프로그래밍(Object-Oriented Programming, OOP)의 객체와 관계형 데이터베이스(Relational Database)의 데이터를 자동으로 매핑(연결)해 주는 기술입니다.

출처 - SNL
왜 필요한가요?
자바와 같은 객체 지향 언어는 데이터를 '객체'의 형태로 다루는 반면, 데이터베이스는 데이터를 '테이블'의 형태로 다룹니다.
이 둘은 데이터를 다루는 방식(패러다임)이 서로 다릅니다.
객체 지향 프로그래밍: 클래스와 객체를 통해 데이터를 연결하고 참조합니다. (그래프 형태)
관계형 데이터베이스: 테이블, 행, 열로 데이터를 구조화하고 SQL(Structured Query Language)을 통해 조작합니다.
이러한 '패러다임의 불일치' 때문에 개발자는 객체 데이터를 데이터베이스에 저장하거나 데이터베이스에서 가져올 때 복잡한 SQL 쿼리문을 직접 작성해야 하는 번거로움이 있었습니다.

ORM의 역할
ORM은 이 패러다임 불일치 문제를 해결해 줍니다.
개발자가 객체를 다루는 것처럼 코드를 작성하면, ORM이 내부적으로 해당 객체를 데이터베이스의 테이블과 자동으로 매핑하여 SQL 쿼리문을 생성하고 실행해 줍니다.
데이터베이스에서 데이터를 가져올 때도, ORM이 테이블 데이터를 자동으로 객체로 변환해 줍니다.

ORM의 장점
생산성 향상:
개발자가 SQL 쿼리문을 직접 작성하는 시간과 노력을 줄여주어 비즈니스 로직 개발에 더 집중할 수 있게 합니다.
유지보수 용이:
데이터베이스 변경 시에도 객체 코드만 수정하면 되는 경우가 많아 유지보수가 쉬워집니다.
객체 지향적인 코드:
SQL 없이 객체만으로 코드를 작성할 수 있어 객체 지향적인 설계가 가능해집니다.
DBMS 종속성 감소:
데이터베이스 시스템(Oracle, MySQL 등)을 변경하더라도 코드의 수정이 적거나 없어 유연성이 높아집니다.

ORM의 예시 (자바에서)
자바 진영에서 가장 대표적인 ORM 기술 표준은 **JPA(Java Persistence API)**입니다.
JPA는 ORM을 위한 '명세(Specification)'이고, 이 JPA를 구현한 실제 라이브러리(구현체)로는 **Hibernate(하이버네이트)**가 가장 널리 사용됩니다.
스프링 프레임워크에서는 Spring Data JPA를 통해 JPA와 Hibernate를 더욱 편리하게 사용할 수 있습니다.

SQL vs JPA(ORM) 예제 비교
1. 기본 CRUD 작업
SELECT * FROM users WHERE id = 1;
sql
SQL 쿼리 (SELECT):
// 엔티티 클래스 정의
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
// Getter, Setter 생략
}
// 데이터 조회 코드
User user = entityManager.find(User.class, 1L);
java
JPA(ORM) 자바 코드:
2. 데이터 삽입 예제
INSERT INTO users (name, email) VALUES ('홍길동', 'hong@example.com');
sql
SQL 쿼리 (INSERT):
User newUser = new User();
newUser.setName("홍길동");
newUser.setEmail("hong@example.com");
entityManager.persist(newUser);
java
JPA(ORM) 자바 코드:
3. 데이터 수정 예제
UPDATE users SET name = '김철수', email = 'kim@example.com' WHERE id = 1;
sql
SQL 쿼리 (UPDATE):
User user = entityManager.find(User.class, 1L);
user.setName("김철수");
user.setEmail("kim@example.com");
// 별도의 update 메서드 호출이 필요 없음 (변경 감지 기능)
java
JPA(ORM) 자바 코드:
4. 데이터 삭제 예제
DELETE FROM users WHERE id = 1;
sql
SQL 쿼리 (DELETE):
User user = entityManager.find(User.class, 1L);
entityManager.remove(user);
java
JPA(ORM) 자바 코드:
5. 조건 검색 예제 (JPQL 사용)
SELECT * FROM users WHERE name LIKE '%길동%' ORDER BY id DESC;
sql
SQL 쿼리:
String jpql = "SELECT u FROM User u WHERE u.name LIKE :name ORDER BY u.id DESC";
List<User> users = entityManager.createQuery(jpql, User.class)
.setParameter("name", "%길동%")
.getResultList();
java
JPA(ORM) 자바 코드:
이처럼 ORM을 사용하면 SQL 쿼리를 직접 작성하지 않고, 자바 객체를 통해 데이터베이스를 조작할 수 있어 객체 지향적인 프로그래밍이 가능해집니다.

결론
자바 ORM은 객체 지향 언어와 관계형 데이터베이스 간의 패러다임 불일치를 해결하여, 개발자가 SQL 쿼리 작성의 부담 없이 객체 지향적인 방식으로 데이터베이스를 다룰 수 있게 해주는 핵심 기술입니다.
이를 통해 개발 생산성을 높이고 유지보수를 용이하게 만듭니다.

'New' 카테고리의 다른 글
| 데이터베이스의 구성 요소 (3) | 2025.08.15 |
|---|---|
| DBMS (0) | 2025.08.14 |
| URL 매핑이란? (2) | 2025.08.14 |
| GET / POST (1) | 2025.08.14 |
| localhost:8080 (2) | 2025.08.14 |