회원 도메인 개발
Reference : Inflearn- 실전 스프링부트와 JPA 활용1 (김영한님 강의)
다음 기능들을 포함한 애플리케이션을 개발해보자.
회원 기능
회원 등록
회원 조회
상품 기능
상품 등록
상품 수정
상품 조회
주문 기능
상품 주문
주문 내역 조회
주문 취소
회원 리포지토리
MemberRepository.java
@Repository : 스프링빈으로 등록하고, JPA 예외를 스프링 기반 예외로 변환
@PersistenceContext : 엔티티 매니저 주입
@PersistenceUnit : 엔티티 매니저 팩토리 주입
save() : persist로 멤버 엔티티 넣고, 트랜잭션이 커밋되는 시점에 db에 반영됨. (insert query가 날라감)
findOne() : 단건 조회. 멤버를 조회해서 반환
findAll() : JPQL을 사용해서 query 생성. (SQL과 비슷한데 FROM의 대상이 테이블이 아닌 엔티티가 된다.)
findByName() : Parameter binding해서 특정 이름의 회원만 찾는다.
회원 서비스
service package / MemberService.java
@Service : Component scan의 대상이 되어 자동으로 등록됨.
@Transactional : 트랜잭션, 영속성 컨텍스트.
readOnly=true : 데이터 변경이 없는 읽기 전용 메서드에 사용한다. 약간의 성능 향상 (읽기 모드만!!!)
데이터베이스 드라이버가 지원시 DB에서 성능 향상
기본적으로 두면 readOnly=false 이므로 필요한 상황에 따라 사용
@Autowired : 생성자 Injection 많이 사용
중복 검증 시 실무에서는 멀티 쓰레드 상황을 고려하여 회원 테이블의 회원명 컬럼에 유니크 제약을 추가하는 것이 안전하다.
회원 기능 테스트
회원 가입에 성공해야함
회원 가입 시 같은 이름이 있으면 예외 발생
@RunWith(SpringRunner.class) : 스프링과 테스트 통합.
@SpringBootTest : 스프링 부트를 띄운 상태에서 테스트 실행. (있어야 @Autowired 실행)
@Transactional : 테스트 실행할때마다 트랜잭션 시작하고, 테스트 끝나면 트랜잭션을 강제로 롤백한다. 반복 가능한 테스트 지원.
★ 테스트 케이스 실행 시, Gvien, When, Then 사용해서 각각의 케이스 설정해서 작성하면 편하다!
test/resources/application.yml
파일에 원하는 설정대로 하면 메모리 DB를 따로 사용하여 격리된 환경에서 테스트를 실행할 수 있다.
테스트 케이스를 위한 스프링 환겨과, 일반적으로 애플리케이션을 실행하는 환경이 다르므로 설정 파일을 다르게 사용하자.
위의 파일을 설정하면 테스트에서 스프링을 실행 시 이 위치에 있는 설정 파일을 읽는다.
(이 위치에 없으면 src/resources/application.yml 을 읽는다.)
Last updated