-
4. 프로그래밍 언어 활용정보처리기사 개정 2021. 5. 26. 11:59
프로그래밍 언어 활용
서버 프로그램 구현
개발 환경 구축
개발 환경 준비
개발 환경 구축에 필요한 하드웨어, 소프트웨어에 대한 이해
개발을 위해 사용되는 소프트웨어 도구와 특성
- 구현 도구
- 프로그램 개발시 사용되는 IDE
- 테스트 도구
- 서버 프로그램의 품질을 높이기 위해 테스트에 사용되는 소프트웨어 도구
- 형상 관리 도구
- 코드, 리소스 등 산출물에 대한 버전관리를 위해 사용
- 빌드 도구
- 개발자가 작성한 코드에 대한 빌드 및 배포 지원
개발 환경 준비 수행 순서
목표 시스템 환경 분석
목표 시스템의 환경 분석
목표 시스템의 요구사항 분석
구현 도구 선정
개발 언어 선정
개발 언어 선정 기준
- 적정성
- 효율성
- 이식성
- 친밀성
- 범용성
빌드 도구 선정
빌드 도구 선정
- 팀원의 친밀도, 숙련도에 따라 결정
- 형상 관리 도구를 고려해 선정
- IDE와 호환 가능한 빌드 도구 선정
형상 관리 도구 선정
형상 관리 도구의 종류
- CVS
- SVN
- Git
테스트 도구 선정
테스트 도구의 종류
개발 환경 구축
개발 환경 구축 시 구성 요소
개발 하드웨어 환경
클라이언트 환경 구성
PC, 웹 브라우저, 모바일 앱이 클라이언트로 활용된다.
서버 환경 구성
- 웹 서버
- WAS
- DB 서버
- 파일 서버
개발 소프트웨어 환경
시스템 소프트웨어
- 운영체제
- JVM
- Web Server
- WAS
- DBMS
개발 소프트웨어
- 요구사항 관리도구
- 설계/모델링 도구
- 구현 도구
- 형상 관리 도구
형상 관리 구성
형상 관리의 정의
소프트웨어 개발 과정에서 발생하는 산출물의 변경사항을 버전 관리하기 위한 일련의 활동
형상 관리의 특성
- 소프트웨어 변경사항을 파악하고 제어하며, 적절히 변경되고 있는지 확인
- 프로젝트 생명주기의 전 단계에서 수행하는 활동
- 소프트웨어 개발의 전체 비용을 줄이고, 개발 과정에서 발생하는 여러가지 문제점 발생 요인이 최소화되도록 보증
형상 관리 절차
- 형상 식별 : 형상 관리 대상을 식별하여 이름과 관리 번호를 부여하고, 계층 구조로 구분하여 수정 및 추적이 용이하도록 하는 작업
- 버전 제어 : 소프트웨어 업그레이드나 유지보수 과정에서 생성된 다른 버전의 형상 항목을 관리하고, 이를 위해 특정 절차와 도구를 결합시키는 활동
- 형상 통제 : 식별된 형상 항목의 변경 요구를 검토, 승인하여 적절히 통제함으로써 현재의 베이스라인에 잘 반영될 수 있도록 조정하는 작업
- 형상 감사 : 베이스라인의 현재 상태 및 변경 항목들이 제대로 반영되는지를 보고하는 절차
- 형상 기록 : 베이스라인의 무결성을 평가하기 위해 확인, 검증 과정을 통해 공식적으로 승인하는 작업
공통 모듈 구현
공통 모듈에 대한 이해
공통 모듈에 대한 이해
공통 모듈은 정보 시스템 구축 시 자주 사용하는 기능들로 재사용이 가능하게 패키지로 제공되는 독립된 모듈을 의미한다.
공통 모듈의 재사용
재사용의 범위
- 함수와 객체 재사용
- 컴포넌트 재사용
- 애플리케이션 재사용
재사용의 유형
- 편의적 재사용
- 내부 재사용
- 외부 재사용
- 계획적 재사용
- 컴포넌트를 차후에 재사용 할 수 있도록 전략적으로 설계
재사용의 사례
- 소프트웨어 라이브러리
- 디자인 패턴
- 프레임워크
재사용의 이점
- 개발 시간과 비용 단축
- 소프트웨어 품질 향상
- 개발 생산성 향상
- 프로젝트 실패 위험 감소
- 시스템 구축 방법에 대한 지식 공유
- 시스템 명세, 설계, 코드 등 문서 공유
소프트웨어 모듈화
모듈의 개념
프로그램을 구성하는 구성 요소의 일부로 관련된 데이터와 함수가 묶여서 모듈을 형성한다.
모듈화의 원리
- 정보 은폐 : 복잡하거나 변경 가능성이 있는 모듈을 타 모듈들로부터 은폐한다.
- 자료 추상화 : 자료 구조를 액세스하고 수정하는 함수 내에 자료 구조의 표현 내역을 은폐한다.
- 모듈의 독립성 : 낮은 결합도와 높은 응집도를 가진다.
- 분할과 지배 : 복잡한 문제를 분해, 모듈 단위로 문제를 해결한다.
모듈화의 종류
설계 측면
- 모듈 : 설계시 관련이 있는 기능을 모아 한 부분에 모아 놓은 라이브러리
- 컴포넌트 : 인터페이스에 의해 조작할 수 있는 모듈 단위
- 서비스 : 기존 컴포넌트보다 느슨하게 결합된 형태의 기능을 제공한다.
구현 측면
- 매크로 : 프로그램 구현 시 반복되는 부분에 특정 이름을 부여한 후 이름을 호출하여 실행할 수 있도록 하는 프로그래밍 기법
- 함수 : 큰 프로그램의 일부 코드로 특정한 작업을 수행하는 상대적으로 다른 코드에 비해 독립적인 모듈
- 인라인 : 프로그램 구현 시 반복되는 부분에 특정 이름을 부여해 놓고 이름을 호출하여 실행 할 수 있도록 하는 프로그램 기법
공통 모듈 수행
공통 모듈의 상세 설계를 기반으로 작성해야 할 공통 모듈을 확인한다.
공통 모듈 관리 대장을 통해 작성해야 할 공통 모듈들을 확인하고 공통 모듈별 프로그램 설계서를 확인한다.
공통 모듈 상세 설계를 기반으로한 공통 모듈 구현 순서
- 공통 모듈 관리 대장을 확인한다.
- 공통 모듈 프로그램 설계서를 확인한다.
공통 모듈의 상세 설계를 기반으로 공통 모듈을 구현한다.
- 공통 모듈을 구현하기 위한 I/O 오브젝트를 정의한다.
- 공통모듈을 구현하기 위한 SQL을 작성한다.
- 데이터 접근 객체(DAO)를 구현한다.
- 서비스 클래스를 구현한다.
- 컨트롤러 클래스를 구현한다.
공통 모듈 테스트
테스트 케이스의 이해
테스트 케이스의 개념
요구사항을 준수하는지 검증하기 위하여 테스트 조건, 입력값, 예상 출력값, 수행 결과 등 테스트 조건을 명세한 것
테스트 케이스의 구성 요소
- 식별자
- 테스트 항목
- 입력 명세
- 출력 명세
- 환경 설정
- 특수 절차 요구
- 의존성 기술
테스트 프로세스
테스트 수행과 관련된 활동들이 의도된 테스트 목적과 조건을 달성할 수 있도록 도와주는 역할을 한다.
테스트 프로세스의 구성
테스트 프로세스 5단계
공통 모듈 테스트 수행
- 단위 테스트 케이스 작성을 위한 참조 문서 수집
- 단위 테스트 케이스 작성
- 단위 테스트 방식 결정
- 단위 테스트 범위 결정
- 단위 테스트 방식과 범위에 따라 테스트 케이스 작성
- 작성된 단위 테스트 케이스를 내부 검토
- 작성된 단위 테스트 케이스를 고객에게 승인 획득
- 테스트를 명세하기 위한 테스트 도구 설정
서버 프로그램 구현
업무 프로세스 확인
프로세스의 이해
프로세스의 개념
개인이나 조직이 한 가지 이상의 정보 자원의 입력을 통해 가치 있는 산출물을 제공하는 모든 관련 활동들의 집합
프로세스의 구성 요소
- 프로세스 책임자
- 프로세스 맵
- 프로세스 Task 정의서
- 프로세스 성과 지표
- 프로세스 조직
- 경영자의 리더십
프로세스의 맵
상위 프로세스에서 하위 프로세스로의 흐름 체계를 도식화한 청사진으로 다양한 형태로 표현할 수 있다.
구조적 분석 기법에서의 자료 흐름도
객체지향 분석 기법에서의 사용 사례 다이어그램
업무 프로세스 수행하기
- 상세 설계를 기반으로 담당 업무 확인
- 프로그램 관리 대장 확인
- 업무 프로세스 맵 확인
- 세부 업무 프로세스 확인
- 프로그램 설계서 확인
- 화면 설계서 확인
서버 프로그램 구현
프레임워크에 대한 이해
소프트웨어 프레임워크의 정의
효율적인 정보 시스템 개발을 위한 코드 라이브러리, 애플리케이션 인터페이스, 설정 정보 등의 집합으로서 재사용이 가능하도록 소프트웨어 구성에 필요한 기본 뼈대를 제공한다.
프레임워크의 특징
- 모듈화
- 재사용성
- 확장성
- 제어의 역흐름
소프트웨어 개발 보안
소프트웨어 개발 보안의 개념
소프트웨어 개발 과정에서 개발자의 실수, 논리적 오류 등으로 인해 소프트웨어에 내포될 수 있는 보안 약점을 최소화한다.
시큐어 코딩 가이드
보안 취약성 식별
취약점 식별과 제거
컴퓨터 시스템에서 취약점들을 발견할 수 있게 도와주는 많은 소프트웨어 툴들이 존재한다.
시스템들을 사용하면서 취약점들의 확률을 줄일 수 있는 유일한 방법은 감시와 최적의 배치, 세심한 시스템 관리를 포함한 꾸준한 점검이다.
시스템의 물리적 환경 취약점
- 직원
- 관리
- 조직 내에서의 관리 절차와 보안 방식
- 경영 활동과 서비스 전달
- 하드웨어
- 소프트웨어
- 통신 장비와 시설 등
소프트웨어 취약점
API
API 정의
응용 프로그램에서 사용할 수 있도록 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스
절차적 언어에서의 API
특정한 작업을 수행할 함수들의 집합을 규정하며, 특정 소프트웨어 구성 요소와 상호 작용할 수 있게 한다.
Win API
마이크로소프트 Windows 운영체제들이 사용하는 API
단일 유닉스 규격
컴퓨터의 운영체제가 유닉스란 이름을 사용하기 위해 지켜야 하는 표준 규격의 총칭
Java API
자바를 사용하여 쉽게 구현할 수 있도록 한 클래스 라이브러리의 집합
웹 API
웹 애플리케이션 개발에서 다른 서비스에 요청을 보내고 응답을 받기 위해 정의된 명세
서버 프로그램 구현 수행
세부 업무 프로세스를 기반으로 업무 프로그램을 구현한다.
모듈 구현 순서 예시
- 업무 프로그램 구현을 위한 I/O 오브젝트를 정의한다.
- 업무 프로그램을 구현하기 위한 데이터를 준비한다.
- 업무 프로그램을 구현하기 위한 SQL을 작성한다.
- 데이터 접근 객체를 구현한다.
- 서비스 클래스를 구현한다.
- 시큐어 코딩 가이드에 의한 보안 취약성 제거 코드를 구현한다.
- 컨트롤러 클래스를 구현한다.
서버 프로그램 테스트
소프트웨어 테스트의 이해
소프트웨어 테스트의 개념
구현된 애플리케이션이나 시스템이 사용자의 요구사항에 만족되었는지 확인하기 위하여 기능 및 비기능 요소의 결함을 찾아내는 활동
소프트웨어 테스트의 원칙
- 자신이 개발한 프로그램 소스코드를 테스팅하지 않는다.
- 효율적인 결함 제거 법칙 사용
- 파레토의 법칙 : 소프트웨어 제품에서 발견되는 전체 결함의 80%는 소프트웨어 제품의 전체 기능 중 20%에 집중되어 있다.
- 완벽한 소프트웨어 테스팅은 불가능하다.
- 테스트는 계획 단계부터 해야 한다.
- 살충제 패러독스
- 동일한 테스트 케이스로 반복 실행하면 추가적인 결함을 발견할 수 없다.
- 오류-부재의 궤변
- 사용자의 요구사항을 만족하지 못한다면 오류를 발견하고 제거해도 품질이 높다고 말할 수 없다.
서버 프로그램 테스트 수행하기
- 단위 테스트 케이스 작성
- 테스트를 명세하기 위한 테스트 도구 설정
- 테스트 결과 명세화
배치 프로그램 구현
배치 프로그램 구현
배치 프로그램의 이해
사용자와의 상호 작용 없이 일련의 작업들을 작업 단위로 묶어 정기적으로 반복 수행하거나 정해진 규칙에 따라 일괄 처리하는 것
배치 프로그램의 필수 요소
- 대용량 데이터 처리
- 자동화
- 견고함
- 안정성
- 성능
배치 스케줄러
일괄 처리를 위해 주기적으로 발생하거나 반복적인 작업을 지원하는 도구
배치 스케줄러의 종류
스프링 배치
스프링 배치의 핵심 기능
- 스프링 프레임워크 기반
- 자체 제공 컴포넌트
- 견고함과 안정성
스프링 배치의 컴포넌트
- Job Repository : Job Execution 관련 메타 데이터를 저장
- Job Launcher : Job Execution을 실행
- JPA : 페이징 기능 제공
- Job : 배치 처리를 의미하는 애플리케이션 컴포넌트
- Step : Job의 각 단계
- Item : Data Source로부터 읽어들인 레코드
- Chunk : 특정 크기를 갖는 아이템 목록
- Item Reader : 데이터 소스로부터 아이템을 읽는다.
- Item Processor : Item Reader로 읽은아이템을 저장하기 전에 처리
- Item Writer : Item Chunk를 데이터 소스에 저장
Quartz 스케줄러
Job과 Trigger을 분리하여 유연성을 제공하는 오픈소스 스케줄러
구성 요소
- Schedule : Quartz 실행 환경을 관리하는 핵심 개체
- Job : 사용자가 수행할 작업을 정의하는 인터페이스
- JodDetail : Job에 대한 상세 정보를 정의
- Trigger : 정의한 Job 개체의 실행 스케줄을 정의하는 개체
배치 프로그램 구현 수행
- 애플리케이션 설계를 기반으로 배치 프로그램 확인
- 프로그램 관리 대장 확인
- 배치 설계서 확인
- 애플리케이션 설계를 기반으로 배치 프로그램 구현
- 배치 프로그램을 구현하기 위한 I/O 오브젝트 정의
- 배치 프로그램을 구현하기 위한 데이터 접근 오브젝트 (DAO) 작성
- 배치 프로그램을 구현하기 위한 스케줄러 클래스 작성
배치 프로그램 테스트
배치 프로그램 테스트 수행
- 배치 스케줄 주기를 테스트가 가능한 주기로 변경하여 로그에 정상적으로 출력되는지 확인
- 배치 프로그램을 디버깅하여 정상적으로 동작하는지 검증
- 배치 프로그램 로그 확인
- 목적 테이블에서 정상적으로 배치 프로그램이 실행되었는지 확인
- 배치 프로그램이 정상적으로 실행되지 않았을 경우 오류 확인
프로그래밍 언어 활용
기본 문법 활용
변수
컴퓨터 시스템 구조
- 중앙 처리 장치
- 산술 논리 연산 장치
- 제어 장치
- 레지스터
- 기억 장치
- 입력 장치
- 출력 장치
명령 사이클
- Fetch : 인출
- Decode : 해석
- Execute : 실행
- Write Back : 기록
명령어 형식
명령어 형식 예시
- 연산 코드 : 수행될 연산을 지정
- 오퍼랜드 : 연산을 수행하는 데 필요한 데이터, 데이터 주소
프로그램의 구성 요소
자료구조
컴퓨터에 데이터를 삽입, 삭제, 수정할 수 있도록 하는 논리적 공간 구조
자료의 형태에 따른 자료 구조 분류
- 단순 구조
- 선형 구조
- 비선형 구조
- 파일 구조
알고리즘
문제에 대한 답을 찾는 방법
알고리즘의 특성
- 입력
- 출력
- 명확성
- 유한성
- 유효성
바인딩
변수와 변수에 관련된 속성을 연결하는 과정
- 정적 바인딩 : 프로그램 실행 시간 전에 속성을 연결하는 방식
- 동적 바인딩 : 프로그램 실행 시간에 속성을 연결하는 방식
선언
- 명시적 선언 : 선언문을 이용하여 변수명을 나열하고 속성을 부여하는 방식
- 묵시적 선언 : 별도의 선언문 없이 디폴트 규칙에 의해 속성이 부여되는 방식
영역
- 정적 영역 : 변수를 찾을 때 구조에 기반하는 방식
- 동적 영역 : 변수를 찾을 때 순서에 기반하는 방식
할당
변수에 메모리 공간을 바인딩하는 작업
변수의 할당 방법
- 정적 할당
- 스택 기반 할당
- 변수의 타입은 정적으로 할당되지만 메모리 공간은 실행 시간 중에 할당 된다.
- 동적 할당
- 명시적인 명령어에 의해 실행 시간에 할당된다.
명령문
프로그램을 구성하는 문장으로 지시 사항을 처리하는 단위를 의미한다.
명령문 종류
- 주석문
- 선언문
- 대입문
- 입출력문
- 제어문
- 반복문
- 함수 정의문
기본 문법 활용 수행하기
- 응용소프트웨어 개발에 필요한 프로그래밍 언어의 데이터 타입을 파악한다.
- 데이터 타입을 변수에 적용하기 위한 작성 규칙을 확인한다.
- 데이터 타입의 판별을 위해 응용소프트웨어의 기능 요건을 명확히 식별한다.
- 기능 요구를 구현하기 위해 개발되어야 할 프로그램을 정의한다.
- 변수가 가져야 하는 데이터 타입을 정의한다.
연산자와 명령문 활용
연산자
연산자 우선순위 : 산술 연산자 > 관계 연산자 > 논리 연산자
- 산술 연산자
- 시프트 연산자
- 관계 연산자
- 논리 연산자
- 비트 연산자
명령문
- 조건문
- 반복문
사용자 정의 자료형 활용
사용자 정의 자료형의 개요
- 열거형
- 구조체
- 공용체
추상화
복잡한 문제의 본질을 이해하기 위해 세부 사항은 배제하고 중요한 부분을 중심으로 간략화하는 기법
추상화의 유형
- 기능 추상화
- 자료 추상화
- 제어 추상화
상속화 구체화
- 상속 : 상위 수준 그룹의 모든 특성을 하위 수준 그룹이 이어받아 재사용 또는 확장
- 구체화 : 하위 수준 그룹이 상위 수준 그룹의 추상적인 부분을 구체화시키는 것
언어 특성 활용
프로그래밍 언어의 언어별 특성
프로그래밍 언어의 발전 과정
프로그래밍 언어별 특성
FORTRAN
시스템 의존적이고, 프로그램 작성을 위해 컴퓨터 시스템 관련 지식이 많이 필요하다.
COBOL
단순한 입출력 구현 시에도 많은 형식적인 문장이 필요하며, 비교적 프로그램 크기가 크고 구문이 복잡하다.
PASCAL
잘 짜인 구조와 간결성으로 성공하였으나, 분리 컴파일과 문자열 처리 등을 제공하지 못하였다.
C 언어
UNIX 운영체제 구현에 사용된다.
C++ 언어
C언어를 발전시킨 언어로 클래스, 상속 등을 제공하는 개체 지향 언어이다.
JAVA
C++에 비해 단순하고 분산 환경 및 보안성을 지원한다.
JAVASCRIPT
1995년에 개발된 객체지향 스크립트 언어로 웹 페이지 동작을 구현한다.
PERL
텍스트 처리에 주안점을 두고 개발된 인터프리터 언어
PYTHON
인터프리터 언어면서 객체지향 언어, 스크립트 언어이다.
C#
.NET 환경에 맞춰 설계된 언어.
사용자 인터페이스를 쉽게 만들 수 있는 컴포넌트 기능을 제공한다.
GOLANG
C의 문법과 유사하고 제어 구조를 가지며 하드웨어 사양이 낮더라도 빠른 컴파일이 가능하다.
DART
JAVASCRIPT와 JAVA의 영향을 받아 개발되었으며, 객체지향적인 언어이다.
CEYLON
JAVA에 기반을 둔 언어로 모듈성을 주요 특징으로 가진다.
프로그래밍 언어의 유형 분류
개발 편의성에 따른 분류
- 저급 언어 : 기계가 이해할 수 있도록 만들어진 언어
- 고급 언어 : 개발자가 쉽게 이해할 수 있도록 만들어진 언어
- 번역 과정 : 원시 프로그램 → 컴파일러 → 목적 프로그램 → 로더 → 실행 가능한 프로그램
실행 방식에 따른 분류
- 명령형 언어 : 컴퓨터에 저장된 명령어들이 순차적으로 실행되는 방식
- 함수형 언어 : 함수들로 프로그램을 구성하여 호출하는 방식
- 논리형 언어 : 규칙에 대한 활성화 조건이 만족되면 연관된 규칙이 실행되는 구조
- 객체지향 언어 : 객체 간의 메시지 통신을 이용하여 프로그래밍 하는 방식
구현 기법에 따른 분류
- 컴파일 방식 언어 : 고급 언어를 기계어로 번역하는 방식의 언어
- 인터프리터 방식의 언어 : 고급 언어 명령문을 하나씩 번역하고 실행하는 방식의 언어
- 혼합형 방식의 언어 : 고급 언어를 컴파일하여 중간 언어로 변환한 후, 인터프리터에 의해 번역을 실행하는 방식의 언어
컴파일러와 인터프리터
컴파일러
고급언어를 기계어로 번역하는 도구
인터프리터
프로그램 문장을 하나씩 번역하고 실행할 수 있도록 하는 프로그램
구조적 프로그래밍
순차
구문 순서에 따라 순서대로 수행
선택
프로그램의 상태에 따라 여러 구문들 중 하나를 수행하는 것
반복
프로그램이 특정 상태에 도달할 때까지 구문을 반복하여 수행하거나, 집합체의 각각의 원소들에 대해 어떤 구문을 반복 수행하는 것
객체 지향 프로그래밍
절차지향 프로그래밍과 객체지향 프로그래밍
- 절차지향 프로그래밍 : 프로그램을 순차적으로 수행시키는 방법
- 객체지향 프로그래밍 : 객체와 객체 간의 통신을 통해 프로그램 구현
객체지향 프로그래밍의 구성 요소
- 객체
- 클래스
- 메시지
객체지향 프로그래밍의 특징
- 캡슐화
- 추상화
- 상속성
- 다형성
객체의 구성 요소
- 개체
- 속성
- 메소드
스크립트 언어
특징
컴파일을 하지 않는다.
변수 타입을 선언하지 않는다.
번역 과정을 거쳐야 하기 때문에 비교적 느리다
종류
- 자바스크립트
- Perl
- Tck/Tk
용도에 따른 분류
시스템에 사용
유닉스의 쉘 스크립트, 윈도우의 배치 스크립트처럼 일괄 처리 작업에 사용된다.
웹 애플리케이션에 사용
- 서버 사이드 스크립트 : 해당 소스의 실행 결과를 확인하기 위해 웹 서버를 거쳐야 하는 스크립트
- 클라이언트 사이드 스크립트 : 내장된 번역기에 의해 실행되는 스크립트
선언형 프로그래밍 언어
선언형 프로그래밍 언어
무엇을 할 것인지에 중점을 두는 언어
프롤로그 : 서로의 관계를 묻는 형태의 선언형
선언형 프로그래밍 언어의 종류
- 함수형 : HASKELL, LISP
- 논리형 : PROLOG
- 제한형 : Oz
특수 분야 언어
선언형 프로그래밍은 특수 분야 언어의 형태로 주로 사용된다.
사용처
- HTML
- SQL
라이브러리 활용
라이브러리 활용
라이브러리
효율적인 프로그램 개발을 위해 필요한 프로그램을 모아 놓은 집합체
표준 라이브러리와 외부 라이브러리
- 표준 라이브러리 : 프로그래밍 언어가 기본적으로 가지고 있는 라이브러리
- 외부 라이브러리 : 별도의 파일을 설치해야 한다.
모듈과 패키지
모듈이 개별 파일이라면 패키지는 파일을 모아 놓은 폴더라고 볼 수 있다.
- 모듈모듈은 서브루틴과 데이터 구조의 집합체로서 그 자체로서 컴파일 가능한 단위이며, 재사용 가능하고 동시에 여러 다른 모듈의 개발에 사용할 수 있다.
- 모듈은 한 개의 파일에서 기능을 제공한다.
- 패키지일반적인 요구와 주어진 시스템의 여건을 감안하여 특정 목적을 위해 설계된 일련의 프로그래밍군이다.
- 공통으로 사용될 수 있도록 작성된 프로그래밍이나 상호 연관이 있는 프로그램을 하나로 정리하여 제공하고 있는 프로그램을 말한다.
정적 라이브러리와 동적 라이브러리
- 정적 라이브러리 : 컴파일러가 소스 파일을 컴파일 할 때 참조되는 프로그래밍 모듈
- 동적 라이브러리 : 프로그램 수행 도중 해당 모듈이 필요할 때 불러쓰는 프로그램 모듈
데이터 입출력
라이브러리와 데이터 입출력 관계
라이브러리 내 해당 함수는 단위 독립성을 위해 입출력 파라미터만 노출되어 있다.
원하는 처리 결과를 사전에 인지하고 해당 라이브러리 내 함수를 찾아 사용한다.
데이터 입출력 단위 구조
- 단일 변수 파라미터 : 라이브러리 함수 내 입력 파라미터에 값을 설정하여 원하는 결과값을 도출한다.
- 오브젝트 파라미터 : 입력 파라미터가 변수값이 아닌 객체 형태로 존재할 경우 해당 객체를 미리 생성하여 호출 시 사용한다.
예외 처리
예외처리의 개요
일반적으로 프로그램이 처리되는 동안 특정한 문제가 일어났을 때 처리를 중단하고 다른 처리를 하는 것
예외의 원인
- 컴퓨터 하드웨어
- 운영체제 설정
- 라이브러리 손상
- 사용자의 입력 오류
프로토타입
프로토타입의 개요
요구사항의 검증을 위해 본격적인 개발에 앞서 시제품 형태로 작성되는 것
프로토타입 작성 시 라이브러리 활용성을 검증하고 원하는 기능에 대한 사용을 검토할 수 있다.
라이브러리를 활용한 프로토타입
라이브러리를 검색, 선택, 설치, 적용하고 코드를 검토하여 프로토타입을 작성한다.
프로토타입 기반 프로그래밍의 개념
객체를 프로토타입으로 하여 복제의 과정을 통해 객체의 동작 방식을 다시 사용할 수 있다.
응용 SW 기초 기술 활용
운영체제 기초 활용
운영체제
운영체제의 목적
- 컴퓨터 시스템의 처리량, 신뢰성을 최대화
- 컴퓨터 시스템의 반환 시간, 응답 시간, 처리 시간, 대기 시간, 경과 시간 최소화
- 컴퓨터 구성 자원 효율적 제어, 운영
- 제한된 자원을 효율적으로 공유하기 위해 스케줄링
- 데이터 공유
- 주변 장치 관리
- 시스템의 이식성을 높인다.
운영체제의 특징
하드웨어의 구성
- 중앙 처리 장치
- 기억 장치
- 통신 장치
- 입출력 장치
커널
프로세스 관리, 메모리 관리, 입출력관리, 파일 관리 등의 운영체제의 핵심 기능을 모아놓은 것
운영체제의 기능 및 구성
운영체제의 기능
- 자원 관리
- 자원 보호
- 하드웨어 인터페이스 제공
- 사용자 인터페이스 제공
운영체제의 구성
- 제어 프로그램
- 감시 프로그램
- 작업 관리
- 데이터 관리 프로그램
- 처리 프로그램
- 언어 번역 프로그램
- 서비스 프로그램
- 사용자 작성 프로그램
운영체제의 유형
일괄 처리 시스템
모든 작업을 한꺼번에 처리한다.
프로그램 실행 중 사용자가 데이터를 입력하거나 수정하는 것이 불가능하다.
다중 프로그래밍 시스템
하나의 CPU로 여러 작업을 동시에 실행하는 기술
실시간 처리 시스템
사용할 수 있는 자원이 한정되어 있는 상황에서 작업 수행이 요청되었을 때, 이를 제한된 시간 안에 처리해 결과를 내주는 것
분산 처리 시스템
네트워크상에 분산되어 있는 여러 컴퓨터로 작업을 처리하고 그 결과를 상호 교환하도록 구상한 시스템
클라이언트 / 서버 시스템
클라이언트, 서버 이중 구조로 나뉜다.
P2P 시스템
클라이언트 / 서버 구조의 단점인 서버 과부하를 해결하기 위해 만들어진 시스템
서버를 거치지 않고 사용자와 사용자를 직접 연결한다.
컴퓨팅 환경
- 그리드 컴퓨팅
- 클라우드 컴퓨팅
- 사물 인터넷
운영체제 핵심 기능
메모리 관리
고정 분할 방식
물리적 메모리를 몇 개의 영구적인 분할로 나누고, 각각의 영역에 프로그램 하나씩 적재한다.
가변 분할 방식
매 시점 프로그램 크기에 맞게 메모리를 분할한다.
가상 메모리 기법
용량이 작은 주기억 장치를 큰 용량을 가진 것처럼 사용하는 기법
페이징 기법
고정 분할 방식을 이용한 가상 메모리 관리 기법
페이지와 프레임
가상 주소의 분할된 각 영역을 페이지라고 하며 번호를 매겨 관리한다.
물리 메모리의 각 영역은 프레임이라고 한다.
페이징 기법의 구현
페이지 테이블 매핑 방식
- 직접 매핑
- 페이지 테이블 전체가 물리 메모리의 운영체제 영역에 존재하는 방식
- 연관 매핑모든 페이지 테이블을 저장 장치의 스왑 영역에 저장하고 그 중 일부만 물리 메모리에 적재
- 주소 변환시 물리 메모리 내의 페이지 테이블을 전부 검색해야 하며, 원하는 프레임 번호를 얻지 못할 경우 스왑 영역에 있는 페이지 테이블 검색
- 페이지 테이블 전체를 스왑 영역에 관리하는 방식.
- 집합 - 연관 매핑페이지 테이블을 일정한 집합으로 자르고, 자른 덩어리 단위로 물리 메모리에 적재
- 원하는 페이지 테이블이 물리 메모리에 있는지 스왑 영역에 있는지 확인 가능
- 연관 매핑의 문제를 개선한 방식
페이지 테이블 매핑 방식의 특징
세그먼테이션 기법
세그먼테이션-페이징 혼용 기법
사용자 입장에서는 세그먼테이션 기법을 사용하고 메모리 관리자 입장에서는 페이징 기법을 사용하는 가상 메모리 관리 기법
페이지 테이블과 세그먼테이션 테이블의 혼합
세그먼테이션-페이징 혼용 기법에서의 동적 주소 변환 과정
캐시 직접 매핑
메모리의 블록이 캐시로 올라올 때 항상 같은 위치에 올라온다.
캐시는 메모리의 어떤 블록에서 올라온 페이지인지만 확인한다.
캐시 직접 매핑의 예
요구 페이징
프로세스가 요청할 때 메모리로 가져오는 방법
페이지를 미리 가져오는 방식은 가져온 페이지를 쓰지 않을 경우 메모리를 낭비하게 되므로 요구 페이징이 메모리의 절약, 메모리의 효율적 관리, 프로세스의 응답 속도 향상 등의 효과를 볼 수 있다.
페이지 교체 알고리즘
페이지 적재시 메모리가 꽉 찼을 경우 어떤 페이지를 스왑 영역으로 보낼지 결정하는 재배치 정책
재배치 정책
- FIFO : First In First Out
- LRU : Least Recently Used
- LFU : Least Frequently Used
- NUR : Not Used Recently
스레싱과 프레임 할당
스레싱은 하드디스크의 입출력이 너무 많아져 잦은 페이지 부재가 발생하여 작업이 멈추는 상태이다.
프로세스 관리
프로세스의 정의
현재 실행중이거나 곧 실행이 가능한 PCB를 가진 프로그램
프로세서가 할당되는 개체로 디스패치가 가능한 단위이다.
지정된 결과를 얻기 위한 일련의 계통적 동작
목적 또는 결과에 따라 발생하는 사건들의 과정
비동기적 행위를 일으키는 주체
CPU가 할당되는 실체
프로세스 상태
주요 프로세스 상태 기능
- 제출 상태 : 사용자에 의해 작업이 제출된 상태
- 보류 상태 : 작업이 제출되어 스풀러에 의해 디스크에 수록되어 있는 상태
- 준비 상태 : CPU가 사용 가능한 상태
- 실행 상태 : 프로세스가 CPU를 차지하고 있는 상태
- 대기 상태 : 인터럽트가 발생하여 프로세스가 대기하고 있는 상태
- 완료 상태 : 프로세스가 CPU를 할당받아 주어진 시간 내에 완전히 수행을 종료한 상태
프로세스 상태 전이도
인터럽트의 개념
프로세스 수행 중 다른 프로세스를 수행하기 위해 현재 수행 중인 프로세스를 중단하거나 외부 입력 장치에 의해 프로세스가 중단되는 상태
인터럽트 처리를 위한 작업 순서
- 인터럽트 발생시 운영체제가 제어권 획득
- 운영체제는 인터럽트 받은 현재의 프로세스 상태 저장
- 운영체제는 인터럽트 정보를 분석하여 지정된 루틴으로 제어권을 넘겨준다.
- 인터럽트 처리 루틴이 인터럽트 처리
- 인터럽트가 걸리기 이전 프로세스 상태로 복구
- 인터럽트가 걸렸던 시점 이후부터 프로세스가 실행
인터럽트의 종류
- SVC 인터럽트 : 감시 프로그램이 호출되어 인터럽트 발생
- 입출력 인터럽트 : 입출력 채널 확인, 준비, 할당, 완료 시 발생
- 외부 인터럽트 : 현재 운영 중인 운영체제 소속이 아닌 외적 요인으로부터 발생
- 재시작 인터럽트 : 사용자에 의해 운영체제를 메모리에 다시 상주시킬 때 발생
- 프로그램 검사 인터럽트 : 프로그램 명령 수행 과정에서의 문제들에 의해 발생
- 기계 검사 인터럽트 : 컴퓨터 시스템의 기계 고장으로 발생하는 인터럽트
프로세스 제어 블록 (PCB)
운영체제 내에서 한 프로세스의 존재를 정의
PCB가 갖는 정보
- 프로세스 식별자
- 프로세스 현재 상태
- 프로그램 카운터
- 프로세스 우선 순위
- 프로세스가 적재된 주소 포인터
- 프로세스에 할당된 자원 주소 포인터
- CPU 레지스터 정보
- CPU 레지스터 상태 포인터
- 계정 정보
- 기억 장치 관리 정보
- 입출력 정보
- 부모 프로세스 포인터
- 자식 프로세스 포인터
CPU 스케줄링
CPU 스케줄링 기법의 유형
- 작업 스케줄링
- 어떤 작업이 시스템의 자원을 차지할 수 있도록 할 것인가를 결정
- CPU 프로세서 스케줄링
- CPU가 다음 프로세서를 받을 때 준비 완료 프로세스에 할당
- 선점 스케줄링
- 하나의 프로세스가 CPU를 차지하고 있을 때 다른 프로세스가 현재 프로세스를 중단시키고 자신이 CPU를 차지할 수 있는 기법
- 비선점 스케줄링
- 한 프로세스가 CPU를 할당받으면 다른 프로세스는 CPU를 차지할 수 없는 기법
- 우선순위 스케줄링
- 각 프로세스에 우선순위를 부여하여 순위가 높은 순서대로 처리하는 방법
- 기한부 스케줄링
- 작업들이 명시된 시간, 기한 내에 완료되도록 계획
- FCFS 스케줄링
- 프로세스가 준비 큐에 도착한 순서에 따라 CPU를 할당
- RR 스케줄링
- 시스템 시스템을 위해 개발, 선점 방식 기법 사용
- SJF 스케줄링
- 준비 큐에서 대기하고 있는 프로세스 중에서 수행 시간이 가장 짧은 프로세스를 먼저 수행
- SRT 스케줄링
- 수행중인 프로세스의 잔류 시간과 준비 큐에 있는 프로세스의 CPU 요구 사항을 비교한 후 그 시간이 더 작은 프로세스에게 CPU를 우선적으로 할당
- HRN 스케줄링SJF 방식에 대기한 시간을 함께 사용하여 우선권을 계산한다.
- SJF의 단점을 보완하여 개발된 비선점 방식의 기법
- MLQ 스케줄링
- 작업들의 성격에 따라 준비 큐를 여러 개로 나누어 이용하는 기법
- MFQ 스케줄링
- MLQ에서 준비 큐 사이에 프로세스 이동이 가능하도록 설계
스케줄링 성능 기준
- CPU 이용률
- 처리율
- 반환시간
- 대기시간
- 응답시간교착 상태의 발생 조건
- 상호 배제
- 점유와 대기
- 비선점
- 순환 대기
- 교착 상태 : 시스템 내에서 자원을 사용하기 위해 경쟁하거나 상호 통신하는 프로세스들이 영구적으로 블로킹 된 상태
파일 시스템 관리
사용자가 직접 파일을 보관하는 대신 관리자를 두어 저장 장치의 관리를 맡기는 시스템
입출력 시스템 관리
직접 입출력
CPU가 프로그램 수행 중 입출력 명령을 만나면 직접 입출력을 수행
간접 입출력
전용 입출력 프로세서인 DMA나 채널을 이용하는 방식
DMA 방식
입출력 데이터를 기억 장치 버스를 통해 직접 기억 장치로 전송
사이클 스틸 : CPU와 DMA가 각각 연산과 입출력을 위해 동시에 기억 장치에 접근하는 경우, CPU는 기억 장치 참조 사이클을 멈추게 하고 DMA가 우선적으로 기억 장치 참조 사이클을 수행
입출력 채널 방식
독립된 입출력 프로세서인 채널이 입출력을 대신하고 , CPU는 이 동안 다른 프로그램을 실행한다.
버퍼링
CPU와 I/O 장치 간의 속도 차이를 극복할 수 있는 방법, 주 기억 장치의 일부를 버퍼로 사용
스풀링
디스크의 일부를 스풀 공간으로 설정하여 버퍼처럼 이용하는 방식
가상화 / 클라우드 활용
가상화
물리적인 리소스들을 사용자에게 하나로 보이게 하거나, 하나의 물리적인 리소스들을 여러 개로 보이게 하는 것
- 플랫폼 가상화
- 리소스 가상화
클라우드 서비스 모델
클라우드 컴퓨팅
인터넷 기반에서 구동되는 컴퓨팅 기술
셸 스크립트
bash 셸의 특징
- Alias 기능
- History 기능
- 연산 기능
- Job Control 기능
- 자동 이름 완성 기능
- 프롬프트 제어 기능
- 명령 편집 기능
환경 변수
- HOME : 현재 사용자의 홈 디렉터리
- LANG : 기본 지원 언어
- TERM : 로그인 터미널 타입
- USER : 현재 사용자명
- COLUMNS : 현재 터미널 컬럼 수
- PS1 : 1차 명령 프롬프트 변수
- BASH : bash 셸 경로
- HISTFILE : 히스토리 파일 경로
- HOSTNAME : 호스트 이름
- LOGNAME : 로그인 이름
- MAIL : 메일 보관 경로
- PATH : 실행 파일을 찾는 디렉터리 경로
- PWD : 사용자의 현재 작업 디렉터리
- SHELL : 로그인하여 사용하는 셸
- DISPLAY : X 디스플레이 이름
- LINES : 현재 터미널 라인 수
- PS2 : 2차 명령 프롬프트
- BASH_VERSION : bash 버전
- HISTSIZE : 히스토리 파일에 저장되는 개수
- USERNAME : 현재 사용자 이름
- LS_COLORS : ls 명령어의 확장자 색상 옵션
- OSTYPE : 운영체제 타입
셸의 기능
사용자와 커널 사이에서 명령을 해석하여 전달하는 명령어 해석기 기능을 가진다.
셸은 자체 프로그래밍 기능이 있어 프로그램을 작성할 수 있다.
네트워크 기초 활용
네트워크 계층 구조 파악
WAN
국가 대륙과 같이 광범위한 지역을 연결하는 네트워크
회선 교환 방식
물리적 전용선을 활용하여 데이터 전달 경로가 정해진 후 동일 경로로만 전달된다.
패킷 교환 방식
패킷이라는 단위를 사용하여 데이터를 송수신 한다.
패킷 교환 방식의 주요 기능
- 패킷 다중화
- 논리 채널
- 경로 선택 제어
- 순서 제어
- 트래픽 제어
- 오류 제어
LAN
비교적 좁은 지역에 분산 배치된 장치들을 통신 회선으로 연결하여 각종 정보를 교환할 수 있는 통신 네트워크
LAN의 기본 형태
- 성형
- 링형
- 버스형
VAN
정보 처리 기능 : 업무 처리, 데이터베이스 관리, 고객 관리, 회계 관리 등을 제공
통신 처리 기능 : 속도 변환, 코드 변환, 포맷 변환, 미디어 변환, 프로토콜 변환, 메일 박스 등을 제공
이더넷
이더넷의 표준
접근 방법 : CSMA/CD 사용
주소 지정 : 6바이트의 물리적 주소 사용
신호 방식 : 맨체스터 디지털 부호 사용
데이터 전송률 : 1~100Mbps
교환형 이더넷
이론적인 전송 속도 : 10Mbps x 교환기의 수
스위칭 기술의 도입으로 불필요한 패킷의 흐름을 막을 수 있다.
고속 이더넷
데이터 전송률 : 100Mbps
기가 비트 이더넷
광케이블 사용
전송속도 : 1Gbps
네트워크 프로로토콜 파악
네트워크 프로토콜 개요
컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고받는 양식과 규칙의 체계
프로토콜의 특징
- 단편화 : 전송이 가능한 작은 블록으로 분할
- 재조립 : 단편화 되어 전송된 블록들을 복원
- 캡슐화 : 상위 계층의 데이터에 각종 정보를 추가하여 하위 계층으로 전송
- 연결 제어 : 데이터의 전송량이나 속도를 제어
- 오류 제어 : 전송중 손실되는 데이터나 오류가 발생한 데이터를 검증
- 동기화 : 송신과 수신 측의 시점을 맞춤
- 다중화 : 하나의 통신 회선에 여러 기기들이 접속할 수 있는 기술
- 주소 제어 : 송신과 수신지의 주소를 부여하여 정확한 데이터 전송을 보장하는 것
TCP/IP 프로토콜
TCP
CRC 체크, 재전송 기능을 통해 신뢰성 있는 전송 확보
Flow Control 기능을 수행하여 단계별 데이터 전송 상황 체크
대표 서비스
- FTP
- Telnet
- Http
- SMTP
- POP
- IMAP
UDP
Flow Control, Error Control을 하지 않아 신뢰성 있는 데이터 전송에는 부적합
대표 서비스
- SNMP
- DNS
- TFTP
- NFS
- NETBIOS
- 인터넷 게임, 방송, 증권 등
TCP/UDP의 헤더 구조
네트워크 주요 장비
허브, 리피터
여러 대의 컴퓨터를 연결하여 네트워크로 보내거나 하나의 네트워크로 수신된 정보를 여러 대의 컴퓨터로 송신하기 위한 장비
브리지, 스위치
두 시스템을 연결하는 네트워크 장치이며 두 개의 LAN을 연결하여 훨씬 더 큰 LAN을 만들어 준다.
스위치는 하드웨어 기반으로 처리하기 때문에 속도가 빠르며, 브리지는 소프트웨어 방식으로 처리하기 때문에 속도가 느리다.
라우터
망 연동 장비
PC등의 로컬 호스트가 LAN에 접근할 수 있도록 하며, WAN 인터페이스를 사용하여 WAN에 접근하도록 한다.
기본 개발 환경 구축
운영체제 설치 및 운용
운영체제 운용
서버 운용 기준
- 운용 아키텍처 기능 파악
- 네트워크 구성 현황 및 장비 매뉴얼 확보
- 장비 가동 및 중기 매뉴얼 확인
- 백업 주기, 보안 업데이트 주기 설정 및 점검
- 트러블 발생시 대처 방안 마련
개발 PC용 운영체제 운용 기준
- 정기적 데이터 백업
- 주기적 보안 업데이트
- 시스템 백업 정례화
- 트러블 발생 시 문의처 정보 확인
서버
웹 서버
웹 서버의 기능
- HTTP
- 통신 기록
- 인증
- HTTPS
- 정적 콘텐츠 관리
- 가상 호스팅
- 대역폭 스로틀링
DB 서버
- MYSQL
- 다중 스레드 및 다중 사용자 형식의 데이터 베이스 관리 시스템
'정보처리기사 개정' 카테고리의 다른 글
5. 정보시스템 구축 관리 (0) 2021.05.26 3. 데이터베이스 구축 (0) 2021.05.26 2. 소프트웨어 개발 (0) 2021.05.26 1. 소프트웨어 설계 (0) 2021.05.26 댓글