Back-End/Inflearn 강의

[JPA 활용 - 웹 애플리케이션 개발] 회원 도메인 개발

yeonx 2022. 9. 11. 22:36
728x90

회원 리포지토리 개발

기술 설명

  • @Repository : 스프링 빈으로 등록, JPA 예외를 스프링 기반 예외로 예외 변환
  • @PersistenceContext : 엔티티 매니저(EntityManger) 주입
  • @PersistenceUnit : 엔티티 매니저 팩토리(EntityManagerFactory) 주입

기능 설명

  • save()
  • findOne()
  • findAll()
  • findByName()

 

 

 

회원 서비스 개발

기술 설명

  • @Service
  • @Transactional : 트랜잭션, 영속성 컨텍스트
    • readOnly=true : 데이터의 변경이 없는 읽기 전용 메서드에 사용, 영속성 컨텍스트를 플러시 하지 않으므로 약간의 성능 향상(읽기 전용에는 다 적용)
    • 데이터베이스 드라이버가 지원하면 DB에서 성능 향상
  • @Autowired
    • 생성자 Injection 많이 사용, 생성자가 하나면 생략 가능

기능 설명

  • join()
  • findMembers()
  • findOne()
참고 : 스프링 필드 주입 대신에 생성자 주입을 사용하자

 

생성자 주입

  • 생성자 주입 방식을 권장
  • 변경 불가능한 안전한 객체 생성 가능
  • 생성자가 하나면, @Autowired를 생략할 수 있다.
  • final 키워드를 추가하면 컴파일 시점에 memberRespotory를 설정하지 않는 오류를 체크할 수 있다.(보통 기본 생성자를 추가할 때 발견)

lombok의 @RequiredArgsConstructor을 통해 자동으로 생성자 주입 생성

 

 

 

 

회원 기능 테스트

기술 설명

  • @RunWith(SpringRunner.class) : 스프링과 테스트 통합
  • @SpringBootTest : 스프링 부트 띄우고 테스트 (이게 없으면 @Autowired 다 실패)
  • @Transactional : 반복 가능한 테스트 지원, 각각의 테스트를 실행할 때마다 트랜잭션을 시작하고 테스트가 끝나면 트랜잭션을 강제로 롤백(이 어노테이션이 테스트 케이스에서 사용될 때만 롤백)

 

테스트 케이스를 위한 설정

테스트는 케이스 격리된 환경에서 실행하고, 끝나면 데이터를 초기화하는 것이 좋다. 그런 면에서 메모리 DB를 사용하는 것이 가장 이상적이다. 

 

 

 

 

참고 강의 : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-JPA-%ED%99%9C%EC%9A%A9-1/dashboard

 

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 - 인프런 | 강의

실무에 가까운 예제로, 스프링 부트와 JPA를 활용해서 웹 애플리케이션을 설계하고 개발합니다. 이 과정을 통해 스프링 부트와 JPA를 실무에서 어떻게 활용해야 하는지 이해할 수 있습니다., - 강

www.inflearn.com