[JPA] JPA 알아보기 1

드코딩·2024년 7월 26일
0

JPA

목록 보기
1/4
post-thumbnail

이전 글에서는 JPA를 왜 사용해야하는지 간단하게 알아보았다.
이 글은 JPA의 문법을 다루는 글도 JPA는 이렇게 써야한다. 라는 글은 아니다.
초보 개발인 내가 JPA를 어떻게 시작하고 어떤 생각을 했는지를 정리하는 글이다.

JPA? ORM?

데이터베이스로 흔히 사용하는 MySQL과 같은 관계형 데이터베이스(RDBMS)는 SQL 문을 사용합니다. SQL을 한 번이라도 경험해본 적이 있다면, 프로그래밍 언어와는 많이 다르지만, 사람의 언어와 비슷하다고 느낄 수 있다. 데이터베이스는 이러한 SQL 쿼리를 통해 데이터를 저장하고 수정하며 관리할 수 있다.

자바, 파이썬, 자바스크립트 등의 프로그래밍 언어만으로도 데이터베이스를 쉽게 사용할 수 있도록 도와주는 기술이 바로 ORM(Object-Relational Mapping)이다. 자바의 경우, ORM을 제공하는 것이 JPA(Java Persistence API) 이다.

간단히 말해, JPA를 사용하면 자바 코드로 데이터베이스의 테이블을 관리하고, 데이터베이스와 상호작용할 수 있게 된다. ORM을 통해 SQL 쿼리를 직접 작성하지 않고도 객체 지향 프로그래밍의 장점을 활용하여 데이터베이스 작업을 할 수 있다.

JPA 사용하기

먼저 나는 SpringBoot를 사용해서 프로젝트를 생성해두었다.
분명 라이브러리 보물 창고인 Maven Repository에서 JPA를 쉽게 찾을 수 있다.

바로 이 녀석을 build.gradle에 추가해주면 코끼리가 열심히 세팅해준다.

이제 이 JPA만 있으면 자바 세상에서 객체 지향적인 설계만 고려하는 자바 개발자가 될 수 있다.
어쩌면 디비 관계랑 같이 생각하다가 설계를 살짝 잘 못 했네요. 라는 보험을 잃어버린걸 지도…

Java ↔ D

이런 구조로 Java는 저장하고 싶은 객체지향적인 코드를 JPA 에게 알려주면 JPA는 JDBC가 데이터베이스에 보내기 쉽게 SQL 쿼리로 바꿔서 서로 통신하여 데이터베이스를 자바 코드만을 이용해서 DB를 사용할 수 있다.

그래서 JPA 어떻게 사용하는 거야?

바로 구글에 JPA 공식문서를 검색해서 들어갔다.
🔗 ‣https://docs.spring.io/spring-data/jpa/reference/jpa/getting-started.html
Getting Started를 따라해보았다.

튜토리얼에서 알려주지는 않지만 application.properties에 JDBC설정과
ddl 권한을 추가해줘야 테스트를 해볼 수 있다.

데이터베이스에 아주 잘 저장이 되었다.
근데 저 person_seq라는 테이블도 같이 생겼다.
이건 @GeneratedValue(strategy = GenerationType.AUTO) 이 어노테이션 때문에 생긴 테이블 같았다. application.properties ddl권한을 지우고 DB에 직접 person 테이블을 만들어주고 id값에 자동증가 옶션을 적용했더니 person_seq 테이블은 생기지 않았다.
JPA한테 시키면 불필요한 테이블이 생겨 데이터베이스가 복잡해질 수 있을 거 같다.

튜토리얼 코드

//튜토리얼에서 제공하는 코드
interface PersonRepository extends Repository<Person, Long> {

  Person save(Person person);

  Optional<Person> findById(long id);
}

Repository 라는 인터페이스를 상속 받아야 했다.
난 저런 인터페이스가 어떻게 있지? 하고 찾아보았는데 아까 메이븐 레포지토리에서 받아서
추가해준 라이브러리에 아래와 같이 존재했다.

ListCrudRepository 또는 JpaRepository 를 상속받아서 사용하면 더 많은 메소드를 사용할 수 있는 것 같았다. 실제로 두개 의 레퍼지토리를 확인해보니 Repository를 상속받았고 메소드들을 더 추가되어있다.

간단한 CRUD 기능은 튜토리얼에서 언급하는 레포지토리를 상속받아 사용해도 괜찮을 것 같았다.

지금까지의 정보만으로도 간단한 게시판 기능을 만드는데 필요한 CRUD는 충분히 할 수 있을 것 같다.
하지만 JPA를 찾아보면서 Persistence (영속성)이라는 단어를 많이 접했고 이 부분에 대해서
다음 글에서 더 정리해봐야겠다.


⭐틀린 내용 수정,지적은 언제나 환영합니다.⭐

0개의 댓글

관련 채용 정보