삽질하는플머

모노 2.10 설치. MySql 연결 테스트.

여가생활/Unity,Mono&.Net

시작은 유니티였는데... 옆길로 참 많이 새고 있다. 


굳이 이런 시도를 해보는 이유는? 모노가 WCF를 지원하고 있다는 것에 눈이 번쩍 띄었기 때문이다. 

현재 XMLRPC+PHP로 DB를 호출하고, 이 PHP를 HipHop으로 빌드해 바이너리로 서비스하는 방식을 쓰는 중인데...

닷넷으로 WCF 서비스를 만들고 델파이로 접근해 사용하도록 바꿔준다면 손도 편하고 머리속도 간단해지니까. 

게다가 C#은 디버깅도 되잖아? 디버거 없이 날코딩하는 PHP같은 인터프리터 언어는 나이가 먹을수록 부담스러워~~


기왕에 삽질할 꺼면 모노 2.8 이상을 설치해 새 바닥에서 놀자. 


우분투에 모노 2.10 설치는 트위터의 @nbridgewater 님이 작성한 스크립트를 쓰면 한방에 해결. 

중간 중간에 sudo 암호만 넣어주면 된다. 시간은 좀 오래 걸림. 


http://www.integratedwebsystems.com/2011/02/mono-2-10-install-script-for-ubuntu-fedora/


# wget --no-check-certificate https://github.com/nathanb/iws-snippets/raw/master/mono-install-scripts/ubuntu/install_mono-2.10.sh

# chmod 755 install_mono-2.10.sh

# ./install_mono-2.10.sh



위치는 /opt/mono-2.10 에 설치된다. 다음과 같이 윈도에서 #Develop 로 작성한 .Net 4.0 바이너리를 실행시킬 수 있다. 


# /opt/mono-2.10/bin/mono ./test.exe

Hello World!

#



MySql의 닷넷용 커넥터는 MySQL 에서 직접 개발 및 배포하고 있다. 라이센스는 GPL. 

http://dev.mysql.com/downloads/connector/net/


현재 버전은 6.5.4 이다. 일단 윈도용을 내려받아 설치하자. 







#Develop 에서 mysql-test 솔루션을 시작한다. 프로젝트 탐색기의 "참조" 에서 우측키를 누른 뒤 "참조 추가" 메뉴를 클릭하자. 

GAC 탭에서 "MySql.Data" 를 선택한 뒤 "확인"을 눌러준다. 




http://www.mono-project.com/MySQL 에 MySql 에 접근하는 좋은 예제가 있다. 

int형 ID와 varchar형 Name 을 필드로 가지는 테스트용 DB에 접근하는 코드를 다음과 같이 만들어주었다. 


using System;
using System.Data;
using MySql.Data.MySqlClient;

namespace mysql_test
{
    class Program
    {
        public static void Main(string[] args)
        {
            string connectionString =     
              "Server=hostname;" +
              "Database=test;" +
              "User ID=user;" +
              "Password=password;" +
              "Pooling=false";
            
            IDbConnection dbcon;
            dbcon = new MySqlConnection(connectionString);
            dbcon.Open();
            IDbCommand dbcmd = dbcon.CreateCommand();
            
            string sql =
               "SELECT ID, Name " +
               "FROM test";
            
            dbcmd.CommandText = sql;
            IDataReader reader = dbcmd.ExecuteReader();
            while(reader.Read()) {
                int ID = (int) reader["ID"];
                string Name = (string) reader["test"];
                Console.WriteLine("Data: " + ID + " " + Name);
            }
            // clean up
            reader.Close();
            reader = null;
            dbcmd.Dispose();
            dbcmd = null;
            dbcon.Close();
            dbcon = null;

            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);
        }
    }
}

(#Develop 에서 코드를 복사해 블로그에 붙여넣으면 하이라이팅이 그대로 살아있네~ 좋다!!)



실행시켜보면 자알~ 동작한다. 





이제 모노의 GAC에 MySql 라이브러리를 설치해보자. http://dev.mysql.com/downloads/connector/net/ 에서 ".Net & Mono" 를 선택한 뒤 "mysql-connector-net-6.5.4-noinstall.zip" 파일을 다운받아 압축을 푼다. 이 압축파일에 포함된 dll은 모두 소문자로 되어있지만 GAC에 등록하기 위해서는 실제 C#에서 참조할 때와 동일하게 대소문자를 맞춰주어야 한다는 것에 주의!


# cd mysql-connector-net-6.5.4-noinstall/

# cd v2

# cp mysql.data.dll MySql.Data.dll

# sudo /opt/mono-2.10/bin/gacutil -i MySql.Data.dll
 Installed MySql.Data.dll into the gac (/opt/mono-2.10/lib/mono/gac)


윈도에서 작성된 바이너리를 옮겨와 다음과 같이 실행시켜보자. 


/opt/mono-2.10/bin/mono ./mysql-test.exe



결과는 짜잔~




덤으로, 앞에서 작성한 CS 코드를 우분투에서 직접 빌드하려면 다음과 같이 하면 된다. 

/opt/mono-2.10/bin/mcs mysql-test.cs  -r:System.Data.dll -r:/opt/mono-2.10/lib/mono/gac/MySql.Data/6.5.4.0__c5687fc88969c44d/MySql.Data.dll


당연한 이야기지만, 이렇게 빌드한 실행파일도 윈도에서 잘 돌아간다.