본문 바로가기
백엔드개발자/SPRING, JPA 등...

@Transactional, @NoArgsConstructor, @AllArgsConstructor, @RequiredArgsConstructor

by 보혀니 2022. 2. 13.
@Service
@Transactional(readOnly = true) // join, private 메서드 제외하고 readOnly true속성을 가짐
//@AllArgsConstructor // 모든 필드를 가지고 생성자를 만들어줌
@RequiredArgsConstructor // final이나 @NonNull인 필드 값만 파라미터로 받는 생성자 만듦
public class MemberService {

	private final MemberRepository memberRepository;

//	public MemberService(MemberRepository memberRepository) {
//		this.memberRepository = memberRepository;
//	}

	/**
	 * 회원가입
	 */
	@Transactional
	// 우선권을 가지기에 readOnly true가 아님, 기본값 readOnly false
	public Long join(Member member) {
		validateDuplicateMember(member); // 중복 회원 검증
		memberRepository.save(member);
		return member.getId();
	}

	private void validateDuplicateMember(Member member) {
		List<Member> findMembers = memberRepository.findByName(member.getName());
		if (!findMembers.isEmpty()) {
			throw new IllegalStateException("이미 존재하는 회원입니다.");
		}
	}

	/**
	 * 전체 회원 조회
	 */
	public List<Member> findMembers() {
		return memberRepository.findAll();
	}

	public Member findOne(Long memberId) {
		return memberRepository.findOne(memberId);
	}
}

 

 

[ Lombok 기능임 ]

@NoArgsConstructor : 파라미터가 없는 기본 생성자를 만듦

@AllArgsConstructor : 모든 필드를 가지고 생성자를 만들어줌
@RequiredArgsConstructor : final이나 @NonNull인 필드 값만 파라미터로 받는 생성자 만듦

 

 

 

 

 

트랜잭션의 성질 4가지

1. 원자성

 한 트랜잭션 내에서 실행한 작업들은 하나의 단위로 처리. 즉 모두 성공 또는 모두 실패

2. 일관성

 트랜잭션은 일관성 있는 데이터베이스 상태를 유지(data integrity 만족 등)

3. 격리성

 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않도록 격리해야한다.

4. 영속성

 트랜잭션을 성공적으로 마치면 결과가 항상 저장되어야 함