본문 바로가기

IT/2020 정보처리기사

NCS 정보처리기사 필기 요약 - 프로그래밍 언어 활용 (1)

NCS 정보처리기사 필기 요약 - 프로그래밍 언어 활용 (1)


수제비2020, 정보처리기사 필기 책을 참고하여 제작하였습니다.

책을 빠르게 1회독 하면서 흐름을 파악한 이후 암기가 필요 하실때

마지막 주요 부분 암기하실때 활용 하세요 !


2020 개정, NCS 정보처리기사 필기 요약집



서버 프로그램 구현

1. 개발환경 구축

1) 개발환경 구축

(1) 개발도구

- 종류

빌드 도구 : 코드의 빌드 배포, 모듈의 의존성 관리를 지워 (Ant, Maven, Gradie)

구현 도구 : 작성과 디버깅, 수정 등에 사용 (Eclipse, Visual Studio)

테스트 도구 : 코드 검증, 테스트, 테스트 수행 분석 (xUnit, PMD, Cppcheck)

형상 관리 도구 : 산출물의 버전관리 (CVS, Git)

 

(2) 구성요소

- 서버 하드웨어 개발 환경

서버 : HTTP 응답/요청 처리, 정적 콘텐츠 처리

애플리케이션 서버 : 동적 콘텐츠 처리

데이터베이스 서버 : 데이터 수집, 저장

파일 서버 : 파일 저장 하드웨어, 물리 저장 장치 활용

 

- 클라이언트 환경 : 클라이언트 프로그램, 브라우저, 모바일 , 모바일

 

 

(3) 형상관리

- 개발 전체 과정에서 모든 항목의 변경 사항을 관리

- 대표 메커니즘 : 형상 관리 대상 파악, 베이스라인 지정, 버전 관리, 접근 제어

- 목적 : 생명주기 동안 무결성과 변경에 대한 추적성 확보

 

- 절차

형상 식별 : 대상을 식별 정의. 추적성을 위해 ID 관리번호 부여.

형상 통제 : 버전 관리를 위해 형상통제위원회 운영, 변경 요구 관리, 변경제어 통제 지원

형상 감사 : 베이스라인의 무결성 평가, 변경 요구사항 일치여부

형상 기록 : 각종 수행결과를 기록 -> 형상 결과 보서 작성

 

 

2) 서버개발 프레임워크

설계와 구현을 재사용이 가능하도록 클래스들을 제공하는

(1) 특징 : 모듈화, 재사용성, 확장성, 제어의 역행

(2) 구성 요소 : 개발환경, 실행환경, 운영환경, 관리환경

 

 

2. 공통 모듈 구현

1) 재사용 : 검증된 기능을 재구성하여 시스템에 응용

- 유형 : 함수와 객체 재사용, 컴포넌트 재사용, 애플리케이션 재사용

 

- 코드 재사용 : 이전 프로그램의 일부나 전부를 사용

- 재사용 프로그래밍 기법 : 객체지향, 제네릭, 자동, 메타 프로그래밍

- 재사용 활용 사례 : 프레임 워크, 아키텍처, 라이브러리, 디자인 패턴, DB 모델링 기법

 

2) 모듈화

모듈화의 원리 : 정보은닉, 분할과 정복, 추상화, 모듈 독립성

모듈화의 유형 : 모듈, 컴포넌트, 서비스, 함수, 매크로, 인라인

모듈화의 장점

프로그램의 효율적인 관리, 성능 향상

이해 용이성 증가, 복잡성 감소

기능의 분리, 인터페이스 단순화

재사용으로 개발과 유지보수 용이

 

3) 결합도

모듈간 상호의존성  =>  낮을수록 좋다.

유형 : 내용(변수와 기능이 중복) > 공통 > 외부 > 제어 > 스탬프 > 자료(인터페이스로만 상호작용)

 

4) 응집도

모듈의 독립성, 정보 은닉의 확장개념  =>  높을수록 좋다.

유형 : 우연적(구성요소 연관이 없음) < 논리적 < 시간적 < 절차적 < 통신적 < 순차적 < 기능적 (단일 목적)

 

 

3. 서버 프로그램 구현

1) 보안 취약성 식별

- 취약성 공격

보안 버그, 잘못된 설정 결함을 공격, code, 프로그램, 스크립트를 이용해 정보를 탈취

대상 시스템을 장악해 정보를 탈취

랜섬웨어도 취약점 공격을 통해 권한을 획득

랜섬웨어 : 피해 시스템의 중요 데이터를 암호화하여 인질로 삼고 금전요구

