[Oracle] PL/SQL Class 7 - SERVER, 통신방식, 처리방법, 분산쿼리, 서버/로컬서버 연결
2023.11.15
## 네트워크
- LOCAL: 내 자리에 있는곳은 모두 local로 인식.
- Remote: 외부에서 내자리 접속하는 것.
## 통신방식
LAN: Local Area Network
근거리 통신망(LAN)은 라우터 및 스위치와 같은 커넥터를 사용해 물리적으로 서로 가까운 디바이스 연결하는 기술.
WAN: Wide Area Netwok
광역 네트워크(WAN) 사무실, 데이터 센터, 클라우드 애플리케이션 및 클라우드 스토리지를 서로 연결하는 기술.
## 처리방법
- STACK 구조 ==> LIFO(Last In First Out) : 네트워크의 기본 운영구조, 택시기사 동전통 등
- QUEUE 구조 ==> FILO(First In Last Out) : 프린터 등
- host_name = computer_name // 네트웍 상에서 컴퓨터의 유일한 정보
- TCP / IP : (7계층 中, 4계층/3계층 구조) // 글로벌한 정보 사용가능(전세계와 소통할 수 있는 통신망)
IP address: 개인 주 소 ex) 192.168.0. X // 고유한 사설IP
subnet mask: 255.255.255.0 // 로컬연결 확인하는 IP
기본 Gateway: Routing을 위한 주소(외부로 나가기 위한 문 같은 개념) //gateway를 통해 나가는 방식
DNS Address: 도메인(Domain Name)이며, 주소록. // 대중이 알수 있는 웹상의 주소.
(과제1)
사설IP & 공인IP 개념 확인.
1. 공인IP (Public)
인터넷 사용자 로컬 네트워크 식별을 위해 ISP(인터넷서비스공급자)가 제공하는 IP 주소. (공용 IP 주소, 외부공개 IP 주소)
- 전세계에서 유일한 IP주소(중복 될 수 없음).
- 공인IP주소는 외부공개 되므로 인터넷이 연결된 다른 PC로부터 접근 가능.(방화벽 등 보안 프로그램 설치 필요)
2. 사설IP (Private)
일반가정, 회사 등 할당된 네트워크 IP 주소( 사설IP=로컬 IP=가상 IP).
==> IPv4 주소 부족으로 서브넷팅(sub netwoking)된 IP, 라우터로 변환된 로컬네트워크 PC장치로 할당.
1) 사설IP 주소대역: 3종류.
- Class A : 10.0.0.0 ~ 10.255.255.255
- Class B : 172.16.0.0 ~ 172.31.255.255
- Class C : 192.168.0.0 ~ 192.168.255.255
3. 공인IP/사설IP 차이
할당 주체 |
ISP (인터넷 서비스 공급자) |
라우터 (공유기) |
할당 대상 |
개인, 회사 서버(라우터) | 개인, 회사의 기기 |
고유성 | 인터넷상에서 유일한 주소 | 하나의 네트워크 안에서 유일 |
공개 여부 |
내부/외부 접근가능 | 외부접근 불가능 |
※ 사설IP 주소만으론 인터넷 직접연결 불가.
반드시, 라우터를 통한 1개의 공인(Public)IP만 할당, then 라우터에 연결된 개인 PC는 사설(Private)IP를 각각 할당 받아 인터넷에 접속할 수 있게 된다.
- 개인PC=> 공인망: 사설IP 할당받은 개인PC(or 스마트폰)가 데이터패킷을 인터넷 전송하면, 라우터(공유기)가 공인IP 바꿔서 전송.
- 공인망=>개인PC: 인터넷에서 오는 데이터패킷 목적지도 해당하는 사설IP로 변경 후, 개인PC(or 스마트폰)로 전송.
4. 고정 IP, 유동 IP
- 고정 IP: 컴퓨터에 고정부여 된 IP. 한번 부여되면, IP반납 전까지 다른장비로 부여할 수 없는 IP주소.
- 유동 IP: 장비에 고정적으로 IP를 부여하지 않고 컴퓨터를 사용할 때만 부여되는 IP, 돌아가며 부여하는 IP.
Thus, 인터넷상에서 서버운영 목적으론 공인IP를 고정IP로 부여하는 것이 중요.
즉, 공인IP를 부여받지 못하면, 다른 사람이 내 서버에 접속할 수가 없고 + 고정IP 부여하지 않으면, 내서버가 아닌 다른 사람 서버로 접속 될 수 있음.
But, 가정용PC는 인터넷 서비스 업체는 각 가정마다 공인IP를 유동IP로 부여하고, 공유기 내부에서는 사설IP를 유동IP로 부여하는 것이 일반적.
## 프로토콜(Protocol) : 컴퓨터끼리 전세계에서 소통하는 공통언어 같은 개념.
웹 상에서 웹 서버 및 웹브라우저 상호 간의 데이터 전송을 위한 응용계층 프로토콜
처음에는, WWW 상의 하이퍼텍스트 형태의 문서를 전달하는데 주로 이용
현재에는, 이미지,비디오,음성 등 거의 모든 형식의 데이터 전송 가능
## IP 프로토콜
: TCP/IP 기반의 인터넷 망을 통하여 데이타그램의 전달을 담당하는 프로토콜.
## DHCP (Dynamic Host Configuration Protocol)
: 동적 네트워크.
IP(인터넷 프로토콜)주소와 기타구성 정보(예: 서브넷마스크/기본 게이트웨이)를 IP 호스트에 자동제공하는 클라이언트/서버 프로토콜.
## DB서버 접근
1) ip주소(공인 IP)이며, 외부에서 접속을 못함.
2) DB서버명 = 서비스명
전역DB이름
3) 포트번호: Oracle 포트번호는 1521(기본값) 임.
4) Net service 이름: 서버 접속경로 이름이며, DB서버 접근할 수 있는 방법(partner).
## 분산쿼리
Oracle상에서 데이터베이스 링크객체 생성 해두면, 여러 지점을 접근해 DB를 통합해서 볼 수 있음.
: 지점이 많은 곳에서는 주로 분산쿼리로 지점 DB를 끓어다가 확인할 수 있음.
1) net service 생성되어 있어야 가능.
2) log-in 완료 된 상태여야 가능.
(과제2)
다른 PC들과 network로 연동해보시오.
Step1.
SQL> conn /as sysdba // oracle 계정상 최상위 계정 접속
SQL> grant create database link to aiden(계정명); // 권한 부여할 계정명으로 등록
SQL> conn aiden/aiden 계정 접속
Step2. 각각의 로컬서버 링크생성
SQL> create database link cr
2 connect to crystal identlfissed by password
3 using 'crystal'
Step3. 내가 접속한 서버와 로컬서버의 DB 확인 가능한지 체크방법
SQL> select s.sname, d.dname from sawon s, dept@crystal d
2 where s.deptno=d.deptno;
Step4. 다른 로컬서버 접속하기 위해선 항상 접속되어 있는 ID를 체크하고 나서 연결할 것.
SQL> show user
(연습1)
--1. 트리거를 이용한 원격 데이터 베이스로의 데이터 복제 구현
drop table kys;
create table kys(
hakbuns number(3),
haknames varchar(10),
haktels varchar2(20),
haksexs varchar2(4) );
insert into kys(hakbuns, haknames, haktels, haksexs) values(1, '사람', '123-4567', '여자');
insert into kys(hakbuns, haknames, haktels, haksexs) values(2, '사람사', '234-5678', '남자');
insert into kys(hakbuns, haknames, haktels, haksexs) values(3, '사람람', '345-6789', '남자');
declare
pragma autonomous_transaction;
begin
insert into kys(hakbun, hakname, haktels, haksexs) values(:new.hakbun, :new.hakname, :new.haktels, :new.haksexs);
commit;
end;
/
1번PC에 데이터(테이블 생성+트리거)를 저장해둔 후, 2번PC에서 1번PC DB를 호출해볼 것
SQL> select *from kys;
2. 원격 데이터 베이스의 프로시져 호출(입사년도에 따른 평균급여와 인원수 들려주는 프로시져)
create or replace procedure p_kys(
v_bun kys.hakbuns%type,
v_name out kys.haknames%type)
is
begin
select haknames into v_name from kys where hakbuns=v_bun;
end;
/
SQL> variable hakname varchar2(100)
SQL> exec p_kyss@banjang('이름', :hakname);
SQL> print hakname;
3. 원격 데이터 베이스에 존재하는 함수(아무 함수나)를 이용한 쿼리 호출
create or replace function f_kys
(name varchar2)
return varchar2
is
begin
return substr(name, 1, 2);
end;
/
SQL> select haknames, f_kys(haknames) from kys;
4. 로컬에서 accept로 입력받아 원격 DB -사원테이블에 입력(insert)하는 프로시져 호출
create or replace procedure pp_kys
(v_bun kys.hakbuns%type,
v_name kys.haknames%type,
v_tel kys.haktels%type,
v_sex kys.haksexs%type)
is
begin
insert into kys(hakbuns, haknames, haktels, haksexs) values(v_bun, v_name, v_tel, v_sex);
end;
/
다른PC에서 입력조회 방법
SQL> set verify off
accept hakbuns prompt '사번 입력 →'
accept haknames prompt '이름 입력 →'
accept haktels prompt '번호 입력 →'
accept haksexs prompt '성별 입력 →'
begin
pp_kys@lyb('&hakbuns','&haknames','&haktels', '&haksexs');
end;
/
SQL> select *from kys;