회원 도메인 개발
구현 기능
회원 등록
회원 목록 조회
순서
회원 리포지토리 개발
회원 서비스 개발
회원 기능 테스트
회원 리포지토리 개발
Merge pull request #3 from Lemon-soju/slave-01 · Lemon-soju/Spring-Boot-and-JPA-toddler-practice-01@419a1e8
User Repository Developement
github.com
리포지토리는 엔티티 매니저를 이용하여 데이터베이스에 접근할 수 있는 계층이다. 회원 리포지토리에서는 회원 저장, id로 회원 조회, 회원 전체 조회, 이름으로 회원 조회 4가지 기능을 구현했다.
회원 서비스 개발
Merge pull request #4 from Lemon-soju/slave-01 · Lemon-soju/Spring-Boot-and-JPA-toddler-practice-01@bbc391e
User Service Developement
github.com
서비스 계층은 실제 비즈니스 서비스 기능이 구현된 계층으로 중복 회원 검증이 포함된 회원 가입 기능과 회원 전체 조회, 회원 개별 조회
배운 것
1. 서비스 계층에 Transactional 어노테이션을 사용하는 이유
@Transactional을 서비스 계층에 거는 이유는 비즈니스 로직의 특징 때문입니다.
계좌이체를 떠올려보시면 다음과 같이 되는데요.
Service {
나의돈을 1000원 제거
상대방에게 돈을 1000원 추가
}
중간에 오류가 발생하면 두 로직이 함께 롤백되어야 합니다.
따라서 서비스 계층에 보통 트랜잭션을 사용합니다.
2. Autowired를 사용하면 스프링 빈에 등록되어 있는 MemberRepository를 인젝션하여 모두 같은 변수에 접근할 수 있다.
Autowired를 사용할 때 필드에 바로 Autowired를 사용하여 중간에 인젝션이 불가능하므로 Setter에 Autowired를 붙여서 Setter 인젝션을 할 수 있지만 실제로 개발 단계이후 중간에 변경하는 일은 없으므로 보통 생성자에 Autowired를 붙여서 생성자 인젝션을 사용하는 경우가 많다. 생성자가 하나인 경우에는 Autowired를 사용안해도 자동으로 해줌
3.
@AllArgsConstructor -> 모든 필드를 가지고 생성자를 만들어 준다.
@RequiredArgsConstructor -> final이 설정된 필드만 가지고 생성자를 만들어 준다.
회원 기능 테스트
테스트 요구사항
회원가입을 성공해야 한다.
회원가입을 할 때 같은 이름이 있으면 예외가 발생해야 한다.
Merge pull request #5 from Lemon-soju/slave-01 · Lemon-soju/Spring-Boot-and-JPA-toddler-practice-01@5dd66a5
User Function Test
github.com
배운 것
1. try catch는 발생한 예외를 처리해주는 함수이고 throws Exception은 발생한 예외를 현재 메소드를 호출한 메소드에게 떠넘긴다.
2. 실제 운영은 데이터베이스로 테스트는 메모리 모드로 구현한다. main과 test는 각각의 application.yml로 동작할 수 있으므로 test에 application.yml을 추가하고 메모리 모드로 변경하면 데이터베이스 없이 테스트를 할 수 있다.
'웹 개발 > Back End' 카테고리의 다른 글
실전! 스프링 부트와 JPA 활용1 - 주문 도메인 개발 (0) | 2022.01.07 |
---|---|
실전! 스프링 부트와 JPA 활용1 - 상품 도메인 개발 (0) | 2022.01.07 |
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 구현 준비 (0) | 2022.01.06 |
실전! 스프링 부트와 JPA 활용1 - 도메인 분석 설계 (0) | 2022.01.05 |
실전! 스프링 부트와 JPA 활용1 - 프로젝트 환경설정 (0) | 2022.01.05 |
댓글