• SQL?
     : Structured Query Language
     : 사용자와 데이터베이스 시스템 간에 의사소통을 하기 위한 언어

  • SQL 유형별 종류
     
     
     

     - DDL(Data Definition Language)
      1. 테이블 이름과 칼럼은 A~Z까지의 문자, 0~9까지의 숫자, 그리고 $,#,_(Under Bar)를 사용할 수 있다. 그러나 공백은 사용할 수 없다.
       2. 테이블의 칼럼은 30자를 초과할 수 없고, 예약어를 사용할 수 없다.
       3. 한 테이블 안에서 칼럼 이름은 같을 수 없으며 다른 테이블에서의 칼럼 이름과는 같을 수 있다.

      ■ CREATE
    CREATE TABLE 테이블이름
    ( {열이름 데이터타입 [NOT NULL] [DEFALUT 값], }+
    [PRIMARY KEY (열이름_리스트), ]
    {[UNIQUE (열이름_리스트),]}*
    {[FOREIGN KEY(열이름_리스트) 
     REFERENCES 기본테이블[(열이름_리스트)]
    [ON DELETE 옵션]
    [ON UPDATE 옵션],]}*
    [CONSTRAINT 이름][CHECK(조건식)]);
    NOT NULL: NULL을 허용하지 않음
    UNIQUE: 중복된 값을 허용하지 않고, 항상 유일한 값을 갖도록 함 
    PRIMARY KEY
    : NULL을 허용하지 않음. 중복된 값을 허용하지 않음, NOT NULL 조건과 UNIQUE 조건을 결합한 형태 
    UNIQUE: 조건을 결합한 형태
    FOREIGN KEY: 참조되는 테이블의 칼럼의 값이 존재하면 허용
    CHECK: 저장 가능한 데이터 값의 범위나 조건을 지정해 설정한 값만을 허용


      ■ ALTER
    ALTER TABLE 테이블명
    ([ADD 칼럼명 데이터_타입] [DEFAULT 값] |
     [DROP 칼럼명] [CASCADE] |
     [ALTER 칼럼명 (DROP DEFAULT | SET DEFAULT 값)]);
    

      ■ DROP
    DROP TABLE 테이블명
     
     - DML(Data Manipulation Language)
     
      ■ SELECT
    SELECT [DISTINCT] {*, 열_리스트}
    FROM {테이블_리스트}
    [WHERE 조건]
    [ORDER BY 칼럼명 ASC | DESC]
    [GROUP BY 칼럼명
     HAVING 조건]


      












     - 집계 함수 (출처: http://www.gurubee.net/)

    COUNT

    : COUNT 함수는 검색된 행의 수를 반환 한다.

    1
    2
    3
    4
    5
    6
    -- 검색된 행의 총 수 4개를 반환. 즉 4개의 부서가 존재한다.
    SELECT COUNT(deptno) FROM dept;
     
    COUNT(DEPTNO)
    -------------
                4

    MAX

    : MAX 함수는 컬럼값 중에서 최대값을 반환 한다.

    1
    2
    3
    4
    5
    6
    -- sal 컬럼값 중에서 제일 큰값을 반환. 즉 가장 큰 급여를 반환.
    SELECT MAX(sal) salary FROM emp;
     
    SALARY
    -------
      5000  

    MIN

    : MIN 함수는 컬럼값 중에서 최소값을 반환 한다.

    1
    2
    3
    4
    5
    6
    -- sal 컬럼값 중에서 가장 작은 값 반환. 즉 가장 적은 급여를 반환
    SELECT MIN(sal) salary FROM emp;
     
     SALARY
    -------
        800   

    AVG

    : AVG 함수는 평균 값을 반환 한다.

    1
    2
    3
    4
    5
    6
    7
    8
    -- 부서번호 30의 사원 평균 급여를 소수점 1자리 이하에서 반올림
    SELECT ROUND(AVG(sal),1) salary
    FROM emp
    WHERE deptno = 30;
     
     SALARY
     ------
     1566.7

    SUM

    : SUM 함수는 검색된 컬럼의 합을 반환 한다.

    1
    2
    3
    4
    5
    6
    7
    8
    -- 부서번호 30의 사원 급여 합계를 조회.
    SELECT SUM(sal) salary
    FROM emp
    WHERE deptno = 30;
     
     SALARY
    -------
       9400   

    STDDEV

    : STDDEV 함수는 표준편차를 반환 한다.

    1
    2
    3
    4
    5
    6
    7
    8
    -- 부서번호 30의 사원 급여 표준편차를 반환.   
    SELECT ROUND(STDDEV(sal),3) salary
    FROM  emp
    WHERE deptno = 30;
     
      SALARY
    --------
     668.331 

    집계함수 예

    : 아래는 부서별 사원수, 최대급여, 최소급여, 급여합계, 평균급여를 급여합계 순으로 조회하는 예이다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT deptno 부서번호, COUNT(*) 사원수,
           MAX(sal) 최대급여, MIN(sal) 최소급여,
           SUM(sal) 급여합계, ROUND(AVG(sal)) 평균급여
     FROM emp
     GROUP BY deptno
     ORDER BY SUM(sal) DESC;
     
     
    부서번호   사원수  최대급여  최소급여   급여합계   평균급여
    ------- -------- --------- -------- --------- ---------
         20       5      3000       800    10875     2175
         30       6      2850       950     9400     1567
         10       3      5000      1300     8750     2917


    GROUP BY

    • : GROUP BY 절은 데이터들을 원하는 그룹으로 나눌 수 있다.
    • : 나누고자 하는 그룹의 컬럼명을 SELECT절과 GROUP BY절 뒤에 추가하면 된다.
    • : 집계함수와 함께 사용되는 상수는 GROUP BY 절에 추가하지 않아도 된다. (개발자 분들이 많이 실수 함)
    • : 아래는 집계 함수와 상수가 함께 SELECT 절에 사용되는 예이다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    -- 부서별 사원수 조회
    SELECT '2005년' year, deptno 부서번호, COUNT(*) 사원수
    FROM emp
    GROUP BY deptno
    ORDER BY COUNT(*) DESC;
     
     
    YEAR     부서번호     사원수
    ------ ---------- ----------
    2005년         30          6
    2005년         20          5
    2005년         10          3

    아래 예제는 부서별로 그룹하여 부서번호, 인원수, 급여의 평균, 급여의 합을 조회하는 예제이다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT deptno, COUNT(*), ROUND(AVG(sal)) "급여평균",
           ROUND(SUM(sal)) "급여합계"
      FROM emp
     GROUP BY deptno;
     
     
      DEPTNO   COUNT(*)    급여평균    급여합계
    -------- ---------- ---------- ----------
          30          6       1567       9400
          20          5       2175      10875
          10          3       2917       8750

    아래 예제는 업무별로 그룹하여 업무, 인원수, 평균 급여액, 최고 급여액, 최저 급여액 및 합계를 조회하는 예제이다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT job, COUNT(empno) "인원수", AVG(sal) "평균급여액",
           MAX(sal) "최고급여액", MIN(sal) "최저급여액",
           SUM(sal) "급여합계"
    FROM emp
    GROUP BY job;
     
     
    JOB           인원수   평균급여액   최고급여액   최저급여액    급여합계
    ----------- -------- ---------- ---------- ---------- ----------
    CLERK              4     1037.5       1300        800       4150
    SALESMAN           4       1400       1600       1250       5600
    PRESIDENT          1       5000       5000       5000       5000
    MANAGER            3 2758.33333       2975       2450       8275
    ANALYST            2       3000       3000       3000       6000

    • : GROUP BY 절은 집계 함수 없이도 사용 될 수 있다.(DISTINCT와 용도가 비슷해 짐)
    • : 아래 예제를 보면 GROUP BY는 말 그대로 그룹을 나누는 역할을 한다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    -- GROUP BY를 이용한 부서번호 조회 예
    SELECT deptno
    FROM emp
    GROUP BY deptno;
     
     
    DEPTNO
    ------
        30
        20
        10

    DISTINCT와 GROUP BY절

    • : DISTINCT와 GROUP BY 개념에 대해서 좀 더 이해를 해보자.
    • : DISTINCT는 주로 UNIQUE(중복을 제거)한 컬럼이나 레코드를 조회하는 경우 사용한다.
    • : GROUP BY는 데이터를 그룹핑해서 그 결과를 가져오는 경우 사용한다.
    • : 하지만 두 작업은 조금만 생각해보면 동일한 형태의 작업이라는 것을 쉽게 알 수 있으며, 일부 작업의 경우 DISTINCT로 동시에 GROUP BY로도 처리될 수 있는 쿼리들이 있다.
    • : 두 기능 모두 Oracle9i까지는 sort를 이용하여 데이터를 만들었지만, Oracle10g 부터는 모두 Hash를 이용하여 처리한다.
    • : 그래서 DISTINCT를 사용해야 할지, GROUP BY를 사용해서 데이터를 조회하는 것이 좋을지 고민되는 경우들이 가끔 있다.

    아래의 예제는 동일한 결과를 반환한다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    -- DISTINCT를 사용한 중복 데이터 제거
    SELECT DISTINCT deptno FROM emp;
     
     
    -- GROUP BY를 사용한 중복 데이터 제거
    SELECT deptno FROM emp GROUP BY deptno;
     
     
    DEPTNO
    ------
        30
        20
        10

    하지만 곰곰히 생각해 보면 GROUP BY와 DISTINCT는 각자 고유의 기능이 있다

    집계함수를 사용하여 특정 그룹으로 구분 할 때는GROUP BY 절을 사용하며, 특정 그룹 구분없이 중복된 데이터를 제거할 경우에는 DISTINCT 절을 사용 하도록 하자

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    -- 아래와 같은 기능은 DISTINCT를 사용하는 것이 훨씬 효율적이다.
    SELECT COUNT(DISTINCT d.deptno) "중복제거 수",
           COUNT(d.deptno) "전체 수"
    FROM emp e, dept d
    WHERE e.deptno = d.deptno;
     
     
    -- 집계 함수가 필요한 경우는 GROUP BY를 사용해야 한다.
    SELECT deptno, MIN(sal)
    FROM emp
    GROUP BY deptno;

    HAVING 절

    • : WHERE 절에서는 집계함수를 사용 할 수 없다.
    • : HAVING 절은 집계함수를 가지고 조건비교를 할 때 사용한다.
    •   HAVING 절은 GROUP BY절과 함께 사용이 된다.

    아래 예제는 사원수가 다섯 명이 넘는 부서와 사원수를 조회하는 예제이다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT b.dname, COUNT(a.empno) "사원수"
    FROM emp a, dept b
    WHERE a.deptno = b.deptno
    GROUP BY dname
    HAVING COUNT(a.empno) > 5;
     
     
    DNAME          사원수
    ------------ -------
    SALES              6

    아래 예제는 전체 월급이 5000을 초과하는 JOB에 대해서 JOB과 월급여 합계를 조회하는 예이다. 단 판매원(SALES)은 제외하고 월 급여 합계로 내림차순 정렬하였다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT job, SUM(sal) "급여합계"
    FROM emp 
    WHERE job != 'SALES'      -- 판매원은 제외
    GROUP BY job              -- 업무별로 Group By
    HAVING SUM(sal) > 5000     -- 전체 월급이 5000을 초과하는
    ORDER BY SUM(sal) DESC;   -- 월급여 합계로 내림차순 정렬
     
     
    JOB                  급여합계
    ------------------ ----------
    MANAGER                  8275
    ANALYST                  6000
    SALESMAN                 5600

    - 테이블에 별칭을 부여한 조인 연산

    SELECT s.STU_NAME, c.COU_NAME, c.COU_ID
    FROM STUDENT s, COURES c
    WHERE s.COU_ID = c.COU_ID;
    
    
    


    ■ INSERT
    INSERT INTO 테이블이름 { 칼럼명 } -- 생략 할 경우, CREATE했던 순서대로 삽입 됨
    VALUES({ 칼럼값 })

    ■ UPDATE
    UPDATE 테이블이름
    SET { SET 칼럼명 = 칼럼값 }
    WHERE 조건
    

    ■ DELETE
    DELETE FROM 테이블이름
    [WHERE 조건] -- 생략 할 경우, 모든 행이 삭제
    



  • 질의어


  • 관계 대수


    - 연산자
      

       

        


        
     
      
      

        

      
        
      : 릴레이션 R과 S의 동등 조인 결과는 R과 S의 카티션 곱에 셀렉션을 적용한 결과와 같다.
        

      
      
      
      
      


'Major > Database' 카테고리의 다른 글

데이터베이스 - 트랜잭션  (0) 2015.11.26
데이터베이스 - SQL  (0) 2015.11.25
데이터베이스 - 정규화  (2) 2015.11.24
데이터베이스 - 관계형 데이터베이스  (0) 2015.11.24
데이터베이스 - 데이터 모델  (0) 2015.11.24
  • 정규화(Normalization)
    1. 어떤 관계라도 데이터베이스 내에서 표현이 가능하도록 만드는 것
    2. 관계에서 바람직하지 않은 삽입, 삭제, 갱신 이상이 발생하지 않도록 한다.
    3. 새로운 형태의 데이터가 삽입될 때 관계를 재구성할 필요성을 줄일 수 있다.
    4. 보다 간단한 관계 연산에 기초하여 검색을 보다 효율적으로 할 수 있다.

    - 이상(anomaly) 현상
     : 속성 간에 존재하는 여러 종속 관계를 하나의 릴레이션에 표현함으로써 데이터의 중복으로 인해 발생하는 여러가지 현상
     ■ 삭제 이상
      :
    연쇄삭제에 의한 정보의 손실
      
     ■ 삽입 이상
      : 원하지 않는 정보의 강제 삽입

      
    갱신 이상
     : 중복 데이터의 일부 갱신으로 정보의 모순성 발생
     

    - 함수 종속
      

     : X가 Y를 결정한다, Y가 X에 의해 결정된다, X는 Y의 결정자이다
     : X(determinant)를 결정자, Y를 종속자
     : {학번, 과목번호} -> {성적}은 완전 함수 종속(FFD: Full Functional Dependency), {학번} -> {학년}은 부분 함수 종속(PFD: Partial Functional Dependency)

      

    - 정규화 과정
     : 일반적으로 데이터베이스를 설계할 때에는 BCNF까지만 고려
     : 정규화 과정을 거칠 수록 join 연산으로 인한 성능저하를 가져올 수 있기 때문에 데이터의 정합성과 데이터의 무결성을 우선으로 할지 데이터베이스 구성의 단순화와 성능을 우선으로 할지를 결정
     : 반대 개념으로 역정규화

        

     ■ 제1정규화(1NF)
      : 어떤 릴레이션 R에 속한 모든 도메인이 원잣값(atomic value)만으로 되어 있다.
      


     ■ 제2정규화(2NF)
      : 어떤 릴레이션 R이 제1정규형이고, 키에 속하지 않은 속성 모두가 키에 완전 함수 종속
      : 무손실 분해

        

     ■ 제3정규화(3NF)
      : 어떤 릴레이션 R이 2NF이고, 모든 속성들이 기본키에 이행적 함수 종석(transitive FD)이 아니면 제3정규형에 속한다.
      : 이행적 함수 종속성은 A -> B 와 B-> C의 함수 종속성이 존재하면(A->B
    B->C) 속성 C가 이행적으로 A에 종속 (A->C)

      

      

     ■ 보이스/코드 정규형(BCNF)
      : 릴레이션 R이 제3정규형을 만족하고, 모든 결정자가 후보키이어야한다.

      
      


'Major > Database' 카테고리의 다른 글

데이터베이스 - SQL  (0) 2015.11.25
데이터베이스 - 관계 대수  (0) 2015.11.25
데이터베이스 - 관계형 데이터베이스  (0) 2015.11.24
데이터베이스 - 데이터 모델  (0) 2015.11.24
데이터베이스 - 기초  (3) 2015.11.24
  • 관계형 데이터베이스 (Relational Database)

    - 릴레이션 (Relation)
     

      : 속성, 튜플의 순서는 중요하지 않다.
      : 속성은 더 이상 쪼갤 수 없는 원자값(atomic value)만을 저장
      : 한 릴레이션에 포함된 튜플들은 모두 달라야 한다.

     



     - 차수(degree)
      : 한 릴레이션을 구성하는 애트리뷰트의 개수
      : 릴레이션의 최소 차수는 1
      : 자주 바뀌지 않음

     - 카디날리티(Cardinality)
      : 한 릴레이션 내의 튜플의 수
      : 릴레이션의 최소 카디날리티의 수는 0
      : 시간이 지남에 따라 계속해서 변함

      - 도메인(Domain)
      : 릴레이션에 포함된 각각의 속성들이 취할 수 있는 같은 타입의 원자(atomic) 값들의 집합
       

     - 키(Key) 

      : 한 릴레이션에서 각 튜플을 유일하게 식별하기 위해 사용하는 하나 혹은 그 이상의 속성들의 집합
       ■유일성 : 하나의 키 값으로 하나의 튜플만을 유일하게 식별할 수 있는 성격
       
    최소성 : 모든 레코드들을 유일하게 식별하는데 꼭 필요한 속성으로만 구성되어야 하는 성격

      
      
      
      
    - 외래키(Foreign key)
      : 관계를 맺고 있는 릴레이션 R1, R2에서 릴레이션 R1이 참조하고 있는 릴레이션 R2의 기본키와 같은 R1 릴레이션의 속성
      : 외래키로 지정되면 참조 테이블의 기본키에 없는 값은 입력할 수 없음.

      



    - 개체 무결성
      : 릴레이션에서 기본키를 구성하는 속성은 널(NULL) 값이나 중복 값을 가질 수 없음.

    - 참조 무결성
      : 외래키 값은 NULL이거나 참조 릴레이션의 기본키 값과 동일해야 함
      : 즉, 릴레이션은 참조할 수 없는 외래키 값을 가질 수 없음.


'Major > Database' 카테고리의 다른 글

데이터베이스 - SQL  (0) 2015.11.25
데이터베이스 - 관계 대수  (0) 2015.11.25
데이터베이스 - 정규화  (2) 2015.11.24
데이터베이스 - 데이터 모델  (0) 2015.11.24
데이터베이스 - 기초  (3) 2015.11.24
  • 데이터 모델링(Data Modeling)
     







  • 데이터 모델의 구성요소





    - 엔티티(Entity)
     : 데이터베이스에 자료로 표현하려는 것
     : 개념이나 정보단위 같은 현실 세계의 대상체
     : 유형, 무형의 정보
     : 서로 연관된 하나 이상의 속성으로 구성

    - 속성(Attribute)
     : 데이터의 가장 작은 논리적 단위
     : 각 속성은 엔티티의 특성, 상태 등을 기술

    - 관계(Relation)
     : 데이터의 가장 작은 논리적 단위
     : 각 속성은 엔티티의 특성, 상태 등을 기술


'Major > Database' 카테고리의 다른 글

데이터베이스 - SQL  (0) 2015.11.25
데이터베이스 - 관계 대수  (0) 2015.11.25
데이터베이스 - 정규화  (2) 2015.11.24
데이터베이스 - 관계형 데이터베이스  (0) 2015.11.24
데이터베이스 - 기초  (3) 2015.11.24
  • 데이터베이스 
    : 여러 사용자가 원하는 정보를 얻기 위해서 모아둔 자료의 집합, 관련있는 데이터들의 집합

  • 데이터베이스 관리 시스템(DBMS)
    : 데이터를 편리하게 저장하고 효율적으로 관리하고 검색할 수 있는 환경을 제공해주는 소프트웨어
    : 데이터베이스의 생성과 관리를 담당하는 소프트웨어 패키지
    : 정의, 조작, 제어 기능

  • 데이터베이스 시스템(DBS)
    : 데이터베이스를 통해 데이터를 저장하고 관리하기 위한 목적으로 사용되는 일체의 시스템
    : 데이터베이스와 그를 관리하는 소프트웨어(DBMS, 응용 프로그램) 모두를 칭하는 용어
      

  • 스키마(Schema)
    : 데이터 구조와 제약조건에 대한 명세(specification)를 기술하는 것
    : 개체(entity), 속성(attribute), 관계(relationship)에 대한 정의와 이들이 유지해야 될 제약 조건(constraints)을 포함
    : 3단계 데이터베이스 구조






  • 데이터베이스 시스템의 구성요소




  • 데이터베이스 언어

    - 데이터 정의어(DDL)
     : 스키마를 정의하거나 수정할 목적으로 사용
     : CREATE, ALTER, DROP

    - 데이터 조작어(DML)
     : 데이터베이스 내의 데이터 연산을 위한 언어
     : INSERT, UPDATE, DELETE

    - 데이터 제어어(DCL)
     : 
    데이터베이스 내의 데이터를 올바르고 정확하게 유지
     : 보안, 무결성, 데이터 회복, 병행수행


'Major > Database' 카테고리의 다른 글

데이터베이스 - SQL  (0) 2015.11.25
데이터베이스 - 관계 대수  (0) 2015.11.25
데이터베이스 - 정규화  (2) 2015.11.24
데이터베이스 - 관계형 데이터베이스  (0) 2015.11.24
데이터베이스 - 데이터 모델  (0) 2015.11.24

엔디언(Endianness)은 컴퓨터의 메모리와 같은 1차원의 공간에 여러 개의 연속된 대상을 배열하는 방법을 뜻하며, 바이트를 배열하는 방법을 특히 바이트 순서(Byte order)라 한다.


엔디언은 보통 큰 단위가 앞에 나오는 
빅 엔디언(Big-endian)과 작은 단위가 앞에 나오는 리틀 엔디언(Little-endian)으로 나눌 수 있으며, 두 경우에 속하지 않거나 둘을 모두 지원하는 것을 미들 엔디언(Middle-endian)이라 부르기도 한다.


Big-Endian Little-Endian


바이트 순서

바이트 순서는 크게 빅 엔디언과 리틀 엔디언으로 나눌 수 있다. 빅 엔디언은 사람이 숫자를 쓰는 방법과 같이 큰 단위의 바이트가 앞에 오는 방법이고, 리틀 엔디언은 반대로 작은 단위의 바이트가 앞에 오는 방법이다.PDP-11과 같은 몇몇 아키텍처는 2바이트 단위와 1바이트 단위로 서로 다른 순서를 사용하기도 하는데 이들을 미들 엔디언이라 부른다. 다음은 이런 방법들을 비교한 것이다.

종류0x1234의 표현0x12345678의 표현
빅 엔디언12 3412 34 56 78
리틀 엔디언34 1278 56 34 12
미들 엔디언-34 12 78 56
또는
56 78 12 34

두 방법 중 어느 한 쪽이 다른 쪽과 비교해 압도적으로 좋거나 나쁘지는 않다고 알려져 있으며, 두 방법은 서로 다른 여러 아키텍처에서 서로 공존하고 있다. 그러나 x86 아키텍처가 리틀 엔디언을 쓰기 때문에, 오늘날 x86 아키텍처를 사용하는 대부분의 데스크톱 컴퓨터는 리틀 엔디언을 쓰며 이를 ‘인텔 포맷’이라 한다. 거꾸로 네트워크에서는 주소를 빅 엔디언으로 쓰는데, 역사적으로 라우팅이 전화를 거는 식으로 접두 부호로 이루어졌기 때문이다. 이의 영향으로 많은 프로토콜과 몇몇 파일 포맷이 빅 엔디언을 사용하고 있다. 모토로라 프로세서들은 일반적으로 빅 엔디언을 사용하며, ARM 프로세서들은 성능 향상을 위해 빅 엔디언과 리틀 엔디언을 선택할 수 있도록 되어 있다.

장단점

빅 엔디언은 소프트웨어의 디버그를 편하게 해 주는 경향이 있다. 사람이 숫자를 읽고 쓰는 방법과 같기 때문에 디버깅 과정에서 메모리의 값을 보기 편한데, 예를 들어 0x59654148은 빅 엔디언으로 59 65 41 48로 표현된다.

반대로 리틀 엔디언은 메모리에 저장된 값의 하위 바이트들만 사용할 때 별도의 계산이 필요 없다는 장점이 있다. 예를 들어, 32비트 숫자인 0x2A는 리틀 엔디언으로 표현하면 2A 00 00 00이 되는데, 이 표현에서 앞의 두 바이트 또는 한 바이트만 떼어 내면 하위 16비트 또는 8비트를 바로 얻을 수 있다. 반면 32비트 빅 엔디언 환경에서는 하위 16비트나 8비트 값을 얻기 위해서는 변수 주소에 2바이트 또는 3바이트를 더해야 한다. 보통 변수의 첫 바이트를 그 변수의 주소로 삼기 때문에 이런 성질은 종종 프로그래밍을 편하게 하는 반면, 리틀 엔디언 환경의 프로그래머가 빅 엔디언 환경에서 종종 실수를 일으키는 한 이유이기도 하다.

또한 가산기가 덧셈을 하는 과정은 LSB로부터 시작하여 자리 올림을 계산해야 하므로, 첫 번째 바이트가 LSB인 리틀 엔디언에서는 가산기 설계가 조금 더 단순해진다. 빅 엔디언에서는 가산기가 덧셈을 할때 마지막 바이트로부터 시작하여 첫 번째 바이트까지 역방향으로 진행해야 한다. 그러나 오늘날의 프로세서는 여러개의 바이트를 동시에 읽어들여 동시에 덧셈을 수행하는 구조를 갖고 있어 두 엔디언 사이에 사실상 차이가 없다.

바이 엔디언

몇몇 아키텍처는 빅 엔디언과 리틀 엔디언 중 하나를 선택할 수 있도록 설계되어 있고, 이를 바이 엔디언(Bi-endian)이라 부른다. ARMPowerPCDEC 알파MIPSPA-RISCIA-64 등은 바이 엔디언을 사용하는 대표적인 아키텍처이다. 이들 대부분은 컴퓨터가 시작된 상태에서 소프트웨어적으로 바이트 순서를 바꿀 수 있지만, 몇몇은 하드웨어에 내장된 펌웨어에서 바이트 순서를 선택해야 하는 경우도 있다.

미들 엔디언

종종 한 방향으로 순서가 정해져 있는 게 아니라, 이를테면 32비트 정수가 2바이트 단위로는 빅 엔디언이고 그 안에서 1바이트 단위로는 리틀 엔디언인 경우가 종종 있는데 이를 미들 엔디언(Middle-endian)이라 한다.VAX와 ARM에서는 배정도 부동 소수점 실수를 미들 엔디언으로 저장하며, PDP-11에서는 32비트 정수를 미들 엔디언으로 저장하는데 이를 PDP 엔디언이라 부르기도 한다.

비트 순서

보통 바이트나 옥텟은 원자적인 단위로 간주되지만 종종 비트 단위의 접근이 필요할 수 있다. 따라서 바이트 순서가 아니라 비트 순서를 따질 수도 있으나, 여러 가지 이유로 비트 순서는 상대적으로 덜 중요하다. 보통 메모리의 접근은 바이트 단위로 이루어지기 때문에 비트 단위의 접근에는 별도의 연산 과정이 필요한데, 이러한 연산 자체가 비트 순서에 대해 잘 정의되어 있기 때문에 비트를 접근하는 방법은 아키텍처에 중립적이다.

비트 순서와 비슷하게, 네트워크 프로토콜이나 파일 포맷 같이 저수준으로 내려 갈 경우 비트 단위의 데이터를 최상위 비트부터 채울 것인가 최하위 비트부터 채울 것인가 하는 문제가 있다. 예를 들어 C는 구조체에서 바이트보다 더 작은 단위의 변수를 선언할 수 있는 비트 필드를 지원하는데, 여러 개의 비트 필드가 배열되는 방법은 기계어를 생성하는 과정에서 중요해진다. 이때 최상위 비트(MSB)부터 채우는 것을 최상위 비트 우선, 최하위 비트(LSB)부터 채우는 것을 최하위 비트 우선이라 한다. 예를 들어 PNG와 GIF는 각각 최상위/최하위 비트 우선을 쓰는 대표적인 파일 포맷이다.

출처: 위키, http://genesis8.tistory.com/37
    

'Major > Network' 카테고리의 다른 글

네트워크 - Transport Layer  (0) 2015.12.09
네트워크 - Application Layer  (0) 2015.12.02
네트워크 - 기본  (0) 2015.12.01
MAC address  (0) 2015.11.16
OSI 7 계층  (0) 2015.11.15

MAC 주소

컴퓨터 네트워킹에서 매체 접근 제어 주소(MAC 주소), 이더넷 하드웨어 주소어댑터 주소는 대부분의 네트워크 어댑터(NIC)에 부착된 준고유 식별자이다. 특정한 네트워크 어댑터의 이름같이 동작하는 숫자이다. 그러므로 이를테면, 두 개의 서로 다른 컴퓨터에 있는 랜카드는 서로 다른 이름, 곧 서로 다른 MAC 주소를 가지고 있다. 라우터 안에 있는 여러 개의 랜카드, 같은 컴퓨터 안에 있는 이더넷 어댑터와 무선 어댑터도 이와 마찬가지로 적용된다. 그러나 오늘날 출시되는 대부분의 하드웨어에서는 MAC 스푸핑(MAC spoofing)을 통해 맥 주소를 바꿀 수 있다.

MAC은 총 48비트로 구성되어 있으며, 이 가운데 첫 24비트는 OUI(Organizational Unique Identifier) 제조업체의 식별코드 , NIC 제조업체의 정보 24비트를 뺀 나머지 24비트는 랜 카드의 정보를 담고 있다.

다음의 기술들이 MAC-48 식별자 형식을 사용한다:

EUI-64 식별자는 다음에 쓰인다:


컴퓨터가 네트워크상에서 서로를 구분하기 위해서는 각각의 일종의 주소가 필요하다. 편지를 서로 주고 받기 위해서는 각각의 건물이나 집에서 서로 다른 주소가 필요한 것처럼 컴퓨터 네트워크 상에서 이 역할을 담당하는 것이 바로 맥(Media Access Control) 주소이다.
물론 인터넷은 TCP/IP로 통신을 하며 이떄 IP주소를 사용하지만 이 IP주소를 다시 MAC으로 바꾸는 과정을 거친다. 이 과정을 ARP(Address Resolution Protocol)라고 한다.

출처: 위키


'Major > Network' 카테고리의 다른 글

네트워크 - Transport Layer  (0) 2015.12.09
네트워크 - Application Layer  (0) 2015.12.02
네트워크 - 기본  (0) 2015.12.01
Big-endian vs Little-endian  (0) 2015.11.16
OSI 7 계층  (0) 2015.11.15

OSI 모형(Open Systems Interconnection Reference Model)은 국제표준화기구(ISO)에서 개발한 모델로, 컴퓨터 네트워크 프로토콜 디자인과 통신을 계층으로 나누어 설명한 것이다. 일반적으로 OSI 7 계층 모형이라고 한다.

OSI/IP 모형

7. 응용 계층(Application)

NNTP  · SIP  · SSI  · DNS  · FTP  · 고퍼  ·HTTP  · NFS  · NTP  · SMPP  · SMTP  ·DHCP  · SNMP  · 텔넷  · (더 보기)

6. 표현 계층(Presentation)

MIME  · XDR  · TLS  · SSL

5. 세션 계층(Session)

지명 파이프  · 넷바이오스  · SAP  · SIP
4. 전송 계층(Transport)
TCP  · UDP  · SCTP  · DCCP

3. 네트워크 계층(Network)

IP  · ICMP  · IPsec  · IGMP  · IPX  · 애플토크
2. 데이터 링크 계층(DataLink)
ARP  · CSLIP  · SLIP  · 이더넷  · 프레임 릴레이  · ITU-T G.hn DLL  · L2TP  · PPP  ·PPTP
1. 물리 계층(Physical)

RS-232  · RS-449  · RS-485  · V.35  · V.34 · I.430  ·

I.431  · T1  · E1  · POTS  · SONET/SDH  ·OTN  · DSL  · 802.11a/b/g/n PHY  · ITU-T G.hn PHY  · 이더넷  · USB  · 블루투스


 모델은 프로토콜을 기능별로 나눈 것이다. 각 계층은 하위 계층의 기능만을 이용하고, 상위 계층에게 기능을 제공한다. '프로토콜 스택' 혹은 '스택'은 이러한 계층들로 구성되는 프로토콜 시스템이 구현된 시스템을 가리키는데, 프로토콜 스택은 하드웨어나 소프트웨어 혹은 둘의 혼합으로 구현될 수 있다. 일반적으로 하위 계층들은 하드웨어로, 상위 계층들은 소프트웨어로 구현된다.

계층 1: 물리 계층

물리 계층(Physical layer)은 네트워크의 기본 네트워크 하드웨어 전송 기술을 이룬다. 네트워크의 높은 수준의 기능의 논리 데이터 구조를 기초로 하는 필수 계층이다. 다양한 특징의 하드웨어 기술이 접목되어 있기에 OSI 아키텍처에서 가장 복잡한 계층으로 간주된다.

계층 2: 데이터 링크 계층

데이터 링크 계층(Data link layer)은 포인트 투 포인트(Point to Point) 간 신뢰성있는 전송을 보장하기 위한 계층으로 CRC 기반의 오류 제어와 흐름 제어가 필요하다. 네트워크 위의 개체들 간 데이터를 전달하고, 물리 계층에서 발생할 수 있는 오류를 찾아 내고, 수정하는 데 필요한 기능적, 절차적 수단을 제공한다. 주소 값은 물리적으로 할당 받는데, 이는 네트워크 카드가 만들어질 때부터 맥 주소(MAC address)가 정해져 있다는 뜻이다. 주소 체계는 계층이 없는 단일 구조이다. 데이터 링크 계층의 가장 잘 알려진 예는 이더넷이다. 이 외에도 HDLC나 ADCCP 같은 포인트 투 포인트(point-to-point) 프로토콜이나 패킷 스위칭 네트워크나 LLC, ALOHA 같은 근거리 네트워크용 프로토콜이 있다. 네트워크 브릿지나 스위치 등이 이 계층에서 동작하며, 직접 이어진 곳에만 연결할 수 있다.

계층 3: 네트워크 계층

네트워크 계층(Network layer)은 여러개의 노드를 거칠때마다 경로를 찾아주는 역할을 하는 계층으로 다양한 길이의 데이터를 네트워크들을 통해 전달하고, 그 과정에서 전송 계층이 요구하는 서비스 품질(QoS)을 제공하기 위한 기능적, 절차적 수단을 제공한다. 네트워크 계층은 라우팅, 흐름 제어, 세그멘테이션(segmentation/desegmentation), 오류 제어, 인터네트워킹(Internetworking) 등을 수행한다. 라우터가 이 계층에서 동작하고 이 계층에서 동작하는 스위치도 있다. 데이터를 연결하는 다른 네트워크를 통해 전달함으로써 인터넷이 가능하게 만드는 계층이다. 논리적인 주소 구조(IP), 곧 네트워크 관리자가 직접 주소를 할당하는 구조를 가지며, 계층적(hierarchical)이다.

서브네트의 최상위 계층으로 경로를 설정하고, 청구 정보를 관리한다. 개방형 시스템들의 사이에서 네트워크 연결을 설정, 유지, 해제하는 기능을 부여하고, 전송 계층 사이에 네트워크 서비스 데이터 유닛(NSDU : Network Service Data Unit)을 교환하는 기능을 제공한다.

계층 4: 전송 계층

전송 계층(Transport layer)은 양 끝단(End to end)의 사용자들이 신뢰성있는 데이터를 주고 받을 수 있도록 해 주어, 상위 계층들이 데이터 전달의 유효성이나 효율성을 생각하지 않도록 해준다. 시퀀스 넘버 기반의 오류 제어 방식을 사용한다. 전송 계층은 특정 연결의 유효성을 제어하고, 일부 프로토콜은 상태 개념이 있고(stateful), 연결 기반(connection oriented)이다. 이는 전송 계층이 패킷들의 전송이 유효한지 확인하고 전송 실패한 패킷들을 다시 전송한다는 것을 뜻한다. 가장 잘 알려진 전송 계층의 예는 TCP이다.

종단간(end-to-end) 통신을 다루는 최하위 계층으로 종단간 신뢰성 있고 효율적인 데이터를 전송하며, 기능은 오류검출 및 복구와 흐름제어, 중복검사 등을 수행한다.

계층 5: 세션 계층

세션 계층(Session layer)은 양 끝단의 응용 프로세스가 통신을 관리하기 위한 방법을 제공한다. 동시 송수신 방식(duplex), 반이중 방식(half-duplex), 전이중 방식(Full Duplex)의 통신과 함께, 체크 포인팅과 유휴, 종료, 다시 시작 과정 등을 수행한다. 이 계층은 TCP/IP 세션을 만들고 없애는 책임을 진다.

통신하는 사용자들을 동기화하고 오류복구 명령들을 일괄적으로 다룬다.

계층 6: 표현 계층

표현 계층(Presentation layer)은 코드 간의 번역을 담당하여 사용자 시스템에서 데이터의 형식상 차이를 다루는 부담을 응용 계층으로부터 덜어 준다. MIME 인코딩이나 암호화 등의 동작이 이 계층에서 이루어진다. 예를 들면, EBCDIC로 인코딩된 문서 파일을 ASCII로 인코딩된 파일로 바꿔 주는 것이 표현 계층의 몫이다.

계층 7: 응용 계층

응용 계층(Application layer)은 응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행한다. 일반적인 응용 서비스는 관련된 응용 프로세스들 사이의 전환을 제공한다. 응용 서비스의 예로, 가상 터미널(예를 들어, 텔넷), "Job transfer and Manipulation protocol" (JTM, 표준 ISO/IEC 8832) 등이 있다.

계층 별 예시[편집]

계층기타TCP/IP 스위트SS7AppleTalk 스위트OSI 스위트IPX 스위트SNAUMTS
7 - 응용HL7ModbusSIPHTTPSMTPSNMPFTP,텔넷NFSNTPISUPINAPMAP,TUPTCAPAFP, PAPFTAMX.400X.500DAP APPC 
6 - 표현TDIASCIIEBCDICMIDIMPEGXDR AFPPAP    
5 - 세션FIFO(파이프), 넷바이오스SAPSDPSSLTLSTCP의 세션 관리 부분, ASPADSPZIP NWLinkDLC? 
4 - 전송NetBEUITCPUDPRTPSCTP ATPNBPAEPRTMPTP0, TP1, TP2, TP3, TP4, OSPFSPXRIP  
3 - 네트워크NetBEUI, Q.931IPICMPIPsecARPRIP,BGPMTP-3SCCPDDPX.25 (PLP), CLNPIPX RRC (라디오 리소스 제어)
2 - 데이터 링크이더넷토큰링FDDIPPPHDLC, Q.921, 프레임 릴레이ATMFibre Channel MTP-2로컬토크토큰토크이더토크애플 리모트 액세스PPPX.25 (LAPB), 토큰 버스802.3 프레이밍, 이더넷 II 프레이밍SDLC미디어 접근 제어(MAC)
1 - 물리RS-232V.35V.34, Q.911, T1E110BASE-T,100BASE-TXISDNSONETDSL MTP-1Localtalk on shielded, Localtalk on unshielded (PhoneNet)X.25 (X.21bisEIA/TIA-232EIA-422EIA/TIA-449,EIA-485EIA-530G.703) TwinaxPHY (물리 계층: Physical Layer)


'Major > Network' 카테고리의 다른 글

네트워크 - Transport Layer  (0) 2015.12.09
네트워크 - Application Layer  (0) 2015.12.02
네트워크 - 기본  (0) 2015.12.01
Big-endian vs Little-endian  (0) 2015.11.16
MAC address  (0) 2015.11.16

- 키 값의 연산에 의해 직접 접근이 가능한 구조를 해시 테이블(hash table)

- 해시 테이블을 이용한 탐색을 해싱(hashing)

- dictionary = map = table

- 해시 함수(hash function)란 탐색 키를 입력으로 받아 해시 주소(hash address)를 생성하고 이 해시 주소가 배열로 구현된 해시 테이블(hash table)의 인덱스가 된다.

 

- 탐색 키 k1가 k2에 대하여 h(k1) = h(k2)인 경우를 충돌(collision)이라고 하며, 이러한 키들을 동의어(synonym)라고한다. -> 충돌은 곧 오버플로(overflow)

- 해시 함수

  : 충돌이 적어야 한다.
  : 해시 함수 값이 해시 테이블의 주소 영역 내에서 고르게 분포되어야 한다.
  : 계산이 빨라야 한다.
  : 제산 함수(mod 연산), 폴딩 함수, 중간 제곱 함수 등
  : 충돌 해결 방법으로 선형 조사법, 이차 조사법, 이중 해싱법, 체이닝 등

'Major > Data structures' 카테고리의 다른 글

자료구조 - 신장 트리  (0) 2015.11.13
자료구조 - 그래프  (0) 2015.11.13
자료구조 - 우선순위큐(힙)  (0) 2015.11.12
자료구조 - 이진트리  (0) 2015.11.12
자료구조 - 트리  (0) 2015.11.12

+ Recent posts