취약성 공격은 경미한 수준이더라도 대응, 조치를 시행

 

(1) 침투 테스트 절차 : 정찰 - 탐색 - 접근 권환 취득 - 액세스 유지 - 추적 방지

 

(2) 공격 기법

서비스 거부(DoS) : 무의미한 요청을 반복, 서비스 가용성 저하

코드 실행 : 입력 유효성 검사 없이 명령을 실행

버퍼 오버플로우 : 메모리 범위를 넘치게하여 리턴 주소를 변경

정보 수집 : 공격 취약점, 방화벽 유무 등의 정보를 수집

권한 상승 : 악성프로그램 설치 데이터 조작으로 권한 상승

SQL 인젝션 : 웹에서 클라이언트의 입력값을 조작하여 서버를 공격

크로스 사이트 스크립팅 (XSS) : 게시판에 악성 스크립트 작성 - 보면 이벤트 발생 - 쿠키정보, 개인정보 등을 탈취

사이트 요청 위조 (CSRF) : 사용자 모르게 수정, 삭제, 등록 등을 특정 웹사이트에 요청하게 만듦

디렉터리 접근 : HTTP 기반 공격, 액세스 제한된 디렉터리에 접근, 외부 명령으로 파일, 웹소스 등을 강제 다운

 

(3) 시큐어 코딩 : 개발자의 실수, 논리적 오류 등을 최소화

 

 

2) API

앱을 만들기 위한 하위 함수, 프로토콜, 도구들의 집합

(1) 유형

오픈 API : 누구나 쉽게 접근, 정보를 공유하기 위한 목적 (기상청 API)

비공개 API : 권한으로 일부 사용자에게만 정보 제공 (사내 API)

 

(2) 종류

윈도우즈 API : 윈도우 운영체제의 기본 서비스, 고급 서비스, UI, 네트워크 서비스 제공

API : 앱에서 요청/응답을 하기위해 정의

JAVA API : 입출력, 화면 구성, 네트워크 같이 복잡한 클래스들을 미리 구현


 

 

4. 배치 프로그램 그현

1) 배치 프로그램

상호작용 없이 일련의 작업들을 정기적으로 반복 수행, 규칙에 따라 일괄 처리

- 배치 프로그램 산출물 : 배치 설계서

 

(1) 유형

정기 배치 : 정해진 시점(주로 야간) 실행

이벤트 배치 : 조건 충족 자동 실행

온디맨드 배치 : 사용자의 요구가 있을때 실행

 

(2) 종류

Spring Batch : Spring 프레임워크의 3 요소인 DI, AOP, 서비스추상화를 모두 사용할 있는 대용량 처리 스케줄러

Quartz Scheduler : 잡과 트리거를 분리하여 유연성을 제공하는 스케줄러

 

 

 

 

프로그래밍 언어 활용

1. 기본 문법 활용

1) 데이터 타입

boolean : True / False

char : 문자 하나를 저장

string : 나열된 여러개의 문자 저장

integer : 정수형

float : 부동 소숫점, 실숫값을 저장

Array : 여러 데이터를 하나로 묶어서 저장

 

2) 변수

저장할 값을 주기억 장치에 기억하기 위한 공간

 

- 변수 설정 규칙

사용 가능 문자 : 영문 /소문자, 숫자, ' _ (underscore)'

변수 사용 규칙 : 자리는 숫자 불가, 변수 이름 중간 공백 불가

변수 의미 부여 : 데이터 값의 의미 내포, 이미 지정된 예약어는 사용 불가

 

3) 연산자

(1) 산술 연산자 : +, - 등의 연산

(2) 시프트 연산자 : << 오른쪽 만큼 왼쪽으로 이동, >>

(3) 관계 연산자 : <, >, <=, >=, == 같음, != 다름

(4) 논리 연산자

&& : AND, 두개의 논릿값이 모두 참일떄 True

|| : OR, 하나가 참일때 True

(5) 비트 연산자

& : 값을 비트로 연산, 모두 참일때 True

| : 값을 비트로 연산, 하나가 참일때 True

^ : 값을 비트로 연산, 서로 다르면 True

~ : 1의 보수, 0이면 1, 1이면 0

 

4) 명령문

(1) 조건문

if : True/False에 따라 경로 선택

case/switch : 조건에 따라 여러 개의 선택 경로 하나

 

(2) 반복문

for : 초깃값, 최종값, 증감 값을 지정하여 반복

while : 수식이 거짓이 될때까지 반복

 

 

2. 언어 특성 활용

1) 절차적 프로그래밍

프로시저 호출의 개념 바탕

