Mysql 테스트프로그램에 C++이나 C#대신 익숙하지 않은 golang쓴 이유

Sean
3 min readMay 25, 2021

--

작업에 필요한 로그 분석 작업을 해야 했는데, log한줄씩 읽어 빠르게 DB에 넣으려면, 아무래도 C++ 이 내겐 당연한 선택이었는데

뭐가 문제 였는지 꼭 한 군데에서 걸림

// std::unique_ptr<sql::ResultSet> res;
// sql::Driver *driver = get_driver_instance();
// std::unique_ptr<sql::Connection> con(driver->connect(url, user, pass));
꼭 connection 부분에서 bad allocation이 뜬다. 이 코드 말고도 여러가지 방법을 써봤지만 꼭 같은 에러가 뜸. 메모리할당방식이 문제인가해서, new대신, smart pointer도 써봤지만 똑같았음. mysql connector 8.0 x64버전을 썼는데 여러가지 시도를 해보았지만 잘 안되었음.
include경로 library경로를 설정해야하고, library를 static을 쓸지 dynamic를 쓸지도 처음쓰면 신경써야할게 많다.

그래서 C#을 도전, 예전에도 C#으로 mysql을 써봤기에, 속도는 조금 떨어지더라도, 금방 만들 수 있을 것 같았다. dll도 add reference로 한번만 추가하면 끝이고,

하지만 난데없이 Could not load file or assembly 오류가 났고, 인터넷에 찾은데로, platform문제였나, dll을 x86밖에 지원안하길래, C#을 다 x86으로 고쳤는데도 똑같다. 맨붕.

그래서 속도 빠르면서, 빠르게 test프로그램을 짤 수 있는게 뭐가 있을까, 최근에 배운 Python의 느린속도는 이미 체험한 바. 몇달 전 연습만 몇번한 golang을 써보기로

설치해둔 goland를 띄웠다.

"database/sql"
"database/sql"
_ "github.com/go-sql-driver/mysql"

이정도 를 추가로 import하고, go get으로 받으니 모든 준비 끝

요 정도로 파일 읽기 코드는 거의 끝나고
scanner := bufio.NewScanner(file)
for scanner.Scan() {

regexp써서 필요한 행만 읽도록 하고, (match그룹은 FindStringSubmatch 사용), db.Exec로 sql문 수행하니 끝.

너무 간단해서, golang초보지만 3~4시간만에 왠만한 구현을 할 수 있었다.

--

--

Sean
0 Followers

20년 묵은 올드 프로그래머