정보처리기사 필기를 메타코드 강의와 함께 공부하려고 합니다.
오늘 공부할 강의는 3강: 절차형 SQL 작성과 4강 : 프로그래밍 언어 활용에 해당하는 부분입니다.
(1) 3강 : 데이터베이스 구축 - 논리 데이터베이스 설계 (데이터 모델과 설계순서)
데이터 모델은 데이터 베이스 시스템에서 데이터를 체계적으로 관리하고 조작할 수 있도록 하는 개념적인 프레임워크를 의미합니다.
데이터 모델은 크게 3가지로 분류할 수 있는데, 개념적, 논리적, 물리적 모델이 있습니다.
데이터 베이스를 설계할 때는 아래와 같이 5가지의 단계를 통해 진행이 됩니다.
요구사항 분석을 통해 필요한 데이터와 기능을 파악하고, 개념적 설계를 통해서 전체적인 구조를 잡아갑니다.
논리적 설계에서 이것을 더 구체화하는 과정을 거치고, 물리적 설계 단계에서 실제 데이터베이스 시스템에 맞게 설계를 조정하여 최종적으로 이를 구현합니다.
모든 데이터 모델은 3가지의 중요한 요소가 포함되어있는데, 다음과 같습니다.
1. 데이터 구조(Structure) : 데이터가 어떻게 구성되있는지를 나타내는 데이터 구조
2. 연산(Operation) : 데이터를 어떻게 처리할 수 있을지를 정의하는 연산
3. 제약조건(Constraint) : 데이터가 가져야 할 규칙이나 조건을 명시하는 제약조건
개념적 설계에서는 데이터베이스가 처리할 주요 개체와 이들 간의 관계를 정의해야 합니다.
산출물로는 개체-관계 다이어그램(E-R diagram)이 있습니다. *E-R 은 Entity-Relationship을 의미합니다.
ER 다이어그램의 구성요소들은 위와 같이 개체, 속성, 다중값 속성, 관계 등이 있습니다.
개체는 DB에 저장되는 객체이고, 속성은 개체의 특성이며, 다중값 속성은 한 속성이 여러값을 가질 수 있는 경우를 의미합니다.
관계는 학생이 강의를 수강하는 것과 같이, 두 개 이상의 개체 간의 연관성을 표시합니다.
관계와 속성을 연결할 때는 선으로 이어줍니다.
위의 관계는 n대 m 또는 다대다 관계에 해당하고, 시험에서는 특정요소가 시각적으로 어떻게 표기되는지 주로 출제 된다고 합니다.
개념적 설계의 다음 단계인 논리적 설계는 개념적 설계를 바탕으로 데이터베이스를 논리적 구조로 변환하는 과정을 의미합니다.
물리적 설계는 논리적 설계를 기반으로 데이터 저장방식을 효율적인 방식으로 최적화하는데, 실제 데이터베이스의 성능을 고려해야 하기 때문에 트랜잭션 처리량, 응답시간, 필요한 디스크 용량을 모두 고려해야 합니다.
가장 중요한부분은 저장 레코드의 형식, 순서, 데이터값의 분포, 접근 경로, 접근 빈도와 같은 정보를 사용하여 설계를 진행하고 최적화 한다는 것입니다.
(2) 3강 : 데이터베이스 구축 - 논리 데이터베이스 설계 (이상현상과 정규화)
그런데, 데이터베이스를 설계할 때 위와 같은 문제가 발생할 수도 있습니다. 이것을 이상현상이라고 합니다.
이상현상은 크게 3가지 유형으로 나뉘는데 위와 같이 삽입이상, 삭제이상, 갱신이상이 있습니다.
삽입이상의 예를 들면, 학생과 수강과목에 대한 정보가 한 테이블안에 들어있을 때, 새로운 과목을 추가하기 위해서는 반드시 학생정보를 함께 입력을 해야 하는 상황이 발생합니다.
이는 불필요한 데이터 중복을 야기합니다.
삭제이상은 그 반대로, 학생에 대한 정보만 지우고 싶을 때에 학생의 수강 과목 정보도 같이 사라지는 문제를 의미합니다.
마지막으로, 갱신이상의 예시를 들면, 학과 정보가 학생과 관련된 여러 테이블에 중복되어 있을 때에 한 곳의 학과명만 변경한다면, 나머지 테이블의 학과명은 그대로이기 때문에 문제가 발생합니다.
이는 데이터의 일관성, 무결성을 해치게 되어 DB의 관리가 복잡해집니다.
이를 해결하기 위해 데이터를 구조화하여 중복을 최소화하고 무결성을 보장하는 정규화 과정이 필요합니다.
정규화는 단계별로 진행이 되는데, 각 단계를 정규형이라고 부릅니다.
정규화의 첫번째 단계는 1정규형으로, 원자성을 띱니다. 어떤 relation에 속한 모든 도메인이 원자값으로만 이루어져 있어야 하는데, 다시 말하면 각 컬럼에 단일값만 포함되어 있는 경우를 뜻합니다.
제 2정규형은 위와 같이, 제 1정규형을 만족함과 동시에 부분함수 종속성을 제거한 형태입니다.
즉, 완전 함수적 종속을 만족합니다. 예시에서는, 기본키가 학생아이디와 과목아이디를 합친 것입니다.
이 키 2개를 통해 성적, 교수명을 결정합니다. 그런데 교수명은 사실 과목 아이디만 있어도 결정이 가능합니다.
이는 기본키의 일부에만 종속되는 상황으로 부분함수 종속성을 의미합니다.
제 2정규형을 만족하려면, 우측과 같이 부분함수 종속성을 제거해야 합니다. 교수명을 별도의 테이블로 분류하여, 서로 종속된 과목 아이디와 교수명을 따로 관리를 하는 것입니다.
1정규형이 데이터 중복을 줄이고 데이터 처리의 일관성을 높였다면, 제 2정규형은 데이터 중복을 더 줄이고, 데이터 갱신시 발생하는 이상현상을 방지할 수 있습니다.
마지막인 제 3정규형은, 제 2정규형을 만족하면서 이행함수 종속성을 제거한 형태입니다.
더 높은 수준의 정규화가 필요한 경우에는 보이스코드 정규화(BCNF 정규화)를 사용하기도 하며, 다치 종속성이 제거된 제 4정규형, 후보키를 통하지 않는 조인종속을 제거하는 제 5정규형도 있습니다.
마지막으로, 과도한 정규화는 과다한 조인연산을 필요로 하므로 성능 저하가 발생할 수 있는데, 성능 개선을 위한 개념으로 반정규화도 있습니다.
(3) 3강 : 데이터베이스 구축 - 물리 데이터베이스 설계 (키)
물리 데이터 베이스 설계 파트에서도 여러가지를 공부했는데, 그중에서 키에 대한 파트만 짤막하게 정리하고 지나가겠습니다.
키 (Key) : 레코드를 고유하게 식별하거나 다른 테이블과의 관계를 정의하는 속성
키는 유일성, 최소성이라는 특성을 지닙니다.
유일하게 식별할 수 있어야 하고, 꼭 필요한 최소한의 속성들로만 구성되어 있어야 합니다.
데이터 베이스에서 사용되는 키의 종류는 여러가지가 있습니다.
슈퍼키는 유일성은 만족하나 최소성은 만족하지 못하는 특징을 가지는데, 위의 예시에 쓰인 항목들의 조합이나 항목 하나만으로 충분히 행을 식별할 수 있을 때 각 키는 모두 슈퍼키가 됩니다.
후보키는 유일성, 최소성을 모두 만족하는 특징을 가집니다.
마지막으로, 기본키는 릴레이션에서 각 레코드를 고유하게 식별하는 키로, 여러 후보키 중에서 대표 하나를 의미합니다.
기본키는 널값을 가지지 않는다는 특징이 있습니다.
이외에는 후보키 중에서 기본키로 선택이 되지않은 대체키, 다른 릴레이션의 기본키를 참조하는 외래키 등이 있습니다.
(4) 4강 : 프로그래밍 언어 활용 - 라이브러리 활용 (C언어의 라이브러리)
4강 프로그래밍 언어 활용의 라이브러리 활용 파트로 넘어가보겠습니다.
C언어에서 print와 같은 표준 입출력 함수를 사용하려면, include라는 기본 명령어를 사용하여 <stdio.h>라는 라이브러리를 포함시켜야 합니다.
라이브러리의 사용을 통해 코드의 재사용성을 높이고, 개발 시간을 단축시킬 수 있으며, 프로그램의 안정성을 높일 수 있습니다.
C언어에서 여러가지 유용한 표준 라이브러리들이 있고, 정보처리기사 필기에는 c언어 위주로 출제 되는데 위와 같이 가장 많이 사용되는 라이브러리는 4가지가 있습니다.
첫번째는 printf와 scanf와 같이 표준 입출력함수를 제공하는 stdio.h 라이브러리,
두번째는 동적 메모리 할당이나 난수생성, 형변형과 같은 기능을 제공하는 stdlib.h 라이브러리,
세번째는 문자열 처리 함수를 제공하는 string.h 라이브러리,
마지막으로는 수학연산을 수행하는 함수를 제공하는 math.h라이브러리가 있습니다.
위에서 정리한 필기는 아래의 링크에 있는 '메타코드'의 '정보처리기사 필기 환급챌린지 | 합격 인증 시 100% 환급' 강의를 수강하면서 정리한 내용입니다.
벌써 3주차에 들어갔는데, 많은 사람들과 같이 정보처리기사 필기 강의를 공부하니까 꾸준함이 생긴 것 같습니다.
정보처리기사 필기 강의를 수강하면서 느낀 점은 강사님의 친절한 진행과 깔끔한 판서 덕분에 비효율적으로 공부하는 부분들을 빠르게 학습할 수 있게 되었다는 것입니다.
메타코드 정보처리기사 필기 강의의 총 시간인 10시간이 언제 지나가나 생각했는데, 강의가 꽤 재미있어서 시간 가는 줄 모르고 듣는 중입니다.
메타코드내에서 필기강의를 수강한다면 주어지는 혜택도 있으니 확인해보셨으면 좋겠습니다.
아래는 지금 듣는 강의 목차인데, 3분의 2이상 지나갔다는 것이 뿌듯합니다.
다들 같이 공부하면서, 정처기 합격했으면 좋겠습니다.
'메타코드' 카테고리의 다른 글
[ 정보처리기사 필기 강의 ] 메타코드 강의 후기_4강 : 프로그래밍 언어 활용 - 운영체제 (1) | 2024.12.22 |
---|---|
[ 정보처리기사 필기 정리 ] 메타코드 강의 후기_2강 : 소프트웨어 개발 - 인터페이스 구현 & 3강 : 절차형 SQL 작성 (1) | 2024.12.08 |
[ 정보처리기사 필기 ] 메타코드 강의 후기_1강 : 소프트웨어 설계 (0) | 2024.12.01 |
댓글