콘텐츠로 이동

12. 서버/클라이언트 통신#

이 장은 Altibase 데이터베이스 서버와 클라이언트 응용프로그램간의 접속 방법과 프로토콜을 설명한다.

통신 방법#

네크워크 상의 서로 다른 두 컴퓨터에 존재하는 프로세스간의 통신 또는 같은 컴퓨터에 존재하는 프로세스간의 통신 방법에는 몇 가지가 있다. 이 절에서는 Altibase 데이터베이스 서버와 클라이언트 응용프로그램에서 사용할 수 있는 통신 방법을 설명한다.

Altibase에서 제공하는 통신 방법은 아래와 같다.

  • TCP/IP
  • Unix Domain 소켓
  • 공유 메모리를 이용한 IPC
  • IPCDA
  • SSL/TLS

TCP/IP#

Transmission Control Protocol/Internet Protocol (TCP/IP)은 산업계 표준 네크워크 프로토콜로 글로벌 인터넷을 구축하는데도 사용되었다. TCP는 두 네크워크 호스트간의 정확한 데이터 교환을 위한 프로토콜이고, IP는 패킷을 목적지까지 전송하는 역할을 하는 프로토콜이다.

Altibase는 인터넷 프로토콜 버전 4(IPv4)와 인터넷 프로토콜 버전 6(IPv6)을 모두 지원한다. IPv6주소체계는 IPv4주소를 신규로 할당하는 것을 중단하는 시점에 대비하여 설계되었다. IPv4주소와 가장 큰 차이점은 IP주소 저장 공간의 길이가 32bit에서 128bit로 확대되어 보다 많은 인터넷 주소를 사용할 수 있다는 점이다.

IPv6에 대한 자세한 정보는 Internet Protocol Version 6 (IPv6) Specification, RFC 2460를 참고하기 바란다.

IPv6 주소 표기법#

IPv6 주소는 16bit크기의 16진수 8개가 콜론(:)으로 구분되어 표기된다.

다음은 유효한 IPv6 주소의 예이다:

2001:cdba:0000:0000:0000:0000:3257:9652

IPv6 주소내의 네 개의 0으로 표시된 부분은 각각 한 개의 0으로 줄여서 표기할 수 있거나 모두 생략할 수도 있다. 그러므로 다음의 IPv6 주소들은 모두 같은 주소를 나타낸다.

2001:cdba:0000:0000:0000:0000:3257:9652
2001:cdba:0:0:0:0:3257:9652
2001:cdba::3257:9652

위 주소를 위한 URL 형식은 다음과 같다:

http://[2001:cdba:0000:0000:0000:0000:3257:9652]/

Altibase는 RFC2732에 명세화된 표준 IPv6 주소 표기법을 지원한다. Altibase 데이터베이스 서버에 연결할 때, IPv6 주소는 사각 괄호([ ])로 감싸여야 한다.

다음은 Altibase에서 유효한 IPv6 주소의 예이다:

[::1]
[2002:c0a8:101:1:216:e6ff:fed2:7aea]
$ isql -s [2002:c0a8:101:1:216:e6ff:fed2:7aea] -u sys

FE80로 시작하는 링크 로컬 주소의 경우, 영역 인덱스가 퍼센트 표시(%)로 구분되어 주소 뒤에 붙는다. 영역 인덱스는 링크 로컬 주소가 할당된 인터페이스를 위한 색인이다.

리눅스 시스템에서 Altibase 서버에 연결하려면 링크 로컬 주소의 영역을 표시하는 영역 인덱스를 붙여야 한다. (예외로 JDBC 응용프로그램을 위해서는 영역 인덱스가 필요없다.) 영역 인덱스를 사용한 예는 다음과 같다:

[fe80::221:86ff:fe94:f51f%eth0]
$ isql -s [fe80::221:86ff:fe94:f51f%eth0] -u sys

IP 스택#

호스트 장비에는 여러 다른 프로토콜 스택1이 설치되어 있을 수 있다. 두 가지 프로토콜의 지원 여부에 따라 다음 세 타입의 IP 호스트로 구분된다.

