상세 컨텐츠

본문 제목

[스프링1] 섹션6. 스프링 DB 접근 기술 JPA

23-24/Spring 1

by 숨니 2023. 10. 6. 10:00

본문

728x90

1. 스프링 DB접근 기술 JPA

📌 JPA(Java Persistence API)?

  • 자바 진영의 ORM(Object Relational Mapping) 기술 표준입니다.
  • 쿼리 문을 사용하지 않고도 데이터베이스에서 데이터를 추가, 수정, 조회, 삭제할 수 있는 기술을 제공합니다.
ORM(Object Relational Mapping)이란?
객체와 관계형 데이터베이스를 매핑해 주는 것입니다.
- 객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용하기 때문에 그 둘 사이 불일치가
존재하는데 ORM이 그것을 해결해 줍니다.

📌 왜 사용해야 하나?

  • JPA는 기존의 반복 코드, SQL문도 직접 만들어주어 생산성을 크게 높일 수 있습니다.
  • SQL과 데이터 중심의 설계에서 객체 중심의 설계로 패러다임을 전환할 수 있습니다.

💻 JPA설정

...

@Entity
public class Member {
 @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
 private Long id;
 private String name;
 ...
 
 }
  • @Entity는 JPA가 관리하는 entity라고 명시해주는 역할입니다.
  • @Id @GeneratedValue(strategy = GenerationType.IDENTITY)를 통해 데이터 삽입시 JPA가 자동으로 id 값을 설정해 줍니다.

💻 JPA 회원 리포지토리 생성

public class JpaMemberRepository implements MemberRepository {
    private final EntityManager em;

    ...
    public Member save(Member member) {
         em.persist(member);
         return member;
     }

     ...
    public List<Member> findAll() {
         return em.createQuery("select m from Member m", Member.class)
            .getResultList();
     }
 
    ...
  • JPA는 EntityManager가 직접 엔터티를 관리합니다.
  • 회원을 저장하는 경우 EntityManager가 직접 데이터를 생성해 주지만, 회원을 찾아야 하는 경우(조회) 엔터티를 대상으로 직접 쿼리문을 작성해야 합니다.

📌 서비스 계층에 트랜잭션 추가

  • 트랜잭션을 통해서 데이터가 변경되기 때문에 반드시 JPA를 통한 모든 데이터 변경을 트랜잭션 안에서 실행해야 합니다.
@Transactional
public class MemberService {
...

 

💻  JPA를 사용할 수 있도록 스프링 설정 변경

@Configuration
public class SpringConfig {
     private final DataSource dataSource;
     private final EntityManager em;
     
     public SpringConfig(DataSource dataSource, EntityManager em) {
         this.dataSource = dataSource;
         this.em = em;
     }
     
     @Bean
         public MemberService memberService() {
         return new MemberService(memberRepository());
     }
     
     @Bean
     public MemberRepository memberRepository() {
     	return new JpaMemberRepository(em);
     }
}
  • 만들어 놓은 JpaMemberRepository를 빈에 등록합니다.

 

2. 스프링 데이터 JPA

📌 스프링 데이터 JPA(Java Persistence API)?

  • 스프링 프레임워크에서 JPA를 편리하게 사용할 수 있게 해주는 모듈입니다.
  • 리포지토리에 구현 클래스 없이 인터페이스 만으로 개발을 완료할 수 있습니다.
  • 사용자가 더 간단하게 데이터에 접근이 가능합니다.

💻 스프링 데이터 JPA 회원 리포지토리

public interface SpringDataJpaMemberRepository extends JpaRepository<Member, Long>, MemberRepository {
 	Optional<Member> findByName(String name);
}
  • 각종 CRUD 함수는 인터페이스에서 제공되기 때문에 바로 사용할 수 있습니다.
  • 제공하지 않는 함수의 경우 findByName처럼 특정한 규칙을 따르기만 하면 쿼리문을 자동으로 만들어 함수를 생성해 줍니다.

📌  스프링 데이터 JPA 회원 리포지토리를 사용하도록 스프링 설정 변경

  • JPA가 SpringDataJpaMemberRepository를 스프링 빈으로 자동 등록해 줍니다.

QUIZ

1. 자바 진영의 ORM(Object Relational Mapping) 기술 표준으로 쿼리 문을 사용하지 않고도 데이터베이스에서 데이터를 추가, 수정, 조회, 삭제할 수 있는 기술을 제공하는 DB접근 기술을 무엇이라고 하나요?

2. JPA는 자동으로 쿼리문을 작성해준다.(O/X)

3. JPA가 관리하는 entity라고 명시해 주기 위해 어떤 어노테이션을 붙이나요?

4. JPA에서 엔터티를 관리하는 객체는 무엇인가요?

5. 데이터가 변경되는 서비스 계층에 무엇을 추가해야 하나요?

6. 스프링 프레임워크에서 JPA를 편리하게 사용할 수 있게 해주는 것이 무엇인가요?

7. 스프링 데이터 JPA를 사용하면 JPA리포지토리를 직접 스프링 빈으로 등록할 필요가 없다.(O/X)

8. 코너 회원의 도메인을 만들기 위해 다음의 코드를 작성하고자 합니다. [ ] 안에 들어갈 어노테이션을 작성하세요.

@Entity
public class CornerMember {
     [					]
     private Long id;
     private String name;
    
     public Long getId() {
     return id;
     ...
 }

9.  스프링 데이터 JPA를 사용하여 코너 멤버의 회원가입 메서드를 작성하고자 합니다. 다음을 완성하세요.

...
private final EntityManager em;

...
public Member save(Member member) {
     
 }

```

해당 포스트는 김영한, [스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술], (2022, 11월 28일), 섹션 6. 스프링 DB 접근기술 강의를 참고하여 작성하였습니다.

 

아리

728x90

관련글 더보기