목록

2019년 3월 1일 금요일

프로그래밍 공부하기 좋은 사이트 모음






프로그래밍 공부하기 좋은 사이트 모음!










1. 부스트코스



가장 최근에 알게 된 사이트.

안드로이드 앱을 만드는 강좌를 하나 봤는데
한 강좌 안에,
단계마다 세부 단계가 있고,
세부 단계마다 강의 영상이 또 여러개로 나누어져있다.
스크롤을 안내렸으면 강의가 여러개인지 모르고 넘어갔을 듯.






수학, 영어, 비즈니스 등
부가적으로 학습할 수 있는 강좌도 있다.










2. 오픈튜토리얼스 - 생활코딩



아마 가장 많이 알고있는 사이트 중 하나일 듯.
한 때, 
생활코딩의 운영자 egoing 님을 어떻게 모를 수 있냐는 소리를 들었다...






지옥에서 온 Git ㅎㅎ










3. 인프런



서비스하는 강의가 총 450개가 넘는다.
무료도 많고, 유료도 많다.

희한한건, 내가 못 찾는건지
카테고리 별로 강좌를 탐색하기 위한 '분야별 강좌' 메뉴를 만나기가 힘들다.
로그인을 안하면 '분야별 강좌' 메뉴가 없다가
로그인을 하면 메뉴가 '분야별 강좌' 메뉴가 똥! 생긴다거나,
(그것도 어떤 강의를 클릭해서 페이지로 갔을 경우)

홈에서 분야별로 강좌를 찾아보려면,
검색창을 통해 검색을 하면 카테고리를 볼 수 있다.






과정마다 강의 수, 총 소요 시간 등
한눈에 볼 수 있어서 학습을 계획하기 편하다.










4. 프로그래머스



예전에 헬로월드라는 이름으로 접속했던걸로 기억하는데
언젠가부터 프로그래머스로 바뀌었다.
동영상 강의와 간단한 테스트 문제로 구성된 강좌들을 서비스한다.
프로그래밍 대회, 개발자 채용, 프로필 등록 후 입사제안 받기 등
예전에는 없던 메뉴가 많이 생긴걸 보면 운영을 확장시키는 중인가?






코딩 문제가 레벨별로 마련되어 있다.
예전에 알고리즘 문제 풀겠다고 돈 내고 단기 학원을 다니고
월 정액을 내고 코딩 문제 사이트를 이용하거나 했는데...










5. w3schools



프론트엔드 공부 시 참고하기 좋은 사이트.
Try it Yourself 로
바로 코드를 테스트해 볼 수 있다.






웹 페이지를 만들다가
모르는게 생기면 검색하러 자주 들어갔었다.










6. 프리 코드 캠프



예전에 웹 디자인을 하던 친구가 알려준 사이트다.
과정마다 미션으로 구성되어,
간단한 문제를 하나씩 풀어가면서 학습할 수 있다.
여기도 프론트엔드 공부하기에 좋다.






문제가 주어지고, 코드를 바꾸거나 추가해서
미션을 해결하면 다음 문제로 넘어갈 수 있다.






[데이터베이스] 21. 해싱(Hashing), 해싱 함수(Hash Function), 해시 테이블(Hash Table)






1. 해싱(Hashing) 

  • 해시 테이블을 이용한 탐색을 말한다.
  • Hash Table 이라는 기억공간을 할당하고, 해시 함수를 이용하여 레코드 키에 대한 Hash Table 내의 Home Address를 계산한 후 주어진 레코드를 해당 기억장소에 저장하거나 검색 작업을 수행하는 방식이다.
  • DAM(직접접근방식, ) 파일을 구성할 때 해싱이 사용되며 접근 속도는 빠르지만 기억 공간이 많이 요구된다.
  • 여러가지 검색 방식 중 속도가 가장 빠르다.
  • 삽입, 삭제 작업의 빈도가 많을 때 유리한 방식이다.
  • 키-주소 변환 방법이라고도 한다.




2. 해시 함수(Hash Function)

  • 데이터의 효율적인 관리를 위해 길고 복잡한 문자열을 간단한 문자열로 맵핑하는 알고리즘으로 키 값을 해시 값(인덱스)로 변환한다.




3. 해시 테이블(Hash Table)

  • 해시 함수를 통해 얻은 해시 값을 인덱스, 주소로 삼아 데이터의 값을 키와 함께 저장하는 자료구조를 해시 테이블이라고 한다.
  • 키 값의 연산에 의해 직접 접근이 가능한 구조이다.
  • 레코드를 1개 이상 보관할 수 있는 Home Bucket 들로 구성한 기억 공간이다.
  • 보조기억장치에 구성할 수도 있고 주기억장치에 구성할 수도 있다.




  • 버킷(Bucket) : 하나의 주소를 갖는 파일의 한 구역을 의미하며, 버킷의 크기는 같은 주소에 포함될 수 있는 레코드 수를 의미한다.
  • 슬롯(Slot) : 1개의 레코드를 저장할 수 있는 공간으로 n개의 슬롯이 모여 하나의 버킷을 형성한다.
  • 충돌 현상(Collision) : 서로 다른 2개 이상의 레코드가 같은 주소를 가지는 현상.
  • Synonym : 같은 Home Address를 갖는 레코드들의 집합이다.
  • Overflow : 계산된 Home Address의 버킷 내에 저장할 기억 공간이 없는 상태로, 버킷을 구성하는 슬롯이 여러 개일 때는 Collision은 발생해도 Overflow는 발생하지 않을 수 있다.






2019년 2월 27일 수요일

[데이터베이스] 20. 파일 구조(파일의 분류, 순차 파일, 색인 순차 파일)






  • 파일은 편성에 의해 순차 파일(Sequential File), 색인 순차 파일(Indexed Sequential) File), 직접 파일(Direct/Random File)로 분류할 수 있다.


1. 순차 파일(Sequential File) = 순서 파일


1-1. 순차 파일이란?
  • 입력되는 데이터들을 논리적인 순서에 따라 물리적 연속 공간에 순서대로 기록하는 방식이다.
  • 급여 관리와 같이 변동 사항이 크지 않고 기간별로 일괄 처리를 주로 하는 경우에 적합하다.
  • 주로 순차 접근이 가능한 자기 테이프에서 사용된다.


1-2. 순차 파일의 장단점
  • 장점
- 기록 밀도가 높아서 기억 공간을 효율적으로 사용할 수 있다.
- 레코드가 키 순서대로 편성되어 취급이 용이하다.
- 매체 변환이 쉬워서 어떠한 매체에도 적용할 수 있다.
- 레코드를 기록할 때 사용한 키 순서대로 레코드를 처리하는 경우, 다른 편성법보다 처리 속도가 빠르다.

  • 단점
- 파일에 새로운 레코드를 삽입, 삭제, 수정하는 경우 파일 전체를 복사해야 하므로 시간이 많이 걸린다.
- 데이터 검색 시 처음부터 순차적으로 하기 떄문에 검색 효율이 낮다.



2. 색인 순차 파일(Indexed Sequential) File)


2-1. 색인 순차 파일이란?
  • 순차 처리와 랜덤 처리가 모두 가능하도록 레코드들을 키 값 순으로 정렬하여 기록하고, 레코드의 키 항목만을 모은 색인을 구성하여 편성하는 방식이다.
  • 색인을 이용한 순차적인 접근 방식을 제공하여 ISAM(Index Sequential Access Method)이라고도 한다.
  • 레코드를 참조할 때는 색인을 탐색한 후 색인이 가리키는 주소(포인터)를 사용하여 직접 참조할 수 있다.
  • 일반적으로 자기 디스크에 많이 사용되며 자기 테이프에서는 사용할 수 없다.


2-2. 색인 순차 파일의 구성
  • 기본 구역(Prime Area) : 실제 레코드들을 기록하는 부분으로, 각 레코드는 키 값 순으로 저장된다.
  • 색인 구역(Index Area) : 기본 구역에 있는 레코드들의 위치를 찾아가는 색인이 기록되는 부분으로 트랙 색인 구역, 실린더 색인 구역, 마스터 색인 구여으로 구분할 수 있다.
  • 오버플로 구역(Overflow Area) : 기본 구역에 빈 공간이 없어서 새로운 레코드의 삽입이 불가능 할 때를 대비하여 예비적으로 확보해 둔 부분이다.
- 실린더 오버플로 구역(Cylinder Overflow Area) : 각 실린더 마다 만들어지는 오버플로 구역으로 해당 실린더의 기본 구역에서 오버플로된 데이터를 기록한다.
- 독립 오버플로 구역(Independent Overflow Area) : 실린더 오버플로 구역에 더 이상 오버플로 된 데이터를 기록할 수 없을 때 사용할 수 있는 예비 공간으로, 실린더 오버플로 구역과는 별도로 만들어진다.


2-3. 색인 순차파일의 장단점
  • 장점
- 순차 처리와 랜덤 처리가 모두 가능하므로 목적에 따라 융통성 있게 처리할 수 있다.
- 효율적인 검색이 가능하고 레코드의 삽입, 삭제, 갱신이 용이하다.

  • 단점
- 색인 구역과 오버플로 구역을 구성하기 위한 추가 기억 공간이 필요하다.
- 파일이 정렬되어 있어야 하므로 추가, 삭제가 많으면 효율이 떨어진다.
- 색인을 이용한 액세를 하기 때문에 액세스 시간이 랜덤 편성 파일보다 느리다.



