본문 바로가기
Development/Database

[DB] Oracle Listener 구성부터 관리까지 완벽 분석

by 은스타 2020. 4. 8.
반응형
Oracle Listener 구성부터 관리까지 완벽 분석

Oracle Listener 구성부터 관리까지 완벽 분석

개요

안녕하세요. 이번 포스팅에서는 Oracle 데이터베이스 네트워크 구성의 핵심 요소인 Oracle Listener에 대해 상세히 알아보겠습니다. Listener는 클라이언트 애플리케이션과 Oracle 데이터베이스 간 통신을 관리하는 중요한 컴포넌트입니다.

데이터베이스 관리자(DBA)라면 반드시 알아야 할 Oracle Listener는 원격 클라이언트가 데이터베이스에 접속할 수 있도록 하는 관문 역할을 합니다. Listener가 정상적으로 작동하지 않으면 데이터베이스가 실행 중이어도 원격 접속이 불가능하며, 이는 운영 환경에서 치명적인 문제를 야기할 수 있습니다.

이 글에서는 Oracle Listener의 개념부터 구성, 관리, 문제 해결까지 모든 측면을 포괄적으로 다룹니다. listener.ora 파일 구성, LSNRCTL 명령어 사용법, 다중 Listener 구성, 보안 설정, 로그 분석, 성능 튜닝 등 실무에서 바로 활용할 수 있는 내용을 담았습니다.

특히 버전별 변화와 RAC 환경에서의 Listener 관리, 일반적인 오류 해결 방법까지 상세히 설명하여 초보자부터 숙련된 DBA까지 모두에게 유용한 가이드가 될 것입니다.
목차
1. Oracle Listener 개요
2. Listener 구조와 작동 원리
3. Listener 설치 및 기본 구성
4. Listener.ora 파일 구성
5. Listener 관리 명령어(LSNRCTL)

#1. Oracle Listener 개요
Oracle Listener는 클라이언트 요청을 대기하고 이를 적절한 데이터베이스 인스턴스로 라우팅하는 Oracle Net Services의 핵심 구성 요소입니다. 네트워크를 통해 들어오는 모든 데이터베이스 연결 요청을 수신하고 처리하는 첫 번째 접점 역할을 수행합니다.
1) Listener의 주요 기능
Oracle Listener는 데이터베이스 환경에서 다음과 같은 핵심 기능을 수행합니다.
① 연결 중재
클라이언트 요청을 수신하고 적절한 데이터베이스 서버 프로세스에 연결합니다. 클라이언트가 데이터베이스에 접속 요청을 보내면 Listener가 이를 받아 처리할 수 있는 서버 프로세스를 생성하거나 기존 프로세스에 연결합니다.

② 서비스 등록 관리
사용 가능한 데이터베이스 서비스 정보를 유지하고 관리합니다. 어떤 데이터베이스 인스턴스가 현재 실행 중이며 어떤 서비스를 제공하는지에 대한 정보를 실시간으로 파악하고 있습니다.

③ 로드 밸런싱
RAC 환경에서 여러 인스턴스 간 연결을 분산시켜 부하를 균등하게 배분합니다. 이를 통해 시스템 자원을 효율적으로 활용하고 전체 성능을 최적화할 수 있습니다.

④ 연결 집중화
데이터베이스 리소스를 효율적으로 사용할 수 있도록 연결을 중앙에서 관리합니다. 연결 풀링과 같은 기능을 통해 시스템 자원 낭비를 방지합니다.

⑤ 투명한 애플리케이션 페일오버
고가용성 환경에서 장애 발생 시 자동으로 다른 정상 인스턴스로 연결을 전환하여 서비스 중단을 최소화합니다.
. . . . .
2) Listener가 중요한 이유
Listener 없이는 클라이언트가 Oracle 데이터베이스에 원격 접속할 수 없습니다. 데이터베이스 인스턴스가 정상적으로 실행 중이어도 Listener가 작동하지 않으면 외부에서의 모든 접속 시도는 실패하게 됩니다.

로컬 접속(localhost)의 경우 bequeath 연결 방식을 통해 Listener 없이도 가능하지만, 네트워크를 통한 원격 접속은 반드시 Listener를 거쳐야 합니다. 따라서 Listener는 운영 환경에서 필수적인 컴포넌트이며, 이에 대한 철저한 이해와 관리가 DBA의 핵심 업무 중 하나입니다.

