티스토리 뷰
728x90
영속성(Persistence)
- 데이터를 생성한 프로그램이 종료되더라도 사라지지 않는 데이터의 특성
- 영속성을 갖지 않는 데이터는 단지 메모리에서만 존재 -> 프로그램 종료 시 모두 사라짐
- 객체에 영속성을 부여한다면 프로그램이 종료되더라도 다시 같은 상태를 가지는 객체로 만듦
- Persistence Layer
- 프로그램의 아키텍처에서 데이터에 영속성을 부여해주는 계층
Persistence Framework
- JDBC 프로그래밍의 복잡함이나 번거로움 없이 간단한 작업만으로 데이터베이스와 연동되는 시스템을 개발
- SQL mapper와 ORM으로 나누어진다.
SQL Mapper
- SQL문을 이용하여 RDB에 접근, 데이터를 오브젝트(객체)화 시켜준다.
- 개발자가 작성한 SQL문으로 해당되는 ROW를 읽고 결과 값을 쿼리 수행 결과와 객체의 필드를 매핑
- RDB에 따라 SQL 문법이 다르기 때문에 특정 RDB에 종속적이다.
ORM(Object-Realational-Mapping)
- 객체 관계 매핑, 객체와 RDB를 별개로 설계하고 ORM이 중간에서 매핑해주는 역할 즉, ORM은 SQL문이 아닌 RDB에 데이터 그 자체와 매핑하기 때문에 SQL을 직접 작성할 필요가 없다.
- SQL문을 직접 Java Application 내에서 적을 경우가 적어진다.
- SQL 구조를 Java Application 내에서 적용하지 않아도 된다.
JDBC VS Mybatis VS JPA
JDBC(Java Database Connectivity)
JDBC는 DB에 접근할 수 있도록 Java에서 제공하는 API이다. 모든 Java Data Access 기술의 근간으로 모든 Persistence Framework는 내부적으로 JDBC API를 사 용한다.
- Driver 로드
- Connection 객체 생성
- Statement 객체를 생성해서 SQL문을 실행
- resultset으로 값을 받고 객체에 담아서 반환....
- 모든 작업 후 자원을 해제해주는 과정 ex) close()
👎 단점
- SQL 문 실행 시 중복된 코드를 반복적으로 사용
- DB에 따라 일관성 없는 정보를 가진채 SQLException 처리
- Connection과 같은 공유 자원을 닫아주지 않으면 자원이 바닥나서 버그가 발생한다 -> 수동으로 닫아 줘야 함
MyBatis (Java Persistence Framework)
SQL 쿼리들을 XML 파일에 작성하여 코드와 SQL을 분리하여 관리하는 것
반복적인 JDBC 프로그래밍을 단순화시켜준다.
👍 장점
- Connection 관리를 자동으로 해준다. (JDBC 중복 작업을 제거해준다.)
- 복잡한 쿼리나 다이내믹하게 변경되는 쿼리 작성이 쉽다
- DAO로부터 SQL문을 분리하여 코드의 간결성과 유지보수성이 향상된다.
- SQL과 JDBC API를 분리했다 하더라도 의존성이 강하다.
👎 단점
- 특정 RDB에 종속이다
- 테이블마다 CRUD 처리를 할 때 반복 작업이 생겨 코드의 양도 많아진다.
- 테이블 필드가 변경될 시 DAO의 SQL문 객체의 필드 등을 수정해야 한다.
- RDB 필드 변경되면 sql문도 변경해야 하고 객체의 필드 또한 수정해야 한다.
- 객체지향으로 프로그래밍했더라도 SQL에 의존적인 개발을 할 수밖에 없다.
JPA (Java Persistence API)
객체와 RDB를 매핑 SQL문이 아닌 직관적인 코드로 데이터를 조작한다.
👍 장점
- RDB(Mysql, Oracle) 어떤 거라도 사용할 수 있다.
- DB변경 코드 재활용에 좋다.
- 기본적인 CRUD 메서드가 구현되어 있고 페이징 처리 부분도 구현되어 있어 비즈니스 로직에 집중할 수 있다.
- 개발 생산성이 높다 SQL에 의존적이지 않은 개발이 가능
- 그렇다고 SQL을 쓰지 않느냐 그건 아니다 SQL을 잘 쓰는 개발자는 JPA를 더 잘 씀
👎 단점
- 진입 장벽이 높다. 단방향, 양방향, 임베디드 관계 등 알아야 할 내용이 많다 이해하지 못한 채 진행한다면 성능상의 문제와 원하는 결과가 안 나올 수 있다.
- ex) N+1 문제
'Spring Data JPA' 카테고리의 다른 글
더티 체킹 (Dirty Checking) -> JPA Update (0) | 2022.03.02 |
---|---|
JPA N+1 해결법 (1) | 2022.02.06 |
댓글