패스트캠퍼스 챌린지

패스트캠퍼스 환급 챌린지 10일차 : 9개 도메인 프로젝트로 끝내는 백엔드 웹 개발 (Java/Spring) 초격차 패키지 Online 강의 후기

ssoonearth 2025. 4. 10. 21:47

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

https://abit.ly/lisbva

 

 

 

 

패스트캠퍼스의 '9개 도메인 프로젝트로 끝내는 백엔드 웹 개발 (Java/Spring) 초격차 패키지 Online' 강의 수강 10일차!
오늘은 커뮤니티 피드 서비스의 게시글 및 댓글 서비스의 테스트 코드를 구현하는 실습을 진행하였다.

테스트 코드를 작성하면 작성할수록 주입해야 하는 의존성이 늘어났다. 테스트 클래스마다 일일이 의존성을 주입해야 하는 번거로움이 생겼고, 심지어 대부분의 의존성이 동일했기에 이것을 팩토리 클래스화하여 사용하였다.
테스트에서 사용할 의존성(Fake 객체들)을 생성하고, 이것을 싱글톤 형태로 관리한다. 여기서, 싱글톤 형태로 관리한다는 것은 메소드를 여러 번 호출해도 내부에서 항상 같은 객체만 반환되게 하여 하나의 인스턴스를 유지하고 재사용하는 것을 뜻한다.

public class FakeObjectFactory {
	private static final UserRepository fakeUserRepository = new FakeUserRepository();
	private static final UserService userService = new UserService(fakeUserRepository);
    
	public static UserService getUserService() {
        return userService;
    }
}


위의 코드를 보면, 필드에 `static final` 키워드가 붙어있다.

static은 클래스가 메모리에 로딩될 때 딱 한 번 생성이 된다. 즉, static 변수는 해당 클래스 전체에서 공통으로 공유되는 인스턴스이다.

final은 해당 변수에 값을 한 번 할당하면 다시 바꿀 수 없는 불변 객체이다.

그렇기 때문에 FakeObjectFactory.getUserService()를 아무리 여러 번 호출한다 한들, 내부에서 반환되는 UserService는 항상 같은 객체인 것이다.

 

또한, 비슷한 구조의 의존성을 가진 (중복되는 의존성이 있는) 테스트 클래스는 템플릿 클래스를 만들어 사용하면 좋다.

의존성들을 템플릿 클래스에 주입시키고, 테스트 클래스에서 템플릿 클래스를 extends(상속) 하면 된다.

이러한 방법은 테스트 클래스에서 주입해야 할 의존성들이 줄어들고, 이는 가독성과 유지보수성을 향상시킨다.

 

이번 강의까지 순수 자바(+ JUnit)로만 도메인과 비즈니스 로직을 모두 구현하였다.

지금까지는 처음부터 프레임워크를 적용시켜서 기능을 구현하였기 때문에 객체지향적인 구조 설계와 효과적인 테스트 코드 활용에 어려움이 있었는데, 강의를 통해 배운 소프트웨어 아키텍처 설계 방법을 기반으로 프로젝트를 진행해 봐야겠다는 생각이 들었다.