영속성(Persistence)
영속성은 데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성을 의미한다.
영속성을 갖지 않는 데이터는 단지 메모리에서만 존재하기 때문에 프로그램을 종료하면 모두 잃어버리게 된다.
결국 영속성은 특정 데이터 구조를 이전 상태로 복원할 수 있게 해 주어 프로그램의 종료와 재개를 자유롭게 해 준다.
이는 Layered Architecture에서 도메인 모델과 데이터베이스사이에 존재하며, 프로그램의 객체 정보를 DB에 저장하고, DB의 정보를 객체로 담아와 사용할 수 있도록 한다.
Java에서는 영속성을 위해 JDBC를 지원해 주는데, JDBC에서 DB에 접근하여 SQL을 수행하고, 결괏값을 다시 데이터타입으로 매핑시켜 주는 작업을 개발자가 일일이 수행해야 하는 번거로움이 있다.
SQL Mapper와 ORM은 개발자가 직접 JDBC를 이용해 프로그래밍하지 않도록 기능을 제공하는 Persistence Framework의 종류이다.
SQL Mapper
SQL Mapper는 Object와 SQL의 필드를 매핑하여 데이터를 객체화하는 기술이다.
객체와 테이블의 관계를 매핑하는 것이 아니라, SQL을 직접 작성하고 결과를 어떠한 객체에 바인딩하는 방법으로 SQL에 의존적인 방법이다.
SQL Mapper의 장점
- JDBC를 사용했을 때 발생하는 불필요한 코드를 줄일 수 있다.
- SQL 쿼리를 그대로 사용하기에 복잡한 JOIN, 튜닝 등을 좀 더 수월하게 작성 가능하다.
- 동적 쿼리 생성에 유용하다.
SQL Mapper의 단점
- SQL 구문을 직접 작성해야 한다.
- DBMS의 종속적이다.
- 비슷한 쿼리를 반복적으로 작성해야 한다.
- 객체와 관계형 테이블 구조간 패러다임 불일치가 발생한다.
ORM(Object Relation Mapping)
OOP(Object Oriented Programming)에서 쓰이는 객체라는 개념을 구현한 클래스와 RDB에서 쓰이는 테이블을 자동으로 매핑하는 기술이다.
객체 모델이 관계형 모델에 매핑되며 생길 수 있는 불일치 문제는 객체 간의 관계를 표현하여 해결한다.
즉, ORM을 이용해 객체 간의 관계를 표현함으로써 SQL문을 작성하지 않고 RDBMS를 조작할 수 있다.
ORM의 장점
- 객체 모델만을 이용하여 객체지향적으로 프로그래밍할 수 있다.
- SQL을 직접 작성하지 않아도 된다.
- 유지보수 용이(스키마의 수정이 필요할 때, 단순히 클래스를 수정하면 DB에 반영된다.
- DBMS에 의존하지 않음으로써 도메인과 비즈니스 로직 설계에 더 집중할 수 있다.
ORM의 단점
- 데이터의 관계가 복잡할수록 구현하기 어렵다.
- 복잡한 SQL문을 처리하고기 어렵다.
- 객체 - 관계 간의 불일치가 발생할 수 있다. (세분성, 상속성, 일치, 연관성, 탐색)
참고 자료:
https://deveun.tistory.com/entry/SQL-Mapper%EC%99%80-ORM-%EC%B0%A8%EC%9D%B4
https://jongsky.tistory.com/15
'백엔드 > JPA' 카테고리의 다른 글
[JPA] flush(), detach(), clear(), close(), merge() (0) | 2023.05.02 |
---|---|
[JPA] 엔티티 조회, 등록, 수정, 삭제 (0) | 2023.05.02 |
[JPA] 영속성 컨텍스트(persistence context)란? (0) | 2023.05.02 |
[JPA] JPA란? (0) | 2023.05.01 |
[JPA] 패러다임의 불일치 (0) | 2023.05.01 |