또한 Listener는 데이터베이스의 첫 번째 방어선 역할도 수행합니다. 적절한 보안 설정을 통해 허가되지 않은 접근을 차단하고, 로그를 통해 접속 이력을 추적할 수 있어 보안 관리에도 중요한 역할을 합니다.

#2. Listener 구조와 작동 원리
1) 기본 구조
Oracle Listener는 운영체제 레벨에서 실행되는 독립적인 프로세스이며, 일반적으로 tnslsnr이라는 이름으로 실행됩니다. 이 프로세스는 특정 TCP/IP 포트에서 클라이언트 연결 요청을 대기하며, 기본 포트는 1521번입니다.

Listener는 데이터베이스 인스턴스와는 별도로 동작하므로, 데이터베이스가 종료되어도 Listener는 계속 실행될 수 있습니다. 반대로 Listener가 중지되어도 이미 설정된 데이터베이스 세션은 영향을 받지 않습니다.
. . . . .
2) 연결 설정 과정
클라이언트가 Oracle 데이터베이스에 접속하는 전체 과정은 다음과 같이 진행됩니다.
① 클라이언트 요청
클라이언트 애플리케이션이 TNS 별칭을 사용하여 데이터베이스 연결을 요청합니다. 이때 tnsnames.ora 파일에 정의된 접속 정보를 참조하여 Listener의 주소와 포트를 확인합니다.

② Listener 수신
Listener가 지정된 포트에서 클라이언트의 연결 요청을 수신하고 요청 내용을 분석합니다. 요청에 포함된 서비스 이름, 인스턴스 이름 등의 정보를 확인합니다.

③ 서비스 확인
Listener는 요청된 서비스 이름에 해당하는 데이터베이스 인스턴스가 실행 중인지, 연결을 받을 수 있는 상태인지 확인합니다.

④ 연결 설정
적절한 데이터베이스 인스턴스를 찾으면 클라이언트와 데이터베이스 서버 프로세스 간 직접 연결을 설정합니다. 전용 서버(Dedicated Server) 모드에서는 새로운 서버 프로세스를 생성하고, 공유 서버(Shared Server) 모드에서는 기존 디스패처 프로세스를 활용합니다.

⑤ Listener 역할 종료
연결이 성공적으로 설정되면 Listener는 해당 세션에서 역할을 종료합니다. 이후 클라이언트와 데이터베이스 간 통신은 직접 이루어지며, Listener는 개입하지 않습니다. 따라서 세션이 활성화된 상태에서 Listener를 재시작해도 기존 세션에는 영향을 주지 않습니다.
. . . . .
3) 서비스 등록 방식
Oracle 데이터베이스는 두 가지 방식으로 Listener에 자신의 서비스를 등록할 수 있습니다.
(1) 정적 등록
listener.ora 파일의 SID_LIST 섹션을 통해 수동으로 서비스를 구성하는 방식입니다. 데이터베이스 관리자가 직접 listener.ora 파일을 편집하여 등록할 데이터베이스 정보를 명시합니다.

정적 등록은 데이터베이스 인스턴스가 시작되지 않은 상태에서도 Listener가 해당 서비스에 대한 정보를 유지하므로, RMAN을 통한 복구 작업이나 데이터베이스 시작 전 접속이 필요한 경우에 유용합니다.
(2) 동적 등록
PMON(Process Monitor) 프로세스가 자동으로 Listener에 서비스 정보를 등록하는 방식입니다. 데이터베이스가 시작되면 PMON이 주기적으로 Listener에 접속하여 현재 제공 가능한 서비스와 인스턴스 상태를 업데이트합니다.

동적 등록이 기본 방식이며, LOCAL_LISTENER 파라미터를 통해 Listener의 주소를 지정할 수 있습니다. 이 방식은 관리가 편리하고 자동으로 최신 상태가 유지되어 대부분의 환경에서 권장됩니다.

#3. Listener 설치 및 기본 구성
1) 설치 확인
Oracle 데이터베이스를 설치하면 Listener도 함께 자동 설치됩니다. 설치 여부와 실행 상태는 다음 명령으로 확인할 수 있습니다.
# Unix/Linux 환경
ps -ef | grep tnslsnr

