Back-End/스프링부트와 AWS로 구현하는 웹서비스

[스프링][Spring] 3. 스프링 부트에서 JPA로 데이터베이스 다루기

얄루몬 2022. 1. 10. 04:06

1 스프링 부트에서 JPA로 데이터베이스를 다뤄보자

 

  • 웹 서비스 운영에 피할 수 없는 문제 = 데이터베이스를 다루는 일
  • 실제 개발 시간보다 SQL 다루는 시간이 더 많은 현실에 JPA를 사용해서 이와 같은 문제를 해결해보자 

 

1.1 JPA란?

  • 객체를 관계형 데이터베이스에서 관리하는 것은 매우 중요하다. 관계형 데이터베이스가 계속해서 웹 서비스 중심이 되면서 모든 코드는 SQL의 중심이 되어간다. 이는 관계형 데이터베이스가 SQL만 이해하기 때문인데 계속해서 CURD SQL을 매번 생성하는 일을 피하기 위해서 JPA를 사용한다. 

 

  • 패러다임의 불일치 - 객체지향 프로그래밍 언어인 자바를 예로 기능과 속성을 한 곳에서 관리하는 것이 객체지향 프로그래밍의 핵심 기술인데 관계형 데이터베이스는 이와 다르게 어떻게 데이터를 저장하지에 관해서 초점이 맞춰져있어 패러다임 불일치 문제가 생기게 된다.  

 

  • JPA를 사용하면 개발자는 계속해서 객체지향적 프로그래밍을 하고 JPA가 데이터베이스와 언어 사이의 중간 역할을 하며 SQL을 대신 생성해주게 되어 SQL에 종속적인 개발을 하지 않아도 되게 된다.

 

 

1.2 Spring Data JPA
JPA는 인터페이스로서 자바 표준명세서이다. 인터페이스인 JPA를 사용하기 위해서는 구현체가 필요하다. (인터페이스는 실제적인 구현을 한 구현체가 있어야 의미가 있는 것이기 때문!!) 이때 구현체들을 좀 더 쉽게 사용하고자 추상화 시킨 Spring Data JPA라는 모듈을 사용해 JPA 기술을 다룬다. 

 

 

 

 

 

 

1.3 요구사항 분석

게시판 기능 회원 기능
  • 게시글 조회
  • 게시글 등록
  • 게시글 수정
  • 게시글 삭제
  • 구글/ 네이버 로그인
  • 로그인한 사용자 글 작성 권한
  • 본인 작성 글에 대한 권리

 

 

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

implementation('org.springframework.boot:spring-boot-starter-data-jpa')
implementation('com.h2database:h2')

의존성을 위의 드래그 해놓은 부분을 넣어주세요. (Gradle 버전이 향상됨에 따라서 compile로 쓰이던 것이 implementation로 바뀌었습니다!!)

  • org.springframework.boot:spring-boot-starter-data-jpa' 
    • 스프링부트용 Spring Data JPA 추상화 라이브러리
    • 스프링 부트 버전에 맞춰 자동으로 JPA관련 라이브러리들의 버전을 관리해준다.
  • h2
    • 관계형 데이터베이스
    • 별도 설치 X 프로젝트 의존성만으로도 관리 O
    • 메모리에서 실행되기 때문에 애플리케이션 재시작할 때마다 초기화된다는 점을 이용해 테스트 용도로 많이 사용된다.
    • JPA 테스트, 로컬 환경에서의 구동에서 사용할 예정(이 책 안에서의 용도)

 

2.1 domain 패키지 만들기

도메인이란? 

게시글, 댓글, 회원, 정산, 결제 등 소프트웨어에 대한 요구사항 혹은 문제 영역