3. 직접 파일(Direct/Random File)


3-1. 직접 파일이란?
  • 데이터 레코드를 액세스할 경우 그 레코드가 보관되어 있는 주소를 직접 지정하는 방법이다.


3-2. 직접 파일의 장단점
  • 장점
- 접근 시간이 빠르다
- 레코드의 추가, 삭제의 경우 파일 전체의 복사가 필요 없다.

  • 단점
- 데이터 레코드와 그 보관장소의 대응이 어렵다.
- 기억 공간 효율이 저하되고, 연속적, 전체적인 검색이 거의 불가능하다.






2019년 2월 22일 금요일

[데이터베이스] 19. 분산 데이터베이스(분산 데이터베이스의 정의, 목표, 장단점)







1. 분산 데이터베이스란?

  • 논리적으로 하나의 시스템에 속하지만 물리적으로는 네트워크를 통해 연결된 여러개의 컴퓨터 사이트에 분산되어 있는 데이터베이스이다.




2. 분산 데이터베이스의 목표

  • 위치 투명성(Location Transparency) : 액세스하려는 데이터베이스의 실제 위치를 알 필요없이 단지 데이터베이스의 논리적인 명칭만으로 액세스할 수 있음을 뜻한다.
  • 중복 투명성(Replication Transparency) : 동일 데이터가 여러 곳에 중복되어 있더라도 사용자는 마치 하나의 데이터만 존재하는 것처럼 사용하고, 시스템은 자동으로 여러 자료에 대한 작업을 수행함을 뜻한다.
  • 병행 투명성(Concurrency Transparency) : 분산 데이터베이스와 관련된 다수의 트랜잭션들이 동시에 실현되더라도 그 트랜잭션의 결과는 영향을 받지 않음을 뜻한다.
  • 장애 투명성(Failure Transparency) : 트랜잭션, DBMS, 네트워크, 컴퓨터 장애에도 불구하고 트랜잭션을 정확하게 처리함을 뜻한다.




3. 분산 데이터베이스의 장단점


3-1. 장점
  • 지역 자치성이 높다.
  • 자료의 공유성이 향상된다.
  • 시스템 성이 향상된다.
  • 분산 제어가 가능하다.
  • 효용성 및 융통성이 높다.
  • 신뢰성 및 가용성이 높다.
  • 점증적 시스템 용량 확장이 용이하다.



3-2. 단점
  • DBMS가 수행할 기능이 복잡하다.
  • 데이터베이스 설계가 어렵다.
  • 소프트웨어 개발 비용이 증가한다.
  • 처리 비용이 증가한다.
  • 잠재적 오류가 증가한다.





[데이터베이스] 18. DB의 보안과 무결성(Integrity and Security)







1. 무결성과 보안(Integrity and Security)

  • 보안 : 권한이 없는 사용자로부터 데이터베이스를 보호하는 것.
  • 무결성 : 은 권한이 있는 사용자로부터 데이터베이스를 보호하는 것.
  • 보안은 데이터베이스 사용자들이 데이터베이스를 사용하고자 할 때 언제든지 사용할 수 있도록 보장하는 것이며 무결성은 정확하게 사용할 수 있도록 보장하는 것을 말한다.



2. 보안(Security)


2-1 DB 보안의 의미
  • 데이터베이스 사용자들은 일반적으로 서로 다른 객체에 대하여 다른 접근 권리 또는 권한을 갖게된다.
  • 데이터베이스의 일부분 또는 전체에 대해서 권한이 없는 사용자가 액세스를 수행하는 것을 금지하기 위해 사용되는 기술이다.


2-2. 보안의 목표
  • 정보 보호
  • 정보 인증
  • 사용자 인증


2-3. 암호화 기법
  • 개인의 암호 방식(Private Key Encryption) = 비밀키 암호 방식
- 동일한 키로 데이터를 암호화하고 복호화한다.
- 비밀키는 제3자에게는 노출시키지 않고 데이터베이스 사용 권한이 있는 사용자만 나눠 가진다.
- 대칭 암호 방식 또는 단일키 암호화 기법이라고도 한다.
- 대표적으로 DES(Data Encryption Standard)가 있다.
- DES는 56Bit의 16개 키를 이용하여 64Bit의 평문 블록을 16회의 암호 계산 단계를 거쳐 64Bit의 암호문을 얻는다.
- 장점 : 암호화/복호화 속도가 빠르며, 알고리즘이 단순하고 파일 크기가 작다.
- 단점 : 사용자의 증가에 따라 관리해야 할 키의 수가 상대적으로 많아진다.


  • 공개키 암호 방식(Public Key Encryption)
- 서로 다른 키로 데이터를 암호화하고 복호화한다.
- 데이터를 암호화할 때 사용하는 키(공개키, Public Key)는 데이터베이스 사용자에게 공개하고, 복호화할 때의 키(비밀키, Secret Key)는 관리자가 비밀리에 관리하는 방법이다.
- 비대칭 암호 방식이라고도 한다.
- 대표적으로 RSA(Rivest Shamir Adleman)가 있다.
- 장점 : 키의 분배가 용이하고, 관리해야 할 키의 개수가 적다.
- 단점 : 암호화/복호화 속도가 느리며 알고리즘이 복잡하고 파일 크기가 크다.



3. 무결성(Integrity)


3-1. 무결성의 의미
  • 데이터베이스에 들어있는 통합 데이터의 정확성을 보장하기 위해 정확한 자료가 데이터베이스 내에 저장되는 것을 방지하기 위한 제약조건이다.



3-2. 무결성의 종류
  • 널 무결성 : 관계의 특정 속성 값이 NULL이 될 수 없도록 하는 규정.
  • 키 무결성 : 하나의 테이블에는 적어도 하나의 키가 존재해야 한다는 규정.
  • 개체 무결성 : 기본 테이블의 기본키를 구성하는 어떤 속성도 NULL 값을 가질 수 없다는 규정.
  • 관계 무결성 : 릴레이션에 어느 한 튜플의 삽입 가능 여부 또는, 한 릴레이션과 다른 릴레이션의 튜플들 사이의 관계에 대한 적절성 여부를 지정한 규정.
  • 참조 무결성 : 외래키 값은 NULL이거나 참조 릴레이션의 기본키 값과 동일해야 한다는 규정.
  • 도메인 무결성 : 특정 속성의 값이 그 속성이 정의된 도메인에 속한 값이어야 한다는 규정.





[데이터베이스] 17. 자료의 탐색(순차 탐색, 이진 탐색, ...)







1. 탐색의 종류

  • 기억 공간에 저장된 특정 레코드를 찾아내기 위해서는 탐색하는 과정이 필요하다.


1-1. 순차 탐색(Sequencial Search)
  • 선형 검색(Linear Search) = 순차 검색(Sequential Search)
  • 순서화되어 있지 않은 경우 사용하며 첫번째 레코드 키 값부터 차례대로 비교하여 검색한다.



1-2. 이진 탐색(Binary Search)
  • 제어 검색의 일종이다.
  • 반드시 순서화된 파일이어야 검색할 수 있다.
  • 탐색 효율이 좋으며 탐색 시간이 적게 소요된다.
  • 전체 파일을 두 개의 서브 파일로 분리해 가면서 Key 레코드를 검색하기 때문에 검색회수를 거듭할 때마다 검색 대상이 되는 데이터의 수가 절반으로 줄어든다.
  • 찾고자 하는 Key 값을 파일의 중간 레코드 Key 값과 비교하면서 검색한다.
  • 중간 레코드 번호(m) : m=(첫번째 레코드 번호+마지막 레코드 번호)/2



1-3. 보간 탐색
  • 찾으려는 레코드가 있을 법한 부분의 키를 택하여 검색하는 방법이다.



1-4. 피보나치 탐색(Fibonacci Search)
  • 피보나치 수열에 따라 다음에 비교할 대상을 선정하여 검색하는 방식으로 중간 레코드 번호를 계산하기 위해 가감산만을 이용하기 때문에 효율이 우수하다.



1-5. 블록 탐색(Block Search)
  • 데이터 영역을 블록으로 나누고 각 블록마다 최대 레코드 키 값을 Index에 저장한 뒤 이것을 이용하여 찾고자 하는 레코드가 어느 블록에 속하는지를 검색하는 방법이다.







2019년 2월 20일 수요일

[데이터베이스] 16. 자료구조 - 자료의 정렬(정렬의 구분, 종류)







1. 정렬이란?

  • 파일을 구성하는 각 레코드들을 특정 키 항목을 기준으로 오름차순(Ascending) 또는 내림차순(Descending)으로 다시 배열하는 작업이다.


1-1. 내부 정렬
  • 소량의 데이터를 주기억장치에만 기억시켜 정렬하는 방식이다.
  • 내부 정렬의 종류로는 삽입 정렬, 버블 정렬, 선택 정렬, 퀵 정렬, 히프 정렬, 셸 정렬, 2-Way Merge 정렬 등이 있다.




1-2. 외부 정렬
  • 대량의 데이터를 보조기억장치에 기억시켜 정렬하는 방식으로 대부분 병합 정렬(Merge Sort) 기법으로 처리한다.
  • 외부 정렬의 종료로는 밸런스 병합 정렬, 캐스케이드 병합 정렬, 폴리 파즈 병합 정렬 등이 있다.





