본문 바로가기

기록/스프링 부트와 AWS로 혼자 구현하는 웹 서비스

Chapter 3. 스프링 부트에서 JPA로 데이터베이스 다뤄보기

728x90
SMALL

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 관계 표현 등

단점

높은 러닝 커브 - 객체지향 프로그래밍과 관계형 데이터베이스를 둘 다 이해해야함

728x90