이 글에서는 Spring Boot에서 데이터를 저장하는 과정과 필드 주입에 대해 설명합니다. Spring Boot에서 클라이언트로부터 데이터를 받아 DB에 저장하는 기본적인 과정과 필드 주입을 통한 의존성 주입을 이해하면, 원하는 데이터를 DB에 저장하고 객체를 효율적으로 관리할 수 있습니다.
Spring Boot에서 클라이언트가 입력한 데이터를 DB에 저장하는 과정은 다음과 같습니다.
이 과정을 이해하고 활용하면 원하는 데이터를 DB에 저장할 수 있습니다.
필드 주입(field injection)이란, 클래스의 멤버 변수(필드)에 의존성을 주입하는 것입니다. Spring에서는 @Autowired 어노테이션을 사용하여 의존성 주입을 수행할 수 있습니다. 필드 주입을 사용하면, 개발자가 직접 객체를 생성하거나 관리할 필요 없이 Spring이 필요한 객체를 생성하고 주입해 줍니다.
예를 들어, MyService 클래스가 MyRepository 클래스에 대한 의존성을 가지고 있을 때, 필드 주입을 사용하지 않은 경우와 사용한 경우를 비교해 보겠습니다.
@Service
public class MyService {
private MyRepository myRepository;
public MyService() {
this.myRepository = new MyRepository();
}
}
위 예제에서는 MyService의 생성자에서 직접 MyRepository 객체를 생성하고 있습니다. 이렇게 되면, MyRepository의 변경이 있을 경우 MyService도 함께 수정해야 하고, 테스트하기 어려워집니다.
@Service
public class MyService {
@Autowired
private MyRepository myRepository;
}
위 예제에서는 @Autowired 어노테이션을 사용하여 MyRepository의 의존성을 주입하고 있습니다. 이렇게 되면 Spring이 자동으로 필요한 MyRepository 객체를 생성하고 주입해 주므로, 개발자가 직접 객체를 생성하거나 관리할 필요가 없습니다. 이로 인해 코드의 재사용성과 유지 보수성이 향상됩니다.
필드 주입의 장점은 코드가 간결해지고 사용하기 쉬워진다는 점입니다. 또한, 개발자가 의존성을 주입하는 부분에 직접적으로 개입할 필요가 없어지므로, 개발 과정이 단순화됩니다. 그러나 필드 주입은 멤버 변수가 final로 선언될 수 없어 변경 가능하게 된다는 단점이 있으며, 순환 참조 문제를 발견하기 어렵다는 점도 단점입니다. 또한, 테스트 시에도 의존성을 주입하는 방식이 자동화되기 때문에 테스트 코드 작성이 어려워질 수 있습니다.
따라서, 생성자 주입(constructor injection)은 권장되는 방식이지만, 상황에 따라 필드 주입이 적절한 경우도 있습니다. 필드 주입을 사용하면서 이러한 단점을 최소화하려면, 순환 참조를 피하고 유지 보수 및 테스트에 주의를 기울여야 합니다. 결론적으로, 필드 주입은 코드의 간결함과 편리함을 제공하지만, 몇 가지 주의할 점이 있으므로 상황에 맞게 적절한 의존성 주입 방식을 선택하는 것이 중요합니다.