spring profile

장원재·2024년 4월 15일
0

스프링

목록 보기
9/9

나는 @PostConstruct 를 사용해서 편리하게 application 이 실행 되기 이전에 데이터를 넣어준 경험이 있다. 하지만 이때 테스트 코드를 작성할 때 개수를 카운트 하는 시점에 곤란해진다. 예시로 @PostConstruct 으로 사전에 2개의 데이터를 넣어놨다고 가정해보자. 그러면 save 라는 디비에 데이터를 저장하는 테스트 코드를 작성했을때 하나의 데이터를 추가로 저장하면 디비에는 총 3개의 데이터가 있게 되는 것이다. 이런 상황을 극복하기 위해서 스프링이 제공한는 @profile 어노테이션을 사용하면 된다.

	
	/**
     * TestDataInit.class
     * 확인용 초기 데이터 추가 
     */
    @EventListener(ApplicationReadyEvent.class)
    public void initData() {
        log.info("test data init");
        itemRepository.save(new Item("itemA", 10000, 10));
        itemRepository.save(new Item("itemB", 20000, 20));
    }


	// Application.class (main)
	@Bean
	@Profile("local")
	public TestDataInit testDataInit(ItemRepository itemRepository) {
		return new TestDataInit(itemRepository);
	}
  • @EventListener(ApplicationReadyEvent.class) 는 애플리케이션이 뜨고 나서 실행된다는 뜻이다. (아래 그림 참고)

  • @Profile("local") 을 통해서 나의 profile 이 local에 해당하면 testDataInit 함수를 빈으로 등록하라는 뜻이다. 즉, profile 이 local이 아니면 데이터 초기화 함수를 실행하지 않는 것이다. 따라서 테스트 코드를 작성하는 곳에서 profile 이 local이 아닌 다른 값으로 설정해주면 내가 겪은 문제가 해결된다.

profile을 설정하는 방법으로는 application.properties 파일에 spring.profiles.active=local 이런식으로 적어주면 된다.

profile
데이터 분석에 관심있는 백앤드 개발자 지망생입니다

0개의 댓글

관련 채용 정보