스프링 입문 맛보기 9

Spring 정리 2021. 8. 5. 19:48

인프런 강의 17일차.

 - 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (김영한 강사님)

 

1. 스프링 데이터 JPA

 - 스프링 부트와 JPA만 사용해도 개발 생산성이 많이 증가한다.

 - 여기에 스프링 데이터 JPA를 사용하면 기존의 한계를 넘어 리포지토리에 구현 클래스 없이 인터페이스 만으로 개발을 완료할 수 있다.

 - 반복 개발해온 기본 CRUD 기능도 스프링 데이터 JPA가 모두 제공한다.

 - 스프링 부트와 JPA라는 기반 위에, 스프링 데이터 JPA 프레임워크를 더하면 단순/반복 개발 코드가 확연하게 줄어드므로 개발자는 핵심 비즈니스 로직을 개발하는데 집중할 수 있다.

 - 실무에서 관계형 데이터베이스를 사용한다면 스프링 데이터 JPA는 이제 선택이 아니라 필수!!

 

 * 스프링 데이터 JPA는 JPA를 편리하게 사용할 수 있도록 도와주는 기술이므로 JPA를 먼저 학습한 이후에 스프링 데이터 JPA를 학습해야한다.

//스프링 데이터 JPA회원 리포지토리
package hello.hellospring.repository;

import hello.hellospring.domain.Member;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Optional;

public interface SpringDataJpaMemberRepository extends JpaRepository<Member, Long>, MemberRepository{
	Optional<Member> findByNames(String name);
    
}

 

//스프링 데이터 JPA 회원 리포지토리를 사용하도록 스프링 설정 변경
package hello.hellospring;

import hello.hellospring.repository.*;
import hello.hellospring.service.MemberService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SpringConfig {

	private final MemberRepository memberRepository;
    
    public SpringConfig(MemberRepository memberRepository) {
    	this.memberRepository = memberRepository;
    }
    
    @Bean
    public MemberService memberService() {
		return new MemberService(memberRepository);
	}
}

  > 스프링 데이터 JPA가 'SpringDataJpaMemberRepository'를 스프링 빈으로 자동 등록해준다.

 

* 스프링 데이터 JPA 제공 기능

 - 인터페이스를 통한 기본적인 CRUD

 - 'findByName()' , 'findByEmail()' 처럼 메소드 이름만으로 조회 기능 제공

 - 페이징 기능 자동 제공

  ** 참고 : 실무에서는 JPA와 스프링 데이터 JPA를 기본으로 사용하고, 복잡한 동적 쿼리는 Querydsl이라는 라이브러리를 사용하면 된다. Querydsl을 사용하면 쿼리도 자바 코드로 안전하게 작성할 수 있고, 동적 쿼리도 편리하게 작성할 수 있다. 이 조합으로 해결하기 어려운 쿼리는 JPA가 제공하는 네이티브 쿼리를 사용하거나, 앞서 학습한 스프링 JdbcTemplate를 사용하면 된다.

 

'Spring 정리' 카테고리의 다른 글

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 1  (0) 2021.08.18
스프링 입문 맛보기 10  (0) 2021.08.11
스프링 입문 맛보기 8  (0) 2021.08.05
스프링 입문 맛보기 7  (0) 2021.08.05
스프링 입문 맛보기 6  (0) 2021.08.04

스프링 입문 맛보기 8

Spring 정리 2021. 8. 5. 19:32

인프런 강의 16일차.

 - 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (김영한 강사님)

 

1. JPA (Java Persistence API)

 - JPA는 기존의 반복 코드는 물론이고, 기본적인 SQL도 JPA가 직접 만들어서 실행해준다.

 - JPA를 사용하면, SQL과 데이터 중심의 설계에서 객체중심의 설계로 패러다임을 전환할 수 있다.

 - JPA를 사용하면 개발 생산성을 크게 높일 수 있다.

 - 한국은 Mybatis를 많이 사용했으나 2015년 기점으로 JPA도 많이 올라옴

 - JPA는 인터페이스일 뿐이고 이를 실제로 구현하는 것은 각 업체별로 마음에 드는 것을 사용하면 됨 (hibernate를 많이 씀)

 

 *build.gradle 파일에 JPA, h2 데이터베이스 관련 라이브러리 추가

dependencies {
 implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
 implementation 'org.springframework.boot:spring-boot-starter-web'
 //implementation 'org.springframework.boot:spring-boot-starter-jdbc'
 implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
 runtimeOnly 'com.h2database:h2'
 testImplementation('org.springframwork.boot:spring-boot-starter-test') {
  exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
 }
}

 > spring-boot-starter-data-jpa는 내부에 jdbc 관련 라이브러리를 포함한다. 따라서 jdbc는 제거해도 된다.

 

 * 스프링 부트에 JPA 추가 설정

--resource/application.properties 파일
spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.driver-class-name=org.h2.Drive
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=none

 - JPA가 관리하도록 추가하려면 @Entity 애노테이션을 클래스에 추가하면 됨

 - PK는 @Id 애노테이션을 추가하면 됨

import javax.persistence.*;

@Entity
public class Member {
	
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)	//DB가 자동으로 만드는 identity 설정
    private Long id;
    
    private String name;
    
    public Long getId(){
    	return id;
    }
    
    public void setId(Long id){
    	this.id = id;
    }
    
    public String getName(){
    	return name;
    }
    
    public void setName(String name){
    	this.name = name;
    }
 }

 

 - 서비스 단에서 중복을 방지하고자 @Transaction을 걸어두어야 한다.

'Spring 정리' 카테고리의 다른 글

스프링 입문 맛보기 10  (0) 2021.08.11
스프링 입문 맛보기 9  (0) 2021.08.05
스프링 입문 맛보기 7  (0) 2021.08.05
스프링 입문 맛보기 6  (0) 2021.08.04
스프링 입문 맛보기 5  (0) 2021.07.14