참고자료
# 영속성
- 데이터를 생성한 프로그램이 종료되더라도 사라지지 않는 데이터의 특성을 말한다.
- 영속성을 갖지 않는 데이터는 메모리에서만 존재하기 때문에 프로그램을 종료하면 사라진다.
영구적인 객체(Object Persistence)
- 메모리 상의 데이터를 파일 시스템, 관계형 데이터베이스 혹은 객체 데이터베이스 등을 활용하여 영구적으로 저장하여 영속성을 부여한다.
- 데이터를 데이터베이스에 저장하는 3가지 방법
- JDBC
- Spring JDBC (Ex. JDBC Template)
- Persistence Framework (Ex. Hibernate, Mybatis 등)
Persistence Framework
- JDBC 프로그래밍의 복잡함이나 번거로움 없이 간단한 작업만으로 데이터베이스와 연동되는 시스템을 빠르게 개발할 수 있으며 안정적인 구동을 보장한다.
- Persistence Framework는 SQL Mapper와 ORM으로 나눌 수 있다. Ex) JPA, Hibernate, Mybatis 등
# ORM이란?
- Object-Relational Mapping 객체-관계 매핑
- 객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용한다.
- 객체 모델과 관계형 모델 간에 불일치가 존재한다.
- ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다.
- 데이터베이스 데이터 ←—매핑—→ Object 필드
- 객체를 통해 간접적으로 데이터베이스 데이터를 다룬다.
- Persistant API라고도 할 수 있다.
- Ex) JPA, Hibernate 등
# Hibernate(하이버네이트)
- 자바 환경에서의 객체-관계 모델 매핑 솔루션.
- ORM이라 불리우는 객체-관계-매핑은 어플리케이션레벨의 도메인 객체를 관계형 데이터베이스 테이블의 형태로 혹은 역으로 매핑시켜주는 프로그래밍 기술.
- JPA의 구현체로, JPA 인터페이스를 구현하며, 내부적으로 JDBC API를 사용
# JPA(Java Persistence API)란?
- 자바 퍼시스턴스 API 또는 자바 지속성 API 로 불린다.
- 자바 플랫폼 SE와 자바 플랫폼 EE를 사용하는 응용프로그램에서 관계형 DB의 관리를 표현하는 자바 API
- 기존에 EJB에서 제공되던 엔터티 빈(Entity Bean)을 대체하는 기술이다.
- 현재 자바 진영의 ORM 기술 표준으로, 인터페이스의 모음
- 실제로 동작하는 것이 아니다.
- JPA 인터페이스를 구현한 대표적인 오픈소스가 Hibernate라고 할 수 있다.
# EJB란?(더보기 클릭)
더보기
- Java EE의 API 중 하나이고, 주로 웹 시스템에서 JSP로 화면을 구성하고 EJB는 비즈니스 로직을 처리한다.
- EJB는 기업환경의 시스템을 구현하기 위해 위 스펙에 따라 비즈니스 로직을 처리하는 서버 어플리케이션이다.
단점
- 객체 지향적이지 않ㄴ다.
- 복잡한 프로그래밍 모델
- 특정 환경, 기술에 종속적인 코드
개발 생산성을 위해 등장했으나 실제론 개발 생산성이 떨어지고 이동성이 부족하다.
# JPA의 동작 과정
- JPA는 어플리케이션과 JDBC 사이에서 동작한다.
- JPA 내부에서 JDBC API를 사용하여 SQL을 호출하여 DB와 통신한다.
- 개발자가 ORM 프레임워크에 저장하면 적절한 INSERT SQL을 생성해 DB에 저장해주고,
검색을 하면 SELECT SQL을 생성해 결과를 객체에 매핑하고 전달해준다.
# JPA를 사용해야 하는 이유
생산성
- JPA를 자바 컬렉션에 객체를 저장하듯 JPA에게 저장할 객체를 전달.
- INSERT SQL을 작성하고 JDBC API 사용하는 지루하고 반복적인 일을 JPA가 대신 처리해준다.
- CREATE TABLE같은 DDL문 자동 생성
- 데이터베이스 설계 중심의 패러다임을 객체 설계 중심으로 역전
유지보수
- 엔티티에 필드 추가시 등록, 수정, 조회 관련 코드 모두 변경
- JPA를 사용하면 이런 과정을 JPA가 대신 처리
- 개발자가 작성해야 할 SQL과 JDBC API 코드를 JPA가 대신 처리해줌으로 유지보수해야 하는 코드 수가 줄어든다.
반응형
'프로그래밍언어 & 프레임워크 > 스프링(Spring)' 카테고리의 다른 글
[토비의스프링]스프링의 학습 방법 (0) | 2022.01.03 |
---|---|
[토비의스프링] 스프링이란 무엇인가? (0) | 2021.12.26 |
싱글턴 패턴(Singleton Pattern) (0) | 2021.12.05 |
[Spring Boot]Swagger 사용해보기(Gradle) (2) | 2021.12.03 |
@Controller와 DispatcherServlet이란? (0) | 2021.12.02 |