안녕하세요. ASP.Net Core Mvc에서 SQLite를 써보려고 하는데 로컬 개발환경에서는 문제없이 작동하는데
서버에 디플로이를 하면 SQLite의 라이브러리를 찾을수 없다는 에러가 발생합니다.
An unhandled exception occurred while processing the request.
DllNotFoundException: Unable to load shared library 'e_sqlcipher' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: libe_sqlcipher: cannot open shared object file: No such file or directory
SQLitePCL.SQLite3Provider_e_sqlcipher+NativeMethods.sqlite3_libversion_number()
여기저기 구글링해봐도 같은 문제가 발생했다는 질문들은 많은데 확실히 해결했다는 답변이 없네요.
에러가 나서부터 다 때려넣었더니 양이 엄청 많아졌네요.
예전에 WinForm앱 개발할때 x86 x64 폴더를 만들어서 별도 라이브러리를 넣어줬던게 생각나서
Linux에서도 비슷한걸 해줘야 하는가 싶어서 알아보니
컴파일 후에 runtimes라는 폴더가 생성되는걸 알았네요.
ASP.NET Core MVC 프로젝트에서 SQLite와 특히 e_sqlcipher를 사용할 때 서버에 배포한 후 라이브러리를 찾을 수 없는 문제는 종종 발생합니다. 여기서 문제는 e_sqlcipher가 서버 환경에 적절히 설치되지 않았거나, 애플리케이션이 해당 라이브러리를 찾을 수 있는 경로를 알지 못하기 때문일 수 있습니다. 해결 방법은 다음과 같습니다:
라이브러리 설치 확인: 서버에서 e_sqlcipher 및 필요한 모든 SQLite 관련 라이브러리가 올바르게 설치되어 있는지 확인하세요. 필요한 경우, 서버의 OS에 맞는 e_sqlcipher 패키지를 직접 설치해야 할 수도 있습니다.
환경 변수 설정: LD_LIBRARY_PATH 환경 변수에 e_sqlcipher 라이브러리가 위치한 디렉토리를 추가합니다. 이렇게 하면 애플리케이션이 해당 라이브러리를 찾을 수 있게 됩니다. 예를 들어, e_sqlcipher 라이브러리가 /usr/local/lib에 있다면, 다음과 같이 설정할 수 있습니다:
라이브러리 경로 확인: 애플리케이션을 배포할 때, runtimes/linux-x64/native 디렉토리에 있는 네이티브 라이브러리들이 올바른 위치에 배치되었는지 확인하세요. 일반적으로 이 라이브러리들은 애플리케이션 실행 파일과 같은 디렉토리에 있거나 시스템 라이브러리 경로 중 하나에 있어야 합니다.
프로젝트 파일 확인: 프로젝트의 .csproj 파일을 검토하여 모든 필요한 SQLitePCLRaw 패키지가 올바르게 참조되고 있는지 확인하세요. 불필요하거나 중복된 패키지 참조가 없는지도 확인합니다.
종속성 문제 해결: 때로는 특정 OS 버전이나 아키텍처에 필요한 종속성이 누락되어 문제가 발생할 수 있습니다. 예를 들어, e_sqlcipher를 사용하려면 추가적인 암호화 라이브러리가 필요할 수 있습니다. 해당 OS의 패키지 관리자를 통해 이러한 종속성을 설치합니다.
디버깅 정보 활용: 문제를 진단하기 위해 LD_DEBUG 환경 변수를 설정하는 것도 도움이 될 수 있습니다. 이를 통해 라이브러리 로딩 과정에 대한 자세한 정보를 얻을 수 있습니다. 예를 들어:
export LD_DEBUG=libs
이후 애플리케이션을 실행하여 로그를 확인합니다.
위의 방법들로 문제가 해결되지 않는 경우, 서버의 OS 버전, 아키텍처, 그리고 .NET Core 버전 등 추가 정보를 제공하면 더 구체적인 해결 방법을 제시할 수 있을 것입니다.
답변 감사합니다. SQLite는 정말 설정부분이 어려운거 같아요.
윈폼에서는 그나마 라이브러리 폴더설정만으로 끝났는데 리눅스환경이 되니까 차원이 다르네요.
설명해주신 부분을 하나하나 해보았지만 결과는 변함없이 에러가 발생했습니다.
관련된 검색어로 다시 여기저기 찾아보았는데 제대로된 답변이 없네요.
일단 SQLite사용은 보류하기로 했습니다.
설정이 복잡해지면 한번은 어떻게 했다하더라도 다른 환경에서 다른 문제가 생기면 해결하는데 시간이 걸릴것 같아서 확실한 방법이 보일때까지 기다리기로 했습니다.
바쁜시간 자세한 답변 주셨는데 시원하게 해결하지 못해서 미안합니다.
가끔 찾아보면서 문제 해결되면 보고올리겠습니다.
감사합니다.
답변이 너무 늦어 죄송합니다.
결과부터 보고드리면 역시나 같은 에러가 발생했습니다
시험삼아서 Asp.net이 아닌 콘솔 프로그램을 만들어서 해봤는데 역시나 윈도우 환경에서 문제가 없지만 리눅스환경에서는 동일한 에러가 발생했습니다. ASP.Net core의 문제가 아니라 리눅스 환경의 라이브러리 문제인것 같습니다.
일단 SQLite는 보류하고 관련 글들을 수시로 찾아보려고 합니다.
여러방면으로 도움을 주셨는데 시원하게 해결이 안되서 참 찜찜합니다만 언젠가는 해결이 되겠죠. 그때는 즐겁게 결과 올리겠습니다.