2. 주요 정렬


2-1. 삽입 정렬
  • 이미 순서화된 파일에 새로운 하나의 레코드를 순서에 맞게 삽입시켜 정렬하는 방식이다.
  • 정렬이 완료된 영역의 다음에 위치한 데이터가 그 다음 정렬의 대상이다.


5  3  8  1  2
오름차순 정렬 시
먼저, 3을 5와 비교하여 삽입할 위치 찾기


3  5  8  1  2  ··· 1회전 결과(3, 5 정렬 완료)


 3  5  8  1  2
8을 정렬된 영역 중 삽입할 위치 찾기


3  5  8  1  2  ··· 2회전 결과(3, 5, 8 정렬 완료)


3  5  8  1  2
1을 정렬된 영역 중 삽입할 위치 찾기


1  3  5  8  2  ··· 3회전 결과(1, 3, 5, 8 정렬 완료)


1  3  5  8  2
2를 정렬된 영역 중 삽입할 위치 찾기


2  3  5  8  ··· 4회전 결과
  



2-2. 버블 정렬
  • 주어진 파일에서 인접한 2개의 레코드 키 값을 비교하여 크기에 따라 레코드 위치를 서료 교환하는 정렬 방식이다.


8  5  6  2  4 
오름차순 정렬 시
먼저, 5와 8 비교


8  6  2  4
5  6  8  2  4
5  6  2  8  4
                   5  6  2  4  8  ··· 1회전 결과


5  6  2  4  8
다시 첫번째, 두번째 비교


6  2  4  8
5  2  6  4  8
5  2  4  6  8
                   5  2  4  6  8  ··· 2회전 결과


5  2  4  6  8
다시 첫번째, 두번째 비교


5  4  6  8
2  4  5  6  8
2  4  5  6  8
                   2  4  5  6  8  ··· 3회전 결과




2-3. 선택 정렬
  • n개의 레코드 중, 최소값을 찾아 첫번째 레코드 위치에 놓고 나머지 레코드 중에서 다시 최소값을 찾아 두번째 레코드 위치에 놓는 방식을 반복하여 정렬하는 방식이다.



  9  4  5  11  8 
오름차순 정렬 시
먼저, 9와 4 비교

4  9  11  8
9  5  11  8
 9  5  11  8
                   4  9  5  11  8  ··· 1회전 결과


9  5  11  8
두번째, 세번째 비교


5  9  11  8
4  5  9  11  8
                   4  5  9  11  8  ··· 2회전 결과


4  5  9  11  8
세번째, 네번째 비교


4  5  9  11  8
                  4  5  8  11  9 ··· 3회전 결과


4  5  8  11  9
네번째, 마지막 비교


                  4  5  8  9  11  ··· 4회전 결과







2019년 2월 18일 월요일

[데이터베이스] 15. 자료구조 - 자료구조의 분류와 종류(스택, 큐, 데크, 트리, ...)








1. 자료구조의 분류

  • 선형 구조 : 선형 리스트(배열), 연결 리스트, 스택, 데크, 큐
  • 비선형 구조 : 트리, 그래프



2. 자료구조의 종류


2-1. 선형리스트
  • 배열을 기반으로 구현한 리스트이다.



2-2. 연결리스트
  • 메모리 동적 할당을 기반으로 구현한 리스트이다.
  • 자료들을 임의의 기억공간에 기억시키되, 자료 항목의 순서에 따라 노드의 포인터 부분을 이용하여 서로 연결시킨 자료구조이다.
  • 노드의 삽입, 삭제 작업이 용이하다.
  • 접근 속도가 느리다.
  • 기억 공간이 연속적으로 놓여있지 않아도 저장이 가능하다.
  • 연결을 위한 링크(포인터) 부분이 필요하기 때문에 기억공간 이용 효율이 좋지 않다.
  • 연결 리스트 중에서 중간 노드의 연결이 끊어지면 다음 노드를 찾기 힘들다.



2-3. 스택(Stack)


  • 리스트의 한쪽 끝으로만 자료의 삽입, 삭제 작업이 이루어지는 자료구조이다.
  • 가장 나중에 삽입된 자료가 가장 먼저 삭제되는 후입선출(LIFO; Last-In, First-Out) 방식으로 자료를 처리한다.
  • TOP : Stack으로 할당된 기억공간에 가장 마지막으로 삽입된 자료가 기억된 위치를 가리키는 요소로 스텍 포인터라고도 한다.
  • Bottom : 스택의 가장 밑바닥이다.
  • PUSH : 스택에 자료를 입력하는 명령이다.
  • POP : 스택에서 자료를 출력하는 명령이다.

  • 부프로그램 호출 시 복귀주소를 저장할 때 이용한다.
  • 함수 호출의 순서를 제어할 때 이용한다.
  • 인터럽트가 발생하여 복귀주소를 저장할 때 이용한다.
  • 후위 표기법(Postfix Notation)으로 표현된 산술식을 연산할 때 이용한다.
  • 0 주소지정방식 명령어의 자료 저장 시 이용한다.
  • 재귀(Recursive) 프로그램의 순서를 제어할 때 이용한다.
  • 컴파일러를 이용한 언어 번역 시 이용한다.



2-4. 데크(Deque)
  • 삽입과 삭제가 리스트의 양쪽 끝에서 모두 발생할 수 있는 자료구조이다.
  • Double Ended Queue의 약자.
  • 스택과 큐의 장점만 가져와서 구성한 것이다.
  • 입력이 한쪽에서만 발생하고 출력은 양쪽에서 일어날 수 있는 입력 제한과 입력은 양쪽에서 일어나고 출력은 한쪽에서만 이루어지는 출력 제한이 있다.

입력 제한 데크(Scroll)


출력 제한 데크(Shelf)




2-5. 큐(Queue)

  • 선형 리스트의 한쪽에서는 삽입 작업이 이루어지고 다른 한쪽에서는 삭제 작업이 이루어지도록 구성한 자료구조이다.
  • 시작과 끝을 표시하는 두 개의 포인터가 있다.
  • 가장 먼저 삽입된 자료가 가장 먼저 삭제되는 선입선출(FIFO; First-In, First-Out) 방식으로 처리한다.
  • 프런트 포인터 : 가장 먼저 삽입된 자료의 기억공간을 가리키는 포인터로, 삭제 작업을 할 때 사용한다.
  • 리어 포인터 : 가장 마지막에 삽입된 자료가 위치한 기억장소를 가리키는 포인터로, 삽입 작업을 할 때 사용한다.

  • 창구 업무처럼 서비스 순서를 기다리는 등의 대기 행렬의 처리에 사용한다.
  • 운영체제의 작업 스케줄링에 사용한다.



2-6. 트리(Tree)
  • 정점(Node, 노드)과 간선(= edge, 엣지)을 이용하여 사이클을 이루지 않도록 구성한 그래프의 특수한 형태이다.
  • 가족의 계보, 연산 수식, 회사의 조직 구조도, 히프(Heap) 등을 표현하기에 적합하다.

  • 노드(Node) : 트리의 기본 요소로서 자료 항목과 다른 항목에 대한 가지를 합친 것
  • 근 노드(Root Node) : 트리의 맨 위에 있는 노드.
  • 디그리(Degree, 차수) : 각 노드에서 뻗어나온 가지의 수.
  • 트리의 디그리 : 노드들의 디그리 중에서 가장 많은 수.
  • 단말 노드(Terminal Node) = 잎 노드(Leaf Node) : 자식이 하나도 없는 노드로 디그리가 0인 노드.
  • 비단말 노드(Non-Terminal Node) : 자식이 하나라도 있는 노드로 디그리가 0이 아닌 노드.
  • 자식 노드(Son Node, Children Node) : 어떤 노드에 연결된 다음 레벨의 노드들.
  • 부모 노드(Parent Node) : 어떤 노드에 연결된 이전 레벨의 노드.
  • 형제 노드(Brother Node, Sibling) : 동일한 부모를 갖는 노드들.
  • Level : 근 노드의 Level을 1로 가정한 후 어떤 Level이 L이면 자식 노드는 L+1이다
  • 깊이(Depth, Height) : 어떤 Tree에서 노드가 가질 수 있는 최대의 레벨.

* 이진 트리의 운행
: 이진트리란 한 노드가 최대 2개까지 자식 노드를 가지는 트리를 말하며, 첫 번째 노드인 부모는 Root, 자식 노드는 왼쪽(Left), 오른쪽(Right)라고 불린다.

- 전위 운행(Pre-order) : Root → Left → Right 순서로 운행.
- 중위 운행(In-order) : Left → Root → Right 순으로 운행.
- 후위 운행(Post-order) : Left → Right → Root 순으로 운행.

전위 운행 순서 : A → B →D → E → G → H → C → F → I
중위 운행 순서 : D → B → G → E → H → A → C →F → I
후위 운행 순서 : D → G → H → E→ B → I → F → C → A



