JPA소개

Oracle, MySQL, MSSQL등 관계형 데이터 베이스는 웹 애플리케이션에서 뺄수없는 요소임

그러다 보니 객체를 관계형 데이터베이스에서 관리하는것이 무엇보다 중요함

문제는, 요 관계형 데이터베이스가 SQL만 인식할 수 있기 때문에 개발자가 아무리 클래스를 아릅답게 설계해도 SQL을 통해야만 데이터베이스에 저장되고 조회할 수 있게됨. 이는 곧 각 테이블마다 기본적인 CRUD SQL을 매번 생성하는 반복적인 작업을 피할수 없게된다는 뜻.

그리고 객체를 데이터베이스에 저장하려고하니 패러다임 불일치라는 문제가 생기게됨. 관계형 데이터 베이스는 데이터를 어떻게 저장할지에 초점이 맞춰져있는 반면 객체지향 프로그래밍은 메시지를 기반으로 기능과 속성을 한곳에서 관리하려고 하는 기술임. 추상화, 캡슐화, 정보은닉, 다형성등을 관계형 데이터 베이스에 어떻게 표현할 거야? 상속, 1:N 등 다양한 객체 모델링을 데이터베이스로는 구현할 수 없음. 그러다 보니 웹 애플리케이션 개발은 점점 데이터 베이스 모델링에만 집중하게되고 이런 문제를 해결하기 위해 JPA가 등장하게 됨

서로 지향하는 바가 다른 2개의 영역을 중간에서 패러다임 일치를 시켜주기 위한 기술. 개발자는 객체지향적으로 프로그래밍을 하고, JPA가 이를 관계형 데이터베이스에 맞게 SQL을 대신 생성해서 실행해줌. 개발자는 항상 객체 지향적으로 코드를 표현할 수 있으니 더는 SQL에 종속적인 개발을 하지 않아도 됨. 이를 ORM이라고 하는데 자세한 내용은 아래 블로그 참조!

https://gmlwjd9405.github.io/2019/02/01/orm.html >> ORM에 대해 정리된 블로그

Spring Data JPA

JPA는 인터페이스로서 자바 표준 명세서임. 인터페이스인 JPA를 사용하기 위해선 구현체가 필요함. Hibernate, Eclipse, Link들이 있음. 하지만 Spring에서 JPA를 사용할 때는 이 구현체들을 직접 다루지 않아. 구현체들을 좀 더 쉽게 사용하고자 추상화시킨 Spring Data JPA라는 모듈을 이용해서 JPA기술을 다룸.

Hibernate를 쓰는것과 Spring Data JPA를 쓰는것 사이에는 큰 차이가 없어. 그럼에도 스프링 진영에서는 Spring Data JPA를 개발했고 이를더 권장해. 한단계 더 감싸놓은 Spring Data JPA가 등장한 이유는 크게 두가지. 구현체 교체의 용이성, 저장소 교체의 용이성. 구현체 교체의 용이성이란, Hibernate 외에 다른 구현체로 쉽게 교체하기 위함. 저장소 교체의 용이성이란 관계형 데이터베이스 외에 다른 저장소로 쉽게 교체하기 위함. 트래픽이 많아져 관계형 데이터베이스로는 감당이 안될때 MongoDB로 교체가 필요하다면 Spring Data JPA에서 Spring Data MongoDB로 의존성만 교체하면 됨.

프로젝트에 Spring Data JPA적용하기

요구사항

이들 중 일단 게시글 조회, 등록, 수정, 삭제 기능을 구현해봄