연결, 세션, 서버 프로세스
연결과 세션의 차이, 인스턴스 접속과 V$SESSION으로 보는 2계층 및 3계층 구조
#핵심 요약
클라이언트는 데이터베이스가 아니라 그 데이터베이스를 서비스하는 인스턴스에 연결됨
연결(connection)은 클라이언트 프로세스와 인스턴스 사이의 물리적 통신 경로임
세션(session)은 사용자가 인증된 순간부터 접속을 끊을 때까지의 로그인 상태를 나타내는 논리적 개체임
서버 프로세스는 세션을 대신해 SQL을 수행하므로 항상 세션과 짝을 이룸
로그인 상태를 나타내는 것은 세션이지 서버 프로세스나 연결이 아님
2계층은 클라이언트가 데이터베이스에 직접 붙고, 3계층은 사이에 미들 티어를 둬 접속 부하를 나눔V$SESSION의 사용자와 머신 분포로 구분할 수 있음
#개념과 동작 원리
#연결과 세션
실습의 비유: 연결은 연결된 전화선, 세션은 그 선 위의 통화임
하나의 연결 위에서 세션을 끊었다가 다시 맺을 수 있음
적은 수의 연결을 여러 세션이 공유하는 접속 풀링도 실무에서 흔함
실습 OCP 해설: 전용 서버 환경에서 세션 정보를 담는 UGA는 서버 프로세스의 PGA 안에 있음
PGA와 UGA는 PGA와 UGA에 있음
#2계층과 3계층
| 구조 | 형태 | V$SESSION에서 보이는 모습 |
|---|---|---|
| 2계층(two-tier) | 클라이언트(예: 개발자 PC의 SQL Developer)가 데이터베이스에 직접 연결 | 계정과 머신이 사용자마다 다르고, 세션 수가 사용자 수만큼 늘어남 |
| 3계층(three-tier) | 클라이언트와 데이터베이스 사이에 미들 티어(애플리케이션 서버, 미들웨어) | 계정과 머신은 몇 개뿐인데 세션 수가 많음 머신 열에 애플리케이션 서버 이름이 찍힘 |
실습에서는 수강 신청, 열차 예매처럼 짧은 시간에 접속이 몰리는 서비스를 3계층의 예로 들었음
#대표적인 두 접속 방식
| 방식 | 형태 | 조건과 용도 |
|---|---|---|
| 운영체제 인증 | sqlplus / as sysdba |
인스턴스가 도는 그 서버에서, OSDBA 그룹에 속한 운영체제 계정으로 실행 인스턴스 시작과 종료 같은 관리 작업 |
| Easy Connect | <호스트>:<포트>/<서비스 이름> |
클라이언트 설정 파일 없이 원격 접속 업무 계정으로 특정 PDB에 접속할 때 |
실습에서는 Easy Connect가 TCP만 지원하고 SSL, 접속 시점 장애 조치, 부하 분산 같은 고급 옵션을 쓸 수 없다고 적었음tnsnames.ora 별칭으로 접속하는 방식은 리스너와 서비스 등록에서 다룸
#필수 명령어 또는 SQL
#접속 구조 확인
SELECT username, program, machine, osuser, module, COUNT(*) sess_cnt
FROM v$session
WHERE type = 'USER'
GROUP BY username, program, machine, osuser, module
ORDER BY sess_cnt DESC;결과 해석:
| 결과 모습 | 해석 |
|---|---|
| 계정과 머신이 사람마다 다르고 각 세션 수 1 | 2계층 |
| 애플리케이션 계정 몇 개, 애플리케이션 서버 머신 몇 개, 세션 수 합계가 큼(예: JDBC Thin Client) | 3계층 |
#운영체제 인증과 Easy Connect 접속
sqlplus / as sysdbasqlplus <USERNAME>@<HOST>:<PORT>/<SERVICE_NAME>결과 해석:
실습에서는 비밀번호를 명령줄에 함께 적었음
위 블록은 비밀번호를 프롬프트에서 입력하도록 뺐음
#사용 조건과 주의사항
실습의 관리자 인증 실습(REMOTE_LOGIN_PASSWORDFILE, sqlnet.ora의 SQLNET.AUTHENTICATION_SERVICES, 비밀번호 파일 재생성)은 사용자, 스키마, 인증에서 다룸