2과목 소프트웨어 개발
1. 자료구조의 분류
- 선형구조 : 배열, 스택, 큐, 데크, 선형리스트
- 비선형구조 : 트리, 그래프
2. 트리
- Node와 Branch를 이용하여 사이클을 이루지 않도록 구성한 그래프의 특수한 형태
- Degree(차수) : 각 노드에서 뻗어나온 가지의 수
- Terminal Node(단말 노드) : 자식이 없는 노드, Degree가 0인 노드
3. 그래프
- 방향 그래프
: 정점을 연결하는 선에 방향이 있는 그래프
: n개의 정점으로 구성된 방향 그래프의 최대 간선수 n(n-1)
- 무방향 그래프
: 정점을 연결하는 선에 방향이 없는 그래프
: 최대 간선수 n(n-1)/2
4. 데이터베이스 - 데이터 종류
: 공용 데이터( shared ) : 여러 응용 시스템들이 공동으로 소유하고 유지하는 재료
: 통합된 데이터 ( integrated) : 자료의 중복을 최대로 배제한 데이터의 모임
: 운영데이터( Operational) : 고유한 업무를 수행하는데 없어서는 안될 자료
: 저장된 데이터( Store ) : 컴퓨터가 접근할 수 있는 저장 매체에 저장된 자료
5. 트랜잭션의 등장(ACID)
- Atomicity(원자성) : 트랜잭션 연산을 데이터베이스에 모두 변경 또는 반영하지 말아야함 ( All or Nothing )
- Consistency(일관성) : 트랜잭션 실행을 성공적으로 완료할 시 일관성있는 데이터베이스 상태를 유지
- Isolation(독립성) : 둘 이상 트랜잭션의 동시 실행시 한 개의 트랜잭션만 접근이 가능하여 간섭 불가
6. 프로시저 : 미리 저장해놓은 SQL 실행, 한개 이상의 값 반환 혹은 아예 하지 않음
사용자 정의 함수 : 예약어 return을 통해처리 결과를 단일값으로 반환
7. 소프트웨어 패키징
- 모듈별로 생성한 실행 파일들을 묶어 배포용 설치파일을 만드는 것
- 개발자가 아닌 사용자를 중심으로 진행
- 기능 식별 -> 모듈화 -> 빌드 진행 -> 사용자 환경 분석 -> 패키징 및 적용 시험 -> 패키징 변경 배포 -> 배포
- 고려사항 : 보안, 복잡성 및 비효율성 문제, 암호화 알고리즘, 다양한 이기종 연동
8. 릴리즈 노트 작성 순서
모듈 식별 -> 릴리즈 정보 확인 -> 릴리즈 노트 개요 작성 -> 영향도 체크 -> 정식 릴리즈 노트 작성 -> 추가 개선 -> 항목 실별
9. 디지털 저작관 관리(DRM : Digital Right Management)
- 콘텐츠 제공자
- 콘텐즈 분배자
- 콘텐츠 소비자
- 패키저 : 콘텐츠를 메타 데이터와 함께 배포 가능한 형태로 묶어 암호화하는 프로그램
- 클리어링 하우스(clearing house) : 저작권에 대한 사용 권한, 라이선스 발급, 사용량에 따른 결제관리 등을 수행하는 곳
- DRM 컨트롤러 : 배포된 콘센트의 이용 권한을 통제하는 프로그램
- 보안 컨테이너 : 콘텐츠 원본을 안전하게 유통하기 위한 보안 장치
10. 디지털 저작권 관리의 기술 요소
- 암호화, 키 관리, 식별기술, 저작권 표현, 암호화 파일 생성, 정책 관리, 크랙 방지, 인증
11. 프로그램 실행 여부에 따른 테스트
- 정적 테스트 : 프로그램을 실행하지 않고 명세서나 소스코드를 대상으로 분석하는 테스트
: 워크 스루, 인스펙션, 코드 검사
- 동적 테스트 : 프로그램을 실행하여 오류를 찾음
: 화이트 박스 테스트, 블랙 박스 테스트
12. 목적에 따른 테스트
- 회복테스트, 안전테스트, 강도테스트, 성능테스트, 구조테스트, 병행 테스트
- 회귀 테스트 : 변경된 코드에 새로운 결함이 없음을 확인하는 테스트
13. 화이트 박스 테스트
- 모듈안의 내용(작동)은 직접 볼수 있음
- 내부의 논리적인 모든 경로를 테스트
- 소스코드의 모든 문장을 한번 이상 수행
- 선택, 반복 등의 부분을 수행함으로써 논리적 경로 점검
- 기초 경로 검사, 제어 구조 검사( 조건 검사, 루프 검사, 데이터 흐름 검사)
14. 블랙 박스
- 모듈 안에서 어떤 일(작동)이 일어나는지 알 수 없음
- 소프트웨어가 수행할 특정 기능을 알기 위해 각 기능이 완전히 작동 되는 것을 입증하는 테스트로 기능 테스트 라고도 함
- 소프트웨어 인터페이스에서 실시되는 테스트
- 동치분할 검사, 경계값 분석, 비교 검사, 오류 예측 검사, 원인-효과 그래프 검사
15. 단위 테스트
- 최소단위인 모듈이나 컴포넌트에 초점을 맞추어 테스트
- 주로 구조기반 테스트( 명세기반 or rnwhrlqks)
16. 통합 테스트( Integration Test)
- 단위 테스트가 완료된 모듈을 결합하여 하나의 시스템으로 완성시키는 과정의 테스트
- 모듈간 또는 통합된 컴포넌트 간의 상호작용
- 빅뱅 테스트, 상향식 테스트(클러스터, 드라이버), 하향식 테스트(stub)
17. 시스템 테스트
- 개발된 소프트웨어가 컴퓨터 시스템에서 완벽하게 수행되는가를 점검하는 테스트
- 실제 사용환경과 유사한 환경에서 테스트 수행
- 기능적 요구사항(블랙박스 테스트)
- 비기능적 요구사항(화이트박스 테스트)
18. 인수 테스트( Acceptance Test)
- 개발한 소프트웨어가 사용자의 요구사항을 충족하는지에 중점을 두는 테스트
- 알파 테스트 : 통제된 환경에서 사용자가 개발자와 함께 확인하면서 행하는 테스트
- 베타 테스트 : 통제되지 않은 환경에서 여러명의 사용자가 행하는 테스트
19. 상향식 통합테스트
- 프로그램의 하위모듈에서 상위모듈 방향으로 통합하면서 테스트하는 기법
- 하나의 주요 제어 모듈과 관련된 종속 모듈의 그룹인 클러스터 필요
- 하위 모듈을 클러스터로 결합 -> 더미 모듈인 드라이버 작성 -> 통합된 클러스터 단위로 테스트 -> 테스트 완료 후 클러스터는 프로그램 구조의 상위로 이동해 결합하고 드라이버는 실제 모듈로 대체 됨
20. 하향식 통합테스트
- 깊이 우선 통합법 / 넓이 우선 통합법
- 테스트 초기부터 사용자에게 시스템 구조를 보여줄 수 있음
- 주요 제어 모듈은 작성된 프로그램을 사용, 주요 제어 모듈의 종속 모듈은 stub으로 대체
-> 깊이 우선 또는 넓이 우선 등의 통합 방식에 따라 하위 모듈인 스텁들이 한번에 하나씩 실제 모듈로 교체됨
-> 모듈이 통합될 때마다 테스트 실시
-> 새로운 오류가 발생하지 않음을 보증하기 위해 회귀테스트 실시
21. 혼합식 통합 테스트
- 하위 수준에서는 상향식 통합. 상위 수준에서는 하향식 통합을 사용해 최적의 테스트를 지원하는 방식
- 샌드위치 통합 테스트 방법
22. 테스트 오라클
- 테스트 결과과 올바른지 판단하기 위해 사전에 정의된 참 값을 대입해 비교하는 활동
- 제한된 검증 : 모든 TC에 적용할 수 없음
- 수학적 기법 : 값을 수학적 기법을 이용해 구할 수 있음
- 자동화 기능 : 프로그램 실행, 결과 비교, 커버리지 측정등을 자동화 할 수 있음
- 참(True) 오라클 : 모든 테스트케이스 입력 값에 대해 기대하는 결과를 제공하는 오라클. 발생된 모든 오류를 검출할 수 있음
- 샘플링 오라클 : 특정한 몇몇 테스트 케이스의 입력 값들에 대해서만 기대하는 결과를 제공하는 오라클
- 휴리스틱 오라클 : 샘플링 오라클을 개선한 오라클, 특정 테스트 케이스의 입력 값에 대해 기대하는 결과를 제공하고 나머지 입력 값들에 대해서는 추정으로 처리하는 오라클
23. 테스트 하네스( Test Harness)
- 테스트 드라이버 : 테스트 대상의 하위 모듈을 호출하고 모듈테스트 수행 후의 결과를 도출하는 도구
- 테스트 스텁 : 테스트 대상의 상위 모듈을 대신 하는 제어 모듈이 호출하는 타 모듈의 기능을 단순히 수행하는 도구
- 테스트 슈트(suite) : 테스트 대상 컴포넌트나 모듈 등 시스템에 사용되는 TC의 집합
- 테스트 케이스 : 사용자의 요구사항을 정확하게 준수했는지 확인하기 위한 입력 값, 실행 조건, 기대 결과 등으로 만들어진 테스트 항목 명세서
- 테스트 스크립트 : 자동화된 테스트 실행 절차에 대한 명세서
- 목 오브젝트 : 사전에 사용자의 행위를 조건부로 입력해 두면, 그 상황에 맞는 예정된 행위를 수행하는 객체
24. 결함 상태 추적
- 결함 분포 : 컴포넌트의 특정 속성에 해당하는 결함 수 측정
- 결함 추세 : 테스트 진행 시간에 따른 결함 수의 추이 분석
- 결함 에이징(Fault Aging) : 특정 결함 상태로 지속되는 시간 측정
25. 결함 추적 순서
- 결함등록 -> 결함 검토 -> 결함 함ㄹ당 -> 결함 수정 -> 결함 조치 분류 -> 결함 종료 -> 결함 해제
26. 결함 심각도
- critical > major > normal > minor > simple
27. 결함 우선순위
- critical > high > medium > low
28. 어플리케이션 성능
- 처리량(throughtput), 응답시간, 경과시간( turn around time), 자원 사용률( resource usage)
29. 클린코드 작성원칙
- 가독성, 단순성, 의존성, 배제, 중복성, 최소화, 추상화
30 소스코드 품질 분석 도구의 종류
- 정적 분석 도구 : pmd, cppcheck, ccm, checkstyle, sonarQube, cobertuna
- 동적 분석도구 : avalanche, valgrind
31. EAI ( Enterprise Application Integration )
- 기업 내 각종 애플리케이션 및 플랫폼 간의 정보 전달, 연계, 통합 등 상호 연동이 가능하게 해주는 솔루션
포인트 투 포인트 | 점대점으로 연결하는 방식, 변경 및 재사용이 어려움 |
메세지 버스(EBS 방식) | 어플리케이션 사이에 미들웨어를 둬 처리하는 방식, 확장성이 뛰어나며 대용량 처리가 가능 |
허브앤스포크(Hub&Spoke) | 단일 접점인 허브 시스템을 통해 데이터를 전송하는 중앙 집중형 방식 확장 및 유지보수가 용이하지만 허브 장애 발생시 시스템 전체에 영향을 미침 |
하이브리드 | Hub&Spoke(그룹 내)와 Message Bug(그룹간)의 혼합 방식 데이터 병목 현상을 최소화 할 수 있음 |
32. ESB ( Enterprise Service Bus )
- 어플리케이션간 연계, 데이터 변환, 웹서비스 지원 등 표준 기반의 인터페이스를 제공하는 솔루션
- 애플리케이션 통합 측면에서 EAI와 유사하지만 어플리케이션보다는 서비스 중심의 통합을 지향
- 결합 도구를 약하게 유지함
- 관리 및 보안 유지가 쉽고 높은 수준의 품질 지원 가능
33. 인터페이스 보안 기능 적용
- 네트워크 애플리케이션, 데이터베이스 영역
- 스니핑 : 네트워크의 중간에서 남의 패킷 정보를 도청하는 해킹 유형
- 소프트웨어 개발 보안 ( secure coding ) : 소프트웨어 개발과정에서 지켜야할 일련의 보안 활동
: 입력데이터 검증 표현, 보안 기능, 시간 및 상태, 에러 처리, 코드 오류, 캡슐화, API 오용
34. 인터페이스 구현 검증 도구
xUnit | java, c++, net등 다양한 언어를 지원하는 단위 테스트 프레임 워크 (Junit, Nunit,,,,) |
STAF | 서버 호출 및 컴포넌트 재사용등 다양한 환경을 지원하는 테스트 프레임워크 |
FitNess | 웹 기반 테스트케이스 설계, 실행, 결과 확인등을 지원하는 테스트 Framework |
NTAF | STAF의 장점인 재사용 및 확장성과 FitNess의 장점인 협업 기능을 통합한 NHN의 테스트 자동화 Framework |
Selenium | 다양한 브라우저 및 개발 언어를 지원하는 웹 애플리케이션 테스트 프레임워크 |
Watir | Ruby 언어를 사용하는 어플리케이션 테스트 프레임워크 |
4과목 프로그래밍 언어 확용
1. 개발 환경 구축의 개요
- 개발 프로젝트를 이해하고 하드웨어 및 소프트웨어 장비를 구축하는 것
- 하드웨어와 소프트웨어의 성능, 편의성, 라이선스 등의 비즈니스 환경에 적합한 제품들을 최종적으로 결정하여 구축
2. 하드웨어 환경
- 사용자와 인터페이스 역할을하는 클라이언트와, 클라이언트와 통신하여 서비스를 제공하는 서버로 구성됨
- Web Server : 클라이언트로부터 직접 요청을 받아 처리하는 서보로 저용량의 정적 파일을 제공
-> Apache Http Server, Microsoft Internet Service, Google Web Server
- Web Application Server : 동적인 콘텐츠를 처리하기 위해 사용되는 미들웨어(소프트웨어)
-> 데이터 접근 ,세션 관리, 트랜잭션 관리등을 위한 라이브러리를 제공
-> Apache Tomcat, IBM WebSphere, Oracle WebLogic, JEUS, JBoss, Jetty, Resin
3. 웹 서버의 기능
- HTTP/HTTPS 지원 : 브라우저로부터 요청을 받아 응답할 때 사용되는 프로토콜
- 통신 기록(Communication Log) : 처리한 요청들을 로그 파일로 기록
- 정적 파일 관리(Managing Static Files) : HTML, CSS, 이미지 등의 정적 파일을 저장하고 관리
- 대역폭 제한(Bandwidth Throttling) : 네트워크 트래픽의 포화를 방지하기 위해 응답 속도를 제한
- 가상 호스팅 : 하나의 서보로 여러 도메인 이름을 연결
- 인증(Authentication) : 사용자가 합법적인 사용자인지 확인
4. 시스템 소프트 웨어 : 클라이언트와 서버 운영을 위한 시스템 소프트 웨어
- 운영체제, 웹 서버 및 WAS 운용을 위한 서버 프로그램, DBMS
5. 개발 소프트웨어 : 개발에 사용되는 소프트웨어
- 요구사항 관리 도구 : jira, IMB DOORS, inteGREAT, Reqtify, Trello
- 설계/모델링 도구 : DB Designer, PlantUML, ArgoUML
- 빌드 도구 : Ant, maven, gradle, jenkins
- 구현 도구 : Eclipse, IntelliJ, Visual Studio, NodeJs
- 테스트 도구 : CppUnit, JUnit, HttpUnit, SprintTest
- 형상 관리 도구 : CVS, SVN, GIT
6. 개발 언어의 선정 기준
- 적정성, 효율성, 이식성, 친밀성, 범용성
7. 서버 개발 프레임워크
- Spring
- NodeJs : JavaScript 기반 프레임워크, 비동기 입출력 처리와 이벤트 위주으이 높은 처리 성능을 갖고 있어 실시간으로 입출력이 빈번한 애플리케이션에 적합함
- Django : Python 기반, 컴포넌트의 재사용과 플러그인화를 강조하여 신속한 개발이 가능하도록 지원함
- Codeigniter : PHP 기반, 인터페이스가 간편하며 서버 자원을 적게 사용함
- Ruby on Rails : Ruby 기반, 테스트를 위한 웹 서버를 지원하며 데이터 베이스 작업을 단순화, 자동화시켜 개발 코드의 길이가 짧아 신속한 개발 가능
8. 서버 프로그램 구현(효과적인 모듈 설계)
- 모듈 및 공통 모듈을 개발한 후, 모듈들을 통합하는 방식으로 구현, 유지보수가 용이해야함
- 모듈의 독립성을 높이려면 모듈의 결합도를 약하게하고 응집도(Cohesion)를 강하게하며 모듈의 크기를 작게 만들어야함.
- 복잡도와 중복성을 줄이고 일관성 유지
- 공통 묘듈은 여러 프로그램에서 재사용 할 수 있는 모듈을 의미
9. 재사용 프로그래밍 기법
- 객체지향 프로그래밍, 제네릭 프로그래밍, 자동 프로그래밍, 메타 프로그래밍
10 프레임워크의 특성
- 모듈화, 재사용성, 확장성, 제어의 역흐름(IoC)
11. 프레임워크의 구성요소
- 개발환경, 실행환경, 운영환경, 관리환경
12. 소프트웨어 개발 보안의 개요
- 시큐어 코딩
- 기밀성(Confidentiality, 무결성(Integrity), 가용성(Availability)을 유지하는 것을 목표
13. 소프트웨어 개발 보안 점검 항목
- 세션 통제
- 입력 데이터 검증 및 표현
- 보안 기능
- 시간 및 상태 : 병렬 처리 시스템등에서 시간과 실행상태 관리
- 에러 처리
- 코드 오류
- 캡슐화
- API 오용
14. API(Application Programming Interface)
- Windows API, 단일 유닉스 규격(SUS), Java API, 웹 API 등
15. 배치 프로그램의 개요
- 사용자와의 상호 작용 없이 여러 작업을 미리 정해진 순서에 따라 일괄적으로 처리하는 것
- 이벤트성 배치, 정기 배치, On-demand 배치(사용자 요청 시 수행)
- 대용량 데이터의 처리 가능, 자동화, 견고성, 안정성/신뢰성, 성능
16. 스프링 배치
- 주요 구성 요소 : job, job launcher, job repository, step
17. 쿼츠
- 주요 구성 요소 : job, job detail, trigger, scheduler
18. 패키지 소프트웨어
- 기업에서 일반적으로 사용하는 여러 기능들을 통합하여 제공하는 소프트웨어
- 기업에서 패키지 소프트웨어를 구입해 기업 환경에 적합하게 커스터마이징 후 사용
- 기능 요구사항을 70%이상 충족시키는 패키지 소프트웨어 사용
19. 패키지 소프트웨어 vs 전용 개발 소프트 웨어
패키지 소프트웨어 | 전용 개발 소프트웨어 | |
기능 요구사항 | 70% 이상 충족시키는 패키지 소프트웨어 | 모든 기능 요구사항 반영 가능 |
안정성 | 품질이 검증됐고, 업계 표준 준용 | 개발자의 역량에 따라 달라짐 |
라이선스 | 판매자 | 회사 |
생산성 | 개발을 위한 인력과 시간 절약 가능 | 개발을 위한 인력과 시간 필요 |
호환성 | 보장 안됨 | 설계 단계부터 고려하며 개발해서 호환성 좋음 |
유지보수 | 결함 발생 시 즉시 대응 어려움 | 결함 발생 시 즉시 대응 가능 |
20. 산술 연산자
- // : 나누기 연산 후 소수점 이하의 수를 버리고 정수 부분의 몫을 구함
- % : 나누기 연산 후 나머지
21. 비트 연산자
- & : and, 모든 비트가 1일때만 1
- | : or, 모든 비트중 1개라도 1이면 1
- ^ : xor , 모든 비트가 같으면 0, 다르면 1
- ~ : not, 각 비트의 부정, 0이면 1, 1이면 0
22. 절차적 프로그래밍 언어의 장, 단점
- 컴퓨터의 처리 구조와 유사하여 실행 속도가 빠름
- 같은 코드를 복사하지 않고 다른 위치에서 호출하여 사용할 수 있음(이식성)
- 모듈 구성이 용이하며, 구조적인 프로그래밍이 가능함
- 프로그램을 분석하기 어렵고, 유지 보수나 코드의 수정이 어려움
23. 절차적 프로그래밍 언어의 종류
- C, Algol(알골), Cobol(코볼), Fortran(포트란), Basic(베이직)
24. 객체지향 언어의 장,단점
- 상속을 통한 재사용과 시스템의 확장이 용이, 코드의 재활용성이 높음
- 사용자와 개발자 사이의 이해를 쉽게해주고, 대형 프로그램 작성 용이
- 프로그래밍 구현을 지원해주는 정형화된 분석 및 설계 방법이 없음
- 구현시 처리시간이 지연됨 -> 실행 속도가 느림
25. 객체지향 프로그래밍 언어의 종류
- C++, C#, Java, Delphi(델파이), Smalltalk
26. 객체지향 프로그래밍 언어의 구성 요소
- 객체, 클래스, 인스턴스, 메서드, 메시지
27 객체 지향 프로그래밍 언어의 특징
- 캡슐화(Encapsulation), 상속성, 다형성, 추상화, 정보 은닉
28. 스크립트 언어
- HTML 문서 안에 직접 프로그래밍 언어를 삽입하여 사용하는 것으로, 기계어로 컴파일되지 않고 별도의 번역기가 소스를 분석하여 동작하게하는 언어
- 클라이언트용 언어 : javaScript , 클라이언트의 웹 브라우저에서 해석되어 실행
- 서버용 스크립트 언어 : ASP, JSP, PHP, Python, 서버에서 해석되어 실행된 후 결과만 클라이언트로 보냄
29. 스크립트 언어의 장, 단점
- 컴파일 없이 바로 실행하므로 결과를 바로 확인할 수있음
- 개발 시간이 짧고, 소스코드를 쉽고 빠르게 수정할 수 있음
- 코드를 읽고 해석해야하므로 실행 속도가 느리고, 런타임 오류가 많이 발생함
30. 스크립트 언어의 종류
- Javascript, Asp, Jsp, PHP, Python, Perl
31. 표준 라이브러리 : 프로그래밍 언어에 기본적으로 포함되어 있는 라이브러리
32. C언어의 대표적인 표준 라이브러리
- stdio.h : 데이터의 입출력
- stdlib.h : 자료형 변환, 난수 발생, 메모리 할당에 사용되는 기능 제공
33. Java의 대표적인 표준 라이브러리
- java.awt : 사용자 인터페이스(UI)와 관련된 기능 제공
34. 운영체제 정의
- 컴퓨터 시스템의 자원들을 효율적으로 관리하며, 사용자가 컴퓨터를 편리하고 효과적으로 사용할 수 있도록 환경을 제공하는 여러 프로그램의 모임
35. 운영체제의 목적
- 처리 능력(Throughput) : 일정 시간 내에 시스템이 처리하는 일의 양
- 반환 시간(Turn Around Time)
- 사용 가능도(Availability) : 시스템을 사용할 필요가 있을 때 즉시 사용가능한 정도
- 신뢰도(Reliability) : 시스템이 주어진 문제를 정확하게 해결하는 정도
36. 운영체제의 기능
- 자원 관리
- 스케줄링 기능
- 사용자와 시스템간의 인터페이스 제공, 입출력 장치와 사용자 프로그램 제어
- 데이터 및 자원의 공유 기능
- 시스템의 오류 검사 및 복구, 자원 보호 기능
- 입,출력에 대한 보조 기능 제공 -> 가상 계산기 기능 제공
37. 운영 체제의 주요 자원 관리
- 프로세스 관리, 기억장치 관리, 주변장치 관리, 파일 관리
38. OS 특성
- Window : GUI, 선점형 멀티태스킹, PnP, OLE, 긴 파일명, 개인 사용자 시스템
- UNIX
-> Open System, 시분할 시스템, 다중 사용자, 다중 작업, 호환성 높음, 계층 구조(트리 구조)
-> 커널 : 컴퓨터가 부팅될때 주기억장치에 적재, 프로그램과 하드웨어 간의 인터페이스 역할,
-> 쉘 : 명령어 해석기, 시스템과 사용자 간의 인터페이스 역할, 파이프라인 기능, 여러 종류의 쉘이 있음
- LINUX : Unix 기반
- MacOs : Unix rlqks,
39. UNIX에서의 프로세스 간 통신
- 각 프로세스는 시스템 호출을 통해 커널의 기능을 사용, 프로세스간 통신은 시그널, 파이프, 소켓을 사용
- 시그널 : 간단한 메세지를 이용하여 통신
- 파이프 : 한 프로세스의 출력이 다른 프로세스의 입력으로 사용되는 단방향 통신
- 소켓 : 프로세스 사이의 대화를 가능하게 하는 쌍방향 통신
40. 기억장치 관리 전략
- 보조기억장치의 프로그램이나 데이터를 주기억장치에 적재시키는 시기, 위치등을 지정하여 한정된 주기억장치의 공간을 효율적으로 사용하기 위함
- 반입(Fetch), 배치(Placement), 할당(Allocation), 교체(Replacement)
41. 반입(Fetch) 전략
- 보조 기억장치에 보관중인 프로그램이나 데이터를 언제 주기억장치로 적재할 것인지를 결정하는 전략
- 요구 반입(Demand Fetch) : 실행중인 프로그램미 특정 프로그램이나 데이터 등의 참조를 요구할 때 적재하는 방법
- 예상 반입(Anticipatory Fetch) : 실행중인 프로그램에 의해 참조될 프로그램이나 데이터를 미리 예상하여 적재하는 방법
42. 배치 전략
- 새로 반입되는 프로그램이나 데이터를 주기억장치의 어디에 위치시킬지 결정하는 전략
- 최초 적합(First Fit) : 빈 영역 중에서 첫번째 분할 영역에 배치
- 최적 적합(Best Fit) : 빈 영역 중에서 단편화를 가장 적게 남기는 분할 영역에 배치
43. 교체 전략
- 이미 사용되고 있는 영역 중에서 어느(Who) 영역을 교체할지 결정하는 전략
- FIFO, LRU, LFU, NUR, OPT, SCR
44. 주기억장치 할당(Allocation)의 개념
- 프로그램이나 데이터를 실행시키기 위해 주기억장치에 어떻게 할당할지 정함
- 연속 할당 기법 : 프로그램을 주기억장치에 연속으로 할당하는 기법
-> 단일 분할 할당 기법 : 오버레이, 스와핑
-> 다중 분할 할당 기법 : 고정(정적) 분할 할당 기법, 가변(동적) 분할 할당 기법
- 분할 할당 기법 : 프로그램을 특정 단위의 조각으로 나누어 할당하는 기법
-> 페이징 기법, 세그먼테이션 기법
45. 가상기억장치
- 용량이 작은 주기억장치를 마치 큰 용량을 가진 것 처럼 사용하는 기법
- 주소 변환 작업 필요
- 연속 할당 방식의 단편화 해결 가능
46. 페이징(Paging) 기법
- 가상 기억장치에 보관되어있는 프로그램과 주기억장치의 영역을 동일한 크기로 나눈 후 나눠진 프로그램(페이지)를 동일하게 나눠진 주기억장치의 영역(페이지 프레임)에 적재시켜 실행하는 방법
- 페이지 : 일정한 크기로 나눈 단위
- 페이지 프레임 : 페이지 크기로 일정하게 나누어진 주기억장치의 단위
- 주소 변환을 위해 페이지 위치 정보를 갖고 있는 페이지 맵 테이블 필요
- 페이지 맵 테이블 사용으로 비용 증가, 처리 속도 감소
- 외부 단편화는 발생하지 않으나 내부 단편화 발생
47. 세그먼테이션(Segmentation) 기법
- 가상기억자치에 보관되어 있는 프로그램을 다양한 크기의 논리적인 단위로 나눈 후 주기억장치에 적재시켜 기억공간을 절약하기 위해서 사용하는 방법
- 세그먼트 : 논리적인 크기로 나눈 단위, 각 세그먼트는 고유한 이름과 크기를 가짐
- 기억장치의 사용자 관점을 보존하는 기억장치 관리 기법
- 주소 변환을 위해서 세그먼트가 존재하는 위치정보를 갖고 있는 세그먼트 맵 테이블 필요
- 세그먼트가 주기억장치에 적재될 때 다른 세그먼트에게 할당된 영역을 침법할 수 없으며, 이를 위해 기억장치 보호키가 필요
- 내부 단편화는 발생하지 않으나, 외부 단편화 발생
48. 페이지 교체 알고리즘
- FIFO = FCFS(First Come, First Service)
- LRU( Least Recently Used) : 가장 오래전에 사용된 페이지 교체
- LFU( Least Frequently Used) : 사용빈도가 가장 적은 페이지 교체
- OPT(Optimal replacement, 최적 교체) : 앞으로 오래동안 사용하지 않을 페이지 교체, 페이지 부재 횟수가 가장 적게 발생하는 효율적인 알고리즘
- NUR(Not Used Recently) : 최근에 사용하지 않은 페이지 교체
49. 페이지 크기가 작을 경우
- 페이지 단편화 감소, 한 개의 페이지를 주기억장치로 이동하는 시간이 줄어듬
- 불필요한 내용이 주기억장치에 적재될 확률이 적으므로 효율적인 워킹 셋 유지 가능
- 기억장치 효율 높아짐
- 페이지 맵 테이블의 크기가 커지고, 매핑 속도가 늦어짐
- 디스크 접근 횟수가 많아져 전체적인 입,출력 시간은 늘어남
- 페이지 크기가 클경우 -> 반대
50. Locality(지역성, 구역성)
- 프로세스가 실행되는 동안 주기억장치를 참조할 떄 일부 페이지만 집중적으로 참조하는 성질이 있다는 이론
- 스래싱(Thrashing)을 방지하기 위한 워킹 셋 이론의 기반
- 데닝(Denning) 교수에 의해 구역성의 개념 증명, 캐시 메모리 시스템의 이론적 근거
- 시간적 구역성(Temporal) : 한번 참조한 페이지는 가까운 시간 내에 계속 참조할 가능성이 높음( Loop, Stack, Subroutine, Counting, Totaling)
- 공간적 구역성(Spatial) : 어느 하나의 페이지를 참조하면 그 근처의 페이지를 계속 참조할 가능성이 높음( Array, Sequential Code)
51. 워킹 셋
- 프로세스가 일정 시간 동안 자주 참조하는 페이지들의 집합
- 주기억장치에 상주시킴으로써 페이지 부재 및 페이지 교체 현상이 줄어들어 프로세스의 기억장치 사용이 안정됨
- 시간이 지남에 따라 자주 참조하는 페이지들의 집합이 변화하기 떄문에 워킹 셋은 시간에 따라 변경됨
52. 페이지 부재 빈도(PFF, Page Fault Frequency) 방식
- 페이지 부재율에 따라 주기억장치에 있는 페이지 프레임의 수를 늘리거나 줄여 페이지 부재율을 적정 수준으로 유지하는 방식
- 페이지 부재는 프로세스 실행 시 참조할 페이지가 주기억장치에는 없는 현상이며, 페이지 부재 빈도는 페이지 부재가 일어나는 횟수를 의미함
53. 프리페이징(Prepaging)
- 처음의 과도한 페이지 부재를 방지하기 위해 필요할 것 같은 모든 페이지를 미리 한꺼번에 페이지 프레임에 적재하는 기법
- 기억장치에 들어온 페이지들 중에서 사용되지 않는 페이지가 많을 수도 있음
54. 스래싱(Thrashing)
- 프로세스의 처리 시간보다 페이지 교체에 소요되는 시간이 더 많아지는 현상 -> 전체 시스템 성능 저하
- 다중 프로그래밍(멀티 태스킹)의 정도가 높아짐에 따라 CPU의 이용률은 어느 특정 시점까지는 높아지지만, 다중 프로그래밍의 정도가 더욱 커지면 스래싱이 나타나고, CPU의 이용률은 급격히 감소됨
55. 스래싱 현상 방지 방법
- 다중 프로그래밍의 정도를 적정 수준으로 유지
- 페이지 부재 빈도를 조절해 사용
- 워킹셋을 유지함
- 부족한 자원을 증설하고 일부 프로세스를 중단 시킴
56. 프로세스의 정의
- 프로시저가 활동중인 것
- 비동기적 행위를 일으키는 주체
- 운영체제가 관리하는 실행 ㄴ위
- 실행중인 프로그램
57. PCB(Process Control Block, 프로세스 제어 블록)
- 프로세스 고유 식별자, 프로세스의 현재상태, 프로그램 카운터, CPU 레지스터 정보, 스케줄링 및 프로세스의 우선순위, 계정 정보, 입출력 상태 정보, 메모리 장치 관리 정보, 포인터
58. 프로세스 상태 전이
- 생성(New), 준비(Ready), 실행(Run), 대기(Wait), 종료(Exit)
59. 프로세스 상태 전이 관련 용어
- 디스패치 : 준비-> 실행 / 준비 상태에서 대기하고 있는 프로세스 중 하나가 프로세서를 할당 받아 실행 상태로 전이되는 과정
- Wake Up : 대기 -> 준비 / 프로세스가 대기 상태에서 준비 상태로 전이되는 과정
- 스풀링(Spooling) : 나중에 한꺼번에 입출력하기 위해 디스크에 저장하는 과정
60. 스레드(Thread)
- 프로세스 내에서의 작업 단위
- 독립정인 다중 수행 가능
- 병행성 증진 및 성능과 처리율 향상, 프로그램 응답시간 단축
- 기억장소의 낭비가 줄어들고 통신이 향상됨
61. 스케쥴링
- 프로세스가 생성되어 실행될 때 필요한 시스템의 여러 자원을 해당 프로세스에게 할당하는 작업
- 장기 스케줄링( 작업, 상위 스케줄링 : 작업 스케줄러에 의해 수행됨, 어떤 프로세스가 시스템의 자원을 차지할 수 있도록 할 것인가를 결정하여 준비상태 큐로 보냄
- 중기 스케줄링 : 어떤 프로세스들이 CPU를 할당 받을 것인지 결정
- 단기 스케줄링(프로세서, 하위 스케줄링) : 프로세스가 실행되기 위해 CPU를 할당받는 시기와 특정 프로세스를 지정하는 작업, 프로세서 스케줄링 및 문맥교환은 프로세서 스케줄러에 의해 수행됨
- 문맥교환(Context Switching) : 하나의 프로세스에서 다른 프로세스로 CPU가 할당되는 과정에서 발생되는 것
62. 스케줄링의 목적
- 공정성, 처리량 증가, CPU 이용량 증가, 우선순위 제도, 오버헤드 최소화, 응답시간 최소화, 반환시간 최소화, 대기시간 최소화, 균현있는 자원의 사원, 무한 연기 회피
63. 선점 스케줄링(Preemptive)
- 하나의 프로세스가 CPU를 할당받아 실행되고 있을 때 우선순위가 높은 다른 프로세스가 CPU를 강제로 빼앗아 선점할 수 있는 기법
- 우선순위가 높은 프로세스 빠르게 처리
- 대화식 시분할 시스템에 사용
- 많은 오버헤드 발생
- 인터럽트 타이머 클록 필요
- Round Robin, SRT, MLQ, MFQ
64. 비선점 스케줄링
- 이미할당된 CPU를 다른 프로세스가 강제로 빼앗아 선점할 수 없는 기법
- CPU를 할당받으면 해당 프로세스가 완료될 때까지 CPU 사용
- 모든 프로세스에 대한 요구를 공정하게 처리 가능
- 프로세스 응답 시간의 예측 용이
- 일괄 처리 방식에 적합
- 가뭄 현상 : 중요한 작업(짧은 작업)이 중요하지 않은 작업(긴 작업)을 기다리는 경우 발생
- 우선순위, 기한부, FCFS,SJF,HRN
65. HRN ( Hightest Response-ratio Next)
- SJF기법의 가뭄 현상을 보완하기 위한 방식
- 대기시간이 긴 프로세스일 경우 우선순위가 높아지고
- 우선순위의 계산식 수치가 가장 높은 것부터 우선순위를 부여
- 우선순위 계산식 : (대기시간+서비스시간)/서비스시간
66. 서브네팅(Subnetting)
- 할당된 네트워크 주소를 다시 여러개의 작은 네트워크로 나누어 사용하는 것
- 서브넷 마스크 : 네트워크 주소와 호스트 주소를 구분하기 위한 비트
37. IPv6
- 128비트, 자료 전송속도 빠름
- 인증성, 기밀성, 데이터 무결성의 지원으로 보안문제 해결 가능
- IPv4와 호환성 뛰어남, IPv6 확장 헤더로 네트워크 기능 확장이 용이
- 품질보장 용이(QoS, Quality of Service)
- 유니캐스트, 멀티캐스트, 애니캐스트
38. 도메인 내임
- 숫자로된 IP주소를 문자형태로 표현
- DNS : 문자로된 도메인 네임을 IP주소로 변환하는 역할
39. OSI(Open System Interconnection) 참조 모델
계정 | 설명 | 주요 프로토콜 |
7. 응용 계층(Application) | 사용자와 네트워크 간 응용서비스 연결, 데이터 생성 | HTTP, FTP, TELNET, SMTP / SNTP, DNS |
6. 표현 계층(Presentation) | 구문 검색, 코드 변환, 암복호화, 데이터 압축, 문맥 관리 기능 | JPEG, MPEG |
5. 세션 계층(Session) | 연결 접속(유지), 동기 제어, 동기점(대화) | SSH, TLS |
4. 전송 계층(Transport) | 종단간(End to End) 신뢰성 있는 데이터 전송, 흐름 제어(슬라이딩 윈도우), 오류 및 혼잡 제어 | TCP/UDP, RTCP -> 세그먼트 |
3. 네트워크 계층(Network) | 단말기 간 데이터 전송을 위한 최적화된 경로(라우팅) 제공 | IP, ICMP, ARP, RIP, OSPF -> 패킷 |
2. 데이터링크 계층(Data Link) | 인접 시스템(노드)간 물리적 연결을 이용해 데이터 전송, 동기화, 오류 및 흐름제어, 오류 검출 및 재전송 | MAC, LLC,HDLC,PPP -> 프레임 |
1. 물리계층(Physical) | 매체 간 전기적, 기능적, 절차적 기능 정의 | -> 비트 |
'기타내용' 카테고리의 다른 글
[소나큐브] "static" base class members should not be accessed via derived types (0) | 2022.01.25 |
---|---|
Kubernetes/쿠버네티스/K8s (0) | 2022.01.14 |
전자정부프레임워크 (0) | 2021.02.02 |
method annotated with @bean is called directly. use dependency injection instead (0) | 2021.01.26 |
[소나큐브] Cognitive Complexity of methods should not be too high (0) | 2020.12.29 |