본문 바로가기

교육/Netwrok

Day 11

반응형

오늘은 먼저 네트워크 운영관리에 대해 평가받은 내용에 대해 적겠습니다. 평가 내용은 아래와 같은 조건에서 네트워크 순서에 대해 그림없이 기술하는 것 입니다.

 

port

ip

mac

송신측

3000

1.1.1.2

snd

수신측

21

2.1.1.2

rcv

라우터

#1

1.1.1.1

r1

#2

2.1.1.1

r2

 

과정에서 먼저 패킷을 송신측 client Application인 ftp의 socket을 통해 메시지를 멀티플렉싱한다. 그리고 그 메시지가 TCP로 client Application에서 생성된 메시지에 수신측 포트넘버 21과 송신측 포트넘버 3000을 붙여서 Segment라는 형태로 멀티플렉싱한다. IP에서 Segment에 수신측 ip인 2.1.1.2와 송신측 ip인 1.1.1.2를 결합하여 Datagram이라는 형태로 멀티플렉싱한다. Ethernet에서 Datagram에 송신측 MAC주소와 수신측 MAC주소를 붙이게 된다. 여기서 중요한 점은 송신측과 수신측의 네트워크가1.1.1.0/24와 2.1.1.0/24로 서로 다른 네트워크라는 것을 알수있고 바로 통신을 하지 못한다. 이를 해결하기 위해 라우터를 이용하는데 라우터와 연결된 ip주소는 Gateway라는 것을 알지만 MAC주소는 알지 못한다. 이때 보내고 싶은 IP의 주소를 넣어 응답달라고 요청하는 ARP 브로드케스트를 이용해 MAC주소를 알아낸다. 이렇게 알아낸 1.1.1.0네트워크와 라우터연결포트의 MAC주소인 r1로 Frame은 Datagram에 송신측 MAC주소인 snd와 수신측 MAC주소인 r1으로 구성된다. 

 이제 라우터에서는 전해받은 Frame을 디멀티플렉싱하니 수신측의 MAC주소를 보니 자신에게 온것이 맞음을 확인한다. 그 후에 Datagram을 디멀티플렉싱하는데 수신측의 IP주소가 본인이 아님을 알게 된다. 그래서 원래 보내려고 하는 IP주소의 네트워크와 연결된 포트를 찾는다. 이때 라우터의 2번 포트에 연결된 네트워크가 원래 보내려고 하는 IP주소와 연결된 네트워크라는 것을 확인하고 Frame을 다시 멀티플랙싱한다. 이때 생성되는 Frame의 구성은 Datagram과 송신측의 MAC주소에 r2, 수신측의 MAC주소에 rcv를 넣어 멀티플렉싱하게 된다. 왜냐하면 이때는 1.1.1.0/24네트워크를 벗어나 라우터에서 2.1.1.0/24네트워크로 Frame을 전송하는 것이기 때문이다.

 이제 수신측의 Ethernet에서 받은 Frame을 디멀티플렉싱하면 수신측의 MAC주소가 rcv로 본인임을 알게 된다. 그래서 Datagram을 IP에서 디멀티플렉싱하여 수신측의 IP가 2.1.1.2로 본인에게 온것임을 확인한다. 이제 Segment를 TCP에서 디멀티플렉싱하여 수신측 포트가 21임을 확인하게 되어 socket을 통하여 수신측  Application인 vsftpd로 보내게 되는것이다.

 

----------------------------------------------------------------------------------------------------------


이번에는 SQL에 대해 알아보겠다.

RDBMS를 배우기 전에 먼저  filesystem DB에 대해 알아봐야 한다. filesystemDB에서는 data가 app에 종속 된다. 즉, 워드가 워드에서만 열리고 한글에서 안열리는 것과 같다. 다시 말하면 파일이 다른 어플리케이션과 호환이 안되고, 보안 측면에서는 무결성 훼손이라고 볼수있다. 대표적인 DB로는 cobol system이 있다.

반면 RDBMS는 data가 app과 독립되어 다른 app과 호환된다. 이는 보안측면에서 무결성이 높다고 할수있다. 현재는 RDBMS로 DB를 구성하기는 하지만 cobol처럼 사용하는 곳이 많다. 즉, 사용은 가능하지만 장점 살리지 못하는 것이다.

두 시스템을 비교하는 예시를 들어보자. 학적에는 없지만 점수는 있는 학생이 있다. 이 경우, cobol은 데이터가 생성된다. 학적데이터와 점수데이터를 따로 생각하기 때문이다. 반면 RDB데이터의 경우에는 생성되지 않는다. 학적이 없으면 연결이 되지 않기 때문에 점수가 있을 수 없다.

 

sqlplus login

