Spring/실전! 스프링부트와 JPA 활용1

회원 도메인 개발

hyun-1200 2022. 3. 9. 01:28

1. 회원 Repository 개발

- repository > MemberRepository.class 생성 

- JPA를 사용하기 위한 EntityManager 

- save()

- findOne(Long id)

- findAll()

- findByName(String name) 

 

 

2. 회원 서비스 개발

- service > MemberService.class 생성 

 

@Autowired

MemberRepository 변수에 @Autowired를 지정하게 되면, 테스트코드 작성할때 수정이 어려움.

-> 생성자에 Autowired 에노테이션 쓰면 편함

-> Lombok 의 @RequiredArgsConstuctor 사용하면 (final이 붙은) memberRepository에 해당하는 생성자만 만들고, 생성자도 자동 Autowired 시켜줌. 

 

  • 회원가입 Join (Member member)
  • 중복회원 유무 검증  : validateDuplicateMember
  • 회원 리스트 전체 조회 : findMembers()
  • 회원 단건 조회 : findOne(Long id) 

* transactional 에노테이션은 javax 제공하는 것과 spring에서 제공하는 것 두개가 있는데,

spring에서 제공해주는 것을 사용한다.

import org.springframework.transaction.annotation.Transactional;

 

3. 회원 테스트 

 

아래 에노테이션 사용해야, 스프링부트에서 제공해주는 테스트 기능을 사용할 수 있다.

 

@Runwith(SpringRunner.class): 스프링과 테스트 통합

@SpringBootTest : 스프링 부트 띄우고 테스트(이게 없으면 @Autowired 다 실패)

@Transactional : 반복 가능한 테스트 지원, 각각의 테스트를 실행할 때마다 트랜잭션을 시작하고 테스트가 끝나면 트랜잭션을 강제로 롤 (이 어노테이션이 테스트 케이스에서 사용될 때만 롤백)

@Transactional 에노테이션 사용하면 데이터베이스에 데이터가 저장안되고 rollback이 되기때문에,

직접 확인해보고 싶다면 @Rollback(false) 를 사용하면 된다. 

 

1. 회원가입 테스트 

 

2. 중복회원

 

EXPTION으로 IllegalStateException 이 발생하면 테스트 성공임을 알려준다.

@Test(expected = IllegalStateException.class)

 

fail 부분까지 오면 예외발생이 잘못되었다고 알려주는 것이다.

예외가 발생한다면 ( IllegalStateException ) , fail부분이 오기전에 이미 return 되기때문에 밑에는 실행되지 않는다.

 

* 메모리 데이터 베이스 사용하는 법

test폴더 밑에 resources > application.yml 을 생성한다. ( 기존 application.yml 을 복사한다.) 

기존 설정부분을 다 주석처리한다.

아무 설정이 없으면 스프링부트에서는 자동으로 메모리 데이터베이스를 사용하게 된다.

-> 프로젝트 실행할때마다 h2 데이터베이스를 실행시켜주지 않아도 된다. 

 

 

* 테스트 케이스를 위한 설정

테스트는 케이스 격리된 환경에서 실행하고, 끝나면 데이터를 초기화하는 것이 좋다. 그런 면에서 메모리 DB를 사용하는 것이 가장 이상적이다추가로 테스트 케이스를 위한 스프링 환경과, 일반적으로 애플리케이션을 실행하는 환경은 보통 다르므로 설정 파일을 다르게 사용하자다음과 같이 간단하게 테스트용 설정 파일을 추가하면 된다.

 

스프링 부트는 datasource 설정이 없으면, 기본적을 메모리 DB를 사용하고, driver-class도 현재 등록된 라이브러를 보고 찾아준다. 추가로 ddl-auto  create-drop 모드로 동작한다. 따라서 데이터소스나, JPA 관련된 별도의 추가 설정을 하지 않아도 된다.

 

 

 

 

'Spring > 실전! 스프링부트와 JPA 활용1' 카테고리의 다른 글

웹계층 개발 - Home  (0) 2022.03.18
주문 도메인 개발  (0) 2022.03.16
애플리케이션 아키텍처  (0) 2022.03.08
2.요구사항 분석 설계  (0) 2022.03.08
1. 프로젝트 환경설정  (0) 2022.03.06