상세 컨텐츠

본문 제목

[포스코x코딩온] 스마트 팩토리 SW 개발자 과정 4주차 1~2일차 회고 | 데이터베이스

본문

 지난 3주차 일요일 프로젝트 발표를 끝으로 C++ 학습은 일단락되었다. 그리고 4주차부터 새로 배우기 시작하는 데이터베이스! 1~2일차 동안 배운 데이터베이스 내용에 대해 정리해보고 복습도 해보는 시간을 가지겠다. 오늘의 목차는 아래와 같다.

 

  • 데이터베이스 정의
  • 데이터베이스 특징
  • 파일 시스템 vs 데이터베이스
  • 데이터베이스 사용자
  • 데이터 모델링 (ER 모델)
  • ER 다이어그램으로 표현하기
  • ER 모델 제약조건 (카디날리티 제약조건, 참여 제약조건, 구조적 제약조건)

 그럼 바로 하나씩 정리해보도록 하겠다.

 

데이터 베이스란?

 데이터를 저장하는 구조이자 자료의 모음이다. 물론 한 줄로 줄이자면 이렇게 짧다는 것이고 풀어서 설명하자면 다양한 카테고리의 데이터를 저장하기 위한 구조를 갖고 있으며 여러 사람에 의해 공유되어 사용될 목적으로 통합하여 관리되는 자료의 집합이다. 추가적인 개념으로는 통합된 데이터, 저장된 데이터, 운영 데이터, 공용 데이터가 있다. 먼저, 통합된 데이터는 각자 사용하는 데이터의 중복을 최소화하여 중복으로 인한 데이터 불일치 현상을 제거하기 위해 데이터를 통합한다는 개념이다. 저장된 데이터는 디스크, 테이프 같은 컴퓨터 저장장치에 저장된 데이터를 의미하는 개념이다. 문서로 보관된 데이터는 저장된 데이터가 아니므로 주의할것!! 다음으로 운영 데이터는 조직의 목적을 위해 사용되는 데이터를 의미한다. 업무를 위해 검색하고자 저장된 데이터의 경우가 이에 해당한다. 마지막 공용 데이터는 한 개인을 위한 데이터가 아니라 여러 사람이 공용으로 사용하기 위한 데이터를 지칭하는 개념이다. 여기의 개념들을 아울러보면 데이터베이스의 구축 목적은 각 조직에서 사용하는 데이터를 통합하고 공유하기 위함이란 것을 알 수 있다.

 

데이터베이스의 특징은?

 자, 그렇다면 데이터베이스가 대체 어떤 특징이 있길래 사용하는 것인지 알아보자. 대표적인 4가지 특징이 있는데 실시간 접근성, 계속적인 변화, 동시공유, 내용에 따른 참조가 이에 해당한다. 실시간 접근성은 사용자가 데이터를 요청하면 수 초 내에 결과를 서비스한다는 뜻이다. 계속적인 변화는 데이터베이스에 저장된 내용은 어느 한 순간의 상태지만 데이터 값은 삽입, 삭제, 수정의 과정을 거쳐 계속해서 변화한다는 뜻이다. 동시 공유는 서로 다른 업무 혹은, 다른 사용자에게 동시에 공유된다는 것이다. 내용에 따른 참조는 데이터베이스에 저장된 데이터는 물리적인 데이터의 위치가 아니라 데이터 값에 따라 참조된다는 것을 의미한다. 끝으로 데이터베이스 언어는 SQL(Structured Query Language)을 사용한다. SQL은 관계형 데이터베이스에 정보를 저장하고 처리하기 위한 프로그래밍 언어이다.

 