절차적 프로그래밍 == 명령형 프로그래밍

순차적으로 진행 되기 때문에 흐름 파악이 쉽다

모듈화, 구조화 가능

알골, C언어, 베이직, 포트란

 

 

2) 객체 지향 프로그래밍

- 특징

프로그램을 명령어의 목록이 아닌 독립된 단위인 '객체'들을 중심으로

클래스에 관련된 데이터들을 모아 응집력을 강화, 결합력 약화

 

- 기능

동적 바인딩 : 실행 시간 개체나 기호를 속성이나 연산에 바인딩

자료 추상화 : 중요한 정보만을 표현 간단히 만드는 기능

상속 : 기존 클래스의 자료와 연산을 이용

다중 상속 : 2개 이상 클래스로 부터 상속받는 기능

다형성 : 요소에 여러 개념 넣어 놓는 기법 (오버로딩, 오버라이딩)

 

- 종류

C++ : C문법 + 객체지향 + 템플릿 기능

C# : 불안전 코드 플랫폼간 상호 운용성 확보

JAVA : 자바 컴파일러는 자바 언어를 바이트 코드라는 바이너리 형태 변환

델파이 : 파스칼 문법 + 여러 기능, 윈도우즈에서 모든 부분을 프로그래밍

 

 

3) 스크립트 언어

- 특징

빠르게 배우고 쉽게 작성

상대적으로 단순한 구문과 의미를 내포

시작에서 끝까지 실행되고, 시작점(Entry Point)를 따로 명시하지 않음

 

- 종류

PHP : 동적 , HTML 입력 코드에 맞는 웹페이지 생성

: 인터프리터 방식, 실용성, 데이터 길이의 제약 없이 문자열 처리가능

파이썬

다양한 플랫폼, 풍부한 라이브러리

다른 언어로 쓰인 모듈들을 연결

유니코드 문자열 지원, 다양한 언어 처리에 좋음

들여쓰기를 사용해서 블록을 구분

javascript : 객체 기반 스크립트, 브라우저 내에서 사용

 

 

4) 선언형 언어

문제를 설명하는 , 무엇을 것인지에 중점

(1) 함수형 언어

자료 처리를 수학적 함수의 계산으로 취급, 상태와 가변 데이터를 멀리함

함수의 출력 값('f(x)')은 입력된 인수('x')에만 의존

 

순수함수 : 항상 동일한 값을 반환, 스레드 안전, 병렬 계산 가능

익명함수 : 이름이 없음, '람다(lambda) 식'

고계함수 : 함수를 하나의 값으로 간주, 인자와 반환값으로 사용

 

 

(2) 논리형 언어 : 객체 간의 관계를 절대 문절 형태 표현

사실 (Facts): 객체 논리적 사실을 포함

규칙 (Rule) : 원인 규명 과정은 새로운 논리를 찾기

질문 (Question) : 추론 규칙의 /거짓 확인

 

 

 

3. 라이브러리 활용

1) 라이브러리

효율적인 개발을 위해 필요한 프로그램을 모아놓은 집합체

도움말, 설치법, 샘플 코드 등을 제공

도서관의 의미, 필요할때 찾아서 있도록 모듈화 되어 제공

 

표준 라이브러리 : 언어에 기본적으로 포함되어 있음, 여러 모듈과 패키지를 제공

입출력<stdio.h>, 문자열<string.h>, 시간 처리<time.h>, 수학<math.h>

외부 라이브러리 : 별로 파일을 설치, 누구나 개발 가능

 

 

2) 데이터 입출력

표준 입력 : 프로그램으로 들어가는 데이터 스트림

표준 출력 : 프로그램이 출력 데이터를 기록하는 스트림

표준 오류 : 오류 메시지나 진단을 출력하기 위해 쓰이는 다른 출력 스트림

 

 

3) 예외처리

throw : 정상 실행이 불가할때 예외를 던지는 기능

try : 예외가 발생할 만한 코드 블록을 지정

catch : try안에서 throw한 예외 객체에 대한 예외 처리

catch 블록 == 예외 핸들러

 

- try {

if(예외조건)

throw 예외객체;

}

  catch (타입, 예외객체){

예외처리;

}

 

 

4) 프로토타입 : 속성과 메서드를 객체에 추가하지 않아 되는 스타일

클래스를 명확히 정의하지 않아

복제, 객체 생성, 오브젝트 객체



2020 개정, NCS 정보처리기사 필기 요약집



2020 수제비 정보처리기사 필기, 건기원2020 수제비 정보처리기사 필기, 건기원2020 수제비 정보처리기사 필기, 건기원