멋사 Backend 48일차 🦁

신재원·2023년 6월 28일
post-thumbnail

📢 Spring

@Autowired

  • 스프링 컨테이너에 등록된 빈에 의존관계 주입이 필요한 경우 사용 하는 어노테이션 입니다.

@Autowired 는 대표적으로 3가지 방법으로 구현이 가능합니다.

  1. 필드 주입 (가장 안좋은 방법) (지양 해야하는 방법)
  2. setter 주입
  3. 생성자 주입 (가장 권장되는 방법)

➡ 필드 주입

@Service
public class UserService {
	@Autowired
    private UserRepository userRepository;
}

➡ setter 주입

  • setter 생성자 위에 @Autowired를 작성해줍니다.
  • setter를 public 으로 설정해야됨으로 변경 가능성이 있습니다.
@Service
public class UserService {
    private UserRepository userRepository;
    @Autowired
    public void setUserRepository(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}

➡ 생성자 주입 (@RequiredArgsConstructor 를 사용 해도됨)
생성자를 통해 의존성을 주입받을수 있습니다.

  • 객체가 생성 될때 딱 한번 호출되는것을 보장할수 있습니다.
    ( final = 누락을 방지 할수 있습니다. )
@Service
public class UserService {
    private final UserRepository userRepository;
    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}

위의 코드와 동일한 기능을하는 코드입니다.

@Service
@RequiredArgsConstructor
public class UserService {
    private final UserRepository userRepository;
}

💬 Test

  • 지금까지는 포스트맨을 통해 통합 테스트만을 진행 했습니다.

❓ 하지만 Controller, Repository 등 만을 테스트 하고 싶은 경우도 있을 것입니다.

그래서 단위(Unit) 테스트 라는 것이 등장 합니다.

테스트 코드의 장점

  • 개발 과정 중 예상치 못한 문제를 미리 발견할 수 있습니다.
  • 여러 상황에 대한 테스트코드를 작성함에 따라 코드의 품질이 상승 합니다.
  • 아래와 같은 단점들도 존재하지만, 장점의 효과가 엄청나기 때문에 필수적으로 작성이 필요합니다.

테스트 코드의 단점

  • 테스트 코드의 작성까지 해줘야 함으로 개발 시간이 오래걸립니다.
  • 실행 코드가 변경되면, 테스트 코드도 변경해줘야 함으로 유지보수가 발생합니다.
  • 테스트 폴더에 클래스 프로젝트를 만들어서 테스트 하면됩니다.

아래는 UserRepository를 단위 테스트하는 코드입니다.

  • @DataJpaTest : Jpa 관련 테스트만 합니다
    ( Spring Data Jpa 가 제공해주는 메소드, save, delete 등)
  • @Test : 테스트 메소드임을 나타내는 어노테이션

    코드에서 보시면 given / when / then 으로 나누어 로직을 작성했습니다.
  • 로직을 나눠서 작성하게되면, 가독성도 좋아지고, 테스트를 작성하는데 있어 빼먹는 부분을 줄일수 있습니다.

Mock

  • 단위 테스트를 위해 "가짜 객체" 를 만드는것입니다.

서비스단에서는 대부분 Repository를 참조하고 있음으로,
UserService 를 단위 테스트 하기 위해서 UserRepository 라는 가짜 객체를 만들어줍니다.

Reference

@Autowired 의존성 주입

0개의 댓글