그렇다면 파일 시스템과의 차이는?

 여기까지 보면 C++에서도 사용했던 파일 시스템과의 차이가 궁금해지는 분들이 계실것이다. 그럴 수 밖에 없는 이유가 있다. 애초에 파일 시스템이 데이터를 기록하고 여러 사람이 공유하여 사용 가능한 기능을 제공했다. 그리고 여기서 발생하는 문제를 개선하고자 나온 것이 데이터베이스 시스템이기 때문이다. 차이점에 대해 알아보면 파일 시스템은 공유가 가능하지만 제한이 존재하고 구현과 유지보수에 시간이 오래 걸린다. 그리고 결정적으로 데이터 중복이 발생할 수 있다. 그렇다면 데이터베이스는? 데이터 일치성이 증가하고 데이터 공유가 원활하며 의도치 않은 데이터 중복이 없고 데이터 보안이 향상되었다. 아무래도 파일 시스템의 단점을 개선하고자 나온 개념이기 때문에 확실한 차이점이 있을 수 밖에 없는듯하다.

 

데이터베이스 사용자

 이번에는 데이터베이스 사용자의 분류와 각각이 데이터베이스를 이용하기 위해 알아야하는 수준에 대해 정리하겠다. 사용자의 부류는 일반적으로 4부류가 있다. 1. 일반 사용자, 2. 응용 프로그래머, 3. SQL 사용자, 4. 데이터베이스 관리자 이렇게 4 부류가 있으며 각각이 데이터베이스를 다루기 위해 필요한 지식의 수준이 다른게 아주 흥미로운 점이다. 이것을 표를 사용해서 보면 아래와 같다. (OO표시는 강한 긍정을 의미함)

  SQL 언어 프로그래밍 능력 DBMS 지식 데이터 구성
일반 사용자 X X X X
응용 프로그래머 OO X O O
SQL 사용자 OO OO O O
데이터베이스 관리자 OO O OO OO

 이렇게나 다른 수준의 능력을 요함을 알 수 있다. 참 재밌는 부분이 아닐 수 없다.

 

데이터 모델링(ER 모델)이란?

 데이터 모델링은 복잡한 현실 세계의 데이터를 단순화하여 데이터베이스로 표현하기 위한 작업이다. 아무래도 복잡한 현실 세계의 정성적 데이터들을 정량적 데이터로 만들어야하기 때문에 1. 요구사항 수집 및 분석, 2. 개념적 데이터 모델 설계, 3. 논리적 데이터 모델 설계, 4. 물리적 데이터 모델 설계의 과정을 거쳐야한다. 이 중에서도 오늘 다룰 것은 개념적 데이터 모델링 모델 중 하나인 ER 모델이다. 요구사항으로부터 얻어낸 정보를 개체(Entity), 속성(Attribute), 관계(Relation)로 기술하는 모델이다. 구성요소에 대해 알아보면 개체는 단독으로 존재하는 객체를 의미한다. 속성은 개체의 특징을 나타내는 것이다. 관계는 개체간의 관계를 의미한다. 개체의 명명에는 규칙이 있다. 단순명사를 사용해야하고 구체적이며 간결해야한다. 또 해당 ER모델 내에서는 유일한 이름이어야한다. 관계 타입은 개체 타입간의 관계를 의미하는 것이므로 동사를 의미한다. 속성의 규칙은 단순 명사를 사용해야하고 하나의 개체 내에 같은 이름을 가진 속성을 사용할 수 없다는 것이 있다. 또 키속성이라는 속성이 있는데 이것은 다른 객체들과 중복되지 않는 고유한 값을 갖는 속성이다. 속성의 유형은 5가지가 있다. 먼저, 단순 속성은 더이상 나눌 수 없는 속성이다. 복합 속성은 독립적인 의미를 갖도록 나눌 수 있는 속성이다. 단일 값 속성은 하나의 값만 갖는 속성이다. 다중 값 속성은 여러 값을 갖는 속성이다. 마지막 유도된 속성은 다른 속성으로부터 유도된 값을 갖는 속성이다.

 

