안녕하세요.
오늘은 DA# Modeler5를 사용하면서 겪었던 오류를 정리하면서 관련된 내용을 작성해 보겠습니다.
오류 발생
DA# Modeler5를 사용해 논리 ERD를 만들어야 하는 상황에서 DB 리버스 엔지니어링이 계속 안 되어 헤매고 있었습니다.
결국 문제를 해결했는데, 원인은 Oracle Client를 설치하지 않고 Oracle Instant Client를 설치해서 발생한 문제였습니다.
뭐가 다른 거지?
Oracle Client은 Oracle 데이터베이스와 상호 작용하기 위해 사용되는 소프트웨어인데요. Oracle 데이터베이스와 통신하는 데 필요한 모든 라이브러리와 도구들이 포함되어 있습니다. `SQL*Plus`, `SQL*Loader`, `tnsping` 등 다양한 유틸리티를 제공하며, GUI 인터페이스를 통해 복잡한 작업을 처리할 수 있습니다.
반면 Oracle Instant Client는 개발자나 클라이언트 측에서 주로 사용하는 경량 버전으로 비교적 설치가 간단하고 경량 버전이기 때문에 용량이 Oracle Client보다 적다는 장점이 있습니다. zip 파일이나 Linux RPM 패키지로 쉽게 설치할 수 있지만 `SQL*Plus`, `tnsping` 등을 기본적으로 포함하고 있지 않아 이를 필요로 하는 DA# Modeler5에서는 당연하게도 DB 연결이 불가능했습니다.
실제로 Oracle Instant Client를 설치한 후 `tnsnames.ora`를 다시 작성하여 `tsping`을 커멘드 창에서 날려보았지만 `tsping.exe` 파일이 클라이언트 설치 디렉토리에 존재하지 않아 명령어를 인식하지 못한다는 에러가 발생했습니다.
왜 Client 가 필요한가?
저는 개발을 공부하면서 꾸준히 DB 툴로 DBeaver를 사용해 왔는데요. DBeaver는 `JDBC(Java Database Connectivity)`를 사용하여 Oracle 데이터베이스와의 연결을 관리합니다. 이는 Java 기반의 툴이기 때문에 Oracle Client와 같은 네이티브 클라이언트가 없어도, Oracle Instant Client만으로도 충분히 작동할 수 있습니다. 반면, DA# Modeler5는 네이티브 프로토콜을 필요로 하기 때문에 Oracle Client(대상 DB가 Oracle인 경우)가 필요합니다.
ODBC? JDBC?
JDBC(Java Database Connectivity)와 ODBC(Open Database Connectivity)는 둘 다 애플리케이션과 데이터베이스를 연결하는 데 사용되는 API 표준입니다. ODBC는 다양한 프로그래밍 언어에서 사용할 수 있는 일반적인 API 표준인 반면, JDBC는 Java에 특화된 인터페이스를 제공하며, Java 애플리케이션에 맞게 설계되었습니다. ODBC는 C, C++, Java 등 다양한 언어에서 사용할 수 있지만 Java 애플리케이션에서는 내부 변환으로 인해 성능 저하가 발생하고 애플리케이션이 플랫폼에 종속되기 때문에 ODBC대신 JDBC를 사용하는 것을 권장합니다.
tnsping.exe
tnsping 날려보셨나요?
오류가 해결이 되지 않아 DA# Modeler5를 만든 회사 엔코아에 문의해 해당 문제(공급자)에 대해서 말씀을 드렸더니 tnsping을 입력해 보았는지 확인을 먼저 하셨습니다.
tnsping이라는 것도 생소하여 처음엔 다시 확인해 보고 연락을 드린다 말씀드리고 전화를 끊었던.. 🥹
tnsping은 Oracle 네트워크 연결을 테스트하는 유틸리티입니다. 이 명령어를 사용하면 특정 호스트와의 연결 가능 여부를 확인할 수 있습니다.
테스트 방법은 간단합니다. `tnsnames.ora` 파일을 `client 설치 경로 > network > admin`에 저장한 후 cmd에서 `tnsping TNS별칭`(ex. tnsping xe)을 입력하면 됩니다.
XE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = ))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SID = )
)
)
그런데 여기서 TNS가 무엇인지 궁금해졌습니다.
TNS(Transparent Network Substrate)
TNS(Transparent Network Substrate)는 Oracle 네트워크 통신을 담당하는 계층으로, 클라이언트와 데이터베이스 서버 간의 통신을 설정하는 데 사용됩니다. `tnsnames.ora` 파일은 이러한 통신 경로를 설정하는 파일로 Modeler5를 사용하기 위해선 이 파일을 만들어 설정 정보를 가져와야 합니다.
처음 Oracle Instant Client를 설치한 뒤 `tnsnames.ora` 파일을 만든 후 모델러 5 대신 주로 사용하는 DBeaver로 테스트해보니 같은 tns 파일로 정상적으로 접속이 되는 것을 확인하였습니다. 왜 DA# Modeler5에선 불가능하던 접속이 DBeaver에선 정상적으로 작동한 걸까요?
DBeaver는 앞서 말씀드렸던 것처럼 Java 기반 애플리케이션이므로 JDBC(Java Database Connectivity)를 사용해 Oracle 데이터베이스에 연결합니다. JDBC는 Oracle Instant Client만으로도 작동할 수 있으며, JDBC 드라이버가 내부적으로 Oracle 데이터베이스와의 통신을 관리하기 때문에 `tnsping.exe`나 기타 네이티브 유틸리티가 필요 없습니다. Oracle Instant Client는 이런 네이티브 유틸리티가 포함되지 않으므로, DA# Modeler5에서는 Instant Client만으로는 충분하지 않았던 것입니다.
마치며
저와 같은 오류를 겪고 계신 분들이 계실까 Oracle Instant Client가 아닌 Oracle (Full) Client 다운로드 방법을 정리하였습니다.
참고로 DA# Modeler5는 Oracle Client 설치 시 32비트를 설치해야합니다.
1) 다운로드 접속 URL
https://edelivery.oracle.com/osdc/faces/SoftwareDelivery
2) 대상 DB와 동일한 버전의 Oracle Client 설치 파일 다운로드
3) Oracle Client 설치
4) tnsping 테스트