(가능하다면 query요청까지!)
Tibero Online Judge
node js에서 odbc를 활용하여 tibero를 이용한 시스템 github
npm odbc
odbc 패키지 문서
npm node-odbc
node-odbc 패키지 문서
odbc와 node-odbc 의 문서에서 사용법을 알아보고자 예시를 보는데,
db connection에 필요하다고 생각되는 ip, port, name, pwd를 대체 어느 부분에서 삽입하는지 알수가 없다..
let con = new odbc.Connection()
.connect(connectionString);
// run query
con.executeQuery((res, err) =>
{
if( err != null )
{
console.log( err );
}
},
"CREATE TABLE tblTest( myColumn int )"
);
<node-odbc 문서발췌>
connectionString이라는것이 db 접속정보인걸까?
odbc의 문서에 보면 내가 생각하는 정보처럼 보이지는 않는다.
const connection1 = await odbc.connect('DSN=MYDSN');
// connection1 is now an open Connection
// or using a configuration object const connectionConfig = { connectionString: 'DSN=MYDSN', connectionTimeout: 10, loginTimeout: 10, } const connection2 = await odbc.connect(connectionConfig); // connection2 is now an open Connection
'DSN=MYDSN' 또는 connectionString, connectionTimeout, loginTimeout항목으로 이루어진 config 이다..
좀더 문서 내용을 확인해 보자
connectionString: The connection string to connect to the database, usually by naming a DSN. Can also be a configuration object with the following properties:
connectionString REQUIRED: The connection string to connect to the database
connectionTimeout: How long before an idle connection will close, in seconds
loginTimeout: How long before the connection process will attempt to connect before timing out, in seconds.
{OPTIONAL} callback: The function called when .connect has finished connecting. If no callback function is given, .connect will return a native JavaScript Promise. Callback signature is:
error: The error that occured in execution, or null if no error
connection: The Connection object if a successful connection was made
connect 메소드의 파라미터로 들어가는 항목에 대한 문서이다.
connectionString: database에 연결하기위한 연결 문자열로, 보통 DSN의 네이밍이 쓰임. config object로도 작성이 가능함.
DSN name으로 연결이 가능한것? 내가 생각하던 그 직접적인 특정 db 연결과 다른 connect인 것 일까??
DSN name에 대해 더 알아보자
DSN: Data source name
Data source가 데이터를 가져오는 프로세스에서 직접 연결을 지원하지 않는 경우 DSN을 만들어서 data source에 연결하고 데이터를 가져와야한다? 출처
클라이언트 app이 데이터베이스를 찾고 연결하는데 사용되는 포인터 이름이라고 한다. DSN을 통해서 host name, ip address, instance name, db name 정보를 얻는다고함.
DSN이 ODBC 드라이버를 사용해서 db 연결을 한다고함. 이러면 결국 odbc와 필연적인 용어인듯..?
ODBC 드라이버에 들어있는 유틸리티로 database에 대한 DSN을 만들 수 있다고함.. 그걸로 연결을 설정하고 db또는 freeform 스크립트를 통해 데이터를 가져올수 있다함.
DSN생성하는 방법을 알아보면 해결이 될라나..??
우선 연결할 DBMS는 tibero이므로 tibero의 매뉴얼을 참고함
tibero 설치는 이전 포스트를 참고
download에 있는 tar.gz파일을 받으면된다. 최신말고 좀 이전 버전의 link는 not found여서 최신 것을 받았다.(3.52.14)
1-1. $TB_HOME/client/lib 에서 libtbodbc.so파일 존재하는지 확인
file libtbodbc.so
상단 커맨드로 확인가능
1-2. LD_LIBRARY_PATH에 해당 경로를 추가하라는데, 난 이미 있었음.
여기서부터 막힌다..
64bit이기때문에 컴파일 옵션을 추가해주어야하는데,
HP-UX머신과 AIX 머신으로 갈린다.
uname -a
상단 커맨드로 자신이 어느 머신인지 확인 가능한데, 난 linux다.. 참고 둘중 무엇을 사용해야하는가?
서치해보니 CFAGS를 linux에서는 -m64 로 주면된다.
결론적으로
./configure --prefix=/home/유저네임/원하는위치 --sysconfdir=/etc CC=/usr/bin/gcc CFLAGS="-m64"
prefix옵션을 안주면 usr/local이 default로 입력됨.
이렇게 해서 configure 실행
make
sudo make install
make install에서 계속 오류가 나서, --prefix를 지우고 다시 configure을 실행했음.
make install은 sudo를 안주니까 오류났음.

끝나면 해당 요약이 나옴
file libtbodbc.so
file libiodbcinst.so.2.1.18
로 확인할수있다는데 된건지 모르겠다.. 특히 두번째 파일은 어디있는지도 모르겠음;;
그다음은 환경설정 파일을 수정해주어야하는데,
cd /etc
로 /etc디렉토리에 들어간다.
(방금 make를 실행한 폴더X!!! /etc공간 따로있음~!
이미 존재하는 odbc.ini파일과 odbcinst.ini파일을 수정해줌
;
; odbc.ini
;
[ODBC Data Source]
Tibero6 = Tibero 6 ODBC Driver
[ODBC]
Trace = 1
TraceFile = /tmp/odbc.trace
[Tibero6]
Driver = /home/tibero6/client/lib/libtbodbc.so
Description = Tibero6 ODBC Datasource
SID = tibero ; tbdsn.tbr 파일에 설정한 DSN 정보
User = tibero
Password = tmax
;
; odbcinst.ini
;
[Tibero 6 ODBC Driver]
Description = ODBC Driver for Tibero 6
Driver = /home/tibero6/client/lib/libtbodbc.so
UsageCount = 1
그다음 odbc드라이버와 odbc데이터소스를 iodbc관리자에 등록
iodbc-config --odbc.ini --odbcinst.ini
근데 이거 실행해도 뜨는 메시지가.. 된건지 모르겠음.
포맷은 iodbctest "DSN={dsn};UID={user};PWD={pwd}"이렇게이고, 필자는 하단으로 수행성공!!
iodbctest "DSN=Tibero6;UID=tibero;PWD=tmax"
아주잘된다 ! 굿!!