신뢰성은 배치 실행 결과를 확인할 수 있어야 한다. 몇 건의 데이터가 처리되고 문제가 되며 원인 분석도 되어야 함
스프링사와 액센츄어라는 회사가 같이 개발한 배치
스프링 배치에 녹아들어져가 있다.
Dependency Injection, AOP, 서비스 추상화 -> 스프링 핵심 기능 모두 사용
- Batch Monitoring 기능 제공 (몇건의 데이터가 처리됬는지, 몇건으 데이터가 문제가 발생했는지)
- Chunk 기반의 데이터 처리 지원 (데이터를 묶음 단위로 처리)
- Retry, Repeat, Skip - 문제가 발생했을 때 처리
- Quartz, Command Link, Web 등의 외부 트리거를 통한 실행 지원
Quartz: 자바 스케줄러 라이브러리, 리눅스의 크론이나 윈도우의 잡 스케줄러 같은 기능들이 없어도 자바 라이브러리 쿼츠만 가지고도 배치 프로그램을 정해진 스케줄에 따라서 배치를 실행할 수 있게 된다.
Command Line: 리눅스의 셸이나 윈도우의 프롬프트 창에서 배치를 실행하는 것을 의미한다.
Web: 웹 어플리케이션에 스프링 배치 구성요소를 미리 등록해두었다가 사용자의 요청이 왔을 때 배치 잡을 실행시킬 수 있는 것을 말한다.
JobLauncher: 사용자의 배치 실행 명령을 받아서 Job을 실행시켜주는 역할
Job: 배치 프로그램의 중심적인 개념, 여러 개의 Step으로 나누어서 실행을 할 수 있다.
Step: 크게 두가지 방식으로 구성할 수 있다. Item 단위로 읽고 처리하고 쓰는 방식이 있다. Item은 DB로 봤을 때 DB의 테이블의 레코드 한 줄을 아이템이라고 볼 수 있다. 파일은 플랫한 파일, 텍스트 파일이나 CSV 파일은 한줄, XML은 특정 엘리먼트 한개를 Item이라고 할 수 있다.
조금 더 커스텀한 업무 처리를 해야할 될 때가 있다.
그럴 때
JobRepository는 DB 또는 메모리 방식으로 구성할 수 있다.
모든 이력이 기록됨
이력을 통해 배치가 실행된 결과를 확인할 수 있다.
모니터링 용도로도 활용될 수 있다.
Application: 개발자가 직접 작성한 비즈니스 로직을 커스텀한 코드들
Batch Core: Batch Job을 실행하는데 필요한 구현체들 (JobLauncher, Job 등)
Batch Infrastructure: 배치 프로그램을 실행하는데 있어서 필요로 하는 부가적인 기능들 (예외처리, 트랜잭션)
스프링 배치의 전체적인 실행 흐름
Run Tier : 외부의 트리거에 의해서 배치를 실행 영역
Job Tier: 실행 명령을 받아서 Job을 실행하는 명령어 영역
Application Tier: 개발자가 작성한 비즈니스 로직, Step이 실제로 동작되는 영역
Data Tier: 데이터를 입출력하는 데이터가 저장되어 있는 데이터 영역
회색박스: 스프링 배치 범위에 포함되지 않는 외부 어플리케이션
파란색 박스: 스프링 배치에서 제공하는 서비스들
초록색 박스: 개발자가 직접 구현을 해야하는 부분들
배치를 실행했을 때 처리 도중에 발생하는 여러가지 이벤트 정보를 기록해주는 저장소 역할
배치잡이 언제 시작됐고 언제 종료됬는지 실행결과는 어떤지 메타 데이터들이 저장
Job Repository 설정 예시 코드
namespace를 이용해서 job repository를 설정하는 예시 코드
기본적인 빈태그를 이용해서 job repository를 설정하는 예시 코드
job repository를 설정하는 방법
- 데이터베이스 방식: 배치를 실행한 이력을 남겨야 될 때, 모니터링을 해야 될 때, 중복 실행을 방지하고 싶을 때 -> JobRepositoryFactoryBean 사용 (DataSource 주입)
- 메모리 방식: 배치 실행 이력을 남길 필요가 없을 때 설정해서 사용할 수 있다. MapJobRepositoryFactoryBean 사용해서 설정
Spring Batch를 DataBase 방식으로 실행하려면 아래와 같은 테이블들을 미리 생성해야 한다.
스크립트 문은 스프링 배치 코어 jar 파일 안에 각각의 DB 유형별로 포함되어져 있다.
미리 잡 리포지토리 테이블들을 생성해주면 된다.
사용자의 실행 명령을 받아서 잡을 실행시키는 역할
실행시킬 잡 이름과 잡 파라미터를 입력 받아서 잡을 실행시키게 됨
잡 런처 인터페이스 이 run 메소드를 보면 잡을 실행시키기 위해 필요로 하는 아규먼트를 확인할 수 있다.
잡 객체와 잡 파라미터즈 두 개의 인자값을 받고 있다.
jobLauncher 인터페이스를 구현해서 기본으로 제공하는 클래스로는 SimpleJobLauncher 클래스가 있다.
이 잡 런처를 설정할 때 리포지토리를 필수로 주입
잡은 동기적 실행과 비동기적 실행으로 실행
동기적 실행: 잡이 실행했을 때 종료될 때까지 대기 상태로 있는 것
비동기적 실행: 잡이 실행했을 때 바로 잡이 종료처리 되는 것을 말한다. 실제로 그 잡은 백그라운드 쓰레드로 계속 동작. 실제로 종료가 됬을 때는 잡 리포지토리에 상태 정보를 저장하게 된다. 기본적으로 taskExecutor를 설정하지 않으면 동기적 방식으로 실행된다.
-PPP 인터페이스: WAN 구간이랑 연결할 때 또는 전화 라인이랑 연결해서 전화 모뎀이나 연결되서 통신이 가능하게 해주는 인터페이스
-EL 인터페이스
-페러럴 라인 인터페이스
-슬랩 인터페이스
자동으로 인식도 되지만 수동으로 설정해야되는 경우도 있다.
수동으로 인터페이스를 설정해줘야 하는 경우도 있다.
인터페이스 모듈을 커널에 직접 관리자가 한다.
적재하는 방법은 수동 적재 방법과 자동 적재 방법이 있다.
수동은 일반적으로 ins mod 라고 하는 명령어를 이용해서 관리자가 직접 인터페이스 모듈을 커널에 적재하고
ls mod라는 명령어로 적재된 정보를 확인할 수 있다.
자동으로 모듈을 커널에 적재하는 방법은 /etc/progconf 라고 하는 파일이 있는데 그 파일에 모듈 정보를 세팅해 놓고 그러면 부팅시에 자동으로 모듈이 커널에 적재가 된다. 특정 파일에 세팅값을 주어서 인터페이스를 인식할 수 있는 방법을 자동 적재 방법이라고 얘기를 한다.
네트워크 설정 파일들
배포본마다 조금 파일명이 다르다.
네트워크 환경 설정 정보라고 하면 IP나 서브넷 마스크, 게이트웨이, DNS 정보들을 보통 네트워크 설정 환경 정보라고 얘기를 한다.
/etc/sysconfig/network:
/etc/sysconfig/network-scripts/ifcfg-ethX:
위 두 파일은 DNS주소는 기입을 하지 않는다. 디바이스 명, IP 주소, 서브넷 주소, 게이트 웨이, 네트워크 타입(이더넷 타입, 토크닝 타입) 을 지정할 수 있다.
고정 IP를 사용하는지 유동 IP를 사용하는지를 위 두개의 파일에 저장할 수 있다.
네트워크 환경 설정 정보는 배포본마다 다르니 확인할 필요가 있다.
/etc/resolv.conf:
도메인명과 네임서버가 각각 기록이 되기 때문에
DNS 서버 주소를 입력하지 않으면 네트워크가 정상적으로 돌아가긴 하지만 인터넷이 안된다라고 생각을 할 수 있다. 주의해서 반드시 세팅해야 한다.
/etc/hosts:
DNS는 도메인명에 대한 IP 주소를 알려주는 서버의 주소를 기록하는 것
DNS가 원활하게 돌아가지 않을 때는 이 파일을 이용할 수 있다.
IP 주소와 도메인 주소를 1:1로 등록을 해서 내 컴퓨터가 DNS처럼 작동할 수 있게 된다.
/etc/host.conf:
DNS 서비스를 제공할 때 이 파일을 먼저 검사한 다음에 서비스를 가능하게 한다.
DNS 환경설정을 컨트롤하는 파일을 보통 host.conf라고 얘기를 한다.
네트워크 인터페이스를 수동이든 자동이든 인식시킨 후에는 네트워크 설정을 해야 한다.
우리는 이를 간혹 TCP/IP 설정이라고 얘기를 하는데 즉 IP주소나 게이트웨이 DNS를 설정하는 작업. 이를 TCP/IP를 설정한다고 하거나 IP 주소를 설정한다고 얘기를 한다.
IP 주소를 설정하는 방법
- 네트워크 설정 파일에다가 직접 주소를 설정하는 방법
- 명령어를 이용해서 주소를 설정
- 유틸리티를 이용해서 주소를 설정
네트워크 설정 파일은 /etc/sysconfig/network 또는 /etc/sysconfig/network-scripts/ifcfg-ethX 파일안에 주소를 설정할 수 있다.
터미널 창에서 ifconfig라는 명령어를 이용해서 직접 IP를 지정할 수 있다.
유틸리티를 이용한 주소 지정은 배포본마다 유틸리티를 호출하는 명령어가 다르다. netconfig, system-config-network, redhat-config-network 등 다양한 유틸리티 명령어들이 있어서 어떤 배포본을 사용하는지를 확인해서 자신이 어떤 배포본을 쓰는지를 확인하시면 그것에 맞는 유틸리티 호출 명령어를 써서 IP 주소를 지정할 수 있다.
라우팅 테이블 설정 및 관리
라우팅이란 송신 패킷이 목적지까지 데이터를 전송할 수 있는 경로 설정 작업을 보통 라우팅이라고 얘기를 한다.
송신 패킷은 라우팅 테이블의 정보를 보고 패킷 전송 방향을 결정하게 된다.
일반적으로 서버 관리자들은 이 라우팅 테이블을 구성을 할 수 있다.
라우팅 테이블을 구성할 수 있다. 라우팅 테이블의 구성 명령어는 라우트라는 명령어을 이용하게 되는데 교재에서처럼 라우트 에드라는 명령어를 이용을 해서 라우팅 테이블을 구성할 수 있다.
192.168.10.0으로 트래픽을 전송하기 위해서는 이더넷0를 이용해라 목적지로 가기 위해서는 이렇게 어떤 인터페이스를 통과해야하는지를 기록을 해주게 된다.
앞에 명령어를 간단히 보면 라우트 에드는 기본 명령어고 옵션 net은 목적지 네트워크 대라고 보면 된다.
그 뒤에는 디바이스는 어떤 인터페이스를 통해 트래픽을 내보낼 것인가 간략하게 나타낸 것이다.
간혹 지정된 경로가 목적지 경로가 라우트 테이블에 없는 경우가 있다.
딱 정해 놓은 20점 네트워크에 가고 싶은데 이 정보가 라우팅 테이블에 없을 수 있다.
이런 경우 디폴트 경로를 지정해서 트래픽을 전송을 하게 되는데
디폴트 경로 설정 방법은 라우팅 테이블과 같이 라우트 에드라고 해놓으면 되고 디폴트 게이트라고 명령어를 써주면 라우팅 테이블에 없는 경로들에 대한 트래픽 전송도 가능하게 설정할 수 있다.
네트워크 관련 명령어
TCP/IP 주소 설정 정보 관리: ifconfig, nsloopup
네트워크 경로 상태 확인: ping, traceroute
네트워크 연결 상태 확인: netstat
라우팅 테이블 확인: route
NIC 상태 확인: ethtool, mii-tool, arp
ifconfig: 네트워크 인터페이스 구성 정보를 확인하기 위해서 일반적으로 사용하는 명령어. 즉 인터페이스 맥 어드레스가 어떻게 되는지 IP가 제대로 설정이 되어 있는지 활성화가 되어 있는지 이러한 상세 정보를 확인할 수 있다.
ping: 특정 호스트 또는 네트워크 장비까지 통신이 가능한지 즉 목적지까지 트래픽 전송이 가능한지를 확인하기 위해서 ICMP가 제공해주는 기본 명령어
traceroute: ping을 했을 때 목적지까지 트래픽이 전송이 안되면 어느 구간에서 문제가 발생했는지 확인하거나 또는 통신이 되더라도 어떤 경로를 통해서 목적지까지 트래픽이 전달되는지 확인할 수 있는 명령어
목적지까지 홉수, 시간을 보고 특수 구간의 장애 구간도 찾아낼 수 있다.
route: 라우팅 테이블을 확인해주는 명령어, 시스템의 설정의 게이트웨이 주소값을 확인할 때도 일반적으로 사용하거나 라우팅 테이블을 구성할 때도 사용할 수 있는 명령어
nslookup: DNS 서버를 기반으로 해서 그것을 이용해서 특정 호스트의 IP를 찾아내주는 역할을 해주는 명령어
netstat: 전송 제어 프로토콜, 라우팅 테이블, 네트워크 프로토콜 통계정보, 네트워크 연결 상태 정보 모두 확인. 가장 유용한 명령어 중 하나. 옵션 r을 사용하면 라우팅 테이블 확인. n은 ip주소 형태나 포트 번호 확인. s는 프로토콜 정보도 보여준다. 통계적인 정보나 상제 정보를 확인하고 싶으면 netstat을 이용하면 많은 정보를 확인할 수 있다.
NIC(네트워크 인터페이스) 상태 정보를 확인할 수 있는 명령어로는 ethtool, mii-tool, arp
mii-tool: 네트워크 인터페이스 속도, 전송 모드 확인, 몇 메가 속도를 지원하는지 이러한 정보를 확인할 수 있는 명령어.
ethtool: mii-tool보다 좀 더 상세한 정보를 확인하고 싶으면 사용할 수 있다. 물리적인 연결여부를 확인할 수 있을 뿐만 아니라 좀 더 상세한 네트워크 인터페이스 상태 정보를 확인할 수 있다.
arp: 보통 컴퓨터는 arp 테이블을 가지고 있다. ip를 기반으로 해서 ip를 가진 호스트의 mac address를 1:1로 기록을 해 놓은 것. arp는 192.168.10.90는 000C2908CEC3이라는 mac address를 가지고 있다. 어떤 ip를 가지면 mac address를 1:1로 기록해 놓은 것을 arp 테이블인데 arp 테이블 정보를 확인할 때 보통 arp 명령어를 이용을 한다.
- 망과 망을 연결해서 넓은 단위로 연결해서 데이터를 전송하다 보니 전체적으로 속도가 느리고 전송률도 느리다.
- 구성 방식은 전용회선, 회선 교환망과 패킷 교환망 등이 있다. (망과 망을 연결하는 교환기의 종류가 회선 교환기로 구성되어 있으면 회선 교환망 그리고 패킷 교환기로 구성되어 있으면 패킷 교화망이라고 한다.)
SAN(Storage Area Network)
스토리지 에어리어 네트워크
스토리지 전용 고속 네트워크
파이버 채널을 이용해서 구성되고 저장장치들 간의 고속의 연결을 위하 망을 구축
호스트와 호스트를 연결을 하는데 특정한 호스트의 종류는 중요하지 않고, 호스트를 연결하는 저장장치 파이버 채널로 사용하고 있고 파이버 채널을 통해서 대용량의 데이터를 고속으로 전송한다.
일반적으로 서버가 클라이언트로 받은 입출력 요청을 블럭 I/O로 전환해서 SAN에 연결된 스토리지로 전송한다.
LAN 토폴리지(Topology)
- 토폴로지는 호스트 및 장비들의 물리적인 배치 형태이다. (장비들을 호스트)
- 토폴로지는 성형, 망형, 버스형, 링형, 트리형 등이 있다. (호스트들이 어떠한 모양으로 연결되어 있는지)
성형: 여러대의 컴퓨터가 허브나 스위치로 연결, 중앙집권식 구조, 네트워크 확장이 용이, 중앙 컴퓨터에서 고장이 나면 네트워크 전체가 사용이 불가능하므로 단점이다.
망형: 각 노드들이 1:1로 다 연결되어 있다. 마치 그물처럼 연결되어 있다. 그래서 Full Mesh 라고 부른다. 대량의 데이터를 1:1로 송수신하기 때문에 대용량 데이터를 전송할 때 적합하다. 하나의 노드가 고장이 나더라도 다른 시스템에 영향을 주지 않는다. 신뢰성이 높은 방식. 회선 구축 비용이 많이 든다.
버스형: 회선을 share한다. 하나의 통신회선을 여러 컴퓨터들이 공유해서 사용하는 형태. 네트워크 성능을 좌우한다. 장점으로는 노드들의 추가나 제거가 용이하고 설치 비용도 저렴하다. 노드 수가 직렬하게 되면 아무래도 병목 현상이 발생하고 네트워크 성능 저하를 초래한다. 통신회선을 share하기 때문에 문제가 발생하면 그 노드를 찾아내기 어렵다는 단점을 가지고 있다.
링형: 원을 그리듯이 각 장비들이 연결되어 있다. 각 노드가 좌우에 인접한 노드와 연결되어 있으면 원형이라고 이야기를 한다. 다음 컴퓨터에 재전송한다. 링형도 회선을 공유하기 때문에 누가 회선을 사용할 것인가에 대한 제어방식이 있다. 토큰 패싱이라는 방법으로 데이터를 전송한다. 링형은 노드 추가나 삭제가 용이하지 않다. 확장성이 용이하지 않다. 네트워크 환경이 자주 바뀌지 않는 경우 링형을 구성하는 것이 효과적. 데이터 전송 시 토큰패싱 기법을 사용하기 때문에 데이터 전송시 충돌도 없고 노드 숫자가 증가하더라도 망 성능의 저하가 적다.
트리형: 버스형 + 성형 확장시킨 것. 백본과 같은 공통 회선 share 회선을 하는 분기장치에서 보통 이러한 구조를 사용하게 된다. 트래픽 량이 증가할 때 병목 현상이 같이 증대할 수 있다는 단점을 가지고 있다.
매체 접근 제어 방식
여러 호스트들이 동일한 장비를 같이 공유해서 사용한다.
같은 LAN 공간에 있다라는 것은 같은 장비를 공유해서 사용.
충돌이나 경합 문제가 발생.
공유 매체를 사용할 경우 충돌이 일어나게 하지 않는 제어 기술이 필요하다.
이를 매체 접근 제어 방식이다.
가장 대표적인 방식이 CSMA/CD와 토큰 패싱이 있다.
CSMA/CD
CSMA/CD는 누군가가 데이터를 전송하려면 공유 매체를 누군가가 사용하고 있는지를 누군가가 감지를 하게 된다. 데이터를 아무도 사용하지 않으면 데이터를 전송을 하게 되고 만약에 누군가가 그 share매체를 사용하고 있다면 delay를 발생한다. 충돌이 발생하면 일반적으로 충돌이 발생한 구간에서 jam신호 같은 교통 사고가 일어난 것 처럼 딱 부딪치는 것과 동일하기 때문에 signal이 크게 발생한다. 트래픽끼리 충돌이 발생하면 jam신호를 발생해서 broadcast를 하게 된다. .jam신호를 받은 송신자들은 back off 알고리즘 동안 지연한 후에 데이터를 다시 전송을 하게 된다.
보통 CSMA/CD는 이더넷 랜에서 일반적으로 사용하고 있는 충돌제어방식, 매체접근방식이다.,
토큰패싱(Token Passing)
링 랜 같은 랜에서 일반적으로 사용하는 매체 접근 제어 방식이다.
토큰에는 두가지 종류가 있다.
free token이 있고 busy token이 있는데
free token이 데이터를 전송하려고 하는 사람은 현재 토큰의 상태를 파악하게 된다.
free token이면 아무도 회선을 사용하지 않다.
busy token이면 누군가가 통신회선을 사용하고 있기 때문에 데이터를 전송할 수 없다.
충돌이 안 일어나게 하기 위해서 제어 신호가 free token인지 busy token인지 확인하고 free token이면 busy token으로 전환 후에 데이터를 전송하고 데이터가 전송이 완료되면 busy token을 다시 free token으로 전환시켜서 다른 사람들이 데이터를 전송할 수 있게 해놓는 방식.
LAN 구성 장비
1계층 장비
- 케이블(cable): 보호 외피나, 외장 안에 두개 이상의 전선이나 광섬유로 묶어서 사용하고 있다. 가장 일반적으로 LAN환경에서 사용하는 케이블은 UTP(외부적 간섭을 줄이기 위해서 트위스트 페어를 한 것) STP(실드를 해놓은것, 구리선을 은박지나, 은호일이나, 은 그물로 감싸고 있는 것을 실드라고 한다) 실드는 외부 간섭을 줄이기 위해서 하는 건데 아무래도 STP가 전기적 간섭은 덜 하겠고, UTP는 서로 구리선끼리 꼬임을 해서 전기적 간섭은 STP가 덜하지만 전송 거리나 전송 비용이나 속도나 이런 것들은 UTP나 STP가 동일하다. STP는 실드라는 작업을 했기 때문에 설치 비용이 비싼 편이다. 가격은 광케이블에 비해서 저렴하긴 하지만 실드라는 작업을 더 함으로써 UTP보다는 조금 더 비싼편. 성능은 똑같은데 가격은 더 비싸기 때문에 STP 보다는 UTP를 현업에서는 더 많이 사용한다. UTP도 전기적 간섭이 많지 않은 편이기 때문에 UTP를 써도 무방하다.
- 리피터(repeater): 신호 재생계, 증폭기라고 얘기를 하는데 신호가 거리가 멀어질 수록 점점 감쇄하는데 이런 재생기가 있으면 원음으로 복원을 해준다. 그래서 전송 거리를 확장시키는 기능이 있다.
- 허브(Hub): 신호를 전달해주는 장비, 증폭기 기능을 가지고 있다. 허브를 이용하면 리피터를 다시 둘 필요는 없다. 신호를 노드에 전달해주는 기능도 가지고 있다.
LAN 카드: 호스트가 네트워크에 접속할 수 있도록 컴퓨터내에 설치되는 확장 카드를 LAN 카드라고 얘기를 한다.
전기 신호를 데이터로 송신해서 변환하거나, 데이터를 전기 신호로 변환해서 송신하는 신호 변환 장치 기능도 내장되어 있다.
LAN 카드에는 MAC 어드레스가 할당되어 있어서 LAN 카드의 고유 식별자 번호를 보통 MAC 어드레스라고 한다. 그래서 이 MAC 어드레스를 이용해서 데이터의 수신여부를 판별한다.
스위치와 브릿지는 거의 동일한 역할을 한다.
프레임을 버퍼에 저장하고 목적지 주소에 맞는 MAC Address를 보고 그 Mac Address에 해당하는 포트에다가 프레임을 전달하는 역할. 즉 허브 같은 경우는 signal로 데이터를 전달하는 방면 브릿지는 Mac address라고 하는 주소를 기반으로 해서 그 주소에 맞는 포트에다가 프레임을 전달해준다. 그리고 동일한 기능은 브릿지를 사용하는 이유가 데이터 전송 범위를 감소시키기 위해서 줄이기 위해서 segment를 분할해서 데이터를 전송할 때 브릿지 장비나 스위치를 사용한다.
- 브릿지: 처리 방식이 소프트웨어 기반의 방식이라서 전송속도가 느리다. 이를 보완한 장비가 스위치다.
- 스위치: 하드웨어 기반으로 데이터를 전송하는 방식을 취하기 때문에 전송속도가 빠르다.
스위치나 브릿지는 공통적으로 Mac 주소 테이블을 가지고 있다. Mac 테이블을 기반으로 프레임을 전송을 하게 되고 스위치 중에서는 스위칭 허브가 있다. 스위칭 허브는 전용 매체 기술을 이용해서 트래픽 병목 현상도 제거하고 있고 포트별로 전송속도도 보장하고 있다는 장점을 가지고 있다.
게이트웨이에 대해서 인터네트워크 장비이다. 네트워크와 네트워크를 연결해주는 장비. 네트워크와 네트워크사이에서 운영되는 장비라고 해서 인터네트워킹 장비라고 얘기한다,.
스위치, 브릿지, 허브는 인트라 네트워크, 하나의 네트워크 안에서 운영시키는 장비.
라우터와 게이트웨이는 네트워크와 네트워크를 연결하기 위한 장비로 사용된다고 이해하면 된다.
라우터는 보통 3계층 장비라고 얘기를 한다.
라우터는 3계층까지 지원해주는 장비라고 얘기를 한다.
서로 다른 망과 프로토콜을 사용하는 네트워크 장비간의 통신을 가능하게 해주는 장비이다.
망과 망을 연결해주는 핵심적인 통신 장비라고 정리하겠다.
망과 망을 연결을 할 때 최적 경로 선정으로 설정을 한다. 목적지까지 가는 경로설정 작업도 하는데 이 때 그냥 목적지까지 가능 경로를 다 선정하는 것이 아니라 여러개의 경로중에서 최고의 경로를 선정해서 데이터가 원활하게 전송될 수 있도록 해주는 기능을 지원해주는 기기가 라우터이다.
다음은 게이트웨이이다.
서로 다른 네트워크를 상호 연결해주는 네트워크 장비이다.
라우터 보다는 게이트웨이가 약간 라우터라고 하는 것을 포함하고 있다.
서로 다른 통신망이나 프로토콜들을 사용하고 있는 네트워크 간의 통신을 가능하게 해주는 통신 장비. 중개자 역할을 해준다.
UTP 케이블링
- 다이렉트 케이블: 양쪽 다 eidtie 568b 표준 연결을 해서 사용하는 것이고 이기종 장비간을 연결할 때 사용하는 케이블. 컴퓨터나 허브, 컴퓨터나 스위치, 라우터나 허브, 라우터나 스위치 이렇게 기종이 다른 장비를 연결할 때 보통 다이렉트 케이블을 사용. 568b 케이블 선의 규격.
- 크로스 오버 케이블: 한쪽은 568b고 한쪽은 568a로 구성해놓은 케이블을 크로스 오버 케이블이라고 한다. 같은 기종의 장비를 연결할 때 보통 사용한다. 컴퓨터나 컴퓨터, 스위치나 스위치 이러한 경우에는 크로스 오버 케이블을 사용한다고 이해하면 될 것 같다. 568a 규격
프로토콜의 개요와 기능
OSI 모델과 TCP/IP 모델을 살펴보겠다.
OSI 모델은 국제표준화 기구에서 이기종 시스템간에도 통신이 가능하기 위해서 만든 프로토콜 개발 지침서
OSI 참조 모델은 네트워크 기능을 총 7개의 계층을 나누어서 각 계층의 기능 및 프로토콜을 정의하고 있다.
참조 모델이라고 한다.
OSI 참조 모델을 기반으로 해서 실제 현업에서 사용되는 모델이 TCP/IP 모델이 있다.
OSI 7Layer를 현업에서 사용될 수 있게 변형된 Layer.
각 계층별 기능을 이해하고 있어야 한다.
응용 계층 -> 물리 계층으로 7개의 계층으로 되어 있다.
7응용계층: 사용자가 어떤 인터넷 서비스를 받으려고 할 때 그 인터페이스에 대한 Userinterface를 제공해주는 측을 응용계층이라고 이야기 한다. UI를 기반으로 실제 전송하려는 데이터가 생성이 된다.
6표현계층: UI를 통해서 데이터를 생성하게 되는데 일반적으로 그 데이터는 text 사람이 이해할 수 있는 문자이다. 이것을 기계어 같은 형태로 변환하는 인코딩 작업이나, 데이터가 사이즈가 큰 경우에 압축 작업 그리고 암호화 작업을 진행하는 계층을 표현 계층이라고 이야기를 한다.
5 세션계층: 프로그램들 간의 애플리케이션들의 즉 송수신지 간의 서비스를 연결 설정하거나 유지 해제하는 작업을 하는 것이 세션 계층이다.
4전송계층: end to end 간 연결에 관련된 작업을 전송계층이라고 이야기 한다. virtual circuit 논리적 통신로도 제공을 하고 있다.
3네트워크 계층: 논리적 주소를 사용. 논리적 주소라는 것은 ip를 말한다. ip주소를 이용해서 경로를 관리하거나 최적 경로 설정을 해주는 층을 3계층이라고 이야기를 한다.
2데이터링트 계층: 기능이 조금 많다. 데이터 전송 형식 결정, 매체접근 제어 기능. CSM/CD, 토큰패싱도 2계층에서 제공한다. 오류 검출 기능. 수신된 데이터에 오류가 있는지를 체크하는 부분.
1물리계층: 전기적, 기계적, 기능적으로 변환해서 데이터가 실제 전송하게 해주는 층을 물리계층이라고 한다.
프로그램 같은 경우 응용 계층, 표현 계층, 세션 계층은 소프트웨어가 제공을 해주게 되는데 분할하기가 조금 어렵다, 그래서 TCP/IP 계층을 총 4개의 계층으로 나누고 있다.
응용 계층은 UI, 부호화, 세션 등 7~5계층의 기능을 지원하는 층
전송계층은 4계층 지원
인터넷층은 3네트워크 층 지원
네트워크 인터페이스 층은 1~2층의 기능을 모두 가지고 있는 층을 네트워크 인터페이스 층이라고 정의하고 있다.
계층별 프로토콜
프로토콜이라고 얘기를 하면 특정 통신 기능을 수행하는 규약을 프로토콜로 정의하고 있다.
각 OSI 7Layer의 기능을 정의를 했다면 그 기능을 수행하기 위한 규악이 있어야 한다. 이를 프로토콜이라고 얘기를 하고 이러한 규약들이 지정이 되어야 두 노드 사이의 데이터 교환시에 통신 오류나 이런 것들을 피할 수 있다.
프로토콜을 구성하는 요소로는 형식, 의미, 순서가 있다.
형식은 syntax, 의미는 semantic, 순서는 Timing이라고 얘기를 한다.
형식은 규약을 지정할 때 포맷이나 부호화 신호레벨들을 결정하게 하는 것.
의미는 어떻게 패턴을 정의할 것인지 어떻게 동작할 것인지 결정
순서는 속도 일치나 순서 제어등을 하게 되는 요소
각 프로토콜의 기능들에 대해서 명확하게 아는 것은 당연한데 어느 계층에 속하는 프로토콜인지도 명확하게 알아야 한다.
3인터넷 계층 프로토콜: IP, ICMP, IGMP, ARP, PARP
4전송 계층 프로토콜: TCP(Transmission Control Protocol), UDP(User Datagram Protocol)
IP는 송수신 호스트가 패킷 교환 네트워크에서 정보를 전송하게 해주는 가장 중요한 프로토콜 중 하나가 IP이다.
ICMP는 인터넷 컨트롤 메시지 프로토콜이라고 해서 송수신되는 데이터에 문제가 발생했너나 이상 유무를 전달해주는 메시지 프로토콜. ping등의 작업을 하게 되는데 ICMP가 다 제어한다.
IGMP는 인터넷 그룹 메시지 프로토콜로 멀티캐스트 관련된 작업을 제어해주는 프로토콜.
ARP는 IP주소를 기반으로 해서 물리적 주소를 알아내기 위해서 사용되는 프로토콜.
RARP는 MAC address를 기반으로 해서 IP를 찾을 때 사용되는 프로토콜
TCP는 신뢰성이나 연결지향 작업
UDP는 비신뢰성 비연결성 지향 작업
SMTP는 심플 메일 트랜스퍼 프로토콜, 메일 전송 관련 프로토콜. 메일 송신에 관련된 프로토콜.
POP은 포스트 오피스 프로토콜로 메일의 수신을 담당하는 프로토콜.
메일 서비스를 받게 될 때 SMTP + POP이 연합이 되서 사용이 된다.
Telnet은 원격지 컴퓨터에 접속할 수 있게 해주는 서비스 프로토콜.
SSH 역시 Telnet과 마찬가지로 원격 접속을 가능하게 해주는 프로토콜이긴 한데 원격 서버에 접속됬을 때 전송되는 문자들이 clear test 암호화되지는 않는 반면 SSH는 암호화가 되어서 전송이 되 Telnet보다는 보안성을 강화시킨 원격접속 프로토콜.
FTP는 파일 전송 프로토콜. 대량의 데이터를 고속으로 전송할 때 일반적으로 사용하는 프로토콜.
HTTP는 웹 서비스를 이용하는 서버와 클라이언트 사이에서 사용하는 웹 서비스를 지원해주는 프로토콜.
SNMP는 심플 네트워크 메니지먼트 프로토콜로 네트워크 장비들을 관제하려고 할 때 감시나 통제하려고 할 때 일반적으로 사용하는 프로토콜.
TFTP는 FTP와 동일한 기능을 제공하다만 FTP는 TCP 계열이고 TFTP는 UDP 계열이다. 데이터 송수신의 절차를 조금 간략화해놓은 TFTP라고 얘기를 하고 인증 과정은 생략이 되어있다. FTP 접속을 하게 되면 ID나 패스워드를 확인한 후에 전송이 가능한 반면 TFTP는 인증 처리 없이 데이터를 송수신할 수 있다는 장점을 가지고 있다. 간소화된 FTP.
DHCP는 유동 IP를 사용하는 호스트에게 IP를 할당할 때 보통 사용하는 프로토콜.
각 프로토콜은 응요계층과 매핑되는 포트번호가 있다.
포트번호도 기억해 두면 유용하다.
네트워크에서 사용하는 주소 체계
IP 주소와 도메인에 대해서 살펴보겠다.
네트워크에서 사용하는 주소 체계가 두가지가 있는데 IP버전4와 IP버전6이다.
IP버전 4
4개의 옥텟으로 구성
W.X.Y.Z 각 하나 하나를 옥텟이라고 한다.
각각 8비트이므로 총 32비트이다.
A클래스의 시작주소를 보고 클래스를 구분
IP는 총 5개의 클래스로 나뉘어지는데
A는 1~126으로 시작
B는 128~191
C는 192~223
D는 224~239
E는 240~255
E 클래스는 IP가 차후에 부족할 것을 대비해서 예약해 놓은 클래스
E 클래스를 사용하기 전에 실제 IPv6가 나왔다.
IP주소는 크게 네트워크 ID와 호스트 ID로 구분을 하고 있다.
네트워크 ID는 네트워크 주소라고도 부르고 네트워크 그룹 주소라고도 부른다. 해당 IP가 어떤 그룹에 속해져있는지를 나타낸다.
호스트 ID는 그 그룹에서 몇번째 PC에 속하는지를 나타내는 식별자 번호를 보통 호스트 ID라고 한다.
W.X.Y.Z=192.168.10.10
192이기 때문에 C클래스에 속한다.
IP의 네트워크 ID와 호스트 ID가 어디까지냐 구분할 때 일반적으로 서브넷 마스크를 사용하게 된다. 네트워크 구분과 호스트 구분을 구분해주는 역할을 하게 된다. A클래스의 일반적인 서브넷 마스크는 255.0.0.0
B는 255.255.0.0
C는 255.255.255.0 이다.
그래서 C 클래스이므로 마지막 10을 호스트 ID로 구분할 수 있다.
서브넷 마스크를 통해서 네트워크 ID와 호스트 ID를 분할할 수 있다.
서브네팅을 네트워크를 분할하는 기술
대규모 네트워크를 조금 더 여러개의 네트워크로 나누어서 네트워크 범위를 줄이는 작업을 일반적으로 서브네팅이라고 한다.
서브네팅이 나온 계기는 IP 부족 현상을 막기 위한 방안이다.
서브네팅의 기본적인 생각은 디폴트 서브넷 마스크를 기준으로 해서 예를 들어 C클래스 같은 경우는 세 옥텟까지 네트워크 ID인데
서브네팅은 네트워크 ID 비트수를 늘리고 호스트 ID 비트수를 조금 줄이는 것으로 해서 네트워크 서브네팅을 할 수 있다.
기본적으로 C 클래스의 네트워크 ID는 24비트를 사용하고 호스트 ID는 8비트를 일반적으로 사용하지만 서브네팅을 하게 되면 기존의 24비트보다 더 많은 비트를 사용하게 된다. 그만큼 호스트 ID 비트는 줄어들게 된다.
기준에서 늘어난 ID를 서브넷 ID라고 얘기를 하고 이것이 서브넷 ID 비트수에 따라 몇개의 네트워크가 분할되는지를 확인할 수 있다.
3비트를 서브넷 ID로 사용했다면 8개의 네트워크 분할이 일어나는 것을 확인할 수 있다.
분할된 네트워크 당 거느리고 있는 호스트수는 대략 62개 정도인 것을 확인할 수 있다.
IPv4에서 주소가 부족할 것을 고려해서 생성된 차세대 주소 체계라고 보면 된다.
물론 지금도 IPv4가 IP가 부족한 것은 아니지만 네트워크 환경이 홈 네트워킹 체계로 바뀌면서 즉 가전제품이나 이런 제품의 IP를 통신이 되게하기 위해서 IP를 집어넣다 보니 결국 부족한 현상이 일어날 것이다라고 해서 새롭게 제시된 IP주소가 IPv6이다.
IPv6는 128비트 주소 체계를 사용한다.
IPv4는 옥텟이라고 얘기를 하지만 IPv6는 자리를 필드라고 명의하고 있다. 총 8개의 필드로 구성되어 있고 16진수로 구성되어 있고 IPv6는 128비트 체계를 사용하다 보니 실제 수동으로 IP를 부여할 수 없는 상황이 되었다.
IPv4는 직접 관리자가 주소 지정도 가능한 반면에 IPv6는 디폴트 자체가 자동 주소 지정 방식을 설정할 수 있다.
IPv4에서 사용하는 주소형태는 유니캐스트, 브로드 캐스트, 멀티 캐스트 3가지가 있던 반면
IPv6는 브로드 캐스트 주소가 없어지고 멀티 캐스트를 좀 더 활성화를 시켰고 애니 캐스트 주소를 활성화해서 쓰고 있다.
IPv4는 헤더가 20~60바이트로 가변적인 헤더이다. 기본적으로 20바이트가 고정되어 있다. 작업환경에 따라 60바이트씩 늘어날 수가 있다. 40바이트가 고정 헤더이고 확장 헤더라는 확장 필드를 이용해서 다른 기능들을 지원해주고 있다.
IPv4보다 IPv6는 헤더 프로토콜 자체에서 암호화나 인증기능 또는 Qos, 보안 기능이 확장 필드로 기능을 지원해준다.
IPv4의 헤더들로는 기본 기능만 제공이 되었다면 IPv6는 40바이트 기본헤더와 확장 필드가 이런 다양한 기능들을 제공할 수 있게 해준다.
- 이기종 시스템 사용 가능 (윈도우내에서도 삼바 등 특정 프로토콜을 이용해서 x-windows 화면을 그대로 볼 수 있고, 활용할 수 있다.)
- 표준화된 x-windows는 없다. (스크롤바, 아이콘, 색상 등)
- 디스플레이 장치에 의존적이지 않음(커스터마이즈할 수 있는 장점)
X-windows는 네트워크 프로토콜(x프로토콜) 기반의 클라이언트/서버 프로그램으로 나뉘어진다.
서버는 클라이언트들의 디스플레이에 관한 접근 허용, 클라이언트 간의 자원 공유, 네트워크 메시지 전달, 클라이언트와 입출력 기기와의 중계를 담당한다.
클라이언트는 애플리케이션으로 x 서버가 제공하는 기능들을 이용한다.
오픈 데스크톱 환경으로 KDE, GNOME, XFCE 등이 있다.
윈도우 매니저 - x 윈도우를 하다보면 창을 닫고 열고, 창 크기 조절, 테두리 색상 조절
디스플레이 서버 - 서비스를 클라이언트가 사용할 수 있는 환경설정을 지정하게 되면 클라이언트가 받아서 처리를 하게 된다.
x-free 86 인텔 x86 운영체제에서 사용하는 서버 프로그램, 무료, 다양한 환경설정을 해야 한다. xf86 config 파일이 이를 담당한다. etc/x11이나 usr/x11rulibraryx11에 위치하게 된다. 폰트, 키보드 마우스 , 모니터, 비디오카드 이러한 색상정보를 설정할 수 있고, 세부적으로 살펴볼 수 있다. 좀 더 세부적으로 살펴보면 xconfiglater xf86config xf86setup 이렇게 3개의 환경설정 파일로 나뉘어진다.
X 프로토콜 - 서버와 클라이언트 사이에 오가는 데이터를 서버 프로토콜에 의해서 제어를 하게 된다. 메시지 교환 방법 규정, 메시지 타입 규정. 리퀘스트에 대해서 응답을 하거나 오류 메시지를 보내주거나 하는 다양한 기능들을 한다. 클라이언트와 서버 사이에 오가는 다양한 메시지들을 제어해주는 프로토콜.
클라이언트 라이브러리 - 다양한 툴킷을 이용해서 작업이 진행된다. (Xlib, XCB)
Xlib는 C나 리스프 언어로 만들어진 클라이언트 라이브러리 (윈도우 생성, 이벤트 처리, 창 처리, 키보드 처리 업무 담당)
현재는 XCB로 대처되서 현재는 x12라는 클라이언트 라이브러리를 사용하고 있다. 향상된 쓰레드 기능을 지원하거나 확장성 같은 것에서 기존 x라이브러리 보다는 뛰어난 라이브러리가 XCB이다.
GTK+, QT, FLTK, XForms 등의 라이브러리를 쓰고 있다.
특히 x-toolkit을 이용해서 좀 더 고급 레벨의 GUI를 생성할 수 있다.
x-toolkit을 기반해서 사용하게 된다.
x-toolkit에는 위젯이나 xt 인트랙시기라는 라이브러리를 포함하고 있어서 스크롤바나 메뉴 등 GUI 구성하는 객체들을 만들 수 있거나 위젯 라이브러리 기본 함수들의 집합을 사용할 수 있게 되어서 좀 더 고급 스러운 GUI 구성을 위해 사용하게 된다.
/etc/inittab
id 뒤에 레벨을 5로 하시면 x-windows로 부팅이 된다.
런레벨을 3으로 부팅을 하면 CUI 기반으로 부팅을 하게 된다.
x-windows 환경이 스크립트 환경이기 때문에 xinit을 호출해서 작동을 하게 된다.