2-7. 그래프(Graph)
  • 버텍스(Vertex, =노드)와 아크(Arc, =엣지)로 구성되어 있으며 다른 버텍스로부터 오는 아크의 개수를 In-degree, 다른 버텍스로 가는 아크의 개수를 Out-degree라고 부른다.
  • 트리의 노드가 하나의 In-degree만 가지는 반면, 그래프의 버텍스는 하나 이상의 In-degree를 가질 수 있다.







[데이터베이스] 14. 트랜잭션의 병헹 제어(Concurrency Control)와 DB 회복(Recovery)







1. 병행 제어(Concurrency Control)


1-1. 병행 제어란?
  • 동시에 여러 개의 트랜잭션을 병행 수행시킬 때, 데이터베이스의 일관성이 파괴되지 않도록, 트랜잭션의 독립성을 유지할 수 있도록 트랜잭션 간의 상호작용을 제어하는 것이다.



1-2. 병행 수행의 문제점
  • 갱신 분실(Lost Update) : 2개 이상의 트랜잭션이 같은 자료를 공유하여 갱신할 때 갱신 결과의 일부가 없어지는 현상.
  • 비완료 의존성(Uncommitted Dependency) : 하나의 트랜잭션 수행이 실패한 후 회복되기 전에 다른 트랜잭션이 실패한 갱신 결과를 참조하는 현상.
  • 모순성(Inconsistency) : 두 개의 트랜잭션이 병행 수행될 때 원치 않는 자료를 이용함으로써 발생하는 문제.
  • 연쇄 복귀(Cascading Rollback) : 병행 수행되던 트랜잭션들 중 어느 하나에 문제가 생겨 롤백하는 경우 다른 트랜잭션도 함께 롤백되는 현상.



1-3. 병행 제어의 목적
  • 데이터베이스의 공유를 최대화한다.
  • 시스템의 활용도를 최대화한다.
  • 데이터베이스의 일관성을 유지한다.
  • 사용자에 대한 응답 시간을 최소화한다.



1-4. 로킹(Locking)
  • 트랜잭션이 사용하는 DB내의 데이터를 다른 트랜잭션이 접근하지 못하게 Lock을 설정해 접근을 제어, 상호 배제하는 것이다.
  • 트랜잭션들이 어떤 로킹 단위를 액세스하기 전에 Lock을 요청해서 Lock이 허락되어야만 그 로킹 단위를 액세스할 수 있도록 하는 기법이다.



1-5. 로킹 단위(Locking Granularity)
  • 병행 제어에서 한꺼번에 로킹할 수 있는 데이터 단위이다.
  • 데이터베이스, 파일, 레코드, 필드 등은 로킹 단위가 될 수 있다.
  • 로킹 단위가 크면 로크 수가 작아 관리하기 쉽지만 병행성 수준이 낮아지고, 로킹 단위가 작으면 로크 수가 많아 관리하기 복잡하지만 병행성 수준이 높아진다.




2. 회복(Recovery)


1-1. 회복이란?
  • 회복은 트랜잭션들의 처리를 수행하는 도중 장애가 발생하여 데이터베이스가 손상되었을 때 손상되기 이전의 정상 상태로 복구시키는 작업이다.



1-2. 장애의 유형
  • 트랜잭션 장애 : 입력 데이터 오류, 불명확한 데이터, 시스템 자원 요구의 과다 등 트랜잭션 내부의 비정상적인 상황으로 인하여 프로그램 실행이 중지되는 현상이다.
  • 시스템 장애 : 데이터베이스에 손상을 입히지는 않으나 하드웨어 오동작, 소프트웨어의 손상, 교착 상태 등에 의해 모든 트랜잭션의 연속적인 수행에 장애를 주는 현상이다.
  • 미디어 장애 : 저장장치인 디스크 블록의 손상이나 디스크 헤드의 충돌 등에 의해 데이터베이스의 일부 또는 전부가 물리적으로 손상된 상태이다.



1-3. 회복 관리기(Recovery Management)
  • DBMS의 구성 요소이다.
  • 트랜잭션 실행이 성고적으로 완료되지 못하면 트랜잭션이 데이터베이승 ㅔ만들었던 모든 변화를 취소(Undo) 시키고 트랜잭션 수행 이전의 원래 상태로 복구하는 역할을 한다.
  • 메모리 덤프, 로그를 이용하여 수행한다.



1-4. 회복 기법의 종류
  • 연기 갱신 기법(Deferred Update)
  • 즉각 갱신 기법(Immediate Update)
  • 그림자 페이지 대체 기법(Shadow Paging)
  • 검사점 기법(Check Point)





2019년 2월 17일 일요일

[데이터베이스] 13. 트랜잭션이란? (트랜잭션의 정의, 특성)






1. 트랜잭션의 정의

  • 사용자가 제기한 데이터베이스의 작업 수행을 위한 데이터 조작의 집단
  • 하나의 트랜잭션은 Commit 되거나 Rollback 된다.
  • 트랜잭션은 일반적으로 병행수행 제어 및 회복의 기본 단위가 된다.



2. 트랜잭션의 특성


2-1. 원자성(Atomicity)
  • 트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않아야 한다.
  • 즉, 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느 하나라도 에러가 발생하면 트랜잭션 전부가 취소되어야 한다.



2-2. 일관성(Consistency)
  • 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환한다.
  • 시스템이 가지고 있는 고정 요소는 트랜잭션 수행 전과 수행 완료 후의 상태가 같아야 한다.



2-3. 독립성, 격리성(Isolation)
  • 둘 이상의 트랜잭션이 동시에 실행되는 경우, 어느 하나의 트랜잭션 실행 중에 다른 트랜잭션의 연산이 끼어들 수 없다.
  • 수행 중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다.



2-4. 영속성, 지속성(Durability)
  • 성공적으로 완료된 트랜잭션의 결과는 영구적으로 유지되어야 한다.




3. 트랜잭션의 원자성을 위한 연산

  • COMMIT
- 트랜잭션의 성공적인 종료로 데이터베이스가 다시 일관된 상태에 있을 때 이 트랜잭션이 행한 갱신 연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산이다.
- COMMIT이 성공적으로 이루어지면 데이터베이스에 대한 갱신 작업이 영구적으로 반영된다.
- 명시적 COMMIT(Explicit Commit) : 데이터베이스 사용자가 COMMIT 명령을 직접 사용.
- 암시적 COMMIT(Implicit Commit) : DBMS가 사용자 session 종료 시 자동으로 COMMIT.

  • ROLLBACK
- 트랜잭션의 비정상적인 종료로 데이터베이스이 비일관적인 상태에 놓였을 때, 이 트랜잭션의 일부가 정상적으로 처리되었더라도 트랜잭션의 원자성을 구현하기 위해 이 트랜잭션이 행한 모든 연산을 취소시키는 연산이다.



4. 트랜잭션의 상태

  • 활동(Active) : 트랜잭션이 실행 중에 있는 상태.
  • 장애(Failed) : 트랜잭션 실행에 오류가 발생하여 중단된 상태.
  • 철회(Aborted) : 트랜잭션이 비정상적으로 종료되어 ROLLBACK 연산을 수행한 상태.
  • 부분 완료(Partially Committed) : 트랜잭션의 마지막 연산까지 실행했지만, COMMIT 연산이 실행되기 직전의 상태.
  • 완료(Committed) : 트랜잭션이 성공적으로 종료되어 COMMIT 연산을 실행한 후의 상태.





2019년 2월 11일 월요일

[데이터베이스] 12. 뷰 (View)






1. 뷰(View) 란?

  • 사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위해 하나 이상의 기본 테이블로부터 유도된 가상 테이블이다.
  • 저장장치 내에 물리적으로 존재하지 않지만, 사용자에게는 존재하는 것처럼 간주된다.
  • 데이터 보정 작업, 처리 과정 시험 등 임시 작업을 위한 용도로 활용된다.




2. 뷰(View)의 특징

  • 기본 테이블로부터 유도된 테이블이기 때문에 기본 테이블과 같은 형태의 구조를 가진다.
  • 조작도 기본 테이블과 거의 같다.
  • 가상 테이블이기 때문에 물리적으로 구현되어 있지 않다.
  • 필요한 데이터만 뷰로 정의해서 처리할 수 있기 때문에 관리가 용이하고 명령문이 간단해진다.
  • Join문의 사용을 최소화하여 사용상의 편의성을 최대화 한다.
  • 뷰를 통해서만 데이터에 접근하게 하면 뷰에 나타나지 않는 데이터를 안전하게 보호할 수 있다.
  • 기본 테이블의 기본키를 포함한 속성(Attribute)의 집합으로 뷰를 구성해야만 삽입, 삭제, 갱신 연산이 가능하다.
  • 정의된 뷰는 다른 뷰의 정의에 기초가 될 수 있다.
  • 하나의 뷰를 삭제하면 그 뷰를 기초로 정의된 다른 뷰도 자동으로 삭제된다.




3. 뷰(View)의 장점

  • 논리적 데이터 독립성을 제공한다.
  • 동일 데이터에 대해 동시에 여러 사용자의 응용이나 요구를 지원해준다.
  • 사용자의 데이터 관리를 간단하게 해준다.
  • 접근 제어를 통한 자동 보안이 제공된다.




4. 뷰(View)의 단점

  • 독립적인 인덱스를 가질 수 없다.
  • 뷰는 ALTER문을 이용하여 정의를 변경할 수 없기 때문에 삭제 후 다시 생성해야 한다.
  • 뷰로 구성된 내용에 대한 삽입, 삭제, 갱신 연산에 제약이 따른다.




