ORM
🧩 ORM (Object-Relational Mapping)
ORM은 객체 지향 프로그래밍의 객체(Object)와 관계형 데이터베이스(RDBMS)의 테이블을 자동으로 연결(매핑, Mapping)해주는 기술입니다. 개발자는 복잡한 SQL 쿼리를 직접 작성하지 않고도, 자신이 사용하는 프로그래밍 언어의 객체를 다루듯이 데이터베이스 작업을 수행할 수 있습니다.
객체와 데이터베이스라는 서로 다른 두 세계 사이의 '통역사' 역할을 합니다.
🤔 ORM은 왜 필요한가?
객체 지향 프로그래밍에서는 모든 것을 객체로 다루지만, RDBMS는 데이터를 테이블 형태로 다룹니다. 이 둘 사이의 불일치(패러다임 불일치) 때문에, 개발자는 객체를 테이블에 저장하기 위해 반복적이고 지루한 SQL 변환 작업을 계속해야 합니다. (예: `INSERT`, `UPDATE` 쿼리 작성, `ResultSet`을 객체로 변환 등)
ORM은 이러한 기계적이고 반복적인 SQL 작업을 자동화하여, 개발자가 비즈니스 로직에 더 집중할 수 있도록 도와줍니다.
⚖️ ORM의 장단점
- 장점 :
> * 생산성 향상: 반복적인 SQL 작성 없이 객체지향적으로 코드 작성이 가능하여 개발 속도가 향상됩니다. > * 데이터베이스 비종속성: ORM이 데이터베이스별로 다른 SQL 문법을 처리해주므로, 데이터베이스를 교체하더라도 코드 수정이 최소화됩니다. > * 유지보수 용이성: SQL이 코드에서 분리되어 객체 중심으로 코드를 관리할 수 있습니다.
- 단점 :
> * 학습 곡선: ORM 프레임워크 자체의 동작 방식과 개념을 새로 학습해야 합니다. > * 복잡한 쿼리의 한계: 통계 처리나 매우 복잡한 JOIN 연산 등은 ORM만으로 구현하기 어렵거나, 비효율적인 쿼리가 생성될 수 있습니다. > * 성능 문제: ORM이 생성하는 쿼리가 개발자의 의도와 다르게 비효율적일 수 있으며, 이를 해결하기 위해서는 결국 SQL과 ORM의 내부 동작을 깊이 이해해야 합니다.
💡 개발자 핵심 Point
- 대표적인 ORM 프레임워크로는 Java의 JPA (Hibernate), Python의 'Django ORM', 'SQLAlchemy', Node.js의 'Sequelize' 등이 있습니다.
- ORM은 SQL을 대체하는 기술이 아니라, 보완하는 기술입니다. ORM을 사용하더라도, 성능 최적화나 문제 해결을 위해서는 SQL에 대한 이해가 반드시 필요합니다.
- ORM이 자동으로 생성하는 쿼리를 모니터링하고, 비효율적인 쿼리가 발견되면 직접 SQL을 작성(네이티브 쿼리)하여 성능을 개선하는 능력이 중요합니다.