TIL - JAVA spring DAY 16

jihan kong·2022년 1월 26일
0

JAVA spring 입문

목록 보기
18/20
post-thumbnail

계속해서 스프링이 DB에 접근하는 기술들을 배우고 있다. 순수한 JDBC 코드부터 JdbcTemplate, 그리고 스프링을 이용해서 DB와 연동시키는 통합 테스트까지 일련의 과정들을 학습하면서 'spring'의 's'도 모르던 내가 강의를 통해 스프링과 더욱 친숙해진 느낌이다. 오늘은 JPA에 대해 다루어볼 생각이다.

Jdbc vs Jdbc Template

우리는 순수 Jdbc로 먼저 개발했고, 다음 Jdbc Template으로 개발하였다. 그리고 확연한 차이를 느꼈다. Jdbc Template로 개발하였을 때는 Jdbc로 개발할 때 반복되었던 코드들이 1~2 줄로 줄어든 것을 볼 수 있었다. 이와 같이 복잡하고 방대한 볼륨의 코드들을 컴팩트하게 축소해서 사용자 편의성을 높였다는 측면에서 Template는 현업에서도 상당히 많이 사용하고 있다고 강사님께서 말씀해주셨다.

그런데 한 가지 아쉬운 점이 있다. Template로 개발한다고 하더라도 SQL 문은 개발자가 작성해야한다는 것이다. 물론 백 엔드 개발자라면 SQL 데이터베이스 관련 언어는 거의 필수적으로 알고 있는 것이 좋겠지만 아무래도 귀찮은 것은 사실이다.

이를 해결하고자해서 나온 것이 바로 JPA이다.

JPA

JPA 기술을 사용하면 SQL 쿼리도 자동으로 처리해준다. 이로써 개발 생산성을 높일 수 있는 효과를 얻을 수 있다. 우리가 전에 만들었던 MemoryMemberRepository 를 떠올려보자. 객체의 내용을 메모리에 넣어서 개발했었다. 이와 비슷하게 JPA 관련 메소드를 사용하면 중간에서 (작동원리는 이후 설명하겠지만) DB에 SQL을 전송하고 데이터를 DB에서 가져오고 등의 작업을 JPA가 모두 처리해준다.
또한, 단순히 SQL을 처리해주는 것을 넘어서 JPA를 사용하면, SQL과 데이터 중심의 설계에서 객체 중심의 설계로 패러다임이 전환됨을 의미한다.

구글 트렌드 사이트( https://trends.google.co.kr/trends/?geo=KR )를 통해 국내에서 'JPA' 와 비슷한 프레임워크인 'mybatis'를 비교하여 2004년부터 현재까지의 동향을 살펴보면, 다음과 같은 그래프를 얻을 수 있다.

JPA가 mybatis에 한참 모자라는 수준이었지만 2015년을 기점으로 점점 상승하는 것을 볼 수 있다. 해외에서는 JPA가 압도적으로 많이 사용되는데 국내에서는 JPA를 자세히 다루는 서적이나 레퍼런스가 부족했기 때문에 유저가 없다는 것을 김영한 강사님께서 관찰하셨고, JPA 관련 책을 쓰시고자 마음을 먹었다고 한다. 그리고 그것이 결실이 되어 현재는 많이 보급이 된 상태이다. (다시 한번 느끼지만 정말 엄청나신 분...)

( JPA에 관심이 있고 이 서적이 궁금하신 분을 위해 아래 링크로 첨부한다. 홍보아님 )
https://book.naver.com/bookdb/book_detail.nhn?bid=9252528

여튼 스프링 프레임워크는 대단히 많은 기능을 제공하는 기술들의 집약체이고 그만큼 많이 공부해야하는 것처럼 JPA도 스프링만큼의 기술적인 깊이가 있고 파고들수록 새로운 것들이 많은 툴이라고 하셨다. 그래서인지 JPA와 Spring은 서로 관련이 많다.

서론이 길었다. 바로 JPA의 세계로 들어가보자.

먼저, 새로운 기술을 사용하기 위해 환경설정부터 해야한다는 것은 이제 익숙하다. build.gradle dependencies를 다루는 부분에 다음과 같은 한줄을 집어넣어주고 refresh를 눌러줘서 반영시킨다.

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

(우리가 지금까지 사용한 기술들이 이렇게 많다.)

설정이 아직 끝나지 않았다. application.properties 에 jpa 관련 설정들을 업데이트 해주어야한다. 다음 두 줄을 추가해준다.

spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=none

여기서 spring.jpa.hibernate.ddl-auto=create 라고 설정해주면 member 객체를 보고 JPA가 테이블까지 자동생성해준다. 그러나 우리는 테이블이 모두 만들어져있고, 이를 사용할 예정이므로 ddl-auto=none 으로 설정해준다. 모두 끝나고 External Libraries에 jpa library와 hibernate library가 추가되어있는 것이 확인된다면 잘 설정이 된 것이다.

강사님께서 설명해주시길 JPA라는 것은 인터페이스만 제공이 되는 것이고, 그 구현체로 hibernate를 사용하는 것이라고 하셨다. 다시 말해, JPA는 자바의 표준 인터페이스이고, 이를 구현하는 것은 각 업체에서 만든 각자의 기술인 것이다.

ORM

따라서 JPA는 객체와 DB의 데이터를 자동으로 매핑하는 기술을 사용하는 것인데 이는 ORM (Object Relational Mapping, 객체-관계 매핑) 이라고 하셨다.

그렇다면 ORM을 어떻게 구현하는가...?
당연히 annotation으로 구현한다. 이에 대한 내용부터는 다음 포스팅에서... (To be continue)

profile
학습하며 도전하는 것을 즐기는 개발자

0개의 댓글