5. 뷰(View)의 생성과 삭제


5-1. 뷰 정의문

CREATE VIEW 뷰이름(속성이름1, 속성이름2, ...)
AS
SELECT문
;



  • SSELECT문을 부질의로 사용하여 SELECT문의 결과로서 뷰를 생성한다.
  • 부질의로서의 SELECT문에는 UNION이나 ORDER BY절을 사용할 수 없다.
  • 속성 이름을 생략하면 SELECT문의 속성 이름이 자동으로 사용된다.




5-2. 뷰 삭제문

DROP VIEW 뷰이름 ;


ex) DROP VIEW 뷰입니다 RESTRICT


  • RESTRICT : 뷰를 다른 곳에서 참조하고 있으면 삭제가 취소된다.
  • CASCADE : 뷰를 참조하는 다른 뷰나 제약 조건까지 모두 삭제된다.





2019년 2월 10일 일요일

[데이터베이스] 11. 데이터 사전이란? (시스템 카탈로그의 정의, 특징)






1. 시스템 카탈로그란?

  • 데이터베이스에 포함되는 모든 데이터 객체들에 대한 정의나 명세에 관한 정보를 유지, 관리하는 시스템 테이블이다.
  • 데이터베이스 관리 시스템의 기능 수행을 위해 필요한 데이터베이스 및 사용자에 관한 모든 정보를 포함하는 메타 데이터베이스이다.
  • 데이터 정의어의 결과로 구성되는 기본 테이블, 뷰, 인덱스, 패키지, 접근 권한 등의 데이터베이스 구조 및 통계 정보를 저장한다.
  • 카탈로그들이 생성되면 자료 사전(Data Dictionary)에 저장되기 때문에 좁은 의미로는 카탈로그를 자료 사전이라고도 한다.
  • 카탈로그에 저장된 정보를 메타 데이터(스키마)라고 한다.





2. 시스템 카탈로그의 특징

  • 카탈로그 자체도 시스템 테이블로 구성되어 있기 때문에 일반 이용자도 SQL을 이용하여 내용을 검색해 볼 수 있다.
  • INSERT, DELETE, UPDATE문으로 갱신하는 것은 허용하지 않는다.
  • DBMS가 스스로 생성하고 유지한다.
  • 카탈로그는 사용자가 SQL문을 실행시켜 기본 테이블, 뷰, 인덱스 등에 변화를 주면 시스템이 자동으로 갱신된다.





[데이터베이스] 10. 정규화란? (정규화의 정의, 목적, 과정)







1. 정규화(Normalization)란?


  • 데이터 중복성 및 종속성 배체의 원칙을 공식화한 이론이다.
  • 잘못 설계된 관계형 스키마를 더 작은 속성의 세트로 쪼개어 바람직한 스키마로 만들어 가는 과정이다.
  • 정규형에는 제1정규형, 제2정규형, 제3정규형, BCNF형, 제4정규형, 제5정규형이 있으며, 차수가 높아질수록 만족시켜야 할 제약 조건이 늘어난다.
  • 정규화는 데이터베이스의 논리적 설계 단계에서 수행한다.
  • 정규화는 논리적 처리 및 품질에 큰 영향을 미친다.




2. 비정규화 시 일어나는 문제, 이상(Anomaly)


2-1. 이상(Anomaly)의 개념

  • 정규화를 거치지 않은 데이터베이스 내에 데이터들이 불필요하게 중복되어 릴레이션 조작 시 발생하는 예기치 않은 현상이다.
  • 사용자의 의도와는 다르게 다른 데이터가 삽입, 삭제, 갱신되는 곤란한 현상이다.
  • 속성들 간에 존재하는 여러 종속 관계를 하나의 릴레이션에 표현하기 때문에 이상이 발생한다.



2-2. 이상(Anomaly)의 종류





3. 정규화(Normalization)의 목적

  • 데이터 구조의 안정성을 최대화하기 위함이다.
  • 어떠한 릴레이션이라도 데이터베이스 내에서 표현할 수 있게 만든다.
  • 효과적인 검색 알고리즘을 생성할 수 있다.
  • 중복을 배제하여 삽입, 삭제, 갱신 이상의 발생을 방지한다.
  • 데이터 삽입 시 릴레이션을 재구성할 필요성을 줄인다.



4. 정규화(Normalization) 과정




* 함수적 종속 관계
: 어떤 릴레이션 R에서 속성 X의 값 각각에 대해 속성 Y의 값이 하나만 연관되는 관계를 Y는 X에 함수 종속적이라고 하며, X(결정자) → Y(종속자)로 표현한다.
ex) '수강' 릴레이션이 학번, 이름, 과목명 속성으로 구성되어 있을 때, 학번이 결정되면 과목명에 상관없이 학번에는 항상 같은 이름이 대응된다. 학번에 따라 이름이 결정될 때 '학번 → 이름' 으로 표현한다.
* 이행적 종속 관계
: A → B 이고, B → C 일 때, A → C 를 만족하는 관계.





2019년 2월 9일 토요일

[데이터베이스] 9. 관계형 데이터 모델 - 형식어(관계 해석, 관계 대수와 연산)






* 관계 해석과 관계 대수는 관계 데이터 모델에서 지원되는 두 가지 정형적인 언어이다.
* 관계 대수나 관계 해석은 상용 DBMS에서 직접적으로 사용되지는 않지만, SQL을 비롯한 대부분의 상용 데이터베이스 언어의 원리를 제공한다.


1. 관계 해석(Relational Calculus)

  • 선언적, 비절차적 언어.
  • 원하는 데이터만 명시하고 질의를 어떻게 수행할 것인가는 명시하지 않는다.





2. 관계 대수(Relational Algebra)

  • 절차적 언어.
  • 어떻게 질의를 수행할 것인가를 명시한다.
  • 상용 RDBMS들에서 널리 사용되는 SQL의 이론적인 기초.
  • 관계 대수는 SQL을 구현하고 최적화하기 위해 DBMS의 내부 언어로도 사용된다.
  • 관계형 데이터 모델의 제안자 E.F.Codd 박사가 릴레이션의 처리에 필요한 일련의 연산자들을 모아서 관계 대수라고 명명했다.
  • 관계 대수 연산은 한 개의 릴레이션에서 특정 조건에 맞는 튜플들을 추출해내거나 여러 릴레이션을 합해 새로운 릴레이션을 만드는 질의문을 작성하는데 사용된다.
  • 관계 대수는 크게 일반집합연산과 순수관계연산으로 나눌 수 있다.




3. 일반집합연산


3-1. 합집합(Union)
  • R1또는 R2에 속하는 튜플의 집합.
ex) R1={1, 2} R2{1, 2, 3} 일 때 T={1, 2, 3}



3-2. 교집합(Intersection)
  • R1과 R2 모두에 속하는 튜플의 집합.
ex) R1={1, 2} R2{1, 2, 3} 일 때 T={1, 2}



3-3. 차집합(Set Difference)
  • R1과 R2 모두에 속하는 튜플을 제외한 집합.
ex) R1={1, 2} R2{1, 2, 3} 일 때 T={3}



3-4. 카티션 프로덕트(Cartesian Product) = 교차곱
  • 연산하려는 각 릴레이션의 카디날리티(튜플의 개수)의 곱과 연산하려는 각 릴레이션의 차수(속성의 개수)의 합으로 이루어진 릴레이션.
  • 연산되는 튜플들로 조합이 가능한 모든 경우 수로 이루어진 릴레이션.
  • 카티션 곱의 결과는 릴레이션의 크기가 매우 클 수 있다.
ex) R1의 카디날리티가 4이며 차수가 3, R2의 카디날리티가 3이며 차수가 1인 경우 R1 X R2 = 속성 4, 행 12개로 이루어진 릴레이션





4. 순수관계연산


4-1. Selection(Restriction)
  • 릴레이션에서 셀렉션 조건(Selection Condition, Predicate)을 만족하는 튜플들의 부분 집합을 구하여 새로운 릴레이션을 만드는 연산.
  • 하나의 입력 릴레이션에 적용되므로 단항 연산자.
  • 셀렉션의 결과 릴레이션의 차수는 입력 릴레이션의 차수와 같다.
  • 결과 릴레이션의 카디날리티는 항상 원래 릴레이션의 카디날리티보다 작거나 같다.
  • 릴레이션 레코드(행)에 해당하는 튜플을 구하는 것이므로 수평 연산이라고도 한다.
  • σ  = 시그마



4-2. Projection
  • 주어진 릴레이션에서 속성 리스트에 제시된 속성(Attribute)만을 추출하는 연산.
  • 릴레이션의 열에 해당하는 속성만을 추출하는 것이므로 수직 연산이라고도 한다.



4-3. Join
  • 공통 속성을 중심으로 2개의 릴레이션을 하나로 합쳐 새로운 릴레이션을 만드는 연산.
  • 관계 데이터베이스에서 두 개 이상의 릴레이션드르이 관계를 다루는데 중요한 연산자.
  • 조인의 방법으로는 세타 조인(Theta Join), 동등 조인(Equi Join), 자연 조인(Natural Join), 외부 조인(Outer Join), 세미 조인(Semi Join) 등이 있다.



