반응형

C# .NET : SQLLocalDB

배경

 인터넷 네트워크는 아니지만, 응용프로그램에서 내부적인 DB를 저장하고 사용해야 하는 경우가 종종 있다. 이 경우 DB의 비중은 비교적 낮기 때문에 DBMS의 크기가 작으며, 많은 기능이 필요로 하지않는다.

 최근 임베이디드 환경의 프로젝트를 진행을 하고 있다. 임베이디드 같이 근거리 통신에 디바이스간 통신에 대해서 다룰 경우에는 이 처럼 작은 DBMS가 더 적합하다.



SQLLocalDB 설치 방법

 간단하게 말하면 SQL Server를 설치하면 된다.


 MS SQL Server 2008 부터 express 버전에서부터 사용할 수 있게 해 놓았다(혹시 필자가 잘못 알고 있다면, 알려 주기 바람). 이 글을 기록하는 시기에서는 MS SQL Server 2017 Express 버전을 설치하면, 무료로 사용이 가능하다.


 다만, 설치가 옵션으로 설치되는 것이라서 설치과정중 구성요소에서 설치 체크를 해야한다.


 SQL Server 2017이 리눅스와 OS X 등에서 크로스 플랫폼으로 사용이 가능하다고 홍보를 하고 있지만, exe 파일로 제공되니 차후 재 빌드 파일이 나오지 않는다면, DOTNET Core로 실행해야 할 가능성이 있다.


 설치가 정상적으로 이루어지면, Visual Studio 2017 등 에서 바로 사용이 가능하다.



SQLLocalDB의 호환성

 당연한 이야기이지만, SQL Server와 달리 닷넷 환경에서 사용이 가능하고 현재로써는 Windows 에 국한이 되어 있다. 그리고 우리가 모르는 사이에 Windows에서 이미 SQLLocalDB를 사용하고 있다. 때문에 배포 환경이 Window 10 이라면, 웬만하면 따로 프로그램을 설치 하지 않아도 사용이 가능하다.


 여기 까지는 MS사의 설명이지만, 실제로는 배포하는 프로그램의 경우 가능 하면 사용을 자제하는 것이 좋다. 이유는 배포 환경에 대해서 완전한 독립성을 보장을 해주지 않는다. 이는 다시 말하자면, 어떤 PC에서는 정상적으로 DB인스턴스가 생성되어 사용이 가능하지만, 어떤 PC에서는 적절한 DB인스턴스가 생성되지 않는다.


 이를 해결하기 위해서는 MS Sql Server 를 설치해야 하는데, 배포하는 프로그램에서 갑자기 Sql Server를 설치하라고 하는 것은 다소 무리가 있다. 연습용으로만 사용하자.



필수도구

 쉽게 관리하기 위한 툴로 SSMS(SQL Server Management Studio)을 사용할 수 있다. 초기 시작할때 "(LocalDB)\MSSQLLocalDB" 로 접속을 하면, PC에 있는 mdf 확장자를 가진 데이터베이스를 확인할 수 있다. 수정에는 제약이 있지만(아마도 Express 버전이라서), 대부분의 내용을 확인이 가능하다.


 "sqllocaldb.exe"라고 하는 유틸리티가 대부분 기본적으로 Windows에 설치되어 있다. 못 믿겠다면, 당장 powershell 이나 cmd 에서 명령어를 사용하면, 도움말 정보를 띄우는 것을 확인 할 수 있다. 이 유틸리티를 통해서 응용프로그램에서 사용하는 mdf 파일에 접근하는데 필요한 디비 인스턴스를 관리 할 수 있다.



오류 사례

다른 PC에서 Access 거부

 개발 PC가 아닌 다른 PC에서 mdf 파일에 접근이 안되는 경우가 있다. 필자도 이 문제로 많은 시간을 버렸다. 일단 필자의 경우 sqllocaldb.exe 를 통해서 확인 해본 결과 실행이 안되는 PC에서 생성된 "MSSQLLocalDB" 인스턴스 버전은 v13.0 으로 생성된것에 반해 개발 PC에서는 v14.0 으로 생성이 되었었다. 그리고 개발 PC에서만 실행이 되었다.


 하지만, 자택에 있는 다른 PC에서 같은 소스코드로 mdf 만 새로 생성해서 다시 개발환경이 아닌 PC에서 실행을 해본 결과 실행이 잘되었다(역시 sqllocaldb.exe 로 "MSSQLLocalDB" 인스턴스 정보를 확인해보니 v13.01.. 으로 생성된 것을 확인 할 수 있었다).


(상단이 초기 개발 PC, 하단이 자택 PC)



 필자의 기억에 의하면, 먼저 잘 안된 PC 환경에서는 Visual Studio 2017 installer 에서 sql server 관련 패키지를 설치한 것 외에는 차이가 없었다. 앞으로는 개선이 되겠지만, 배포를 위해서라도 sql 관련 패키지를 visual studio 2017 installer 로 설치하는 것은 자제하자.



Git에서 mdf파일의 커밋제외

 그리고 git 을 사용할 경우 gitignore 파일 목록중에 mdf 확장자는 커밋에서 제외가 되니 이부분을 주의 해야한다. visual studio의 솔루션 창에는 보이지만 실제로는 존재하지 않는 파일이 되어 버린다.



참고자료




반응형

'C#' 카테고리의 다른 글

C# : using문의 기능과 활용  (0) 2018.05.15
C# .NET: Dispose (소멸자) 패턴  (0) 2018.05.14
C# : this와 base  (0) 2018.02.20
C# Winform : Detect Resize (크기 변화 감지)  (0) 2018.02.07
C# : Queue VS ConcurrentQueue  (0) 2018.02.02

+ Recent posts