본문 바로가기

Database

[Oracle에서의 네트워크 이해] Oracle Server 로 접속하는 과정

 

Oracle Database Server에는 외부에서 많은 사용자들이 동시에 접속을 해서 데이터를 조회도 하고 입력, 변경, 삭제 등의 작업을 하게 됩니다. 외부에서 접속을 해야 하는 특성이 있으므로 네트워크 관련 기능이 필수인데 Oracle에서의 네트워크는 크게 Client 쪽과 Server 쪽으로 분류됩니다

 

 

위 그림에서 왼쪽에서 사용자가 SQL 문을 수행하면 User Process 라는 Process 가 생성되어 사용자가 작성한 SQL 문장을 서버 쪽으로 전달해 줍니다. 여기서 User Process는 SQL 문장을 작성하는 프로그램을 의미합니다. 그림의 예처럼 SQL*PLUS가 대표적 예입니다.

메모장 같은 프로그램에서 위 SQL 문장을 수행하려 해도 수행이 안 되는 이유는 메모장 프로그램은 User Process 역할을 못하기 때문입니다.

 

User Process는 사용자의 SQL 문장을 서버 쪽의 Server Process에게 전달해주고 또한 Server Process가 생성한 결과물을 받아와서 화면에 출력하는 역할을 담당합니다. 그런데 User Process는 과연 자신이 찾아가야 할 Server가 어디에 있는지 어떻게 알고 찾아 갈까요?

해답은 바로 tnsnames.ora 라는 파일에 있습니다.

Client 쪽에 Oracle Client Software를 설치하고 적절한 설정을 하게 되면 $ORACLE_HOME/network/admin/tnsnames.ora 라는 파일이 생성됩니다.

 

아래는 제 컴퓨터에 설정되어 있는 $ORACLE_HOME 경로 입니다.

 

 

이 파일에 User Process가 찾아가야 할 Database Server의 SID 정보와 IP 주소, Port 번호 등의 정보가 자세하게 저장되어 있습니다.

물론 이 정보는 DBA나 관리자가 생성해 주어야 합니다.

 

User Process는 tnsnames.ora 파일의 내용을 참고하여 Server를 찾아가게 됩니다.

 

위 그림에서 Oracle Server 부분을 보면 Listener 라는 부분과 Database Instance 라는 부분으로 나누어져 있는데 Database Instance가 실제 데이터가 저장되고 작업이 일어나는 부분이고 Listener 라는 곳은 회사의 경비실 같은 역할을 하는 프로그램 입니다.

 

 

즉 User Process가 SQL 문장을 가지고 Oracle Server를 찾아오면 가장 먼저 경비실에 해당하는 Listener를 만나게 됩니다.

여기에서 Listener가 listener.ora 파일을 참고하여 User Process의 요청을 검사한 후 Database Instance에 호출을 넣어서 (②번 과정) SQL을 실제 처리할 실무 담당자인 Server Process를 불러오게 됩니다.

 

이렇게 일반 User Process는 직접 데이터에 접근할 수 없게 하고 반드시 Server Process가 작업을 하게 한 이유는 데이터의 보안과 안정성 때문입니다.

 

그러나 매번 이런 단계로 SQL이 수행되는 것은 아닙니다. 최초 접속일 경우에만 위의 방법으로 접속을 하게 되고

해당 User Process가 두 번째 수행하는 SQL부터는 Listener를 거치는 과정을 생략하고 바로 Server Process를 찾아가게 됩니다. (③번 과정)

 

여기서 최초 접속이란 해당 User Process 프로그램을 실행한 후 처음 수행하는 쿼리를 의미합니다. 

만약 Listener라는 프로그램이 장애가 발생해서 중단된 상태일 경우 신규 접속은 Oracle Server에 접속할 수 없게 됩니다. 그러나 기존에 접속되어 있던 사용자들은 아무런 이상 없이 계속 사용할 수 있습니다.