4-4. Division
  • 릴레이션에서 조건에 맞는 속성을 선택하여 제거한 후 새로운 튜플을 구성하는 연산.






2019년 2월 8일 금요일

[데이터베이스] 8. 관계형 데이터 모델 - 용어 정리.(릴레이션, 키, 무결성, 용어정리)









1. 관계형 데이터 모델 기본 용어





1-1. 릴레이션(Relation)
  •  하나의 개체에 관한 데이터를 2차원 테이블의 구조로 저장한 것.(테이블이라 보면 됨.)
  •  파일 관리 시스템 관점에서 파일(File)에 해당된다.


1-2.튜플(Tuple)
  •  릴레이션을 구성하는 각각의 행.
  •  속성의 모임으로 구성된다.
  •  파일 관리 시스템 관점에서 레코드에 해당된다.
  •  튜플의 수 = 카디널리티 = 기수 = 대응수


1-3. 속성(Attribute)
  •  릴레이션을 구성하는 각각의 열.
  •  데이터베이스를 구성하는 가장 작은 논리적 단위.
  •  파일 구조 상의 데이터 항목 또는, 데이터 필드(Field)에 해당된다.
  •  개체의 특성을 기술한다.
  •  속성의 수 = 차수


1-4. 도메인(Domain)
  •  하나의 속성이 가질 수 있는 모든 값의 집합.
  •  속성 값을 입력 및 수정할 경우 적합성의 판단 기준이 된다.
  •  일반적으로 속성의 특성을 고려하여 데이터 타입을 정의한다.


1-5. 키(Key)
  •  데이터베이스에서 조건에 만족하는 튜플을 찾거나 순서대로 정렬할 때 다른 튜플들과 구별할 수 있는 유일한 기준이 되는 속성 또는 속성들의 집합이다.

* 유일성 : 한 릴레이션에서 모든 튜플은 서로 다른 키 값을 가지는 것.
* 최소성 : 꼭 필요한 최소한의 속성들로만 키를 구성하는 것.


1-6. 널(Null)
  •  속성 값을 모르거나 해당되는 값이 없음을 표현.


1-7. 차수(Degree)
  •  하나의 릴레이션에서 속성의 전체 개수.


1-8. 카디널리티(Cardinality)
  •  하나의 릴레이션에서 튜플의 전체 개수.



2. 무결성 제약조건(Integrity Constraint)

  • 무결성 제약조건이란 데이터의 무결성을 보장하고 일관된 상태로 유지하기 위한 규칙이다.
  • 개체 무결성 제약조건(entity integrity constraint) : 기본키를 구성하는 모든 속성은 널 값을 가질 수 없는 규칙.
  • 참조 무결성 제약조건(referential integrity constraint) : 외래키는 참조할 수 없는 값을 가질 수 없는 규칙.
* 무결성 : 데이터를 결함이 없는 상태로, 정확하고 유효하게 유지하는 것.






[데이터베이스] 7. 데이터 모델링, 데이터 모델이란? (데이터 모델의 정의, 종류, 구성요소)






1. 데이터 모델링이란?


  • 현실 세계에 존재하는 데이터를 컴퓨터 내 데이터베이스 구축을 위해 단순화 하여 옮기는 과정이다.
  • 사용자의 요구사항을 조사하고 이를 개체, 관계, 속성을 중심으로 체계적으로 표현하고 문서화 하는 기법을 데이터 모델링이라고 한다.
  • 데이터베이스 설계의 과정 중 핵심 단계.
     


2. 데이터 모델이란?

  • 데이터 모델링의 결과물(데이터의 구조, 스키마)을 표현하는 도구이다.

현실 세계 ---> 개념적 구조 ---> 논리적 구조



2-1. 개념적 데이터 모델 = 정보 모델
  • 사람의 머리로 이해할 수 있도록 현실 세계를 개념적인 형태로 모델링하여 데이터베이스의 개념적 구조로 표현하는 도구이다.
  • 속성들로 기술된 개체 타입과 이 개체 타입들 간의 관계를 이용하여 현실 세계를 표현하는 방법이다.
  • ex) 개체-관계 모델(E-R 모델)


2-2. 논리적 데이터 모델
  • 개념적 구조를 논리적 형태로 모델링하여 데이터베이스의 논리적 구조로 표현하는 도구이다.(데이터베이스의 논리적 구조 = 데이터베이스 스키마)
  • 필드로 기술된 데이터 타입과 이 데이터 타입들 간의 관계를 이용하여 현실 세계를 표현하는 방법이다.
  • 단순히 데이터 모델이라고 하면 논리적 데이터 모델을 의미한다.
  • ex) (데이터 간의 관계를 어떻게 포현하느냐에 따라) 관계형 데이터 모델, 계층형 데이터 모델, 네트워크형 데이터 모델



3. 개념적 데이터 모델


3-1. 개체-관계(E-R) 모델
  • 개념적 데이터 모델의 대표적인 예.
  • 피터 첸(Peter Chen)에 의해 1976년에 제안되었다.
  • 개체 타입과 개체 간의 관계를 이용해 현실 세계를 개념적으로 표현하는 방법.
  • 데이터를 개체, 관계, 속성으로 묘사한다.
  • 특정 DBMS를 고려한 것이 아니기 때문에 관계 표현에 제한이 없다. 
  • E-R 다이어그램으로 표현한다.

* E-R 다이어그램



4. 논리적 데이터 모델


4-1. 관계형 데이터 모델
  • 계층 모델과 망 모델의 복잡한 구조를 단순화시킨 모델로 가장 개념이 단순하고 일반적으로 많이 사용되는 논리적 데이터 모델이다.
  • IBM 연구소에 근무하던 E.F.Codd가 1970년에 관계 데이터 모델을 제안했다.
  • 관계형 데이터 모델을 최초로 구현한 RDBMS 시제품은 1970년 대에 IBM 연구소에서 개발된 System R 이다.
  • 1980년대 후반부터 여러가지 데이터 모델들이 새로 등장했지만 관계 DBMS는 여전히 가장 널리 사용된다.(Oracle, MS-SQL, Informix, Sybase 등)
  • 관계형 데이터 모델은 동일한 구조(릴레이션)의 관점에서 모든 데이터를 논리적으로 구성한다.
  • 선언적인 질의어를 통한 데이터 접근을 제공하며, 사용자는 원하는 데이터만 명시하고, 어떻기 이를 찾을 것인가는 명시하지 않아도 된다.
  • 높은 데이터의 독립성을 제공하는 것에 목적을 둔다.
  • 논리적으로 연관된 데이터를 연결하기 위해 링크나 포인터를 사용하지 않는다.
  • 표(Table)를 이용하여 데이터 상호 관계를 정의하는 DB구조이다.
  • 데이터 간의 관계를 기본기(Primary Key)와 이를 참조하는 외래기(Foreign Key)로 표현한다.
  • 1:1, 1:N, N:M 관계를 자유롭게 표현할 수 있다.
  • 장점 : 간결하고 보기 편리하며, 다른 데이터베이스로의 변환이 용이하다.
  • 단점 : 다소 성능이 떨어진다.


4-2. 계층형 데이터 모델
  • 데이터의 논리적 구조도가 트리 형태이며, 개체가 트리를 구성하는 노드 역할을 한다.
  • 개체 집합에 대한 속성 관계를 표시하기 위해 개체를 노드로 표현하고 개체 집합들 사이의 관계를 링크로 연결한다.
  • 개체 간에 상하 관계가 성립하며, 부모와 자식으로 표현한다.
  • 부모와 자식 개체는 1:N 대응 관계만 존재하며 두 개체 사이에는 하나의 관계만 정의할 수 있다.
  • 레코드 삭제 시 연쇄 삭제(Triggered Delete)가 된다.
  • 개체 타입들 간에는 사이클(Cycle)이 허용되지 않는다.
  • 계층형 모델에서는 개체를 세크먼트라고 부른다.
  • 대표적인 DBMS는 IMS이다.


4-3. 네트워크(망, 그래프)형 데이터 모델
  • CODASYL이 제안한 데이터 모델로, CODASYL DBTG 모델이라고도 한다.
  • 그래프를 이용해서 데이터 논리 구조를 표현한 데이터 모델이다.
  • 상위, 하위 레코드 사이에서 N:M 대응 관계를 만족하는 구조이다.
  • 상위의 레코드를 Owner, 하위의 레코드를 Member라 부르며 Owner-Member 관계라고도 한다.
  • 레코드 타입 간의 관계는 1:1, 1:N, N:M 이 될 수 있다.
  • 대표적인 DBMS는 DBTG, EDBS, TOTAL 등이 있다.



5. 데이터 모델에 표시할 사항

  • 구조(Structure) : 논리적으로 표현된 개체 타입들 간의 관계로 데이터 구조 및 정적 성질을 표현한다.
  • 연산(Operation) : 데이터베이스에 저장된 실제 데이터를 처리하는 방법을 표시하는 것으로 데이터베이스를 조작하는 기본 도구이다.
  • 제약조건(Constraint) : 데이터베이스에 저장될 수 있는 실제 데이터의 논리적인 제약조건을 표시한다.



6. 데이터 모델의 구성요소


