JPA에 관하여 공부를 시작했다. JPA에 관하여 정리를 하기 전에 우선 ORM이라는 것에 대한 개념을 정리하려 한다.
ORM(Object Relational Mapping)
ORM이란 객체-관계매핑의 줄임말이다. 이는 우리가 프로그래밍을 하면서 쓰는 객체라는 개념과 RDB(Relational DataBase)에서 쓰이는 데이터인 테이블을 자동으로 매핑하는 것을 의미한다. ORM을 통하면 SQL문을 따로 짤 필요없이 객체를 통해 간접적으로 데이터베이스를 조작할 수 있게 된다.
여기서 SQL이라는 단어가 등장하는데 SQL은 간단하게 말하면 RDBMS(관계형 데이터베이스 관리 시스템)의 데이터를 관리하기 위해 만들어진 프로그래밍언어이다. 데이터베이스를 관리하기 위한 표준언어이기 때문에 이를 추후에 공부할 예정이다.
다시 돌아와서 ORM에 대해 얘기를 계속 해보자면, ORM은 SQL을 사용하지 않고 객체를 통해 데이터베이스를 조작할 수 있으므로 부수적인 코드가 사라지거나 줄어들어 생산성이 증가한다. 물론 프로젝트의 규모가 커지면 복잡성 또한 증가하면서 단순하게 객체로만 데이터베이스를 조작하는 것이 아닌 SQL을 사용해야할 때가 있을 수 있다.
그렇다면 JPA는 무엇인가
JPA란 자바 어플리케이션에서 RDB를 사용하는 방식을 정의한 인터페이스이다. 여기서 인터페이스는 자바프로그래밍을 할 때 사용되는 Interface가 맞다. 인터페이스는 메서드가 정의되어있지 않고 이 애플리케이션이 어떻게 작동하는지를 정의해둔 요약본같은 것이다 라는 말을 들은 적이 있다. 결론은, JPA는 자바 애플리케이션에서 RDB를 어떻게 사용해야하는지를 정의하는 한 방법이라는 것이다.
위의 그림에서 구조를 살펴보자.
ORM으로 둘러싸인 부분에 spring data jpa와 Hibernate가 있다. Hibernate는 JPA의 구현체이다. 앞에서 JPA는 인터페이스라는 얘기를 했다. 그렇다면 JPA의 구현체라는 말은 Hibernate는 JPA라는 인터페이스를 구현한 라이브러리라는 말인 것이다. 그렇다면 저 옆에 색칠되어있는 spring data jpa는 무엇일까. 바로 spring에서 제공해주는 모듈중 하나로, JPA를 한 단계 추상화시킨 Repository라는 인터페이스를 제공함으로써 이뤄지는 것이 spring data jpa이다. Hibernate를 직접 사용할 수도 있겠지만 spring data jpa를 통해 Repository를 정의해서 사용하는 방법 또한 존재한다.
위의 설명한 3가지는 서로의 관계만 있을 뿐이지 각각 다른 요소들이다. 특히 spring data jpa는 JPA와는 다른 개념이다. spring data jpa는 Repository의 구현에서 JPA를 사용하고 있다. 그러니까 그냥 spring에서 JPA를 쉽게 사용하기위해 제공하는게 spring data jpa라는 것이다. 그리고 그림에 spring data jpa가 Hibernate안에 들어가 있는 듯한 모양인데 그 이유는 Repository인터페이스의 구현체를 만들 때 Hibernate의 라이브러리를 사용하는 경우가 많기 때문이다.
간단하게 spring boot의 기본에 대한 강의를 보고 이제 JPA에 대해 배우고 있다. 아직은 뭔가 내 손으로 웹사이트의 백엔드를 만든다는게 상상이 안간다. 학과 강의의 결과물 같이 머리속에 지식보다는 다 쓸려나가고 걸쭉한 기름때만 남아있는 기분이다. 뭐 어쩌겠나. 또 열심히 채워넣어서 기름때를 늘리다보면 언젠가 1인분하겄지... 그 때까진 죽이 되든 밥이 되든 그냥 X나 하는거다.
'웹 개발 일기 > Spring' 카테고리의 다른 글
Swagger (0) | 2021.06.22 |
---|---|
JUnit을 Spring에서 활용하여 테스트 진행하기 (0) | 2021.06.22 |
JUnit (0) | 2021.06.22 |
Rest Template를 사용한 Server간의 연결 (0) | 2021.06.18 |
Filter / Interceptor (0) | 2021.06.17 |