로그인명령을 보자 'bst# / bst# @ dal'로 구성되어있고 내용은 'ID/PW @ TNS_name'이다. TNS는 오라클 사에서 개발한 네트워크 기술로써 서로 다른 네트워크 구성을 가지고 있는 CLIENT/SERVER - SERVLER/SERVER간에 DATA를 전송할수 있게 해주는 기능을 말한다. 오라클 서버에 접속 하기 위해서는 일단 오라클 서버의 리스너가 동작을 해야 한다. 이 리스너의 구성 파일은 &ORACLE_HOME/network/admin 에 있는 listener.ora파일이다. 리스너가 구동되고 나면 오라클 클라이언트가 접속을 할 수가 있는데 , 서버에 대한 정보을 정의 하는 역할을 하는 것이 바로 이 TNSNAME.ORA 파일의 기능이다. TNSNAME.ORA 파일은 오라클 서버로 접속시 필요한 프로토콜, 포트, 서버IP , 인스턴트 등의 구성내역을 가지고 있다.

 

프로그램 실행은 @st.sql로 명령어를 작성한다. 이를 해석해보면 st.sql을 @한다 인데 @는 excute의 의미이다. 따라서 st.sql을 실행해라 라는 의미가 된다.

만약 실행되지 않는다면 1. registry가 없는 경우가 있다. 이때는 oracle 재설치한다. 2. 경로명 다 적어서 실행한다. 3. 1.도 2.도 안되면 밀고 다시 설치해야한다. 이때 Oracle만 지우게 되면 registry등이 남아 깨끗한 상태가 되지 않아 OS자체를 새로 설치해야 할 수 도있다.

 

DB를 표현하는 테이블에 대해 알아보자.

table은 표를 의미하고 행과 열을 가진다.

열은 column(field : 엔지니어 용어)이라고 적고, 동일한 성질을 가진 데이터를 의미한다. 행은 row라고 적고, 동일한 실체에 대한 사상된  정보와 각 행과 구별할수있는 고유 식별번호 필요하다. 여기서 고유 식별번호를 pk(Primary Key), 주 식별자라고 하며 이게 없으면 표가 아니다. 왜냐하면 PK가 없는데 열에서 나타내는 정보가 중복될 경우 자료를 구분할 수 없기 때문이다.

 

sqlplus 실행과정을 표현한 그림이다.

 

select문은 sql의 꽃이다.

DB에서 무언가를 하려면 먼저 table목록을 확인하고 table열에 대해 확인해야 한다. 이것으로 정보들을 얻어오는 것이다. 

현재 스키마의 모든 테이블 목록을 검색하려면 'select * from tab;'을 입력하면 된다. 여기서 스키마란 독립적인 데이터베이스를 구성하는 존재를 의미하는데 간단하게는 사용하는 계정이라고 생각하면 쉽다. 따라서 기본적으로 본인 계정 외에는 다른 계정은 접근할 수 없다. 물론 권한을 주면 접근이 가능하다. 

어떤 테이블의 구조를 확인하려면 'desc 테이블'을 입력하여 테이블을 구성하는 컬럼 이름들 및 데이터의 타입을 확인한다. 기본적인 구성은 'select 컬럼 from 테이블;'이다. 여기서 테이블은 표 이름이고 컬럼은 확인하고자 하는 컬럼 이름이다.  여기서 컬럼자리에 *를 넣게 되면 테이블이 가진 모든 컬럼에 대해 출력한다. select문은 프리포멧이므로 ;가 나오기 전까지는 한 문장으로 인식한다. 따라서 ;하기 전에 앞에 번호가 붙어 줄이 나눠지더라도 다른 문장이 하니라 한문장으로 인식하는 것이다.

SQL문은 반드시 ;로 끝나며 대소문자를 구분하지 않지만 테이블 안의 자료에서는 대소문자가 구분된다. 또한 반드시 결과물이 출력된다. 만약 자료에 대한 입력이 없으면 0 column이라고 나온다. 아무것도 출력되지 않는다면 문제가 생긴것이라고 간주할 수 있다.

 

 