6-1. 개체(Entity)
  • 데이터베이스에 표현하려는 것으로, 사람이 생각하는 개념이나 정보 단위 같은 현실 세계의 대상체이다.
  • 유형, 무형의 정보로, 서로 연관된 몇 개의 속성으로 구성된다.
  • 파일 시스템의 레코드에 대응하는 것으로, 어떤 정보를 제공하는 역할을 수행한다.
  • 실제 세계에 독립적으로 존재하거나 그 자체로서도 구별이 가능하다.


6-2. 속성(Attribute)
  • 데이터의 가장 작은 논리적 단위로서 파일 구조의 데이터 항목 또는 데이터 필드에 해당된다.
  • 개체를 구성하는 항목이다.


6-3. 관계(Relationship)
  • 개체 간의 관계 또는 속성 간의 관계이다.


* 데이터 모델의 구성요소를 E-R 다이어그램으로 표현하면...
- 학생이라는 개체는 학번, 학생명과 같은 속성을 가진다. 
- 개체 타입(Entity Type) : 개체를 고유의 이름과 속성들로 정의한 것으로 파일 구조의 레코드 타입에 대응된다.
  ex) 학생(학번, 학생명) 
- 개체 인스턴스(Entity Instance) : 개체를 구성하고 있는 속성이 실제 값을 가짐으로써 실체화된 개체로 개체 어커런스라고도 한다. 개체 인스턴스는 파일 구조의 레코드 인스턴스에 대응된다.
  ex) [110234, 김당근]
- 개체 집합(Entity Set) : 특정 개체 타입에 대한 개체 인스턴스들을 모아놓은 것이다.
  ex) [110234, 김당근], [110553, 이감자], [131147, 박연근] ...





2019년 2월 4일 월요일

[데이터베이스] 6. 데이터베이스 설계란? (DB설계의 정의, 설계순서, 고려사항)






1. 데이터베이스 설계란?

  • 한 조직체의 운영과 목적을 지원하기 위해 데이터베이스를 생성하는 과정.
  • 모든 주요 응용과 사용자들이 요구하는 데이터, 데이터 간의 관계를 표현하는 것이 목적.
  • 데이터베이스 개발은 일반적인 프로젝트 라이프 사이클 과정을 따른다.
  • 훌륭한 데이터베이스 설계는 시간의 흐름에 따른 데이터의 모든 측면을 나타내며, 데이터 항목의 중복을 최소화하고 데이터베이스에 대한 효율적인 접근을 제공한다. 또한 데이터베이스의 무결성을 제공하며, 이해하기 쉬워야 한다.



2. 데이터베이스 설계 순서


* 트랜잭션(Transaction)이란?
- 데이터베이스의 상태를 변화시키는 작업의 단위로, 어떠한 기능을 수행하기 위해 하나 또는 한꺼번에 수행되어야 할 일련의 연산들을 의미한다.
ex) ATM기로 어떤 거래를 하려는 경우, 카드를 넣고, 거래를 선택하고, 비밀번호를 인증하고, 거래를 완료하는 모든 과정.



3. 개념적 설계(정보 모델링, 개념화)

  • 정보의 구조를 얻기 위해 현실 세계의 무한성과 계속성을 이해하고, 다른 사람과 통신하기 위하여 현실 세계에 대한 인식을 추상적 개념으로 표혀하는 과정이다.
  • 스키마 모델링과 트랜잭션 모델링을 병행하여 수행하는 단계이다.
  • 요구분석 단계에서 나온 결과(요구 조건 명세)를 DBMS에 독립적인 개념 스키마를 설계하여 E-R 다이어그램으로 작성한다.



4. 논리적 설계(데이터 모델링)

  • 현실 세계에서 발생하는 자료를 컴퓨터가 처리할 수 있는 물리적 저장장치에 저장할 수 있도록 변환하기 위해 특적 DBMS가 지원하는 논리적 자료 구조로 변환시키는 과정이다.
  • 개념 세계의 데이터를 필드로 기술된 데이터 타입과 이 데이터 타입들 간의 관계로 표현되는 논리적 구조의 데이터로 모델화한다.
  • 개념적 설계 단계에서의 개념 스키마를 평가 및 정제하고 특정 DBMS에 종속적인 논리적 스키마를 설계하는 단계이다.
  • 트랜잭션의 인터페이스를 설계한다.
  • 관계형 데이터베이스라면, 테이블을 설계하는 단계.



5. 물리적 설계

  • 논리적 설계 단계에서 논리적 구조로 표현된 데이터를 디스크 등의 물리적 저장장치에 저장할 수 있는 물리적 구조의 데이터로 변환하는 과정이다.
  • 데이터베이스 파일의 저장 구조, 레코드의 형식, 접근 경로와 같은 정보를 사용하여 데이터가 컴퓨터에 저장되는 방법을 묘사한다.
  • 트랜잭션을 작성하는 단계이다.
  • 물리적 설계 단계에 반드시 포함되어야 할 것은, 저장 레코드의 양식 설계, 레코드 집중의 분석 및 설계, 접근 경로 등이다.

* 물리적 설계 시 고려사항
- 인덱스의 구조.
- 레코드의 크기 및 개수.
- 파일에 대한 트랜잭션의 갱신과 참조 성향.
- 성능 향을 위한 개념 스키마의 변경 여부 검토.
- 빈번한 질의와 트랜잭션들의 수행속도를 높이기 위한 고려.
- 시스템 운용 시 파일 크기 변화의 가능성.
* 물리적 설계 옵션 선택 시 고려사항
- 반응 시간(Response Time) : 트랜잭션 수행을 요구한 시점부터 처리 결과를 얻을 때 까지의 경과 시간.
- 공간 활용도(Space Utilization) : 데이터베이스 파일과 액세스 경로 구조에 의해 사용되는 저장공간의 양.
- 트랜잭션 처리량(Transaction Throughput) : 단위 시간 동안 데이터베이스 시스템에 의해 처리될 수 있는 트랜잭션의 평균 개수.



6. 데이터베이스 설계 시 고려사항

  • 데이터의 무결성 유지 : 삽입, 삭제, 갱신 등의 연산 후에도 데이터베이스에 저장된 데이터가 정해진 제약조건을 항상 만족해야 한다.
  • 데이터의 일관성 유지 : 데이터베이스에 저장된 데이터들의 사이, 특정 질의에 대한 응답이 처음부터 끝까지 변함없이 일정해야 한다.
  • 데이터의 회복성 유지 : 시스템에 장애가 발생했을 때 장애 발상 직전의 상태로 복구할 수 있어야 한다.
  • 데이터의 보안성 유지 : 불법적인 데이터의 노출 또는 변경이나 손실로부터 보호할 수 있어야 한다.
  • 데이터의 효율성 유지 : 응답시간의 단축, 시스템의 생산성, 저장 공간의 최적화 등이 가능해야 한다.
  • 데이터베이스의 확장성 유지 : 데이터베이스 운영에 영향을 주지 않으면서 지속적으로 데이터를 추가할 수 있어야 한다.





2019년 1월 21일 월요일

[데이터베이스] 5. 데이터베이스 사용자의 종류






1. DBA(DataBase Administrator)

  • 데이터베이스 시스템의 모든 관리와 운영에 대한 책임을 지고 있는 사람이나 그룹을 의미한다.
  • 데이터베이스 구성 요소를 결정한다.
  • 개념 스키마 및 내부 스키마를 정의한다.
  • 데이터베이스의 저장 구조 및 접근 방법을 정의한다.
  • 보안 및 데이터베이스의 접근 권한 부여 정책을 수립한다.
  • 장애에 대비한, 백업과 회복에 대한 전략을 수립한다.
  • 무결성을 위한 제약 조건을 지정한다.
  • 데이터 사전의 구성과 유지, 관리의 역할을 한다.
  • 사용자의 요구와 불평을 청취 및 해결한다.
  • 변화 요구에 대한 적응과 성능 향상에 대해 감시한다.
  • 시스템을 감시하고 성능을 분석한다.
  • 데이터 사용 추세, 이용 형태 및 각종 통계 등을 종합, 분석한다.



2. 응용 프로그래머

  • C, COBOL, PASCAL 등의 호스트 언어와 DBMS가 지원하는 데이터 조작어에 능숙한 컴퓨터 전문가이다.
  • 데이터 조작어를 삽입해 일반 사용자가 응용 프로그램을 사용할 수 있도록, 인터페이스를 제공할 목적으로 데이터베이스에 접근하는 사람들이다.



3. 일반 사용자

  • 보통, 터미널을 이용하여 데이터베이스에 있는 자원을 활용할 목적으로 질의어나 응용 프로그램을 사용하여 데이터베이스에 접근하는 사람들이다.





2019년 1월 17일 목요일

[데이터베이스] 4. 데이터베이스 언어 (SQL, QBE, QUEL)






1. 데이터베이스 언어(DataBase Language)의 정의

  • 데이터베이스 언어는 DBMS를 통해 데이터베이스를 구축하고 이용하기 위한, 사용자와 데이터베이스 간의 소통 수단이다.
  • 데이터베이스 언어는 DBMS를 통해 사용되며 상용 DBMS 제품들이 지원하는 대표적인 데이터베이스 언어는 SQL, QBE, QUEL 등이 있다.