[표 12-1] IP 호스트 종류

IPv4-only host IPv4 스택만 설치되어 있는 호스트.
IPv4-only host에서는 IPv6 주소를 사용할 수 없다.
IPv6/IPv4 host 듀얼 스택이 설치되어 있는 호스트.
IPv4와 IPv6 모두 지원한다.
IPv6-only host IPv6 스택만 설치되어 있는 호스트.
IPv6-only host는 IPv4 주소를 지원하지 않는다.

IPv6 클라이언트/서버 연결#

네트워크 연결이란 둘 이상의 컴퓨터 사이에 네트워크를 통해서 접속과 통신을 수립하는 것을 말한다.

다음 표는 설치된 프로토콜 스택에 따라서 서버와 클라이언트 간 통신을 위해 사용될 수 있는 프로토콜 버전을 보여준다. 아래의 표에서 Supported (v6)는 IPv6를 지원하는 프로토콜 스택이 설치된 클라이언트/서버 호스트를 의미하며, 이 호스트는 IPv6 인터페이스를 사용해서 다른 호스트에 연결할 수 있다.

[표 12-2] IPv6 클라이언트/서버 연결

IPv4-only 서버 듀얼 스택 서버 IPv6-only 서버
IPv4-only 클라이언트 Supported (v4) Supported (v4) Not supported
듀얼 스택 클라이언트 Supported (v4) Supported (v4, v6) Supported (v6)
IPv6-only 클라이언트 Not supported Supported (v6) Supported (v6)

Altibase의 IPv6 지원#

Altibase에서 IPv6 지원은 위의 IPv6 클라이언트/서버 연결에 잘 나타나 있다.

서버#

IPv6를 사용하려면, altibase.properties 파일에서 NET_CONN_IP_STACK 프로퍼티를 1 또는 2로 설정해야 한다. 이 프로퍼티에 대한 자세한 설명은 General Reference > 2장. Altibase 프로퍼티를 참고하기 바란다.

클라이언트#

IPv6 를 사용해서 접속하려면, DSN 속성을 IPv6 주소로 지정하거나, 또는 DSN 속성은 호스트 이름으로 명시하고 PREFER_IPV6 속성을 TRUE로 지정하면 된다. 호스트 이름을 지정할 경우, Altibase 클라이언트는 getaddrinfo() 호출로 반환되는 모든 IP 주소로의 접속을 연결이 성공할 때까지 시도한다. 한 개 이상의 IP 주소가 반환될 경우, Altibase 클라이언트는 PREFER_IPV6 속성에 의한 순서대로 각 IP 주소로의 연결을 시도한다. PREFER_IPV6 속성이 지정되지 않거나 FALSE로 지정한 경우, 먼저 IPv4 주소로 연결을 시도한다. 연결이 실패하면 클라이언트는 반환되었던 IPv6 주소로 접속을 시도할 것이다. PREFER_IPV6 속성을 TRUE로 지정하면, IPv6 주소로 먼저 접속을 시도한다. 이것이 실패하면 클라이언트는 반환되었던 IPv4 주소로의 접속을 시도한다.

PREFER_IPV6 속성에 대한 자세한 설명은 CLI User's Manual를 참고하기 바란다.

Unix Domain 소켓#

유닉스 플랫폼 상에서 클라이언트와 Altibase 서버가 모두 동일한 장비에 설치되었을 때, 유닉스 도메인 소켓을 통신에 사용할 수 있다. 유닉스 도메인 소켓을 사용하면 TCP/IP 사용시보다 나은 성능을 낼 수 있다. 유닉스 도메인 소켓을 사용하려면, ODBC/CLI 응용 프로그램에서는 CONNTYPE 속성을 지정하고, Altibase 유틸리티에서는 ISQL_CONNECTION 환경 변수를 설정한다.

더 자세한 설명은 CLI User's Manual 와 각각의 유틸리티에 대한 매뉴얼을 참고하기 바란다.

공유 메모리를 이용한 IPC#

