Develope Me!

[SpringBoot] 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - JPA 소개 본문

Java/SpringBoot

[SpringBoot] 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - JPA 소개

코잘알지망생 2022. 2. 19. 15:38

출처: google 

 

 

본격적으로 Spring Boot에서 JPA를 다루기 전에 JPA개념 정리를 먼저 해보려고 한다.

 

객체 지향 프로그래밍 언어와 관계형 데이터 베이스

 

이 책에 저자분도 그렇고 나 또한 팀 프로젝트를 진행하면서 SQL Mapper인 Mybatis를 이용해서 DB 쿼리를 작성했던 경험이 있다.

그래서 무엇보다 쿼리를 작성하고 수정하는데에 꽤 공을 들였었다.

객체 지향 프로그래밍을 하면서 테이블 모델링에 더 집중을 하게 된다니..... 한 번 쯤 고민해볼만 하다.

 

일단 객체 지향 프로그래밍 언어와 관계형 데이터 베이스의 차이는 뭘까?

 

객체 지향 프로그래밍 언어는 메시지를 기반으로 기능과 속성을 한 곳에서 관리하는 기술이다.

반면 관계형 데이터베이스는 어떻게 데이터를 저장할 지에 초점이 맞춰진 기술이다.

이 둘은 시작부터 패러다임이 일치하지 않는다. 

(객체 지향 언어의 특징 중 추상화, 캡슐화, 정보 은닉, 다형성 등을 관계형 DB에 표현 가능할까..? 쉽지 않다ㅎ)

 

 

JPA

 

객체 지향 프로그래밍과 관계형 데이터 베이스는 서로 지향하는 바가 다르다.

하지만 관계형 DB가 웹 서비스의 중심이 되다 보니 코드가 SQL 중심으로 흘러가는 경우가 많다. 

이처럼 SQL 중심으로 흘러가는 코드두 개의 패러다임 불일치라는 문제점을 해결하기 위해 등장한 기술이 바로 JPA다. 

 

JPA는 '자바 표준 ORM(Object Relational Mapping, 객체 매핑)'로 인터페이스로서 자바 표준 명세서를 의미한다. (JPA는 라이브러리 X)

JPA를 사용하면  개발자는 객체지향적으로 프로그래밍을 하면 된다. JPA가 관계형 DB에 맞게 SQL을 대신 생성하고 실행해준다.

개발자가 SQL에 종속적인 개발을 하지 않아도 되기 때문에 생산성이 증가하고 유지보수 또한 편리해진다.

대규모 트래픽과 데이터를 가진 서비스에서 JPA를 표준 기술로 많이 사용한다고도 한다.

 

JPA를 사용하기 위해선 Hibernate, Eclipse Link 와 같은 구현체가 필요하다고 하는데 Spring에서 JPA를 사용할 때는 이 구현체를 직접 다루진 않는다. Spring Data JPA 모듈을 사용해서 JPA 기술을 다루기 때문이다.

 

Spring Data JPA를 사용하면

1) 구현체 교체에 용이하다.

 Spring Data JPA 내부에서 구현체 매핑을 지원해주기 때문에 Hibernate 외에 다른 구현체로 쉽게 교체할 수 있다.

 

2) 저장소 교체가 용이하다.

트래픽이 많아지면 관계형 DB로 감당이 안될 때가 생긴다. 이때 다른 저장소로 쉽게 교체할 수 있다는 장점을 가진다.

Spring Data의 하위 프로젝트들은 기본적인 CRUD 인터페이스가 같기 때문에 다른 저장소로 교체된다고 하더라도 기본적인 기능을 변하지 않는다. 

 

 

다음으로는 JPA를 적용해서 하나의 게시판을 만들보려고 한다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

Comments