3.0 JPA (자바 표준 ORM)
어떻게 하면 관계형 데이터베이스를 이용하는 프로젝트에서 객체지향 프로그래밍을 할 수 있을까?
JPA라는 자바 표준 Object Relational Mapping 기술을 사용하자!
3.1 JPA 소개
배경
- 객체를 관계형 데이터 베이스에서 관리하는 것이 중요 현대의 웹 애플리케이션에서 관계형 데이터베이스는 빠질 수 없는 요소 (Oracle, MySQL, MSSQL 등을 쓰지 않는 애플리케이션은 거의 없음)
- SQL : 관계형 데이터베이스가 SQL만 인식할 수 있음 - 각 테이블마다 기본적인 CRUD(Create, Read, Update, Delete) SQL을 매번 생성해야 함.
- 패러다임 불일치 문제 -> 관계형 데이터베이스 : 어떻게 데이터를 저장할지 vs 객체지향 프로그래밍 언어 : 메시지를 기반으로 기능과 속성을 한 곳에서 관리
//객체지향 프로그래밍에서 부모가 되는 객체 가져오는 법 User user = findUser(); Group group = user.getGroup();
//위 코드에 데이터베이스가 추가 -> User 따로, Group 따로 조회하게 됨
User user = userDao.findUser();
Group group = groupDao.findGroup(user.getGroupId());
상속, 1:N 등 다양한 객체 모델링을 데이터베이스로 구현할 수 없음
-> 웹 애플리케이션 개발이 점점 데이터 베이스 모델링에 집중하게 됨
JPA로 문제점 해결
JPA
개발자 - 객체지향적으로 프로그래밍
JPA - 이를 관계형 데이터베이스에 맞게 SQL을 대신 생성해서 실행
개발자는 항상 객체지향적으로 코드를 표현할 수 있음 -> 더는 SQL에 종속적인 개발을 하지 않아도 됨
Spring Data JPA
인터페이스인 JPA 사용하기 위해서 구현체 필요
ex. Hibernate, Ecplipse, Link
하지만 Spring에서 JPA를 사용할 때는 이 구현체들을 직접 다루지는 않음.
구현체들을 좀 더 쉽게 사용하고자 추상화시킨 Spring Data JPA라는 모듈을 이용해 JPA 기술을 다룸
(JPA <- Hibernate <- Spring Data JPA)
Spring Data JPA가 등장한 이유는 크게 두 가지
구현체 교체의 용이성
저장소 교체의 용이성
구현체 교체의 용이성이란?
Hibernate 외에 다른 구현체로 쉽게 교체하기 위함 (구현체 매핑 지원!)
저장소 교체의 용이성이란?
관계형 데이터베이스 외에 다른 저장소로 쉽게 교체하기 위함 (의존성만 교체하면 됨!)
실무에서 JPA
실무에서 JPA를 사용하지 못하는 큰 이유는 높은 러닝 커브를 야기하기 때문
-> JPA를 쓰려면 객체지향 프로그래밍과 관계형 데이터베이스를 둘 다 이해해야 함
But, 보상이 큼 -> 객체지향 프로그래밍을 쉽게 할 수 있다.
- CRUD쿼리를 직접 작성할 필요가 없음
- 부모-자식 관계 표현, 1:N 관계 표현
- 상태와 행위를 한 곳에서 관리
요구사항 분석
주제 : 게시판(웹 애플리케이션) 만들기
게시판의 요구사항
- 게시글 조회
- 게시글 등록
- 게시글 수정
- 게시글 삭제
회원 가능
- 구글 / 네이버 로그인
- 로그인한 사용자 글 작성 권한
- 본인 작성 글에 대한 권한 관리
출처 : 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 [이동욱 지음]
'Back-End > Springboot와 AWS로 혼자 구현하는 웹 서비스' 카테고리의 다른 글
Chapter 04. 머스테치로 화면 구성하기 (1) (0) | 2022.03.15 |
---|---|
Chapter 03. SpringBoot에서 JPA로 데이터베이스 다뤄보자 (5) (0) | 2022.03.14 |
Chapter 03. SpringBoot에서 JPA로 데이터베이스 다뤄보자 (4) (1) | 2022.03.13 |
Chapter 03. SpringBoot에서 JPA로 데이터베이스 다뤄보자 (3) (0) | 2022.03.12 |
Chapter 03. SpringBoot에서 JPA로 데이터베이스 다뤄보자 (2) (0) | 2022.03.12 |