ER 다이어그램으로 표현하는 방법은?

 ER 다이어그램에서 기본적으로 개체는 직사각형으로, 속성은 타원으로, 관계는 마름모로 그려준다. 키속성을 표현할 때는 밑줄을 그어서 표현해준다. 다중값 속성을 표현할 때는 타원을 2개 중복해서 표현해준다. 유도된 속성을 표현할 때는 점선으로 된 테두리를 갖는 타원으로 표현한다.

 예시는  '아카데미'라는 개체가 지점별 고유 식별자, 이름, 연락처, 주소(도시, 우편번호)를 속성으로 가지고 속성으로 고유 식별자, 이름, 전화번호, 전공을 갖는 개체 '티처' 와 고용 관계에 있을 때의 ER 다이어그램이다. '아카데미의' 고유 속성인 '지점별 고유 식별자'와 '티처'의 고유 속성인 '고유 식별자'에는 밑줄이 그어져 있는 것을 볼 수 있다. 또한 복수의 값을 갖는 전공은 타원을 2개 중복해서 표현해준 것을 볼 수 있다. 그리고 '주소'의 경우에는 복합 속성이란 것을 알 수 있고 '주소'의 하위 속성인 '도시'와 '우편번호'는 단순 속성인 것을 알 수 있다. 여기까지 봤음에도 예시에서 이해가 안되는 부분이 있을 것이다. 해당 부분은 아래에서 설명하겠다. 

ER 모델의 제약 조건은?

 ER모델의 제약 조건은 두 가지가 있다. 

  1.  카디널리티 제약조건
  2. 참여 제약조건

 먼저, 카디널리티 제약 조건이란, 하나의 엔티티와 관계를 맺을 수 있는 엔티티의 수를 표현하는 조건이다. 하나의 엔티티가 맺을 수 있는 관계의 수는 1:1, 1:N, N:M 가 있다. 1:1 관계는 하나의 개체가 하나의 개체에 일대일로 대응되는 관계를 의미한다. 1:N 관계는 하나의 개체가 여러개의 개체와 관계를 맺는 형태이다. 이때 역은 성립하지 않는다. 다른 표현으로는 일대다 관계, 혹은 다대일 관계라고도 한다. N:M 관계는 다대다 관계라고도 한다. 한개체가 여러개의 개체를 가질 수도 있고 그 역도 성립하는 관계이다. 이렇게 3 종류의 관계가 있으며 이를 표현해주기 위해 각각 해당하는 부분의 실선 위에 숫자 혹은 문자를 표기해준다. 예시에서는 일대다 관계를 나타내고 있다.

1:N 관계일 때 카디널리티 제약 조건의 예시

 다음, 참여제약 조건은 관계를 맺는 두 개체 중 한 개체가 다른 하나의 개체에 의존하는 지를 표현하는 것이다. 다르게 표현하자면 한 객체가 반드시 다른 객체에 포함되어야하는가?에 대해 표현하는 것이다. 두가지 종류의 참여가 있다. 첫째, 부분 참여가 있다. 부분 참여는 선택적으로 참여하는 형태이다. 즉, 관계를 맺을수도 맺지 않을 수도 있는 선택권이 있는 참여 형태이다. 부분 참여는 개체와 관계간에 실선 한개로 표현해준다. 둘째, 전체 참여는 하나 또는 그 이상이 참여하는 형태이다. 이 형태를 가지는 경우 한 개체는 반드시 관계를 맺는다는 뜻이다. 전체 참여는 개체와 관계간에 실선 두 개를 사용해 표현해준다. 위의 예시에서는 Academy에는 Teacher가 없어도 되지만 Teacher는 Academy가 필요하다. 이때, Academy는 부분참여가 되는것이고 Teacher는 전체참여가 된다. 

 

 여기까지가 4주차 첫 회고록이다. 4주차부터 새로운 내용에대한 학습이 시작됐는데 긍정적인 기분이다. C++보다는 더 이해하기 쉬운 부분이 있는 것 같다. 다음번에는 또 다른 내용으로 돌아오겠다. 그럼 안녕히.

관련글 더보기