6. 커넥션과 서버 프로세스의 생성

Kyu·2023년 3월 14일
0

6. 커넥션과 서버 프로세스의 생성

  • 주로 어플리케이션과 통신을 클라이언트/서버의 형태
  • 간단한 장애 일때는 아키텍쳐를 이해하고 있다면 대부분 쉽게 해결 가능

오라클 소켓과 동작

  • TCP/IP의 소켓을 네트워크 통신 수단으로 사용
  • 수신을 기다리는 프로세스를 listener 라고 함

소켓이란

  • 프로세스에서 소켓을 가지고 있고 소켓끼리 송수신이 가능
  • 그 송수신을 수행하는 것은 네트워크의 드라이버와 OS의 라이브러리
  • 네트워크 안에는 여러 소켓이 존재하고 address 와 port 로 식별

커넥션 처리

(1) 리스너 기동

  • listener.ora 가 존재
  • lsnrctl start 기동
  • 하나의 리스너가 여러 데이터베이스로 안내 가능, 일반적으로는 하나의 데이터베이스만 담당
  • 포트: 1521
  • lsnrctl 이라는 도구를 사용해 리스너 기동
    • 자신이 인식해야하는 디비를 인식하는 방법은 listener.ora 설정을 읽거나, 디비에 자동으로 등록

(2) 애플리케이션의 커넥션

  • 애플리케이션 안에서 연결하기 위한 명령이 실행되거나 SQL*Plus에서 connect 명령어를 실행
  • 먼저 connecion descriptor 커넥 정보를 가지고 있어야함
    • 일반적으로 클라이언트는 tnsnames.ora 에 작성해놓는다 주소, 포트, 서비스 이름 등
    • 그리고 커넥션 식별자(별칭: alias)를 붙인다
  • 일반적으로 오라클 ㅋ를라이언트는 tnsnames.ora 의 connection descriptor 정보를 사용해 소켓을 생성

클라이언트 JDBC 드라이버

OracleDataSource ods = new OracleDataSource();
ods.setURL("jdbc:oracle:oci:@HELLO_WORLD"); // JDBC OCI 드라이버일 때 별칭을 넣는다, Thin 드라이버를 사용하면 직접 XXXX:1521/orcl 처럼 주소를 입력
ods.setUser("kyu");
ods.setPassword("1234");
Connection conn = ods.getConnection();

OCI 와 Thin 드라이버는 둘다 오라클에서 제공하고 OCI 는 오라클 클라이언트와 함께 설치 되어야함
반면에 Thin 은 따로 오라클 클라이언트를 설치할 필요없음

(3) 서버 프로세스의 생성

  • 소켓이 생성되면 통신을 한다. 이때 서버 프로세스가 항시 대기하고 있는 것이 아니다
  • 클라이언트가 SQL 처리 요청을 할때 그 때 서버 프로세스가 생성이 된다
  • 리스너는 서버 프로세스 생성이 끝나면 소켓을 서버 프로세스에 인계
    • 이후 클라이언트와 서버 프로세스는 직접 송수신 함
    • 병렬 처리, 높은 처리량
  • 애플리케이션에서 물리 커넥션을 생성하고 종료하는 반복하는 행위를 하면 안된다
    • 단, 커넥션 풀을 사용하면 애플리케이션이 커넥션을 생성하는 것처럼 보여도 물리 커넥션을 만들지않음

서버 프로세스의 생성은 무겁다

  • OS 상에서 프로세스를 생성해야함, 일반적으로 프로세스를 생성하는 것은 처리가 무겁다
  • 서버 프로세스가 사용할 수 있는 공유 메모리 확보해야한다
  • 서버 프로세스용 전용 메모리(PGA) 확보
  • 그 외 데이터베이스 내부 처리
  • 따라서 가벼운 SQL 처리할때 사용하는 CPU 보다 몇 배에서 몇십배 더많은 CPU 시간을 사용
profile
TIL 남기는 공간입니다

0개의 댓글