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");
ods.setUser("kyu");
ods.setPassword("1234");
Connection conn = ods.getConnection();
OCI 와 Thin 드라이버는 둘다 오라클에서 제공하고 OCI 는 오라클 클라이언트와 함께 설치 되어야함
반면에 Thin 은 따로 오라클 클라이언트를 설치할 필요없음
(3) 서버 프로세스의 생성
- 소켓이 생성되면 통신을 한다. 이때 서버 프로세스가 항시 대기하고 있는 것이 아니다
- 클라이언트가 SQL 처리 요청을 할때 그 때 서버 프로세스가 생성이 된다
- 리스너는 서버 프로세스 생성이 끝나면 소켓을 서버 프로세스에 인계
- 이후 클라이언트와 서버 프로세스는 직접 송수신 함
- 병렬 처리, 높은 처리량
- 애플리케이션에서 물리 커넥션을 생성하고 종료하는 반복하는 행위를 하면 안된다
- 단, 커넥션 풀을 사용하면 애플리케이션이 커넥션을 생성하는 것처럼 보여도 물리 커넥션을 만들지않음
서버 프로세스의 생성은 무겁다
- OS 상에서 프로세스를 생성해야함, 일반적으로 프로세스를 생성하는 것은 처리가 무겁다
- 서버 프로세스가 사용할 수 있는 공유 메모리 확보해야한다
- 서버 프로세스용 전용 메모리(PGA) 확보
- 그 외 데이터베이스 내부 처리
- 따라서 가벼운 SQL 처리할때 사용하는 CPU 보다 몇 배에서 몇십배 더많은 CPU 시간을 사용