준호씨의 블로그
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지난번 포스팅과 비슷한 내용입니다.
서비스를 구동했을 때 발생했던 또 다른 오류입니다.
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 서버에 배포하는 경우에 제거할 필요는 없다고 하네요. 오히려 인텔 맥 개발자와 협업하는 경우에 주의해 줘야 될 거 같습니다.
M1인 경우에만 추가하려면 다음과 같은 방법들이 있겠습니다.
시스템 프로퍼티의 os.name, os.arch를 확인해서 넣어주는 방법
출처: https://github.com/netty/netty/issues/11020#issuecomment-1193280582
osdectector 플러그인 이용하는 방법
netty-all 추가하는 방법
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을 사용해 봤는데 이 방법은 아닌 거 같습니다.