이 절에서는 Altibase에서 제공하는 공유 메모리를 이용한 프로세스간 통신 (inter-process communication, IPC) 즉, 동시에 실행 중인 프로세스들 사이에서 데이터를 교환하는 방법에 대해서 설명한다. 클라이언트와 Altibase 데이터베이스 서버가 동일한 장비에 설치되어 있는 경우, 이 통신 방법을 사용하면 클라이언트 응용프로그램은 보다 향상된 성능을 보여줄 것이다. 공유 메모리를 이용한 IPC는 최고의 성능을 제공하지만, 메모리를 추가로 더 많이 사용하게 된다. 이 통신 방법을 사용하려면, 먼저 다음을 수행해야 한다:

  • altibase.properties 파일에서 관련 서버 프로퍼티를 설정한다. General Reference > 2장. Altibase 프로퍼티 > 세션 프로퍼티를 참고하기 바란다.
  • ODBC/CLI 응용 프로그램에서는 CONNTYPE 속성을 지정하고, iSQL과 iLoader 같은 Altibase 유틸리티에서는 ISQL_CONNECTION 환경 변수를 설정한다. 자세한 설명은 CLI User's Manual과 각각의 유틸리티 매뉴얼을 참고하기 바란다.

IPCDA#

IPCDA(Inter Process Communication Direct Attach)는 IPC와 마찬가지로 공유 메모리를 이용하여 클라이언트와 데이터베이스 서버간에 데이터를 교환한다. IPC 보다 데이터 읽기, 쓰기를 단순화하고 클라이언트, 서버 사이의 유휴 시간을 줄여 성능을 더욱 향상시켰다.

제약사항으로 Linux 이외의 운영체제에서는 사용할 수 없다. IPC와 마찬가지로 CLI, ODBC는 지원하지만, JDBC는 지원하지 않는다. 또한 IPCDA를 사용할 때는 LOB 데이터를 사용할 수 없다.

IPCDA를 이용하여 통신하려면, 먼저 아래의 환경을 설정해야 한다.

  • altibase.properties 파일에서 아래의 IPCDA 관련 서버 프로퍼티를 설정한다. 각각의 프로퍼티에 대한 자세한 설명은 General Reference > 2장. Altibase 프로퍼티를 참고하기 바란다.
    • IPCDA_CHANNEL_COUNT
    • IPCDA_FILEPATH
    • IPCDA_DATABLOCK_SIZE
  • ODBC/CLI 응용 프로그램에서는 CONNTYPE 속성을 지정한다. 자세한 설명은 CLI User's Manual 을 참고하기 바란다.

SSL/TLS#

Altibase는 데이터를 암호화 및 복호화하기 위하여 대칭키 알고리즘과 인증을 위하여 공개키(public key)/개인 키(private key)의 한 쌍을 안전하게 교환하기 위한 비대칭 알고리즘을 이용하는 SSL/TLS를 채택하고 있다.

알티베이스의 SSL/TLS의 특징을 살펴보면 아래와 같다.

  • Altibase 서버에 대한 보안 접속은 OpenSSL 프로젝트로 개발된 OpenSSL API를 기반으로 한다. OpenSSL 프로젝트는 범용 암호화 라이브러리를 포함하여 SSL 2.0/3.0 과 TLS 1.0, 1.2, 1.3 프로토콜을 지원한다.
  • Altibase는 서버 전용 인증과 상호 인증을 지원한다.
  • Altibase 서버에서 SSL통신을 지원하기 위해서는 기존에 사용하는 TCP 포트 이외에 별도의 서비스 포트가 필요하다.
  • 서버에서 SSL 통신을 이용하기 위해서는 환경변수로 ALTIBASE_PORT_NO와 ALTIBASE_SSL_PORT_NO 둘 다 정의되어야 한다.
  • Altibase는 SSL 통신을 위해 JDBC와 ODBC를 지원한다.

Altibase에 SSL/TLS통신을 설정하고 사용하는 방법은 Altibase SSL/TLS User's Guide를 참조하기 바란다.


  1. 프로토콜 스택이란 계층화된 구조로 모여있는 프로토콜 집합의 소프트웨어적인 구현을 말한다.