메타코드 정처기 필기 강의
1강부터 5강까지 강의를 모두 수강 후 기출 문제를 풀고 풀이를 하면서 나름대로 정리를 해 보았다.
◼️ 1강
▪️ UML (Unified Modeling Language)
- 객체지향 소프트웨어 개발 시 산출물을 명세화, 시각화하기 위한 표준화된 모델링 언어
- 표준화된 모델링 언어로 사물(Things), 관계(Relationship), 다이어그램(Diagram)으로 구성
- 구조적/정적 다이어그램 (Structural/Static Diagram) : 시스템 정적 구성요소와 그들 간의 관계를 보여줌
- 클래스(Class) 다이어그램, 객체(Object) 다이어그램, 컴포넌트(Component) 다이어그램, 배치(batch) 다이어그램, 복합체 구조(Composite Structure) 다이어그램, 패키지(Package) 다이어그램
- 행위적/동적 다이어그램(Behavioral/Dynamic Diagram) : 시스템의 동적 구성요소와 그들 간의 관계를 보여줌.
- 유스케이스(UseCase) 다이어그램, 시퀀스(Sequence, 순차) 다이어그램, 상태(Stage) 다이어그램, 커뮤니케이션(Communication) 다이어그램, 활동(Activity) 다이어그램, 타이밍(Timing) 다이어그램
▪️ UML 관계
- 연관 (Association) : 서로 어떤 방식으로 연결되어 있는지를 표현
- 일반화 (Generalization) : 상위 개념과 하위 개념 간의 관계
- 의존 (Dependency) : 한 요소가 다른 요소에게 종속적일 때의 관계, 한 요소의 변화가 다른 요소에도 영향을 줌
- 실체화 (Realization) : 추상화된 개념과 실제로 이를 구현하는 개념 사이의 관계
- 포함 (Composition) : 전체와 부분 간의 강한 관계, 전체 객체가 사라지면 부분 객체도 사라짐
- 집합 (Aggregation) : 전체와 부분 간의 느슨한 관계, 전체 객체와 부분 객체가 독립적으로 존재할 수 있음
▪️ UI (User Interface)
- 사용자가 소프트웨어나 하드웨어와 상호작용할 수 있도록 돕는 시각적, 기능적 요소들의 집합
- 사용성을 가장 우선적으로 고려해야하며 사용자 중심으로 설계되어야 함
- 직관성(Intuitiveness) : 누구나 쉽게 이해하고 사용할 수 있어야 함
- 유효성(Effectiveness) : 정확하고 완벽하게 사용자의 목표가 달성되어야 함
- 학습성(Learnability) : 모두가 쉽게 배우고 사용할 수 있게 제작되어야 함
- 유연성(Flexibility) : 사용자의 실수를 방지할 수 있게 제작되어야 함
- CLI, GUI, NUI, OUI
▪️ UI 설계 도구
- 와이어프레임(Wireframe) : 화면 구조와 요소 배치를 간단하게 나타낸 기본 뼈대
- 목업(Mockup) : 디자인, 평가 등을 위해 실제 화면과 유사하게 만든 정적인 형태의 모형
- 스토리보드(Storyboard) : 사용 흐름을 시각화한 스크립트 및 그림
- 프로토타입(Prototype) : UI의 상호작용 요소를 포함한 모델
▪️ 응집도 유형
- (응집도 낮음) 우연적(Coincidental), 논리적(Logical), 시작적(Temporal), 절차적(Procedural), 통신적(Communication), 순차적(Sequential), 기능적(Functional) (응집도 높음)
▪️ 결합도 유형
- (결합도 높음) 내용(Content), 공통(Common), 외부(External), 제어(Control), 스탬프(Stamp), 자료(Data) (결합도 낮음)
▪️ 소프트웨어 설계 유형
- 상위 설계 : 자료 구조 설계, 아키텍처 설계, 인터페이스 설계, 프로시저 설계, 협약에 의한 설계
- 모듈 설계의 경우 하위 설계에 해당
▪️상향식 설계
- 최하위 수준에서 각각의 모듈들을 설계하고 이러한 모듈이 완성되면 이들을 결합해 검사함
▪️ 하향식 설계
- 소프트웨어 설계 시 제일 상위에 있는 main user function에서 시작해 기능을 하위 기능들로 분할해 가면서 설계하는 방식
▪️ 객체 지향 설계의 원칙 (SOLID)
- 객체 지향 설계를 위한 5가지 원칙으로 유지보수성과 확장성에 도움을 줌
- 단일 책임의 원칙(Single Responsibility PRinciple) : 하나의 클래스는 하나의 책임, 하나의 기능이나 역할만 담당
- 개방-폐쇠의 원칙(Open Close Principle) : 클래스는 확장에 대해 열려있어야 하며 변경에 대해 닫혀 있어야 함
- 리스코프 치환의 법칙(Liskov Substitution Principle) : 서브 타입은 어디에서나 자신의 기반 타입으로 교체할 수 있어야 함
- 인터페이스 분리의 원칙(Interface Segregation Principle) : 클라이언트는 자신이 사용하지 않은 메소드에 의존하지 않아야 함
- 의존성 역전의 원칙 (Dependency Inversion Principle) : 구체적인 클래스보다는 인터페이스나 추상 클래스에 의존해야 함
◼️ 2강
▪️ 자료 구조 (Data Structure)
- 데이터를 효율적으로 저장, 관리하기 위한 체계적인 바업론
- 특정 작업에서 최적의 성능을 보장하기 위해 고안됨
- 선형 구조 : 리스트, 스택, 큐, 데크
- 비선형 구조 : 트리, 그래프
▪️ 상향식(Bottom-Up) 테스트
- 하위 모듈에서 상위 모듈로 테스트를 진행
- Test driver는 아직 개발되지 않은 상위 모듈을 대신해 하위 모듈을 호출하는 역할
▪️하향식(Top-Down) 테스트
- 상위 모듈부터 하위 모듈로 테스트를 진행
- Stub은 아직 개발되지 않은 하위 모듈을 대신해 임시로 사용되는 모듈
▪️알고리즘 시간 복잡도
- Big O 표기법 : 최악의 경우를 기준으로 알고리즘의 성능을 나타내는 표기법
- O(1) : 상수 시간 복잡도, 입력 크기와 상관없이 항상 일정한 시간 소요 (해시 함수)
- O(logn) : 로그 시간 복잡도, 입력 크기에 따라 실행 시간이 log n만큼 커짐 (이진 탐색)
- O(n) : 선형 시간 복잡도, 입력 크기에 따라 실행 시간이 비례함 (순차 탐색)
- O(nlogn) : 선형 로그형 시간 복잡도, 입력 크기에 따라 실행 시간이 nlog n만큼 커짐 (합병 정렬, 힙 정렬, 퀵 정렬)
- O(n^2) : 제곱형 시간 복잡도, 입력 크기의 제곱에 비례해 실행 시간이 증가 (삽입 정렬, 선택 정렬, 버블 정렬)
▪️탐색 방식에 따른 운행 결과
- 깊이 우선 탐색(DFS) : 최대한 깊이 내려간 후 옆으로 이동해 다른 경로 탐색
- A-B-D-E-G-F-C
- 너비 우선 탐색(BFS) : 계속 옆으로 이동하며 더 이상 탐색할 수 없을 때 아래로 이동
- A-B-C-D-E-F-G
◼️ 3강
▪️ DDL 명령어 종류 : CREATE, ALTER, DROP, TRUNCATE
- CREATE : 데이터베이스 객체(도메인, 스키마, 테이블, 인덱스, 뷰)를 생성하는 명령어
- PRIMARY KEY : 테이블의 기본 키를 저으이
- UNIQUE : 해당 컬럼에는 고유한 값만 들어오게 하는 제약 조건
- FOREIGN KYE : 외래 키를 정의
- CONSTRANINTS ~ CHECK : 제약 조건
- ALTER : 기존의 데이터베이스 객체를 수정하는 명령어
- DROP : 데이터베이스 객체를 삭제하는 명령어
- CASCADE : 테이블을 참조하는 모든 객체도 함께 삭제
- RESTRICT : 테이블이 다른 객체에 의해 참조되고 있으면 삭제되지 않음(기본 옵션)
- TRUNCATE : 테이블의 모든 데이터를 삭제하지만, 테이블의 구조는 유지하는 명령어
▪️ DCL의 명령어 종류 : GRANT, REVOKE, COMMIT, ROLLBACK, SAVEPOINT
- GRANT : 특정 사용자 또는 사용자 그룹에게 데이터베이스 객체에 대한 권한을 부여
- GRANT SELECT ON "직원 정보" TO "USER1";
- GRANT SELECT ON "직원 정보" TO "USER1" WITH GRANT OPTION;
- REVOKE : 부여된 권한 회수
- REVOKE UPDATE ON "직원 정보" FROM "USER1";
- REVOKE UPDATE ON "직원 정보" FROM "USER1" CASCADE;
- COMMIT : 트랜잭션에서 수행된 작업을 영구적으로 데이터베이스에 적용
- ROLLBACK : 트랜잭션에서 수행된 작업을 취소하고 이전 상태로 되돌림
- SAVEPOINT : 트랜잭션 내에서 중간 지점을 설정하여 부분 취소를 가능하게 함
▪️DML 명령어 종류 : SELECT, INSERT, UPDATE, DELETE
- SELECT : 데이터 조회
- INSERT : 데이터 입력
- UPDATE : 데이터 변경
- DELETE : 데이터 삭제
▪️트랜잭션의 특성 (ACID)
- Atomicity(원자성) : 트랜잭션 내의 모든 작업이 모두 수행되거나 모두 수행되지 않아야 함
- Consistency(일관성) : 트랜잭션이 시작되기 전과 완료된 후에 데이터베이스의 상태는 규칙에 맞게 일관되어야 함
- Isolation(고립성, 격리성) : 여러 트랜잭션이 동시에 실행될 때 트랜잭션 간 서로 영향을 미칠 수 없음
- Durability(지속성) : 트랜잭션이 성공적으로 완료되면 그 결과는 영구적으로 데이터베이스에 저장되어야 함
▪️ 릴레이션 (Relation)
- 행과 열로 구성된 테이블
- 한 릴레이션에 포함된 튜플은 모두 상이함
- 릴레이션에 포함된 튜플 사이에는 순서가 없음
▪️ 튜플 (Tuple)
- 릴레이션의 행, 튜플의 수를 Cardinality라고 함
▪️애트리뷰트 (Attribute)
- 릴레이션의 열 = 특성 = 속성 = 필드
- 개체의 특성을 기술
- 데이터베이스를 구성하는 가장 작은 논리적 단위
- 애트리뷰트의 수를 degree로 표현
▪️ 정규화
- 데이터베이스 설계 시 데이터를 구조화하여 중복을 최소화하고 데이터 무결성을 보장하는 과정
- 데이터 구조의 안정성을 최대화 함
- 중복을 최소화하여 삽입, 삭제, 갱신 이상의 발생을 방지
- 데이터 삽입 시 릴레이션을 재구성할 필요를 줄임
- 테이블 불일치 위험 최소화
- 효과적인 검색 알고리즘을 생성할 수 있음
▪️ 제1정규형(1NF)
- 어떤 릴레이션에 속한 모든 도메인이 원자값만으로 되어 있음
- 각 컬럼에는 단일 값만 포함되어야 함
▪️제2정규형(2NF)
- 제1정규형을 만족하면서 부분함수 종속성 제거
▪️ 제3정규형(3NF)
- 제2정규형을 만족하면서 이행함수 종속성 제거
▪️ Boyce Codd 정규화(BCNF)
- 제3정규형을 만족하면서 결정자가 후보 키가 아닌 함수 종속 제거
▪️ 제4정규형(4NF)
- BCNF를 만족하면서 다치 종속성을 제거
▪️ 제5정규형(5NF)
- 4NF를 만족하면서 후보키를 통하지 않는 조인 종속 제거
▪️ 슈퍼 키(Super Key)
- 한 릴레이션 내의 속성들의 집합으로 구성된 키
- 릴레이션을 구성하는 모든 튜플에 대한 유일성은 만족시키지만 최소성은 만족시키지 못하는 키
▪️ 후보 키(Candidate Key)
- 릴레이션 후보키는 유일성과 최소성을 만족해야 함
- 모든 릴레이션은 반드시 하나 이상의 후보 키를 가짐
▪️ 기본 키(Primary Key)
- 릴레이션에서 각 레코드를 고유하게 식별하는 키
- Not NULL 제약조건을 기본으로 포함하고 있어 NULL 값을 가지지 않음
- 외래 키로 참조될 수 있음
▪️ 대체 키(ALternate Key)
- 후보키 중 기본키로 선택되지 않은 나머지 키
▪️ 외래 키(Foreign Key)
- 다른 릴레이션의 기본 키를 참조하는 키
- 외래 키는 참조하는 테이블의 기본 키와 동일한 값이어야 함
- 외래 키는 NULL일 수 있음
▪️ 데이터베이스 무결성
- 데이터베이스에 저장된 데이터가 정확하고 일관되며 신뢰할 수 있는 상태를 유지하도록 보장하는 원칙
- 무결성 규정의 대상으로는 도메인, 키, 종속성 등이 있음
- 개체 무결성 : 한 릴레이션의 기본키를 구성하는 어떠한 속성값도 NULL이나 중복값을 가질 수 없음
- 참조 무결성 : 외래 키는 다른 테이블의 기본 키를 참조하며 참조된 기본 키 값과 동일하거나 NULL이어야 함
- 속성 무결성 : 속성의 기본값, 데이터 타입 등 지정된 규칙을 준수해야 함
- 관계 무결성 : 관계를 조작하는 과정에서의 의미적 관계를 명세
▪️ 반정규화
- 데이터베이스 성능 향상을 위해 이미 정규화된 데이터 구조를 일부러 중복하거나 합쳐서 복잡성을 줄이는 과정
- 집계 테이블 추가
- 진행 테이블 추가
- 특정 부분만 포함하는 테이블 추가
◼️4강
4강은 프로그래밍 언어 활용으로 C, java, python을 기본적으로 사용할 줄 알아야 한다.
기출 문제 역시 모두 프로그래밍 문제로 개념도 중요하지만 직접 손으로 코딩을 하여 풀 수 있어야 한다.
▪️변수
- 어떤 값을 주기억 장치에 기억하기 위해 사용하는 공간
- 변수를 선언하면 주기억 장치(메모리)에서 특정 위치와 공간을 할당받아 그 위치에 데이터를 저장할 수 있게 됨.
- 변수 설정에는 일반적인 규칙이 있음.
- 데이터 타입에 따라 할당받는 공간의 크기가 달라짐.
▪️변수 설정 규칙
- 사용 가능 문자 : 알파벳, 밑줄(_), 숫자 등
- 문자 배치 규칙 : 첫 자리에는 숫자 사용 불가, 띄어쓰기 불가(주로 _를 사용)
- 예약어 사용 금지
▪️ 데이터 타입(자료형)
- 정수형(integer) : 기본은 int(4 바이트)
- 부동 소수형(floating point) : 기본은 float(4 바이트)
- 문자형(character) : 단일 문자 저장
- 문자열(string) : 여러 문자 저장
▪️ 배열(array)
- 동일한 데이터 타입의 값들을 연속된 메모리 공간에 저장하는 데이터 구조
- 여러 개의 데이터를 하나의 변수로 관리할 수 있게 해 주는 장점이 있음.
- 배열의 각 요소는 인덱스를 사용해 접근할 수 있음 인덱스는 0부터 시작함.
- 위 예시는 4 크기의 정수형 배열 arr을 선언하고 배열의 네번째 요소에 접근하기 위해 arr[3]을 읽음.
▪️포인터(pointer)
- 변수의 메모리 주소를 저장하는 변수.
- 포인터를 통해 메모리를 직접 다룸으로써 효율적인 데이터 접근과 조작이 가능함.
- int*p : 변수명 앞에 *을 붙이면 포인터 변수를 선언하는 것. 변수값으로는 주소값이 와야 함.
- int*p = &x : 변수명 앞에 &을 붙이면 변수값이 주소값으로 변환됨.
- int*p = &arr[1] : 포인터 변수는 arr[1]의 주소를 직접 저장.
- int*p = arr : 배열명만 명시하는 경우 포인터 변수는 배열의 0번째 요수(arr[0])의 주소를 나타냄.
▪️구조체(struct)
- 여러 개의 변수들을 하나로 묶어 사용할 수 있게 해 주는 사용자 정의 자료형
- C 언어에서 주로 사용(C언어는 클래스 미지원)
- 'Struct 구조체명 변수명'의 형태로 변수를 선언하고 초기화.
- 구조체의 변수(멤버)에 접근할 때는 .을 활용
▪️클래스(class)
- 객체지향 프로그래밍의 핵심 요소로 데이터와 메서드를 하나의 단위로 묶음
▪️ 연산자
- 프로그래밍에서 특정 연산을 수행하는데 사용되는 기호
- 하나 이상의 피연산자를 대상으로 계산을 수행하고 그 결과를 반환
▪️산술 연산자
- 수학적 연산 수행
▪️비교 연산자
- 두 피연산자를 비교하고 그 결과를 참 또는 거짓으로 반환
▪️논리 연산자
- 주로 조건문에서 사용되며 참(1), 거짓값(0)을 결합하거나 반전시키는데 사용
▪️ 대입 연산자
- 변수에 값을 할당하는데 사용
▪️ 증감 연산자
- 변수의 값을 1씩 증가시키거나 감소시키는데 사용
- ++ : 변수의 갑을 1씩 증가, ++x는 x의 값을 1 증가 시킨 후 변경된 값 사용, x++는 현재의 x값을 사용 후 그 다음에 x 값을 1 증가 시킴.
- -- : 변수의 값을 1씩 감소
▪️비트 연산자
- 이진수 표현에서 비트 단위로 연산을 수행
- 10진수를 2로 나누는 과정을 바복하고 나머지를 기록하여 이진수로 변환할 수 있음
▪️ 삼항 연산자
- 세 개의 피연산자를 사용하는 유일한 연산자로 조건에 따라 다른 값을 반환하게 함
▪️연산자 우선순위
- 여러 연산자가 포함된 표현식을 계산할 때 어떤 연산자가 먼저 실행되는지를 결정하는 규칙
▪️ 조건문
- 주어진 조건이 참인지, 거짓인지에 따라 실행할 코드 결정
▪️반복문
- 조건이 만족되는 동안 특정 코드를 반복적으로 실행하는 구조
▪️ 절자적 프로그래밍 언어
- 코드가 순차적으로 실행되고 함수를 통해 문제를 해결하는 방식(C)
▪️ 객체지향 프로그래밍 언어
- 객체 개념을 중심으로 코드 재사용성과 유지보수성을 높이는 방식(java, C++)
▪️스크립트 언어
- 빠른 개발과 실행을 목적으로 하며 주로 자동화 및 웹 개발에 사용(python, savascript)
▪️ 라이브러리
- 특정 작업을 쉽게 할 수 있도록 미리 모듈화되어 제공되는 코드의 집합
- 재사용 가능한 함수, 모듈, 패키지 모음을 제공하여 개발자가 모든 코드를 작성할 필요가 없도록 함.
◼️ 5강
▪️ 폭포수 모델(Waterfall Model)
- 순차적으로 개발 단계를 진행하는 전통적인 생명주기 모형
- 단계적 정의와 산출물이 명확함
- 순차적 접근 방법, 가장 오래된 모형으로 많은 적용사례가 있음
- 개발 중 발생한 요구사항을 쉽게 반영 불가
▪️나선형 모델(Spiral Model)
- 위험 분석과 반복을 통한 점진적 생명주기 모형
- 비교적 대규모 시스템에 적합하고 위험 관리 최소화가 목적
- 계획 수립 -> 위험 분석 -> 개발 및 검증 -> 고객 평가의 개발 주기가 반복돼서 수행됨.
- 시스템을 여러 부분으로 나눠 여러 번의 개발주기를 거치면서 시스템 완성
▪️ 소프트웨어 개발방법론 선정
- COCOMO(Constructive Cost Model) : 프로젝트를 완성하는데 필요한 Man-Month로 산정 결과를 나타낼 수 있음
- Man Month 계산 : 한 사람이 1개월동안 할 수 있는 일의 양(코드 라인 수)을 의미, total line 수 / (월 생산 라인*인원수)
- CPM(Critical Path Mtethod)
- 프로젝트 작업 간의 의존성을 기반으로 전체 프로젝트를 완료하는데 필요한 최단 기간을 계산
- 작업 간의 선후관계를 정리하고 가장 길게 걸리는 경로를 찾아 프로젝트 기간을 결정
- 간트 차트(Gantt Chart) : 프로젝트를 이루는 소작업 별로 언제 시작되고 언제 끝나야 하는지를 한눈에 볼 수 있도록 도와주는 차트
▪️ 정보보안의 3요소
- 기밀성 : 시스템 내의 정보와 자원은 인가된 사용자만 접근이 허용
- 무결성 : 시스템 내의 정보는 오직 인가된 사용자만 수정할 수 있는 보안 요소
- 가용성 : 인가된 사용자는 가지고 있는 권한 범위 내에서 언제든 자원 접근이 가능
▪️보안 공격 기법
- 컴퓨터 시스템, 네트워크, 애플리케이션 등의 보안 취약점을 악용해 시스템에 접근하거나 손상을 입히는 방법
- Key Logger Attack : 컴퓨터 사용자의 키보드 움직임을 탐지해 ID, 패스워드 등 개인의 중요한 정보를 몰래 빼가는 해킹 공격
- Ransomware : 사용자의 파일을 암호화하고 해독 키를 제공하는 대가로 금전을 요구하는 악성코드 공격
- Phishing : 신뢰하라 수 있는 기관이나 유명인을 가장하여 사용자의 로그인 정보나 개인 정보를 탈취하는 기법
▪️DoS(Denial of Service) 공격
- 서비스 거부 공격으로 단일 공격자가 특정 시스템이나 네트워크 서비스의 가용성을 방해하는 공격
- Smurfing : IP 또는 ICMP의 특성을 악용하여 특정 대상에 다수의 응답을 보내어 그 시스템을 마비시키는 기법
- Ping Flood : 다량의 ICMP Echo Request 패킷을 보내어 대상 서비스를 마비시키는 기법
- PoD(Ping of Death) : 정상 크기보다 큰 ICMP 패킷을 작은 조각으로 쪼개어 공격 대상이 조각화된 패킷을 처리하게 만드는 공격 방법
▪️ DDos(Distributed DOS) 공격
- DOS의 다른 형태로 여러 대의 컴퓨터를 이용하여 특정 대상에 동시다발적으로 서비스 거부를 유도하는 공격
메타코드에서 정보처리기사 필기 강의 장학생으로 선발되어 5주간 메타코드에서 정처기 필기 강의를 듣고 포스팅을 진행했다.
현재 메타코드에서는 정보처리기사 필기 환급 챌린지를 진행 중이며 합격 인증 시 100% 환급(제세공과금 22%, 교재비 3만원 제외)을 해 준다.
진도율을 100% 달성하고 시험 합격 후 합격 인증, 후기 작성 시 수강료를 100% 환불 (제세공과금 22%, 교재비 3만원 제외)을 해주기 때문에 수강료 부담없이 정처기 자격증을 따고 싶은 사람에게 좋은 강의이다.
https://metacodes.co.kr/edu/read2.nx?M2_IDX=31635&EP_IDX=15203&EM_IDX=15027