◇ DFD(Data Flow Diagram) 작성기법소프트웨어 공학(2001년 1학기)1. 구조적 방법론과 DFD2. DFD 작성의 이익3. DFD의 특성4. DFD의 구성요소5. 작성방법6. 작성규칙DFD(Data Flow Diagram)는 데이터가 소프트웨어 내의 각 프로세스를 따라 흐르면서 변환되는 모습을 나타낸 그림으로 소프트웨어 및 정보시스템의 분석과 설계에서 매우 유용하게 사용되는 다이어그램이다. 데이터 흐름도 또는 자료 흐름도라고 칭하기도 한다. DFD는 시스템의 모형화 도구로서 가장 보편적으로 사용되는 것 중의 하나이며 데이터에 비해 기능이 매우 복잡하고 중요할 경우에 매우 유용하게 사용될 수 있다.주문데이터고객 파일주문서 파일주문서 고객기록 신규고객기록주문이 취소된 고객기존고객정보주문정보 주문정보고객별주문기록 DFD의 예1. 구조적 방법DFD 작성기법소프트웨어 개발 방법론(2000년 2학기)론과 DFDDFD는 이른바 구조적 방법론을 대표하는 다이어그램이다. 구조적 분석/설계 혹은 구조적 방법론은(DFD의 모습처럼 "자료흐름지향 방법론" 이라고도 한다.) 1968년 Dijskstra가 GOTO文의 폐해를 들어 구조적 프로그래밍(Structured Programming)의 개념을 소개하면서 시작되었다. 모든 방법론은 항상 프로그래밍으로부터 문제가 제기되고 이를 분석/설계에도 적용시켜보자는 식으로 발전한다. 구조적 분석/설계에서의 데이터는 기능(또는 프로세스) 사이에서 주고받는 형태로만 나타나며 기능의 계속된 분해와 이의 분석을 통해서만 데이터가 나타나게 된다.이 후 70년대를 거치면서 거의 대부분의 소프트웨어 개발은 '구조적'이라는 용어에 둘러싸이다시피 했으며 소프트웨어 공학에서도 가장 빈번한 이슈였다. 따라서 소프트웨어 개발과정의 중간 산출물로 DFD를 비롯한 DD(Data Dictionary), 구조도(Structured Diagram) 등이 많이 사용되었다. 그러나 소프트웨어의 규모와 복잡도가 커지고 기업에서 보다 많은 소프트웨어와 컴퓨터 시용하게 됨에 따라 자료흐름 위주의 분석과 설계는 한계에 부닥치게 된다.정보 시스템을 비롯한 MIS관련 소프트웨어는 많은 량의 데이터를 관리할 필요가 생기고 그 구조의 변경이 프로그램의 유지보수에 큰 영향을 미치기 때문이다. 따라서 프로세스 위주의 DFD보다는 데이터에 대한 분석/설계가 더 안정적이다. 최근의 정보 시스템을 포함한 소프트웨어의 설계에서는 DFD의 중요성은 그만큼 덜해지고 ERD(Entity Relationship Diagram) 같은 데이터 분석 도구가 더 유용하게 사용되고 있다. 정보공학(Information Engineering)에서는 DFD를 거의 강조하지 않으며 데이터와 프로세스가 동시에 나타난다는 이유로 검증용 도구로 사용되는 정도에 그치고 있다. 그러나 실제 소프트웨어 개발 프로젝트에서는 아직도 DFD와 그에 따른 산출물들이 절찬리에 사용되고 있는데, 그 이유는 아마도 많은 개발자들이 이에 익숙해져 있고, 실제로 다른 다이어그램에 비해 DFD가 표현하고 이해하기가 매우 쉬운 편이기 때문이 아닐까 생각된다.2. DFD작성의 이익다른 분석/설계용 문서 산출물들과 마찬가지로 다음과 같은 이점을 가져다 줄 수 있다.. 현업사용자의 업무 및 요구사항을 쉽게 문서화 할 수 있다.. 현업사용자와 분석가(또는 개발자) 사이의 의사소통을 위한 공용어의 역할을 한다.. 일관성 있고 정확한 사용자의 요구사항을 파악할 수 있는 요구분석용 도구의 역할을 한다.3. DFD의 특성DFD는 다른 다이어그램과 구별되는 다음과 같은 특징들을 갖는다.. 도형으로 그려지는 그림 중심의 표현이다.. 다차원적(Multidimensional)이다.. 데이터(자료)의 흐름에 중심을 두는 분석용 도구이다.. 제어(Control)의 흐름은 중요시하지 않는다.4. DFD의 구성요소DFD의 구성요소로는 프로세스, 데이터흐름, 데이터저장소, 외부엔티티 등이 있으며 표기법에 따라 표현하는 그림의 모양이 달라진다. 여기서는 Yourdon과 DeMarco에 의해 주장된 표기법을 기준으로 설명1 프로세스(Process). 프로세스는 입력되는 데이터를 원하는 데이터로 변환하여 출력시키기 위한 과정으로 도형적 표기형태로는 원(Bubble)과 원안의 이름으로 표현한다.. 원안에 기록하는 이름은 아래에 그림과 같이 프로세스가 수행하는 일 또는 프로세스를 수행하는 행위자를 기술한다.. 프로세스는 자체적으로는 데이터를 생성할 수 없고 항상 입력되는 데이터가 있어야 한다.. 프로세스는 항상 새로운 가치를 부가해야 한다.4.2 데이터흐름(Data Flow). 데이터흐름(Data Flow)는 DFD의 구성요소들간의 인터페이스를 나타낸다.. 대부분의 데이터흐름은 프로세스들 사이를 연결하지만, 데이터 저장소(Data Store)로부터의 데이터 흐름을 나타내기도 한다.. 데이터흐름은 명칭이 부여되거나 부여되지 않는 화살표로 표시한다. 단, 후속작업들의 참조를 위해 되도록 명칭이 부여되는 것이 바람직하다.. 서로 다른 데이터 흐름에는 동일한 이름을 부여하지 않는다.종업원정보4.3 데이터저장소(Data Store). 데이터저장소(Data Store)는 저장되어 있는 정보 집합이다.. 데이터저장소는 테이프, 디스크, 카드 데이터, 캐비넷의 인덱스화일 등일 수도 있으며, 때로는 휴지통일 수 도 있다.. 데이터저장소는 단순한 데이터의 저장을 나타내는 것이지 데이터의 변동을 표시하는 것은 아니다.. 데이터흐름을 표시함으로서 데이터의 입출력을 나타낸다.. 데이터 흐름도에서 데이터 저장소를 나타내는 표기법은 단순하게 두 개의 직선 즉, 평행선으로 나타내고, 평행선 안에 데이터 저장소의 명칭을 부여한다.부품파일수정신규부품등록 부품도착보고부품파일4.4 외부엔티티(External Entity). 외부 엔티티는 프로세스 처리과정의 데이터 발생의 시작 및 종료를 나타낸다.. 어떤 기업의 내적인(Inside) 외부 엔티티는 관리, 부서, 기능, 시스템 등을 포함하며, 기업 외적인(Outside) 외부 엔티티는 고객, 거래처, 공공기관, 외부시스템 등을 포함한다.. 외부 엔티티는 데이터 흐름도상세스(Process)와의 상호 관련성을 표시하며, 일반적으로 DFD범위 밖에 사각형 형태로 표시한다.재고화일5. 작성방법DFD의 작성방법은 다음과 같다.. 업무를 분석하여 프로세스에 대한 모든 입출력 데이터 흐름을 식별한다. 그리고 업무의 주변 경계에 그들 을 표시한다.. 데이터 흐름상 필요하거나 제공되어야 할 외부엔티티를 정의한다.. 입력으로부터 출력으로, 출력으로부터 입력으로, 또는 중간 지점부터의 데이터 흐름을 식별한다.. 모든 접속관계 데이터흐름에 주의깊게 명칭(혹은 자료 내역)을 부여한다.. 프로세스에 대해 입력 데이터흐름과 출력 데이터흐름의 명칭에 따라 이름을 부여한다.. 프로세스에 관련된 데이터저장소를 정의한다.. 검토하고 보완한다.. 상위레벨 DFD완성 후 다음 하위 레벨의 DFD로 분할하여 최하위 레벨까지 그린다.. 데이터 흐름도의 규모가 너무 커서 한 장의 종이에 그릴 수 없을 때는 시스템을 서브시스템(SubSystem)들 로 분할한다. 분할된 서브시스템들의 규모가 클 때는 다시 분할을 계속한다. 이렇게 세분화를 계속하여 마 지막에는 데이터 흐름도를 단순한 기능들만으로 그릴 수 있는 단계까지 분할한다. (일반적으로 레벨 3까지 면 적당하다)5.1 배경도배경도는 분석하고자 하는 시스템과 외부 세계와의 접속관계를 식별하기 위한 것으로 시스템 분석의 범위를 결정하게 된다.5.2 최하위단계 데이터 흐름도최하위 단계의 DFD는 DFD내의 모든 프로세스가 더 이상 하위 단계의 DFD로 분할되지 않는 데이터 흐름도를 말하며, 모든 프로세스들이 명세서를 갖는 기본단위의 것을 말한다.5.3 상하관계다음 그림은 분할된 데이터 흐름도의 상하관계를 보여주는데 상위 단계의 번호 1로 표시된 프로세스가 다시 3개의 하위 단계의 프로세스들로 분할되는 것을 보여주고 있다. 하위 단계에서는 분할된 프로세스들과 그들 간의 접속관계를 보여주며 상위 단계의 프로세스와 데이터흐름을 더욱 상세히 설명한다. 하위단계의 데이터 흐름도에서는 프로세스 분할 뿐 만 아니라 데이터흐름의 변환석에서 프로그래밍까지과정도 자세히 나타내는데 그림에서는 상위 단계의 데이터흐름 A가 B와 C로 변환되는 과정을 상세히 설명하고 있다. 그러나 하위 단계는 상위 단계와 동일한 데이터변환을 하는 것이므로 순수 입력과 순수 출력은 상위와 하위단계 모두 일치한다. 그림에서 또 유의해야할 것은 상위 단계의 프로세스 1이 분할된 하위단계의 프로세스들은 1.1, 1.2, 1.3등과 같은 번호를 부여받는다. 마찬가지로 하위 단계의 프로세스 1.2가 다시 분할된다면 그것의 하위 단계 데이터 흐름도는 다시 1.2.1, 1.2.2, 1.2.3등과 같이 된다.[그림 6] DFD의 분할6. 작성규칙DFD만큼 애용되는 다이어그램도 없지만 또 DFD만큼 잘못되게 그려지는 다이어그램도 없다. 많은 개발자들이 정확한 DFD의 작성 방법을 몰라서, 또는 시간이 부족해서 부실한 다이어그램을 그리고 만다. DFD는 일반적으로 Context Diagram을 포함해서 레벨 3까지 분할되면 적당하며, 레벨간의 데이터흐름, 외부엔티티, 데이터저장소가 반드시 일치해야 한다. 또한 모든 데이터흐름과 데이터저장소는 프로세스에 연결되어 있어야 하고, 입력이나 출력 중 어는 하나만 있는 경우는 Blackhole과 Miracle이라 하여 옳지 않은 것으로 본다. 또한 데이터저장소간의 데이터흐름의 연결도 피해야 한다.6.1 데이터 보존의 원칙(Conservation Rule)어떤 프로세스의 출력 데이터흐름은 반드시 입력 데이터흐름을 이용하여 생성된 것이어야 한다는 것이다. 아래 예에서 사과라는 데이터는 쥬서라는 프로세스를 통해 사과 쥬스가 되어야 한다. 따라서 오렌지 쥬스라는 출력은 잘못된 것이다.[그림7] 데이터 보존의 원칙6.2 최소데이터 입력의 원칙최소데이터 입력의 원칙은 어떤 프로세스가 출력 데이터흐름을 산출하는데 반드시 필요로 하는 최소의 데이터흐름만을 입력해야 한다는 것이다. 아래 그림에서 보는 바와 같이 실급여액 계산이란 프로세스가 필요로 하지 않는 근무시간은 이 처리를 통과하지 않고 지나친다는 것을 있다.
목 차3.7 자바3.7.1 프로그래밍 언어3.7.2 API3.7.3 가상기계3.7.4 JAVA 개발환경자바 입문서 JAVA PRIMERA.1 기초(Basics)A.1.1 간단한 프로그램A.1.2 메서드A.1.3 연산자A.1.4 서술문A.1.4.1 FOR 문A.1.4.2 WHILE 문A.1.4.3 IF 문A.1.5 데이터 타입A.1.6 클래스와 객체A.1.7 배열A.1.8 패키지A.2 예외 핸들링A.3 상속A.4 인터페이스와 추상 클래스A.5 응용과 애플릿A.6 요약3.7 자 바· JAVA 기술의 세 개의 필수적 구성요소프로그래밍 언어 명세응용 프로그래밍 인터페이스가상기계 명세3.7.1 프로그래밍 언어·JAVA 언어는 객체지향, 아키텍쳐 중립적, 분산형 다중스레드 프로그래밍 언어로 특성화 됨·JAVA 객체는 CLASS 구조에 의해 명세된다·JAVA 는 애플릿을 지원하기 때문에 인터넷 프로그래밍 공동체에서 선호되었다·JAVA는 가비지 수집을 행함으로서 자동적으로 메모리를 관리한다.·클래스는 크게 2개의 요소로 구성- 개체가 가질 수 있는 데이터의 속성(데이터를 포함할 수도 있음)- 이터를 조작할 수 있는 메소드·자바 컴파일러(javac):확장자가 ‘.java’인 자바 소스 프로그램 파일을 확장자가‘class’인 자바 바이트코드 파일로 컴파일해준다.임의의 자바 가상기계(JVM)구현에서 실행·애플릿(APPLET) 지원: 인터넷 프러그래밍 공동체에서 선호-Java 언어로 구성된 작은 응용 프로그램을 의미한다.Java 언어는 인터넷 언어이므로 용량과 속도의 한계로 프로그램을 크게 만들 필요가 없으므로 소규모 애니메이션, 그림 그리기, 날씨 변화 표시하기, 주가정보 표시 등의 간단한 기능 을 처리하는 작은 프로그램을 만들어 사용하는 데 이를 의미한다.·다중스레드 언어 - 자바(Java) 프로그램이 다수의 다른 제어의 스레드 흐름을 가질 수 있다.·보완적 언어 - 분산 네트워크를 가로질러 수행되는 것을 고려한다.3.7.2 API·JAVA를 위한 API 구성기본 API - 그래픽스, 입출력 유틸리티, 네트워킹을 위한 기본언어 제공EX) java.lang, java.awt, java.io, java.net표준확장 API - 기업, 상거래, 보안, 미디어를 위한 지원을 포함3.7.3 가상기계·JVM 구성 - 클래스 로더와 아키텍쳐 중립적인 바이트 코드를 수행하는 JAVA 인터프리터로 구성된다.·JAVA 플랫폼 구성 - JVM과 JAVA API로 구성된다.·JAVA 플랫폼 - 아키텍쳐 중립적이고 이식 가능한 프로그램을 개발할 수 있게 만든 것시스템 특정적이고 깨끗하고 아키텍쳐 중립적인 인터페이스를 제공한다.{3.7.4 JAVA 개발환경·컴파일시간 환경과 실행 시간 환경으로구성된다.{자바 입문서 JAVA PRIMERA.1 기초(Basics)· 프로그램의 구조, 제어문, 메서드, 클래스, 객체, 배열 등의 기본 사항을 다룸A.1.1 간단한 프로그램(A Simple Program)· 자바 프로그램은 하나 이상의 클래스로 이루어져 있음· 한 클래스는 main() 메서드를 반드시 포함· 프로그램의 실행은 main() 메서드에서 시작· main 메서드는 반드시 public static void main(string args[])로 정의 되어야 하며 string args[]는 명령행에 전달될수 있는 선택적인 매개 변수들이다.· main() 메서드를 포함하는 파일의 이름은 main()이 나타내는 클래스 이름과 같아 야 한다.· 자바 명령문과 파일 이름은 모두 대소문자를 구별한다.{ex) 첫 번째 간단한 프로그램*/첫 번째 간단한 프로그램*/public class First{public static void main(string args[])//메세지를 스크린에 출력한다system.out.println)" Java Primer Now Brewing!")}}A.1.2 메서드(Methods)· 프로그램은 main()에 다른 메서드를 더해서 이루어진다. {ex) 예문public class Secnd{puvlic static void printIt (string message){system.out.println (message);}public static void main (string args[]){printIt("JAVA Primer Now Brewing!");}}A.1.3 연산자(Operators)· 자바는 덧셈, 뺄셈, 곱셈, 나눗셈을 위해 +-*/ 연산자를 사용한다.나머지 연산자로 &을 사용 한다.· 자바는 C++의 자동증가(++)와 자동감소(--)도 제공 한다.· 자바는 모든 이진 연산자를 위한 단축형 제공 한다· 관계연산자는 동치(==)와 비동치(!=), < = > 연산자가 있다.· 자바는 &&를 and 연산자로, ||를 or 연산자로 사용한다.· 자바는 C++과 달리 연산자 오버로딩을 허용하지 않는다· 스트링에 덧붙이기 위해서 + 연산자를 사용할 수 있다.ex) System.out. println(can you hear +"me?");A.1.4 서술문(Statements)A.1.4.1 for 문{for 루프의 순환문의 형식for(initialization; test; increment) {// 루프의 몸체}· for 루프의 몸체가 단지 한 라인으로 구성될 경우, 루프의 괄호 생략 가능· for 루프의 인덱스는 for 문장의 앞이 아니라, for 문장 안에서 선언 가능· for 루프의 인덱스는 반드시 정수형(int)이라야 함{ex) 1부터 25까지 숫자를 인쇄Int I;for(i=1; I
3장. 데이터 통신◈ 3.1 전송 모드. 직렬 전송과 병렬 전송{구 분병렬 전송직렬 전송개 요비트 그룹이 각 비트당 분리된 선들을 사용하여 동시에 전송한 선만 사용하여 모든 비트들을 하나씩 차례로 전송{. 비동기 전송과 동기 전송{구 분개 요비동기 전송작은 그룹(바이트)으로 나누어 독립적으로 전송(키보드나 일부 프린터 등의 저속장치에 이용)동기 전송큰 비트 그룹(데이터 프레임/프레임)을 전송동시 전송문자들 사이에 하나의 문자를 보내는데 필요한시간의 배수로 전송. 비동기 전송{. 동기 전송{sys = 동기 비트control = 제어 비트data = 데이터 비트error = 오류 검사 비트end = 프레임의 끝을 나타내는 비트. 단방향 통신, 반이중 통신, 정이중 통신{구 분개 요단방향 통신통신이 한방향반이중 통신두 장치사이에 송수신이 가능하나 교대로 통신정이중 통신하나의 장치가 송수신을 동시에 할 수 있다.{◈ 3.2 인터페이스 표준. 디지털 장치가 전송매체를 통하여 디지털 신호를 직접 전송할 수 있는 거리는 매우 제한 되어 있어 별도의 접속장치를 통해 전송매체에 연결하는 것이 일반적이다.. 표준안 : DTE-DCE간 정확한 인터페이스 규정.{. DTE들간의 정보 전송을 위한 요건{. 널 모뎀 : PC와 같은 장치가 직접 통신하는 경우 RS-232 포트들을 케이블로 연결{. X.21 인터페이스- ITU-T정의, 15-핀 연결기 사용- X.21, X,21bis : 1972, 전이중 전송- RS 표준과의 차이* X.21은 디지털 신호 인터페이스용으로 정의 : ISDN에 대한 점정 표준으로 본다.* 정보 교환 방법->제어 스퀀스 해석:회로의 수를 줄이기 위해 DTE와 DCE에 많은 지능(논리회로)을 사용한다.->RS는 제어 기능을 위한 회로를 사용하므로 제어가 많을수록 회로도 많아져 연결이 더 불편해진다.. X.21 연결에서의 송수신{. 다중화- X.21 연결에서의 송수신{- 다중화* 전송로의 대역폭을 작은 대역폭을 여러개로 나누어 여러 장치가 동시에 이용하게 하느것* 여러 사용자용 단일 연력 제공 : 연결 당 비용 감소- 다중화의 종류* 주파수 분할 다중화(FDM)* 시분할 다중화(TDM)* 통계적 다중화- TI 캐이러 시스템. 주파수 분할 다중화(FDM)- 각 채널 당 반송 신호를 정의한다.* 반송 신호 : 그 채널 대역폭의 중심 주파수* 채널 : 반송 주파수를 중심으로 변조된 신호의 대역폭- 변조 방법 : 진폭 변소, 주파수 변조, 변조 위상* 변조된 신호는 복잡한 하나의 아날로그 신호로 결합, 각 주파수는 전 체널의 범위 안에 놓인다.- 역 다중화 : 대역 통과 필터를 사용, 변조된 신호들 주축{{{. 변조된 신호의 그래프대여폭이 다른 세 채널의 모든 주파수로 전송된 신호에서 걸러낸입력 신호들 이루어진 결합된 신호들 원래의 신호들. 시분할 다중화- 디지털 신호를 사용한다.- 대역폭을 일정한 타임슬롯으로 분할, 각 채널에 할당{. 변조된 신호의 그래프{{. 통계적 다중화- 실제로 보낼 데이터가 있는 단말 장치에만 동적으로 타임 슬롯을 할당하는 방식- 버퍼에 들어 있는 데이터의 양에 따라 다양한 크기의 프레임을 만든다.. T-1 캐리어- 잠거리 통신에 사용되는 다중화 표준* ANSI 산하 광역망 표준 조직인 T1" 위원회의 표준 명* AT&T 개발,미국,캐나다,일본,한국 등에서 사용* 많은 음성채널을 한 프레임으로 묶기 위해 시분할 다중화를 사용한다.. T-1 캐리어{. 경합 프로토콜- 경합* 매체를 많은 진입 점에서 메 접근하는 것* 경합 프로토콜에 의해 제어{< C와 E가 동시에 송신을 개시했을 때 충돌 발생>. 경합 프로토콜이 없을 때{. 알로하 시스템의 동작 원리- 동작 원리* 아무 스테이션이나 언제든 방송할 수 있다.* 프레임의 일부만 겹쳐도 충돌이 발생한다.* 두 신호가 충돌하면 각 스테이션은 단순히 임의의 시간을 기다려서 다시 시도한다.- 충돌 판정* 전송 후 확인응답(전송 주파수와 다른 주파수)을 받지 못한 경우 충돌했다고 간주한다.* 두 번째로 충돌하면 같은 규칙을 적용한다.* 임의의 시간만큼 기다린 후 다시 시도한다.. 슬롯 알로하를 사용하는 전송- 슬롯 알로하* 타임 슬롯(T: 슬롯 타임)이 시작할 때만 전송한다.- 차이 : 스테이션은 타임 슬롯의 시작 시점에서 전송한다.* 슬롯 타임 : 한 프레임 전송 시간{. CSMA(Carrier Sense Multiple Access)- 스테이션이 원할 때마다 전송을 허용하여 신호를 전송하는 다소 무질서한 접근법- 스테이션은 전송 전에 매체를 감시.* 아무 활동도 없으면 전송한다.* 어떤 활동이 있으면 기다린다.- 둘 이상 스테이션이 거의 동시에 전송하려는 경우 매체가 유휴상태로 감지되면 둘 다 전송하게 돼 충돌이 발생함.- 다른 스테이션도 구간 안에 전송해야 충돌하지만 그 간격이 작으므로 두 번째 스테이션이 그간격 내에 프레임을 보내게 될 확률도 작다.. p-지속(Persistent) CSMA- 충돌 횟수를 줄임으로써 효율 향상- 매체를 계속 감시하며* 매체가 유휴상태가 되면 확률 p(0자신의 것이면 데이터를 복사하여 PC로 전송한 다음 그 프레임을 링에 도로 올린다.- 전송 프레임의 제거* 당초에 송신했던 스테이션으로 되돌아오면 그 프레임을 제거한 뒤 다시 링 위에 올린다.- 단점 : 한 스테이션이 매체 독차지 할 수 있다.. 슬롯 링- 토큰 링, 케임브리지링 이라고도 한다.- 전송용 프로토콜* 토큰이 여러 개인 점을 제외하면 토큰 링과 유사하다.- 장거리 링에 더 적합하다.- 장점 : 새 스테이션을 쉽게 추가할 수 있다.- 단점* 한 스테이션이 토큰을 더 많이 차지할 수 있다.* 인접 스테이션 간의 링크가 깨지면 네트워크 다운 초래* 토큰을 전송하는중에 NIC가 오동작하면 불완전하고 유효하지 않은 토큰이 링을 순회하게다.. 토큰 버스(Token Bus)- 물리적으로 공통버스와 유사하나 토큰 링과 유사한 원리를 사용하여 통신한다.- 응용 분야 : 조립 라인, 공장 자동화 환경- 토큰 패싱 : 번호 순(논리적으로 번호를 부여한다.)* 단, 번호가 제일 큰 스테이션은 번호가 제일 낮은 스테이션으로 토큰을 패스한다.* 전송 방향 : 물리적으로 어느 방향이나 가능하다.* 버스 인터페이스 : 프레임의 주소를 조사하여 자신에게 온 프레임을 읽는다.* 공통 버스 구조 : 조립 라인을 따라 배치된 장치들을 컴퓨터로 제어가능- 문제점 : 새 스테이션의 추가 및 삭제가 어렵다.. 경합 프로토콜 요약{프로토콜중요성장점단점알로하시간 지연으로 위성통신에는 변종사용간단한 접근법프레임 전송 후 충돌여부를 모르는 지연 있음p-지속CSMA/CD와 조합되며, 이더넷 및 네트워크를 위한 대중선택매체의 idle상태를 줄여준다.통신량이 많으면 과도한 충돌과 매체의 대역폭 낭비비-지속모형에 따라 과부하 하에서 성공률 줄지 않음과부하 하에서 충돌회수를 줄여 줌메체는 스테이션이 전송시까지도 idle일 수 있음CSMA/CD1-지속과 결합, 주로 이더넷과 합께 사용충돌 시간을 줄여줌성곡적 전송에 걸리는 시간에 이론적 상한선이 없다.토큰링사무실 환경에 사용되는 대중적인 프로토콜이웃과만 송수신이 가능한 interface스테이션의 오동작이 전 네트워크에 영향을 줌토큰 버스공장 자동화에 선호토큰을 얻기 전 대기하는 시간의 상한선새 스테이션을 추가하거나 삭제하기 어렵다. 데이터 압축- 시간적 중복성* 시간의 흐름에 따라 같은 데이터가 중복되어 나타난다.- 공간적 중복성* 공간 상의 여러 위치에 같은 데이터가 중복되어 나타난다.- 복원시의 정보에 따라* 손실 기법* 무손실 기법 : 복원 결과와 원래 데이터가 동일하다.- 압축 속도와 복원 속도에 따라* 대칭기법{* 비 대칭 기법. 허프만 코드- 빈도 의존 코드* 출현 빈도가 높은 문자일수록 비트 수를 적게 할당하여 부호화한다.- 전위문자 특성* 어떤 문자 코드가 결코 다른 문자 선두에 나타나지 않는다.. 허프만 알고리즘- 각 문자에 대한 이진 목을 만든다.* 각 트리에 대해 트리의 가충치(문자의 빈도)를 할당한다.- 가장 작은 가중치를 가진 트리를 찾는다.* 선택된 2개를 좌우 노드로 하는, 새 노드를 가진 트리로 합병* 두개 이상 있으면 임의로 선택한다.- 한개의 트리만 남을 때까지 앞의 단계를 반복한다.- 완성 시 원래의 각 노드는 마지막 이진 목의 잎이 된다.- 어느 이진 목에서나 루투에서 잎까지 경로는 유일하다.- 왼쪽 자식 포인터엔 0 , 우측 자식들엔 1 을 각기 할당. 허프만 코드의 예- 평균 부호 길이 : 2.25 비트* 고정-길이 부호화 시 : 3 비트{. 허프만 코드 : 메시지 수신과 해석{. 런 길이 부호화- 연속적으로 반복되는 단위 정보(문자,픽셀)들을 그 정보 및 반복된 횟수로 표현한다.* Run : 같은 비트나 문자의 연속- 같은 비트의 런* 단지 런 길이(고정 길이의 2진 정수)만 전송한다.
제 4 장 데이터 보안과 무결성패리티 검사오류 검출 기법의 가장 일반적인 기법으로서 데이터 내의 1-비트의 개수를 세어 1-비트의 총 수를 짝수(even parity)나 홀수(odd parity)로 만들기 하나의 비트를 추가하는 기법패리티 비트(parity bit) : 1-비트의 개수를 맞추기 위해 추가하는 비트패리티 검사 분석패리티 비트는 데이터 비트들과 함께 전송되며, 수신측은 패리티 검사를 통해 전송하여데이터의 이상 유무를 파악한다.패리티 검사는 단일-비트 오류는 모두 검출할 수 있으나 전송 데이터 중의 여러 비트들이손상되는 경우(군집성 오류:burst error)에는 50%의 검출율을 가진다두 비트 오류 검출두개의 패리티 비트를 두어 하나는 하는 홀수번째 비트들을 위한 검사와 다른 하는 짝수번째비트들을 위한 검사를 수행한다.어떤 단일 비트나 연속하는 두 비트가 변했다 하더라도 모두 검출할 수 있지만, 짝수나 홀수 번째 비트가 두개 변하면 검출할 수 없다는 단점을 가지고 있다.군집성 오류 검출임의의 위치의 오류들을 검출하기 위해 송신측에서 데이터 전송 단위인 프레임(frame)을비트 단위로 분해하여 전송하며, 수신 측은 이를 다시 조립하는 과정에서 데이터의 손상여부를 패리티 비트를 사용하여 판단한다.각 프레임을 비트 단위로 분해하여 전송할 경우 두개의 열이 동시에 간섭을 받을 경우 오류검출을 할 수 없다. 또한, 프레임의 조립과 분해라는 큰 오버헤드를 가진다.순환 잉여 검사전송되는 데이터의 비트들을 다항식으로 표현하여 다항식의 나눗셈을 통해 오류를 검출하는 기법CRC 방법에 대한 개요주어진 비트 열에 대하여 다항식 B(x)를 설정한다.다항식 B(x)를 다항식 G(x)로 나누어 나머지 R(x)를 결정한다.T(x)=B(x)-R(x)를 정의한다.T(x)에 해당하는 비트열 T를 전송한다.'T’은 수신측이 받는 비트 스트림을 나타내고, T’(x)는 관련다항식을 나타낸다고 가정하였을 경우 수신측은 T(x)를 G(x)로 나눈다. 나머지가 0이면 T=T’으로 간주하고 오류가 발생하지 않았다고 결론짓는다. 그렇지 않다면 재전송을 요청한다.CRC는 어떻게 작동하나전송하고자 하는 비트열이 1101011이고, G(x) = x4 + x3 + 1 인 경우 CRC 작동단계·1단계 : 스트림의 끝에 0들을 추가한다. 0의 수는 생성 다항식의 계수와 같다.이 경우 차수가 4이므로 스트림은 11010110000이다.·2단계 : B(x)를 G(x)로 나눈다. R(x) = x3 + x1와 이에 해당하는 비트 열 1010을 결정한다.그리고 B(x)/G(x) = Q(x) + R(x)/G(x) B(x) = G(x) * Q(x) + R(x)·3단계 : T(x) = B(x) - R(x)를 정의한다.·4단계 : 수신측은 수신된 T를 G(x)로 나누어 나머지가 0이면 전송 데이터를 수신하고,그렇지 않다면 오류가 발생하였다고 간주하고 송신측에 재전송 요구전송하고자 하는 비트열이 1101011이고, G(x) = x4 + x3 + 1 인 경우 CRC 작동단계·수신측에서 이루어지는 오류 검출 과정CRC의 분석전송중인 데이터가 손상되었다는 것은 보내고자 하는 비트열을 나타내는 다항식 T(x)에 임의의 다항식 E(x)가 더해지는 경우이다. 즉, 손상된 데이터의 경우 다항식T’(x) = T(x) + E(x) 이다.오류가 생겼다 하더라도 검출되지 않을 경우는 E(x)/G(x)의 나머지가 0인 경우즉, G(x)가 E(x)의 인자인 경우에 해당한다.단일 비트 오류의 경우단일 비트 오류의 경우 E(x)는 하나의 항 xk이며, G(x)가 최소한 두 개 이상의 항을 가질경우 CRC는 모든 단일 비트의 오류들을 검출한다.길이가 kG(x)라고 간주한다면 k-1 = r인 경우 오류가 검출되지 않을 확률은 1/2r-1이고 k-1 > r의 경우 오류가 검출되지 않을 확률은 1/2rCRC에서 검출 가능한 오류길이 r r + !인 모든 군집성 오류에 대해서는 (2r - 1)/2r의 확률근거리망(LAN)에서 널리 사용되는 G(x)에 대한 표준 다항식들순환 쉬프트를 사용한 CRC 구현다항식의 나눗셈 연산과 나머지 연산을 보다 빨리 하기 위해 생성 다항식 G(X)에 따라 구축되는 하나의 회로를 사용한다. 이 회로는 쉬프트 레지스터를 포함하고 있으며, 다음 규칙들에 따라 배타적 논리합 연산을 수행한다.해밍 코드오류 검출 뿐이 아니라 오류 수정까지 담당하기 위해 대두된 방법·전송되는 비트열 안에 복수개의 패리티 비트를 삽입한다.·패리티 비트의 각각의 조합에 오류정의를 한다.·전송 비트열에 오류가 발생하면, 수신측은 패리티 비트들의 검사를 통해 오류가 발생한비트를 탐지하고 해당 비트의 바른 값을 세트한다.복수-비트 오류의 정정각 프레임에 대한 해밍 코드를 만들고, 모든 해밍 코드를 이차원 비트 배열로서 시작화하고,한 번에 한 열씩 전송하며 두 비트 이상의 오류 정정을 위한 해밍 코드를 보급한다.오류 검출과 오류 정정의 비교·기계적인 단순 비교가 가능하지 않다.·오류 검출 기법에 비해 오류 정정 기법이 일반적으로 더 많은 오버헤드를 가지나 오류 발생비율이 낮은 경우는 재전송에 대한 비용이 더 싸다.·오류 발생 비율이 높은 경우는 잦은 재전송으로 인한 네트워크 트래픽의 증가보다는 부가적인정정비트를 포함하는 비용이 더 싸다.시저 암호단일-알파벳 암호(mono-alphabetic cipher)라고도 하며 각 평문 문자를 또 다른 문자로 대치함으로써 암호문을 만들고, 해독시는 대치된 문자를 다시 원래의 문자로 변환한다.원래의 알파벳 문자를 다른 문자로 대치하는 것이므로 문자들에 대한 발생빈도는 동일하게 된다.이러한 발생빈도는 암호 해독에 대한 빌미를 제공하게 된다.복수-알파벳 암호단일-알파벳 암호처럼 각 문자를 다른 문자로 대치하지만 주어진 평문 문자가 언제나 같은 암호문 문자로 대치되는 것이 아니라 실제 평문 문자만이 아닌 메시지 내의 문자 위치에 따라서 대치 할 수 있다.Vigen’ere 암호방식 : 각 줄에 알파벳들이 포함된 이차원 문자 배열을 사용한다.Vigen’ere 암호방식은 반복문제를 줄여주긴 하지만 문자들에 있어서의 반복과 패턴은여전하다.위치전환 암호메시지의 평문 문자들을 암호문으로 치환하지 않고 재배열한 후 재배열된 평문 문자들을 치환하여 전송한다. 수신측에서는 전송된 문자열을 규칙성에 맞게 저장하여 다시 읽어 들인다.문자 빈도들이 그대로 보전되므로 그렇게 안전한 편은 아니다.MISS PIGGY KERMIT ANIMAL AND FOZZIE BEAR 전송할 문자열IIKTMNZBSGRAL IASGE ADZEMP IIAO YMN FER 재배열 이후 치환하여 실제 전송된 문자열비트-레벨 암호화암호키를 비트열로 정의하여 암호키를 표현한 비트열과 같은 크기로 전송될 비트열을 부분열로 분할한 후 각 부분열은 암호키와의 배타적 논리합에 의해 암호화된 후 전송된다.수신측은 암호해독을 위해 암호키와 암호화된 부분열 사이에 배타적 논리힙을 계산한다.송신측과 수신측에서 사용하는 암호키와 해독키는 같다.데이터 암호화 표준(DES : data encryption standard)암호화 키는 가급적 짧게 유지하면서 복잡한 암호화 절차를 이용한 방법으로 1977년 미국 정부가 모든 상업 정보와 기밀이 아닌 정보를 위한 표준으로 채용하였다.논리를 훨씬 빠르게 하기 위해서 하드웨어 (VLSI 칩)로 만들어졌다.클리퍼 칩암호화 알고리즘을 마이크로 회로 안에 접어넣음으로 수신측과 송신측의 클리퍼 칩이 암호화와 암호해독을 통해 수신측과 송신측은 암호화에 대한 고려 없이 일상적으로 사용할 수 있다.스킵 잭 알고리즘(Skipjack algorithm)이 알고리즘에 사용됨키의 교부와 보호송신측과 수신측이 정확한 암호화와 암호 해독을 위해 암호키를 미리 주고 받아 합의하는 과정에 불법적인 사용자에게 암호키가 누수되는 것을 방지하기 위한 방법들.머클의 퍼즐(Merkle’s Puzzles)잠정적인 암호키, 식별번호, 그리고 미리 정의된 패턴이 들어있는 하나의 암호화된 메시지를 사전에 미리 송신측과 수신측이 주고 받아 암호키에 대해서 동의 하는 방법.송신자는 각기 분리된 키로 암호화된 n개의 퍼즐을 전송하면 수신자는 퍼즐을 임의로 선택하여코드를 푼다. 수신자는 해당 퍼즐에서 암호키를 추출하여 자기가 푼 퍼즐의 ID를 명기하여 메시지를 돌려 보낸다. 송신자는 퍼즐 ID를 받으면 수신자가 퍼즐을 풀었다고 간주하고 그 안에서 키를 얻는다. 수신자와 송신자는 둘 다 동의한 동일한 암호키를 사용하여 통신한다.샤미르의 방법(Shamir’s method)k명의 사람이 있어야 암호화 키를 결정한다는 전제 조건을 사용한다.다항식의 보간법에 기초를 두어 각 송.수신자는 자신의 해당 좌표를 유지하고 있는 상태에서 다른 k-1의 사용자들에게 해당 사용자의 좌표를 구해 전체 k개의 좌표를 통해 보간다항식을 구한다. 암호화 키는 보간다항식의 특정 계수가 될 수 있다.디피-헬만(Diffie-Hellman) 키 교환
계층형 게시판 만들기사용자가 홈페이지에 방문에서 게시물을 게시할 수 있고 글을 읽고 쓸 수 있으며 간단한 답글을 남길 수 있는 계층형 게시판을 만들어 보도록 하겠습니다. 게시판 하면 일단 생각나는 것이 수정, 삭제, 답변, 글쓰기 이 정도의 메뉴로 구성이 되며 게시물의 제목을 클릭하면 내용이 출력이 되는 것을 기본으로 합니다.{총 8개의 파일과 3개의 이미지를 사용하였으며 table_creat.php 파일은 MySQL을 이용한 데이터베이스를 작성하는 프로그램으로 한번 사용한 뒤에는 더 이상 사용하는데는 필요가 없습니다. 단지 데이터베이스 테이블을 쉽게 작성하게 만들어 주는 프로그램입니다. 굳이 사용을 하지 않고 Telnet등을 이용해 직접 테이블을 작성해 주셔도 가능합니다.다음은 사용된 소스파일입니다.{dbconn.php - DB연결, 설정파일.wri.php - 새 글, 수정, 답변기능 수행.view.php - 글 내용 보는 파일.ins.php - 새글, 삭제, 수정, 답글 을 입력, 삭제하기 위한 파일.del.php - 삭제 시 비번입력 폼 파일.list.php - 게시판에 등록된 글 리스트.table_create.php - 테이블을 만들기 위한 파일.style.css - stylesheet.email.gif - 이메일 그림.home.gif - 홈페이지 그림.re.gif - 답변 표시 그림.우선 mysql 연결을 위한 dbconn.php 파일을 만들어 보도록 하겠습니다.==========================================================================♣ dbconn.php==========================================================================간단하죠? 이상은 mysql 연결을 설정하는 파일이었습니다.mysql_connect($host,$user,$pwd);이 부분이 MySQL에 아이디와 패스워드로 연결을 해주며 mysql_select_db($db); table_create.php을 실행시켜 테이블을 만들도록 합니다. 브라우저에서 테이블명만 입력하시면 테이블이 만들어지도록 하였습니다. 물론 사용하지 않으시고 직접 테이블을 작성하셔도 가능합니다.다음 그림은 table_create.php 파일의 실행화면입니다.{[ 테이블을 생성하는 모습 ]==========================================================================♣ table_create.php 데이터베이스 테이블 ==========================================================================처음 만들었던 DB연결 페이지를 include합니다. 그리고 $board에 값이 있으면 그 이름으로테이블을 생성합니다.다음은 글쓰기, 삭제, 답변이 가능한 wri.php 부분으로 mode라는 변수 값에 따라 답변, 수정, 새글 쓰기가 가능해집니다. mode값이 없을 때는 새글, rep일때는 답변, mod 일때는 수정입니다. 게시판 전체가 이 mode값에 의해서 글을 쓰거나 수정하기가 가능해 지며 DB에 insert할 때도 mode에 따라 query가 달라집니다. 그리고 맨 아래 보시면 form의 hidden값으로 myr, mys, myl값이 넘어갑니다. 이 값으로 하여 계층이 가능해집니다. 중요한 부분이죠. 여기서 잠깐 계층형이 어떻게 되나 설명을 드리자면 다음과 같습니다.예를 들어 1번 글이 있고 여기에 답을 하면 1번 글의 자식이 되는 것이죠. 그 자식들은 자기부모가 1번 글의 값을 계속 달고 나갑니다. 2번째 답글, 3번째 답글.... 계속 1번 글의자식이라고 그 값을 가지고 있습니다. 그 값이 myr로 우리는 정해주었습니다. 그리고 리스트에서 보여질 때는 뒤로 한 칸 밀려야 하겠죠. 뒤로 밀려지는 값이 myl입니다. list.php를 보시면 myl값만큼 for문을 돌려서 여백을 만드는 것을 확인하실 수 있습니다.그럼 mys 값은 뭘까요? mys은욱 잘 되실 겁니다.수정이거나 답글 이라면, mode값이 rep일 경우에는 답글 혹은 수정할 글 내용이 보여야 하기 때문에 DB에서 글의 내용 부분을 textarea에 출력해주고 mod일 때는 비밀번호를 제외한 나머지 부분을 보여줘서 수정을 하도록 해야겠죠.다음 그림은 wri.php 파일의 실행모습입니다.{[ 게시판에 글을 입력하는 모습 ]{[ 잘못된 입력을 한 경우 (이름) ]==========================================================================♣ wri.php 이 름 이메일 홈페이지 제 목 내용 비밀번호 ==========================================================================다음은 삭제부분입니다. 별다른 것은 없고 단지 비밀번호를 입력받은 뒤 ins.php로 값을넘겨줍니다. 물론 hidden값으로 몇 개의 다른 값들이 넘어가는 것을 확인하실 수가 있습니다.{[ 삭제를 위해서 비밀번호를 입력받는 모습 ]{[ 비밀번호가 틀렸을 때의 화면 ]==========================================================================♣ del.php게시판 글삭제 - 번 글을 삭제하시겠습니까? ==========================================================================- 번 글을 삭제하시겠습니까?이 부분은 글을 삭제할지 묻게 되는 부분입니다. HTML문장에 PHP문법을 적용시키는 방법은 앞에서도 많이 사용했습니다. 그다지 어렵지 않은 부분입니다.다음은 글 내용을 보는 view.php 부분과 DB에 저장, 삭제, 수정 기능을 하는 ins.php부분 으로 일단 글 내용을 확인와서 보여주게 되며 다시 이전글, 다음글을 알아내기 위해 아래 소스에서처럼 query해 줍니다.약간의 설명을 드리자면 예를 들어 현재 글이 4번입니다. 이전에 1,2,3 번 글이 있다가 3번 글을 삭제했습니다. 그럼 이전 글은 2번 글입니다. 현재 글보다 작으면서 최고인 글의 번호를 선택하면 되겠죠.{[ 게시판 내용 ]==========================================================================♣ view.php게시판 내용 게시판 내용 제목작성자작성일 from 조회내용 목록 이전 다음 수정 삭제 답글 새글 ==========================================================================다음은 새글 입력, 글수정, 글삭제, 답변 글 저장이 가능하게끔 해주는 ins.php 파일입니다.여기 설명은 주석으로 대신하도록 하겠습니다.{[ 비밀번호 확인 후 게시물을 수정하는 모습 ]==========================================================================♣ ins.php==========================================================================특별히 구현된 기능은 없고 페이징을 이전, 다음으로 하였습니다. 전체글, 오늘 등록된글 이 정도가 전부입니다. 그리고 한 페이지당 보여줄 숫자를 조정하시려면 $limit값을 변경해 주시면 됩니다. 그리고 답변시 wri.php에서 계층형으로 만들어 주기 위해 myr, mys, myl을 입력하였죠. 잘 넣었으니 이제 보기 좋게 뿌려주기만 하면 됩니다.select * from $board order by myr desc,mys limit $page,$limit이렇게 해주시면 됩니다. 그리고 myl값까지 for문을 돌려주시===========================================================♣ list.php계층형 게시판 만들기 게시판 목록 전체글 : 오늘 등록된 글 : 글쓰기 번호제목작성자작성일조회=1){$p_page=$page-1;echo "이전";}echo " ";// $page+1한 값이 전체 페이지보다 작으면 다음페이지가 존재한다.if($page+1 ==========================================================================여기까지가 우리가 만든 게시판 소스 전체입니다. style.css에 대해서 아주 간단히 살펴 보도록 하겠습니다.==========================================================================♣ style.cssbody,td {font-size:9pt;}A:link,A:visited,A:active {color:black; text-decoration:none;}A:hover {color:black; text-decoration:underline;}==========================================================================일단 CSS가 무엇을 말하는지 알아야 하겠죠.CSS[cascading style sheet]는 웹페이지용 스타일 시트로서, 상충되는 스타일 요소의 정의가 있는 곳마다 서열을 명확하게 한 다수의 근거로부터 파생되었으며 W3C의 권고안으로 넷스케이프와 마이크로소프트 웹브라우저에 구현되어 있는 CSS1은, 주어진 요소가 웹페이지 내에 어떻게 표현되는지를 결정할 수 있는 가능한 스타일 시트들과 문장들을 정의 해줍니다. 뭐 스타일을 명확히 정의 해준걸 말하는 거죠. 각 부분을 보면body,td {font-size:9pt;}body 부분과 td 태그가 쓰인 군요.