프레임워크와 라이브러리/ORM

[ORM] 객체와 데이터베이스의 간극을 메우는 기술

Dachaes 2025. 4. 11. 12:43
728x90
반응형

ORM(Object-Relational Mapping) 

백엔드 개발을 하다 보면 객체 지향 언어와 관계형 데이터베이스(RDB) 사이의 언어 장벽을 실감하게 됩니다. 하나는 객체 기반이고, 다른 하나는 테이블 기반이기 때문이죠. 이 둘의 불일치를 매끄럽게 연결해주는 기술이 바로 ORM(Object-Relational Mapping)입니다. 이 글에서는 ORM의 개념, 장단점, 동작 방식, 그리고 대표적인 ORM 프레임워크를 설명합니다.

 


1.  ORM이란?

ORM(Object-Relational Mapping)은 프로그래밍 언어의 객체(Object)와 데이터베이스의 테이블(Row/Column 구조) 사이를 매핑(Mapping)해주는 기술입니다.

쉽게 말해, 자바, 파이썬 같은 객체 지향 언어에서 사용하는 클래스와 객체를 자동으로 SQL 테이블에 저장하고 불러오는 도구라고 할 수 있습니다.

 


2.  왜 ORM이 필요한가?

프로그래밍 언어와 데이터베이스는 철학이 다릅니다.

측면 객체 지향 프로그래밍 관계형 데이터베이스
데이터 구조 클래스(Class), 객체(Object) 테이블(Table), 행(Row)
관계 표현 참조(Reference) 외래 키(Foreign Key)
접근 방법 메서드 호출 SQL 쿼리
설계 철학 캡슐화, 상속, 다형성 정규화, 관계, 제약조건

이러한 차이로 인해 SQL을 직접 작성해서 객체에 데이터를 매핑하는 작업은 반복적이고 오류가 발생하기 쉽습니다.
ORM은 이 매핑 작업을 자동화하여, 코드의 간결성과 유지보수성을 높여줍니다.

 


3.  ORM의 기본 원리

ORM은 다음과 같은 과정을 통해 동작합니다:

a.  엔티티 정의

  • 객체(예: User 클래스)를 정의하고, 이것이 어떤 테이블과 매핑될지 지정합니다.

b.  매핑 설정

  • 클래스의 필드와 테이블의 컬럼을 연결합니다.

c.  동기화

  • 객체 상태의 변경을 감지하고, 이를 SQL로 변환해 DB에 반영합니다.

d.  쿼리 추상화

  • 객체 중심의 쿼리 언어(예: JPQL, HQL)를 사용하여 SQL 없이 데이터 조회가 가능하게 합니다.

 


4.  예제 코드: ORM이 없는 경우 vs ORM을 사용하는 경우

a.  직접 SQL로 데이터 저장

Connection conn = DriverManager.getConnection(...);
PreparedStatement ps = conn.prepareStatement("INSERT INTO user (id, name) VALUES (?, ?)");
ps.setLong(1, user.getId());
ps.setString(2, user.getName());
ps.executeUpdate();

b.  ORM (JPA) 사용 시

User user = new User();
user.setId(1L);
user.setName("홍길동");
entityManager.persist(user);
  • 단순히 persist() 한 줄이면 끝!
  • 나머지는 ORM이 알아서 처리해줍니다.

 


5.  ORM의 장점과 단점

장점

  • 생산성 향상 : SQL 작성이 줄어들고, CRUD 코드가 간결해짐
  • 유지보수 용이 : 객체 중심의 코드 구조로 직관적인 설계 가능
  • DB 독립성 : SQL에 종속되지 않아 DB 교체가 쉬움
  • 객체 지향 개발 철학 유지 : 비즈니스 로직과 데이터 접근 로직이 분리됨

단점과 주의사항

  • 복잡한 쿼리는 한계 : 복잡한 JOIN, 성능 튜닝은 SQL이 더 유리
  • N+1 문제 : 연관 관계 조회 시 쿼리 폭발 현상 발생 가능
  • 추상화의 비용 : 내부 동작을 완전히 이해하지 않으면 디버깅이 어려울 수 있음
  • 성능 튜닝 필요 : 지연 로딩, 캐시 전략, 페치 전략 등 추가 학습 필요

 


6.  대표적인 ORM 프레임워크

언어 ORM 프레임워크
Java JPA, Hibernate, MyBatis(부분적 ORM)
Python SQLAlchemy, Django ORM
JavaScript TypeORM, Sequelize
Ruby ActiveRecord (Rails)
PHP Doctrine ORM

 


7.  마무리

ORM은 객체 지향 프로그래밍과 관계형 데이터베이스 사이의 간극을 효과적으로 줄여주는 강력한 도구입니다. 다만, 마법 같은 기능 뒤에는 성능 이슈나 복잡한 내부 동작이 숨어 있으므로, 기본 개념과 원리를 정확히 이해하고 사용하는 것이 중요합니다.

함께 보면 좋은 자료

블로그 글 :

 

[JPA] 객체와 데이터베이스를 잇는 다리

JPA(Java Persistence API) JPA(Java Persistence API)는 자바 애플리케이션에서 데이터베이스와의 상호작용을 단순하고 직관적으로 만들어주는 ORM 기술입니다. 복잡한 SQL을 직접 작성하지 않아도 객체 중심

dachaes-devlogs.tistory.com

 


728x90
반응형