🙃2022.11.15

일일 회고 91일차

할일 및 한일

경험 및 배움

오늘도 역시 자바와 스프링을 공부하였다.

우선 저번에 만들었던 테스트 케이스와 비슷하게 통합 테스트 케이스를 하나 생성하고, 코드는 복붙을 한 후에 변경해보았다.

@SpringBootTest 어노테이션을 붙이면 스프링 컨테이너와 같이 테스트를 진행한다는 의미가 되고, @Transactional 어노테이션은 기본적으로 해당 메소드가 실행될 때 트랜잭션을 시작하고, 해당 메소드가 끝날 때 커밋을 해서 데이터베이스에 전달된 내용을 확정시킨다.

하지만 이 어노테이션이 테스트 케이스에 들어가면, 테스트 케이스에 이 애노테이션이 있으면 테스트 시작 전에 트랜잭션을 시작하고, 테스트 완료 후에 커밋을 하는 것이 아닌, 항상 롤백한다.

따라서 테스트를 할 때 DB에 데이터가 남지 않게 되어서 다음 테스트에 영향을 끼치지 않는다고 한다.

다음에는 저번에 순수 JDBC로 모두 손수 짜보았던 코드를, Jdbc Template을 이용하여 변경해보았다. 이렇게 되면 반복 코드도 대부분 제거해주고, 코드가 간결하게 변하지만 아직까지 sql문은 직접 작성해야 한다는 번거로움이 존재한다.

따라서 다시 한번 이 코드를 JPA를 사용해서 변경해보았다.

JPA를 사용하면 반복 코드는 물론, 기본 sql문까지 직접 만들어서 실행해준다고 한다. 또한 sql 중심의 설계에서 객체 중심의 설계로 전환할 수 있다고 한다.

이렇게 하니 코드가 정말 간결해지고, @Entity 를 사용하여 엔티티를 매핑함으로써 테이블과, 자바 코드를 연결할 수 있다.

마지막으로는 스프링 데이터 JPA로 변경해보았다. 정말 신기하였다.

import introduction.springintroduction.domain.Member;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Optional;

public interface SpringDataJpaMemberRepository extends JpaRepository<Member, Long>, MemberRepository {

    @Override
    Optional<Member> findByName(String name);
}

위의 코드가 리포지토리의 전부이다.

스프링 데이터 JPA를 사용하면 리포지토리도 자동으로 스프링 빈으로 등록해주고, 인터페이스만 구현하면 구현 클래스를 작성하지 않아도 기본적인 CRUD도 모두 자동으로 작성해준다.

또한 findByName 이나 findByEmail 처럼 메소드 이름만으로도 조회가 가능하다.

우선 JPA를 학습 후에 학습하는 것이 좋다고 하니 아직은 먼 이야기 같다.

개선 및 목표

  • 내일도 역시!

Last updated