2. SQL(Structured Query Language)


  • SQL은 1974년 IBM 연구소에서 System R 이라는 관계 DBMS 시제품을 연구할 때 관계 대수와 관계 해석을 기반으로 집단 함수, 그룹화, 갱신 연산 등을 추가하여 개발된 언어이다.
  • 1986년 ANSI(American National Standards Institute, 미국 국립 표준 협회)에서 SQL을 표준으로 채택했다.
  • 상용 RDBMS마다 지원하는 SQL 기능에는 다소 차이가 있다.
  • 사용자는 SQL을 사용하여 관계 데이터베이스에 릴레이션을 정의, 정보 검색, 갱신하고 무결성 제약 조건들을 명시할 수 있다.
  • 비절차적, 선언적 언어이므로 사용자는 원하는 것만 명시하고 원하는 것을 처리하는 방법은 명시하지 않는다.
  • 자연어에 가까운 구문을 사용하여 질의를 표현할 수 있다.




3. SQL의 분류

  • SQL은 그 역할에 따라 정의어(DDL), 조작어(DML), 제어어(DCL)로 나눌 수 있다.


3-1. DDL (Data Definition Language) = 데이터 정의 언어

  • DB 구조, 데이터 형식, 접근 방식 등 DB를 구축하거나 수정할 목적으로 사용하는 언어이다.
  • 번역한 결과가 데이터 사전(Data Dictionary)이라는 특별한 파일에 여러 개의 테이블로서 저장된다.
  • 외부 스키마 명세의 정의 기능을 가진다.
  • 데이터베이스의 논리적, 물리적 데이터 구조의 정의 및 수정의 기능을 가진다.
  • 스키마에 사용되는 제약조건에 대한 명세를 정의하는 기능을 가진다.
  • 데이터의 물리적 순서를 규정하는 기능을 가진다.
  • CREATE, ALTER, DROP, RENAME, TRUNCATE 와 같은 명령어가 있다.




3-2. DML (Data Manipulation Language) = 데이터 조작 언어 = 서브 언어

  • 사용자로 하여금 데이터를 처리할 수 있게 하는 도구로서 사용자(응용 프로그램)와 DBMS간의 인터페이스를 제공한다.
  • 응용 프로그램을 통해 사용자가 DB의 데이터를 실질적으로 조작할 수 있도록 하기 위해 C, FORTRAN, COBOL 등의 호스트 언어에 DB 기능을 추가시켜 만든 언어이다.
  • 대표적인 데이터 조작어에는 질의어(SQL)가 있으며, 질의어는 터미널에서 주로 이용하는 비절차적(NonProcedural) 데이터 언이이다.
  • SELECT, INSERT, UPDATE, DELETE 와 같은 명령어가 있다.


① SELECT문

- 테이블을 구성하는 튜플들 중 전체 또는 조건을 만족하는 튜플을 검색하여 주기억장치 상에 임시 테이블로 구성시키는 명령문이다.

SELECT Predicate 속성명1, 속성명2, ...
FROM 테이블명1, 테이블명2, ...
WHERE 조건
GROUP BY 속성명1, 속성명2, ...
HAVING 조건
ORDER BY 속성명
;




- SELECT절 (Predicate : 불러올 튜플 수를 제한할 명령어 기술)
· ALL(*) : 모든 튜플을 검색할 때 지정하는 것으로 생략 가능. ·DISTINCT : 중복된 튜플이 있으면 첫 번째 하나만 검색.
· DISTINCTROW : 중복된 튜플을 검색하는데, 선택된 속성의 값이 아닌 튜플 전체를 대상으로 함.
· 속성명 : 두 개 이상의 테이블을 대상으로 검색할 경우에는 '테이블명.속성명' 으로 표현한다.


- FROM절
· 질의에 의해 검색될 데이터들을 포함하는 테이블명을 기술.


- WHERE절
· 검색할 조건들을 기술.


- GROUP BY절
· 특성 속성을 기준으로 그룹화할 속성을 지정.
· 일반적으로 GROUP BY절은 그룹 함수와 함께 사용된다.
· COUNT(속성명) : 그룹별 튜플 수를 구하는 함수.
· MAX(속성명) : 그룹별 최대값을 구하는 함수.
· MIN(속성명) : 그룹별 최소값을 구하는 함수.
· SUM(속성명) : 그룹별 합계를 구하는 함수.
· AVG(속성명) : 그룹별 평균을 구하는 함수.


- HAVING절
· GROUP BY와 함께 사용.
· 그룹에 대한 조건을 지정.


- ORDER BY절
· 특정 속성을 기준으로 정렬할 때 사용.
· 정렬의 기준이 되는 속성명을 기술.
· ASC : 오름차순 정렬.
· DESC : 내림차순 정렬.
· ASC, DESC 를 생략 시 오름차순으로 자동 지정.




② INSERT 문법
- 기본 테이블에 새로운 튜플을 삽입할 때 사용한다.
- 대응하는 속성과 데이터는 개수와 데이터 형식이 일치해야 한다.
- 기본 테이블의 모든 속성을 사용할 때는 속성명을 생략할 수 있다.
- SELECT 문을 사용하여 다른 테이블의 검색 결과를 삽입할 수 있다.

INSERT
INTO 테이블명(속성명1, 속성명2, ...)
VALUES(데이터1, 데이터2, ...);





③ DELETE 문법
- 기본 테이블에 있는 튜플들 중 특정 튜플을 삭제할 때 사용한다.
- 모든 레코드를 삭제할 때는 WHERE 절을 생략한다.
- 모든 레코드를 삭제하더라도 테이블 구조는 남아있기 때문에 디스크에서 테이블을 완전히 제거하는 DROP과는 다르다.

DELETE
FROM 테이블명
WHERE 조건
;




④ UPDATE 문법
- 기본 테이블에 있는 튜플들 중 특정 튜플의 내용을 변경할 때 사용한다.

UPDATE 테이블명
SET 속성명1=데이터1, 속성명2=데이터2, ...
WHERE 조건
;






3-3. DCL (Data Control Language) = 데이터 제어 언어
  • 무결성, 보안 및 권한 제어, 회복을 등을 하기 위한 언어이다.
  • 데이터를 보호, 관리하는 목적으로 사용된다.
  • 불법적인 사용자로부터 데이터를 보호하기 위한 데이터 보안의 기능을 가진다.
  • 데이터 정확성을 위한 무결성(Integrity) 유지의 기능을 가진다.
  • 시스템 장애에 대비한 데이터 회복과 병행 수행 제어의 기능을 가진다.
  • GRANT, REVOKE 와 같은 명령어가 있다.



4. QBE(Query By Example)

  • 1970년대 초반 IBM의 T.J.Watson 연구소에서 개발된 관계형 데이터베이스 질의어로 편리한 사용자 인터페이스를 지원한다.
  • 비록 국제 표준은 되지 못했지만 사용법이 직관적이고 매우 쉬워서 현재 많은 SQL 시스템에서 SQL외에 추가적인 질의어로 지원하고 있다.
  • 도메인 변수를 사용하는 도메인 관계 해석에 기초하고 있는 데이터베이스 언어이다.



5. QUEL(QUEry Language)

  • SQL, QBE 외에도 상업적으로 인정받았던 데이터베이스 언어이다.
  • 현재는 상업적으로 거의 사용되지 않는다.
  • 미국 버클리 대학에서 개발한 Ingress 데이터 시스템의 인어로 개념적으로 튜플 관계 해석에 기초를 두고 있다.





2019년 1월 15일 화요일

알라딘 중고매장을 다녀왔다.(대구 동성로점)








삼국지를 사기 위해 알라딘 중고매장을 방문했다.
지하 상가에 있는데, 지상 출입구는 작은 문짝 하나.
비가 와서 꿉꿉했다.🌂



앉아서 읽을 수 있는 자리가 매장 크기에 비해 많다.
아무래도 교보문고보다 들리는 사람도 적고
상품들이 여유있게 진열되어 있다.
앞으로 시간 때우거나 책 구경 갈 때 자주 들릴 듯. 










삼국지가 있는 역사소설 코너.


미리 인터넷으로 매장에 책이 있는지 확인했는데,
몇 권은 1권만 있고, 
몇 권은 3권이 있고,
어떤 책은 상태가 좋지않고...

혹시 다른 사람이 먼저 사버려서
한두권 빠트리고 구매하게 될까봐
미리 책의 위치랑 번호, 가격도 적어갔다.

다행히 10권 전부 여러권씩 있어서
하나하나 상태를 보고 
낙서가 없는 것들로 골라 담았다.









😆흐뭇😆

상태마다 가격이 조금씩 다르다.
전부 다해서 5만원이 안나왔다.
새 책이랑 전혀 다를게 없음!
집에 와서 물티슈로 책 겉만 닦아줬다.









DVD 코너도 있고...










어릴 때 엄청 보던 인터넷 소설ㅋㅋ
집에 엄청 많았었는데 다 어디로 갔는지...
인터넷 소설이 한창 사그라들 때
웹툰과 함께 웹 소설이란 이름으로 다시 나타날 줄 누가 알았으랴.









북 커버!
예쁘다.
히어로 별로 있다면 다 사고 싶다.
돈 벌어서 나중에...






 하늘과 바람과 별과 시 초판본 디자인의 노트.
너무 내 취향...
저것도 다음에 꼭 사리라.









마무리는 친구와 애슐리.