본문 바로가기

개발일지/C#

[ C# / CUBRID ] 프로젝트 정리 4 - 프로젝트와 DB 연동

https://120ne.xyz/349

 

[ C# / CUBRID ] 프로젝트 정리 3 - cmd로 큐브리드 서버 실행 및 테이블 생성

https://choittolbok.tistory.com/348 [ C# + CUBRID ] 프로젝트 정리 2 - 큐브리드 설치 후 프로젝트 내 참조 추가이번 프로젝트에서 사용하는 DB는 CUBRID이다. 실제 프로그램을 돌리는 PC는 접속이 불가한 상황

120ne.xyz

 

테이블도 만들었으니 프로젝트와 로컬 DB를 연동해보자. 처음부터 해보면 좋겠지만 이 일지가 다음주 사용해야 할 프로그램을 기준으로 작성되는 거라 미리 만들어 둔 프로젝트를 이용할 예정이다. 

 

- CUBRID 연결 방법

private static string ConnectionString = "Server=localhost;Port=33000;Database=mydb;User=dba;Password=;charset=utf-8";

 

- Server: CUBRID가 설치된 주소 (로컬은 localhost)
- Port: 기본 포트는 33000
- Database: 로컬에서 생성한 DB 이름
- User, Password: 기본 관리자 계정은 dba, 비밀번호 없음

 

public class CubeDBcon : IDisposable
{
    private static string ConnectionString = "..."; // 연결 문자열
    private CUBRIDConnection _conn;
    private System.Timers.Timer keepAliveTimer;

    public CubeDBcon(MainForm form)
    {
        _conn = new CUBRIDConnection(ConnectionString);
        _conn.Open();
        form.SetTextRichText(_conn.State.ToString());

        // 5분마다 연결 유지 쿼리 실행
        keepAliveTimer = new System.Timers.Timer(300000); // 5분
        keepAliveTimer.Elapsed += KeepAlive;
        keepAliveTimer.Start();
    }

    private void KeepAlive(object sender, ElapsedEventArgs e)
    {
        try
        {
            using (CUBRIDCommand cmd = new CUBRIDCommand("SELECT 1", _conn))
            {
                cmd.ExecuteNonQuery(); // 연결 유지용 쿼리
            }
        }
        catch { }
    }

    public void Dispose()
    {
        _conn?.Close();
        keepAliveTimer?.Stop();
    }
}

 

위와 같이 CUBRID DB 연결 및 연결을 안전하게 유지할 수 있다.

 

private CUBRIDConnection _conn;

지난 글에서 참조 했던 CUBRID.Data.dll을 이용해 DB 연결을 도와주는 클래스이다. 클래스 선언을 할 때 위에서 작성한 문자열을 아래와 같이 넣어주고, open하면 끝

 

_conn = new CUBRIDConnection(ConnectionString);

 

private System.Timers.Timer keepAliveTimer;

타이머의 경우 일정 시간마다 DB가 살아있는지 체크를 해주고, 타이머가 울릴 때마다 KeepAlive() 와 같은 메소드를 실행해서 DB 연결을 유지해준다. 

 

public void Dispose()

연결 하는 것만큼 중요한 리소스를 정리하고, 메모리를 해제하는 메서드이다. DB 연결을 안전하게 닫아 메모리 누수와 다중 연결, 프로그램 느려지는 현상을 방지한다.