# Windows 환경
tasklist | findstr tnslsnr
명령 실행 결과 tnslsnr 프로세스가 표시되면 Listener가 실행 중인 것입니다. 여러 개의 Listener가 실행 중인 경우 각각의 Listener 이름과 포트 정보가 함께 표시됩니다.
. . . . .
2) 기본 Listener 생성
Oracle 설치 중 Listener를 구성하지 않았거나 새로운 Listener를 추가로 생성해야 하는 경우, 다음과 같은 방법을 사용할 수 있습니다.
(1) Oracle Net Configuration Assistant 사용
# Oracle Net Configuration Assistant 실행
netca
netca는 그래픽 사용자 인터페이스를 제공하여 Listener를 쉽게 구성할 수 있게 해줍니다. 단계별 마법사를 따라 진행하면 listener.ora 파일이 자동으로 생성됩니다.
(2) 명령줄에서 직접 시작
# 기본 포트(1521)에 Listener 생성 및 시작
lsnrctl start
listener.ora 파일이 존재하지 않는 경우, 기본 설정으로 Listener가 시작됩니다. 기본 Listener 이름은 LISTENER이며, 포트는 1521번을 사용합니다.
. . . . .
3) 기본 환경 변수 설정
Listener를 관리하기 위해서는 다음과 같은 필수 환경 변수를 설정해야 합니다.
# Unix/Linux 환경
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
export TNS_ADMIN=$ORACLE_HOME/network/admin

# Windows 환경
set ORACLE_HOME=C:\app\oracle\product\19.0.0\dbhome_1
set PATH=%ORACLE_HOME%\bin;%PATH%
set TNS_ADMIN=%ORACLE_HOME%\network\admin
① ORACLE_HOME: Oracle 소프트웨어가 설치된 홈 디렉토리 경로
② PATH: Oracle 실행 파일(lsnrctl 등)을 어디서든 실행할 수 있도록 경로 추가
③ TNS_ADMIN: listener.ora, tnsnames.ora 등 네트워크 구성 파일이 위치한 디렉토리

#4. Listener.ora 파일 구성
listener.ora 파일은 Listener의 구성 정보를 담고 있는 텍스트 파일입니다. 기본 위치는 $ORACLE_HOME/network/admin 또는 $TNS_ADMIN 디렉토리입니다.

이 파일은 Listener가 어떤 프로토콜과 포트를 사용할지, 어떤 데이터베이스 서비스를 제공할지 등을 정의합니다. 파일 형식은 Oracle 고유의 구조화된 텍스트 형식을 따르며, 직접 편집할 수 있습니다.
1) 기본 listener.ora 파일 예제
# 기본 Listener 구성
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = myhost.example.com)(PORT = 1521))
)
)

# 정적 서비스 등록
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl.example.com)
(ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
(SID_NAME = orcl)
)
)

# 로깅 및 추적 설정
LOGGING_listener = ON
TRACE_LEVEL_listener = OFF
. . . . .
2) 주요 파라미터 설명
listener.ora 파일에서 사용되는 주요 파라미터와 그 의미는 다음과 같습니다.
파라미터 설명
ADDRESS Listener가 대기할 프로토콜, 호스트, 포트를 지정합니다. 여러 개의 ADDRESS를 정의하여 다중 프로토콜을 지원할 수 있습니다.
SID_LIST 정적으로 등록할 데이터베이스 서비스 목록을 정의합니다. 데이터베이스가 시작되지 않은 상태에서도 서비스 정보를 유지합니다.
GLOBAL_DBNAME 데이터베이스의 전역 이름(DB_NAME.DB_DOMAIN)을 지정합니다.
ORACLE_HOME 데이터베이스가 설치된 Oracle 홈 디렉토리 경로를 지정합니다.
SID_NAME 시스템 식별자(System Identifier)로 데이터베이스 인스턴스를 고유하게 식별합니다.
LOGGING 로그 생성 여부를 설정합니다. ON으로 설정하면 모든 연결 시도가 로그에 기록됩니다.
TRACE_LEVEL 추적 수준을 설정합니다. OFF, USER, ADMIN, SUPPORT 중 선택할 수 있으며, 문제 해결 시 ADMIN 이상으로 설정합니다.
. . . . .
3) 고급 구성 옵션
보안 강화 및 성능 최적화를 위한 고급 구성 옵션입니다.
# 고급 Listener 구성 예제
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = myhost.example.com)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
)

# 관리자 접근 제한
PASSWORDS_listener = oracle

