프리 정보 컨텐츠

Spring Data JPA 와 Lombok 예제와 개념정리 본문

JAVA/JPA

Spring Data JPA 와 Lombok 예제와 개념정리

쏜스 2021. 6. 24. 18:25

JPA의 개념

JPA의 작동 개념은 위의 링크와 같습니다. JPA에 개념과 작동방식에 대해서 알아보았으니 직접적으로 JPA는 어떻게 사용하는지에 대해서 알아보겠습니다.

 

자바 모델 클래스에 @Entity 어노테이션을 달면 DB 테이블 엔티티로 맵핑되고, 자바 레파지토리 인터페이스에 @Repository 어노테이션을 달면 DB 테이블 CRUD 명령을 자동으로 생성해줍니다.

엔티티 구현 방법(Lombok 어노테이션 활용)

 

1. Lombok 어노테이션을 추가를 합니다.

 

  • Getter/Setter 생성을 위해 Lombok 어노테이션 @Data를 달아줍니다.

* 여기서 @Data는 @ToString, @EqualsAndHashCode, @Getter, @Setter, @RequiredArgsConstructor를 한번에 사용하는 강력한 어노테이션입니다. ( 실제 프로젝트에서는 @Getter 주로 사용)

* 자동으로 Setter를 지원하므로 안정성이 보장되지않아 @Data는 지양하는 편이라고 합니다.

 

  • 모든 파라메터를 다 받아들이는 생성자 @AllArgsConstructor 달아줍니다.
  • 빈 파라메터 생성자 @NoArgsConstructor 달아줍니다.

2. JPA 어노테이션 추가

 

  • JPA의 객체와 테이블을 매칭 하기 위하여 JPA의 엔티티를 @Entity를 달아줍니다.
  • id 속성값의 엔티티의 키가 되므로, JPA의 어노테이션 @Id를 달아줍니다.

레파지토리 구현 방법

1. JPA의 레파지토리(Repository) 이므로 @Repository를 달아줍니다.

 

  • JPA 레파지토리를 구현하기 위해서는 JpaRepository를 상속하게 되는데 기본적인 CRUD를 처리할 수 있는 함수가 정의되어 있어 간단한 내용을 데이터베이스로부터 처리할 수 있게 도와줍니다.
  • 이때 상속받는 제너릭 타입은 첫 번째 앞에서 생성한 Produect, 두 번째(ID)는 앞에서 Product의 키 타입인 "Integer"를 넣어줍니다. ("Int", "Long"과 헷갈리지 않기!!)

REST API 구현

1. 레파지토리, REST API, /product 요청 핸들러 추가

 

  • 클래스 속성으로 productRepository 자동으로 주입받기 위하여 스프링 어노테이션 @Autowired를 추가합니다.
  • REST API를 제공하는 컨트롤이므로 스프링 어노테이션 @RestController를 추가합니다.
  • /product 경로의 요청 처리를 하기 위해 getProducts 메소드를 추가 후, 스프링 어노테이션 @RequestMapping을 추가합니다.
  • /product/{id} 경로 처리를 위해 getProductById 메소드를 추가하고 스프링 어노테이션 @RequestMapping 을 추가합니다.
  • getProductById 메소드안에 productRepository.findById 를 호출하는 코드를 넣어줍니다.
  • 여기서 id는 경로변수 이므로 어노테이션 @PathVariable를 달아줍니다.

ApplicationRunner 클래스 추가

 

ApplicationRunner 객체를 생성해 놓으면 스프링 부트 어플리케이션 실행 시에 자동으로 이 객체의 run() 메소드가 실행이 됩니다. 

  • ProductRepository를 추가하고, 자동으로 주입(injection)을 받기 위해 스프링 어노테이션 @Autowired를 추가합니다.
  • ApplicationRunner 빈을 생성해주는 applicationRunner 메소드를 만듭니다.
  • 이 메소드는 Bean을 생성해야 인식해야하므로 @Bean을 달아줍니다.
  • run() 메소드 안에서는 Product 객체를 생성하고 ProductRepository.save()함수를 실행해서 저장하는 코드를 넣어줍니다.

위의 절차와 같이 Spring Data JPA를 알아보았고 아래와 같이 JSON 결과로 리턴되는 것을 볼 수 있습니다.

/product 호출
/product/{id} 호출

 

Comments