유형을 몇가지 확인해보면 varchar(#)은 글자수는 #글자까지 입력 되는 것이다. 여기서 #은 byte로 ansi코드라면 영문혹은 숫자는 4글자 한글은 2글자만 들어간다는 것이다.  비슷하게 char(#)는 입력한 글자를 #개의 글자로 입력한다는 것이다. 예를 들어 varchar(4)일때 2글자를 입력한다면 입력이 된다. 하지만 char(4)일때 2글자를 입력한다면 2글자는 공란으로 입력되어 크기가 4byte가 된다. RDB에서는 차이가 없지만 filesystem에서는 차이가 무척 컸다. 따라서 사용하지 않는것이 좋다.

 

DATE는 날짜를 입력받는데 serial값으로 저장되어있다. 보여지는건 변환해서 보여주는것이다. 그래서 99991231235959(YYYYMMDDHHMMSS)까지만 사용가능하다.

 

NUMBER는 정수 실수둘다 출력은 가능하지만 입력은 정수만 가능하고 실수는 다른 유형으로 입력해줘야 한다.

 

테이블에서 보여지는 행순서나 열순서는 관계가 없다 랜덤하게 보여진다.

 

전체를 불러오나 특정 컬럼만 불러오나 퍼포먼스의 차이는 없다. 왜냐하면 블럭데이터 방식이기 때문에 전체를 불러오고 거기서 특정 컬럼을 출력하는 방식이기 때문이다. 

 

 

1. student, course, professor, score table구조 확인

더보기

실습 1-1

desc 테이블로 테이블 정보를 알수있다.

2. 모든 학생의 정보를 검색한다.

더보기

실습 1-2

student table내용

3. 모든 교수의 정보를 검색한다.

더보기

실습 1-3

professor table 정보

4. 모든 과목의 정보를 검색한다.

더보기

실습 1-4

course table 정보

5. 기말고사 시험 점수를 검색한다.

더보기

실습 1-5

soure table 정보

6. 학생들과 학과와 학년을 검색한다.

더보기

실습 1-6

student table에서 학과와 학년을 검색한다.

7. 각 과목의 이름을 검색한다.

더보기

실습 1-7

course table에서 과목명을 검색한다.

8. 모든 교수의 직위를 검색한다.

더보기

실습 1-8

professor table에서 이름과 직위를 검색한다.

9. 각 과목의 학점수와 담당교수의 번호를 검색한다.

더보기

실습 1-9

course table에서 학점수와 담당교수의 번호를 검색한다.

10. 각 학생들이 속한 학과와 학년을 검색한다.

더보기

실습 1-10

student table에서 학과와 학년을 검색한다.

 

 

select에서 컬럼을 불러올때 pk는 반드시 불러와야 한다.

 

select에서 칼럼이 출력될때 문자유형은 왼쪽정렬, 숫자유형은 오른쪽 정렬해서 나온다.

 

select에서 from에서 할것이 없을때에는 from을 비우는 것이아니라 dual이라는 더미 테이블을 불러온다,

 

테이블은 2차원배열과 다르다 테이블은 전부 불러오는 반면에 2차원 배열은 특정행열만 따로 불러올수잇다. 그 차이는 테이블과 2차원배열의 구조 때문이다. 2차원배열은 예를들면 a[x][y]같이 행렬 이름과 배열의 첨자로 이루어져서 따로 그부분만 출력이 가능한것이다.

 

 

별명 사용

select 컬럼 as"별명",  as"별명", ....from 테이블;

as는 생략이 가능하다 그러나 ""는 공백이 있으면 해야 한다. 만약 빼고 싶다면 _로 구분하여주면 출력은 되는데 읽는 사람이 공백으로 인식한다.

컬럼은 연산도 가능하다 예를 들어 select  eno 사번, ename 이름, sal 급여 from emp;가 있다면 select  eno 사번, ename 이름, sal*12 연간_급여 from emp;로 월급을 나타낼수있다.

 

column의 사칙 연산
column의 연산 중 null값 발생 결과

또한 연산중에 NULL값이 존재한다면 연산값도 null로 출력된다. 이럴때는 NVL(null을 가진 컬럼, 바꿀 숫자)로 적게되면 nll값을 바꿀 숫자로 변경하여 연산한다. 보통 +, -연산에서는 0으로 *, /연산에서는 1로 바꿔준다.

 

NVL을 사용시 값 변화

NVL을 신뢰 하는가 하면 통상적으로 아니다 무결성을 훼손하기 때문이다.

NVL쓰는 순간 무결성 확인을 할수없다. 애초에 숫자에 NVL을 사용하는것 자체가 DB를  잘못만들었다는 의미이기 때문이다 .

변경가능하므로 회계조작의 가능성이 많기 때문이다. NVL을 사용하는것은 DB에 문제는 없지만 보안에는 문제가 되기 때문이다.

 

 

1. 각 학생의 평균 평점을 별명을 이용하여 검색한다.

더보기

실습 2-1

별명을 이용하여 table 출력

 

2. 각 과목의 학점수를 별명으로 검색한다.

더보기

실습 2-2

별명을 이용하여 선택적 출력

 

3. 각 교수의 지위를 별명을 검색한다.

더보기

실습 2-3

별명을 이용하여 선택적 출력

 

4. 급여를 10% 인상했을때 연간 지급되는 급여를 검색한다.

더보기

실습 2-4

column연산을 통해 값 비교

 

5. 현재 학생의 평균 평점을 4.0 만점이다. 이를 4.5 만점으로 환산해서 검색한다.

더보기

실습 2-5

column연산을 통해 값 비교

 

6. 급여가 10% 인상될 경우 각 사원의 연봉을 검색한다. 

더보기

실습 2-6

column연산을 통해 값 비교

 

7. 1년 동안 지급되는 급여와 10% 인상되어 1년 동안 지급되는 급여 간에 차액을 검색한다.

더보기

실습 2-7

column연산을 통해 값 비교

 

8. 각 학생들의 평균평점을 4.5 만점으로 환산하는 경우 각각 평점의 상승폭은 얼마인지 검색한다.

더보기

실습 2-8

column연산을 통해 값 비교

 

반응형

'교육 > Netwrok' 카테고리의 다른 글

보안 영역 구성을 위한 로컬 라우터 구현(수정)  (0) 2019.12.29
보안 영역 구성을 위한 로컬 라우터 구현  (0) 2019.12.20
Day 9  (0) 2019.11.28
Day 8  (0) 2019.11.27
Day 7  (0) 2019.11.26