BlockHound 설정

지능바바·2022년 11월 30일
0

springboot+webflux

목록 보기
2/2

앞장에서 만든 기본 프로젝트에 blockhound를 추가해 보겠다.
Reactive 프로그래밍을 하면서 조심해야 하는것은 이 프로젝트 내에 블로킹 코드가 존재하면 전반적인 서버의 성능저하로 이어질수도 있다는 것이다. 그러므로 의도하지 않은 블로킹 코드가 존재하는지에 대해서 테스트가 필요하다는 것이다. 다행히 이런경우에 Blockhound를 이용해서 블로킹 코드를 찾을 수 있다.

세팅

  • Gradle 설정
compileOnly("io.projectreactor.tools:blockhound:1.0.6.RELEASE")

위와같이 blockhound 에 대한 의존성을 추가해준다.

  • Blockhound 동작
fun main(args: Array<String>) {
    BlockHound.install()
    runApplication<WebFluxDemoApplication>(*args)
}

위의 코드에서처럼 main 메소드에 BlockHound.install() 한줄만 추가해주면 된다.
다만 여기서 주의해야 하는것은 반드시 runApplication 메소드 호출보다 앞에 넣어줘야 한다는 것이다. 이렇게해야 스프링부트 어플리케이션이 시작할 때 블록하운드가 바이트코드를 조작할 수 있게 된다.

  • Blockhound 허용 리스트 추가
BlockHound.builder()
        .allowBlockingCallsInside(MemberController::class.java.canonicalName, "getMember")
        .install()

때로는 블로킹코드기는 하지만 실제 어플리케이션의 성능에 영향이 가지 않는경우이거나 반드시 필요한 경우에는 블록하운드에서 검출하지 않도록 예외설정이 필요할 수 있다.
이때 위와같이 블록하운드 설정을 통해 예외설정이 가능하다.

0개의 댓글