MyBatis와 같은 SQL 매퍼를 이용해서 데이터베이스의 쿼리 작성
-> 실제로 개발하는 시간보다 SQL을 다루는 시간이 더 많아진다
-> 객체 모델링 보다는 테이블 모델링에 집중하게 됨
해결책 : JPA라는 자바 표준 ORM
SQL 매퍼 - 쿼리 매핑
ORM - 객체 매핑
3.1 JPA 소개
현대의 웹 애플리케이션에서 관계형 데이터베이스는 빠질 수 없는 요소
-> 객체를 관계형 데이터베이스에서 관리하는 것이 중요
문제점
: 단순 반복 작업
-> 관계형 데이터베이스는 SQL만 인식할 수 있기 때문에 코드가 SQL 중심인 경우가 많다.
(각 테이블마다 기본적인 CRUD SQL을 매번 생성해야하는 번거로움)
-> 현업에서의 수십, 수백 개의 테이블의 몇 배의 반복적인 SQL을 만들고 유지 보수해야함
: 패러다임의 불일치
-> 관계형 데이터베이스 - 어떻게 데이터를 저장할 지에 초점
객체지향 프로그래밍 언어 - 기능과 속성을 한 곳에서 관리하는 기술
객체지향 프로그래밍에서 부모가 되는 객체를 가져오는 예시
User user = findeUser();
Gruop group = user.getGroup();
-> 명확하게 User 와 Group 이 부모 - 자식 관계임을 알 수 있음
데이터베이스가 추가되었을 경우
User user = userDao.findeUser();
Gruop group = groupDao.findGroup(user.getGroupId());
-> User 따로, Group 따로 조회 - 상속, 1:N 등의 다양한 객체 모델링을 데이터베이스로는 구현 불가
-> 웹 애플리케이션 개발이 점점 데이터베이스 모델링에만 집중
-> 이러한 문제점을 해결하기 위해 JPA 등장 - 중간에서 패러다임 일치시켜줌
개발자 - 객체지향적 프로그래밍
JPA - 이를 관계형 데이터베이스에 맞게 SQL을 대신 생성해서 실행
-> 개발자는 SQL에 독립적으로 개발 가능
객체 중심 개발 -> 생산성 향상, 유지 보수 용이
3.2 Spring Data JPA
JPA - 인터페이스. 자바 표준명세서
구현체 - Hibernate, Eclise Link 등이 있다
하지만 Spring에서 JPA를 사용할 때는 이 구현체들을 직접 다루지 않고
Spring Data JPA 라는 모듈을 사용
JPA <- Hibernate <- Spring Data JPA
Spring Data JPA가 등장한 이유
- 구현체 교체의 용이성
: Hibernate 외에 다른 구현체로 쉽게 교체하기 위함
Spring Data JPA 내부에서 구현체 매핑을 지원
ex) Redis 클라이언트가 Jedis에서 Lettuce로 대세가 넘어갈 때 Spring Data Redis를 쓴 사람들은 아주 쉽게 교체함
- 저장소 교체의 용이성
: 관계형 데이터베이스 외에 다른 저장소로 쉽게 교체하기 위함
트래픽이 많아져 관계형 데이터베이스로는 도저히 감당이 안 될 때
ex) MongoDB로 교체가 필요하다면 Spring Data JPA 에서 Spring Data MongoDB로 의존성만 교체하면 됨
장점
CRUD 쿼리를 직접 작성할 필요 없음 - Sprnig Data의 하위 프로젝트들은 save(), findAll, findOne() 등을 인터페이스로 갖고 있음
객체 지향 프로그래밍을 쉽게 할 수 있음 - 부모-자식 관계 표현, 1:N 관계 표현 등
단점
높은 러닝 커브 - 객체지향 프로그래밍과 관계형 데이터베이스를 둘 다 이해해야함
'기록 > 스프링 부트와 AWS로 혼자 구현하는 웹 서비스' 카테고리의 다른 글
Chapter 3. Spring Data JPA 테스트 코드 작성하기 (0) | 2022.10.11 |
---|---|
Chapter 3. 프로젝트에 Spring Data JPA 적용하기 (0) | 2022.10.08 |
Chapter 2. Hello Controller 코드를 롬복으로 전환하기 (0) | 2022.10.04 |
Chapter 2. 스프링 부트에서 테스트 코드 작성 (0) | 2022.09.29 |
Chapter 2 - 롬복 소개 및 설치하기 (0) | 2022.09.24 |