# 연결 속도 제한 (초당 최대 연결 수)
CONNECTION_RATE_listener = 10

# 유휴 시간 제한 (분)
INBOUND_CONNECT_TIMEOUT_listener = 60
CONNECTION_RATE_listener: 초당 최대 연결 수를 제한하여 DDoS 공격을 방어합니다.
INBOUND_CONNECT_TIMEOUT_listener: 클라이언트 연결 대기 시간을 제한하여 리소스 낭비를 방지합니다.
PASSWORDS_listener: Listener 관리 명령에 대한 암호를 설정하여 보안을 강화합니다.

#5. Listener 관리 명령어(LSNRCTL)
LSNRCTL은 Oracle Listener 관리를 위한 명령줄 도구입니다. Listener의 시작, 중지, 상태 확인 등 모든 관리 작업을 수행할 수 있습니다.
1) 기본 명령어
가장 자주 사용되는 기본 명령어들입니다.
# Listener 상태 확인
lsnrctl status

# Listener 시작
lsnrctl start

# Listener 중지
lsnrctl stop

# 설정 다시 로드 (재시작 없이)
lsnrctl reload

# 서비스 목록 표시
lsnrctl services

# 버전 정보 표시
lsnrctl version

# 현재 연결 수 확인
lsnrctl show current_listener
lsnrctl status: 가장 자주 사용되는 명령으로, Listener의 실행 상태, 버전, 시작 시간, 등록된 서비스, 현재 연결 수 등의 정보를 확인할 수 있습니다.

lsnrctl reload: listener.ora 파일을 수정한 후 Listener를 재시작하지 않고도 변경사항을 적용할 수 있는 유용한 명령입니다. 기존 연결에 영향을 주지 않습니다.
. . . . .
2) 대화형 모드 사용
LSNRCTL을 대화형 모드로 실행하면 여러 명령을 순차적으로 실행할 수 있어 편리합니다.
# 대화형 모드 시작
lsnrctl

# 프롬프트에서 명령 입력
LSNRCTL> start
LSNRCTL> status
LSNRCTL> services
LSNRCTL> stop
LSNRCTL> exit
. . . . .
3) 여러 Listener 관리
하나의 서버에 여러 Listener가 구성된 경우, 특정 Listener를 지정하여 관리할 수 있습니다.
# 특정 Listener 지정하여 상태 확인
lsnrctl status LISTENER_HR

# 특정 Listener 시작
lsnrctl start LISTENER_HR

# 모든 Listener 확인
lsnrctl status -all
Listener 이름을 명시하지 않으면 기본 Listener(LISTENER)가 대상이 됩니다. 여러 Listener를 운영하는 환경에서는 반드시 Listener 이름을 명시하여 실수를 방지해야 합니다.
마무리
Oracle Listener는 클라이언트와 데이터베이스 간의 중요한 통신 매개체입니다. 올바른 설정과 관리는 데이터베이스 환경의 안정성, 보안 및 성능에 직접적인 영향을 미칩니다.

이 글에서는 Oracle Listener의 기본 개념부터 구성, 관리까지 핵심적인 내용을 다루었습니다. Listener의 작동 원리를 이해하고, listener.ora 파일을 적절히 구성하며, LSNRCTL 명령어를 활용하여 효과적으로 관리하는 것이 중요합니다.

특히 listener.ora 파일의 주요 파라미터와 LSNRCTL의 다양한 명령어를 숙지하면 일상적인 운영은 물론 문제 발생 시 신속한 대응이 가능합니다. 정적 등록과 동적 등록의 차이를 이해하고, 환경에 맞는 적절한 방식을 선택하는 것도 중요합니다.

최신 Oracle 버전에서는 자동 등록 및 관리 기능이 향상되었지만, 기본 원리를 이해하고 문제 상황에 대응할 수 있는 능력은 여전히 중요합니다. 특히 엔터프라이즈 환경에서는 다중 Listener 구성, 보안 설정, 성능 최적화 등의 고급 주제에 대한 이해가 필요합니다.

Listener 관리는 DBA의 일상적인 업무 중 하나이므로, 이러한 지식은 Oracle 데이터베이스 환경을 효과적으로 운영하는 데 필수적입니다. 지속적인 모니터링과 적절한 보안 설정을 통해 안정적이고 안전한 데이터베이스 환경을 유지하시기 바랍니다.
긴 글 읽어주셔서 감사합니다.

끝.
반응형