ORM(Object-Relational Mapping)이 많이 사용되는 이유

ORM(Object-Relational Mapping)이 많이 사용되는 이유

ORM은 객체와 데이터베이스의 관계를 자동으로 매핑해주는 기술로, JPA, Hibernate, MyBatis 등의 프레임워크가 대표적입니다.
최근 ORM이 널리 사용되는 이유는 다음과 같습니다.


1️⃣ 생산성 향상

SQL 작성 최소화

  • ORM을 사용하면 대부분의 데이터베이스 조작을 객체 지향 코드(Java, Python 등)로 작성할 수 있습니다.
  • 개발자가 SQL을 직접 작성하는 부담이 줄어들고, CRUD 작업이 간편해집니다.

자동 매핑 및 테이블 관리

  • 엔터티 클래스를 정의하면, 데이터베이스 테이블과 자동으로 매핑됩니다.
  • @Entity, @Table, @Column 등의 어노테이션을 활용하면 테이블을 쉽게 설계할 수 있습니다.

📌 예제

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, length = 100)
    private String name;

    @Column(unique = true)
    private String email;
}
  • 위 코드만 작성하면 자동으로 users 테이블이 생성됩니다.

2️⃣ 유지보수 용이

객체 지향적인 코드 유지 가능

  • SQL 중심의 개발 방식은 복잡한 쿼리를 관리하기 어렵습니다.
  • ORM을 사용하면 객체 중심으로 로직을 설계하여 코드의 가독성이 향상됩니다.

데이터베이스 변경 시 수정 최소화

  • DB 스키마가 변경되더라도, 엔터티 클래스만 수정하면 되므로 유지보수가 편리합니다.

📌 예제 (필드 추가 후 마이그레이션)

@Column(nullable = false)
private String phoneNumber;
  • 기존 DB에 phoneNumber 컬럼이 없더라도, ORM 마이그레이션을 통해 자동 반영할 수 있습니다.

3️⃣ 다양한 데이터베이스 지원

DB 벤더(Oracle, MySQL 등)에 독립적

  • ORM은 DB에 종속되지 않고 다양한 데이터베이스에서 동일한 코드로 동작할 수 있습니다.
  • DB 변경 시 SQL을 다시 작성할 필요 없이 설정만 변경하면 됩니다.

📌 예제 (JPA 설정)

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
  • 위 설정을 PostgreSQL로 변경하면 ORM 코드 수정 없이 그대로 사용 가능합니다.

4️⃣ 성능 최적화 기능 제공

Lazy Loading & Eager Loading

  • 필요할 때만 데이터를 가져오는 Lazy Loading을 지원하여 불필요한 쿼리 실행을 방지합니다.

캐싱(Caching) 활용

  • 1차 캐시와 2차 캐시를 제공하여 동일한 데이터를 여러 번 조회할 때 DB 부하를 줄여줍니다.

JPQL (Java Persistence Query Language) 지원

  • ORM이 제공하는 JPQL을 활용하면 객체 기반으로 SQL과 유사한 쿼리를 작성할 수 있습니다.

📌 예제 (JPQL)

@Query("SELECT u FROM User u WHERE u.name = :name")
List<User> findByName(@Param("name") String name);

5️⃣ 트랜잭션 관리 용이

@Transactional을 통한 자동 롤백

  • ORM을 사용하면 트랜잭션 처리를 간단하게 관리할 수 있습니다.
  • @Transactional을 사용하면 예외 발생 시 자동으로 롤백됩니다.

📌 예제 (Spring JPA)

@Transactional
public void updateUserEmail(Long userId, String newEmail) {
    User user = userRepository.findById(userId).orElseThrow();
    user.setEmail(newEmail);
}
  • 예외 발생 시 updateUserEmail() 메서드는 자동 롤백됩니다.

🚀 요약

SQL 작성 부담 감소객체 지향 코드로 DB 작업 가능
유지보수 용이엔터티 클래스 수정만으로 테이블 변경 가능
다양한 DB 지원DBMS 변경 시 코드 수정 최소화
성능 최적화 가능Lazy Loading, Caching 지원
트랜잭션 관리 간편@Transactional로 자동 롤백


ORM을 사용하면 생산성을 높이고 유지보수를 쉽게 하며, 데이터베이스에 대한 종속성을 줄일 수 있습니다.
그러나 직접 SQL을 최적화하는 것이 더 유리한 경우도 있으므로, ORM과 SQL을 적절히 조합하여 사용하는 것이 중요합니다. 😊

profile
AI 답변 글을 주로 올립니다.

0개의 댓글