ORM(Object Relational Mapping)
: 객체와 관계형 데이터베이스의 데이터를 자동으로 연결해주는 것
- 객체 지향 프로그래밍 : 클래스 사용
- 관계형 데이터베이스 : 테이블 사용 → 객체 모델과 관계형 모델 간의 불일치 존재
ORM 장단점
- 장점
- 객체지향적인 코드로 인해 더 직관적이고 로직에 집중할 수 있도록 함
- 재사용 및 유지보수의 편리성이 증가
- DBMS에 대한 종속성 감소
- 단점
ORM 프레임워크
- JAVA : JPA, Hibernate, EclipseLink, DataNucleus, Ebean 등
- C++ : ODB, QxOrm 등
- Python : Django, SQLAlchemy, Storm 등
- iOS : DatabaseObjects, Core Data 등
- .NET : NHibernate, DatabaseObject, Dapper 등
- PHP : Doctrine, Propel, RedBean 등
JPA : 자바 ORM기술에 대한 API 표준 명세를 의미
- JPA를 사용하기 위해서는 JPA를 구현한 Hibernate, EclipseLink, DataNucleus같은 ORM프레임워크를 사용해야함
JPA 동작방법
: JAVA가 JDBC API에 명령을 내리는 것이 아니라 JPA가 JDBC API를 사용해서 DB와 통신하고 SQL을 호출 및 반환
INSERT
- entity분석
- insert sql 생성
- JDBC API를 사용하여 SQL을 DB에 보내서 INSERT동작 실행
SELECT
-
entity의 매핑 정보를 바탕으로 적절한 select sql 생성
-
JDBC API를 사용하여 sql을 DB에 보내서 select동작 실행
-
DB로부터 결과 반환
-
결과를 객체에 모두 매핑
→ 쿼리가 JPA를 만들어 주기 때문에 object와 RDB간의 패러다임 불일치를 해결할 수 있음
Hibernate : JPA를 구현한 ORM 프레임워크
HQL(Hibernate Query Language)
- SQL과 매우 비슷하며 추가적인 컨벤션을 정의
- 완전히 객체 지향적이며 상속, 다형성, 관계 등의 객체지향의 강점 보유
- 자바 클래스와 property 이름을 제외하고는 대소문자 구분
- 쿼리 결과로 객체 반환, 프로그래머에 의해 생성되며 직접적으로 접근
- SQL에서는 지원하지 않는 페이지네이션이나 동적 프로파일링과 같은 향상된 기능 제공
- 여러 테이블을 작업할 때 명시적인 join 요구하지 않음
Hibernate 장단점
-
장점
-
객체지향적으로 데이터를 관리 가능
→ 비즈니스 로직에 집중할 수 있으며 객체지향 개발이 가능
-
테이블 생성, 변경, 관리가 쉬움
-
로직을 쿼리에 집중하기 보다는 객체 자체에 집중할 수 있음
-
단점
- SQL보다 다루기 어려움
- 의도치 않은 동작으로 인해 데이터 손실 발생 가능성 존재
- 성능상 문제가 있어 과부하 가능성 존재
Hibernate 동작방법
- Java Application내 Hibernate의 Configuration파일과 Hibernate XML Mapping파일을 사용하여 데이터베이스에 대한 특정 작업을 수행하는 지속성 논리를 작성하여 특정 클래스의 객체 생성
- Hibernate 프레임워크 내부의 Session Factory, Session, Transaction 등과 같은 많은 객체를 사용하여 Java Application과 상호작용
- JDBC, JTA, JNDI와 같은 기존 Java API를 통해서 데이터베이스로 이동하여 지속성 논리를 수행하는 상호작용
- DB와 상호작용
Hibernate 워크플로우

DBMS VS Hibernate
JDBC | Hibernate |
---|
코드에서 SQL 문 사용 | 코드에서 SQL 문 사용하지 않음 |
사용된 SQL이 특정 데이터베이스인 경우 다른 데이터베이스를 사용하면 코드 문제 발생 | SQL을 사용하지 않기 때문에 다른 데이터베이스로 쉽게 마이그레이션 가능 |
데이터베이스 테이블을 개체에 매핑하기 어려움 | 데이터베이스 테이블을 개체에 쉽게 매핑 |
connection, statement, resultset에 대한 보일러플레이트 코드 반복 필요 | 보일러플레이트 코드가 제거되어있음 |
데이터베이스 테이블이 수정되면, 즉 열이 추가되거나 삭제되면 테이블과 일치하도록 코드를 수정해야 합니다. | 코드는 데이터베이스 테이블이 수정되더라도 많은 수정이 필요하지 않습니다. |
코드가 객체지향적이지 않음 | 코드는 객체지향적임 |
테이블을 직접 쿼리를 수행하므로 성능이 우수 | JDBC 위에 있기 때문에 JDBC에 비해 속도가 느림 |
🏹Boilerplate code : 모든 코드를 작성하기 위해 항상 필요한 부분
Boilerplate code 구성 요소
- mport : 필요한 코드를 불러들이는 부분
- Component : 현 페이지를 구현하는 코드
- StyleSheet : 페이지의 객체를 꾸미기 위한 style
- Export : 현 Javascript 코드를 타 Javascript에서 접근하기 위한 부분
ODB(C++ ORM 프레임워크)
