준호씨의 블로그

OSX - M1 개발환경 오류 - could not load a native library: netty_resolver_dns_native_macos_aarch_64 본문

개발이야기

OSX - M1 개발환경 오류 - could not load a native library: netty_resolver_dns_native_macos_aarch_64

준호씨 2022. 8. 10. 22:45
반응형

지난번 포스팅과 비슷한 내용입니다.

 

OSX - M1 개발환경 오류 - [FAILED_TO_LOAD_NATIVE_LIBRARY] no native library is found for os.name=Mac and os.arch=aarch6. #g

얼마 전 지급받은 M1맥북에서 개발환경을 세팅하면서 겪은 이슈들을 하나씩 적어보려고 합니다. Spring Boot 2.5.xx를 사용하는 프로젝트인데 서비스를 구동시키니 다음과 같은 에러가 발생하였습

junho85.pe.kr

 

서비스를 구동했을 때 발생했던 또 다른 오류입니다.

2022-08-09 19:12:10.886 ERROR 33264 --- [           main] i.n.r.d.DnsServerAddressStreamProviders  : Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS.
...
Caused by: java.lang.UnsatisfiedLinkError: failed to load the required native library
at io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider.ensureAvailability(MacOSDnsServerAddressStreamProvider.java:110)
at io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider.<init>(MacOSDnsServerAddressStreamProvider.java:120)
... 100 common frames omitted
Caused by: java.lang.UnsatisfiedLinkError: could not load a native library: netty_resolver_dns_native_macos_aarch_64
...

하지만 마찬가지로 native library를 로드하지 못해서 발생한 오류입니다.

class를 뒤져보거나 인터넷을 검색해 보면 netty-resolver-dns-native-macos라이브러리 문제인 것을 찾을 수 있습니다.

 

디펜던시 관계를 찾아보면 spring-boot-starter-webflux > spring-boot-starter-reactor-netty > reactor-netty-http > reactor-netty-core > netty-resolver-dns-native-macos를 찾을 수 있습니다.

간단히 해결하려면 역시 맞는 버전으로 implementation 해주면 됩니다. 이번엔 좀 특이한 게 classifier에 osx-aarch_64를 넣어주어야 합니다. 이건 인텔 맥북 사용하는 사람들과 협업할 때 문제가 생길 수도 있을 거 같네요.

implementation("io.netty:netty-resolver-dns-native-macos:4.1.79.Final:osx-aarch_64")

 

배포할 때 제외해야 되는지?

참고로 리눅스처럼 다른 OS 서버에 배포하는 경우에 제거할 필요는 없다고 하네요. 오히려 인텔 맥 개발자와 협업하는 경우에 주의해 줘야 될 거 같습니다.

https://github.com/netty/netty/issues/11020#issuecomment-1006445733

M1인 경우에만 추가하려면 다음과 같은 방법들이 있겠습니다.

 

시스템 프로퍼티의 os.name, os.arch를 확인해서 넣어주는 방법

출처: https://github.com/netty/netty/issues/11020#issuecomment-1193280582

 

osdectector 플러그인 이용하는 방법

netty-all 추가하는 방법

출처: https://stackoverflow.com/questions/65954571/spring-boot-2-4-2-dns-resolution-problem-at-start-on-apple-m1/71348963#71348963

 

netty-resolver-dns-native-macos만 추가하는 방법 (버전은 잘 확인해서 넣어줍니다)

if (osdetector.arch.equals("aarch_64")) {
    implementation("io.netty:netty-resolver-dns-native-macos:4.1.79.Final:osx-aarch_64")
}

 

기타

그런데 지난번에 했던 것처럼 4.1.75.Fianl를 찾아서 4.1.79.Final:osx-aarch_64로 바꿔주고 싶은데 방법을 찾지 못했습니다.

useVersion에 classifier를 지정하지는 못하는 거 같아서 useTarget을 사용해 봤는데 이 방법은 아닌 거 같습니다.

 

반응형
Comments