반응형

정보처리기사 실기

1. Triple-A

Authentication: 보안 기능에서 사람이나 프로세스의 신분을 확인하는 것
Authorization: 검증된 사용자에게 어떤 수준의 권한과 서비스를 허용하는 것
Accounting: 사용자의 자원에 대한 정보를 모아서 과금, 감사, 용량증설, 리포팅 등을 실시하는 것

정보보안의 3요소

  • 기밀성: 인가된 사용자만 접근
  • 무결성: 인가된 사용자만 인가된 방법으로 자원 수정
  • 가용성: 인가된 사용자는 언제든지 접근 가능

접근 제어

  1. 강제적 접근제어(MAC, Mandatory Access Control)
    : 높은 보안 수준을 요구하는 정보가 낮은 보안 수준의 주체에게 노출되지 않도록 하는 접근 제어 방법
  2. 임의적 접근제어(DAC, Discretionary Access Control)
    : 객체의 소유주가 접근 여부를 결정
  3. 역할기반 접근제어(RBAC, Role Based Access Control)
    : 조직내에서 맡은 역할에 기초하여 자원에 대한 접근허용 여부를 결정하는 방법

MAC 보안 모델

  1. Bell-LaPadula Confidentiality Model; BLP
    • 기밀성 강조
    • No Read Up: 낮은 등급의 주체는 높은 등급의 객체를 읽을 수 없음
    • No Write Down: 높은 등급의 주체는 낮음 등급의 객체를 수정할 수 없음
  2. Biba Integrity Model
    • 무결성 강조
    • No Read Down: 높은 등급의 주체는 낮은 등급의 객체를 읽을 수 없음
    • No Write Up: 낮은 등급의 주체는 상위 등급의 객체를 수정할 수 없음
  3. Clark-Wilson Integrity Model
    • 무결성 강조
    • 상업용
  4. Brewer Nash, Chinese Wall Model
    • 이익 충돌 방지를 위한 모델
  5. Lattice
    • 정보의 흐름을 안전하게 제어

 

2. GRANT

사용자에게 접속 권한, 생성 권한 등의 권한을 부여하는 명령어

INSERT INTO TABLE(COL1, COL2) VALUES(VAL1, VAL2);
SELECT * FROM TABLE WHERE COL1=VAL1 GROUP BY... HAVING... ORDER BY...;
UPDATE TABLE SET COL1=VAL1 WHERE COL2=VAL2;
DELETE FROM TABLE WHERE COL1=VAL1;
GRANT UPDATE ON TABLE TO USER;
REVOKE SELECT ON TABLE FROM USER;

 

3. Spoofing

  • IP Spoofing
    • IP 자체의 보안 취약성을 악용한 것으로 자신의 IP 주소를 속여 접속하는 공격
  • ARP Spoofing
    • Mac 주소를 속여 랜에서의 통신 흐름을 왜곡시키는 공격
    • 공격 대상의 컴퓨터와 서버 사이의 트래픽을 공격자의 컴퓨터로 우회시켜 패스워드 정보 등 원하는 정보를 획득할 수 있음
  • DNS Spoofing
    • 공격 대상에 전달되는 DNS IP 주소를 조작하여 의도치 않는 주소로 접속하는 공격
    • 공격 대상은 정상적인 URL을 통해서 접속하지만, 실제로 가짜 사이트로 접속됨

 

4. 결합도(Coupling), 응집도(Cohesion)

모듈의 독립성을 판단하는 두 가지 지표

  • 결합도(Coupling): 모듈과 모듈간의 상호 의존 정도
  • 응집도(Cohesion): 모듈 내부의 기능적인 집중 정도

결합도(Coupling)

  1. 자료(Data): 파라미터로 만을 전달하는 경우
  2. 스탬프(Stamp): 파라미터로 배열이나 오브젝트, 스트럭쳐 등의 객체가 전달되는 경우
  3. 제어(Control): 파라미터로 값뿐만 아니라 제어 요소도 전달되는 경우
  4. 외부(External): 어떤 모듈에서 선언한 데이터(변수)를 외부의 다른 모듈에서 참조하는 경우
  5. 공통(Common): 공유되는 공통 데이터 영역(전역변수)을 여러 모듈이 사용하는 경우
  6. 내용(Content): 한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 직접 참조하거나 수정하는 경우
    • 내용 결합도가 높을 경우, 스파게티 코드가 될 수 있음
  • Spaghetti Code: 소스 코드가 복잡하게 얽힌 경우
  • Alien Code: 아주 오래되거나 참고문서가 없어 유지보수가 어려운 경우
  • Legacy Code: 더 이상 쓰기 힘들고 난해한 경우

응집도(Cohesion)

  1. 우연적(Coincidental): 모듈 내부의 각 구성요소들이 연관이 없을 경우
  2. 논리적(Logical): 유사한 성격을 갖는 요소들이 한 모듈에서 처리
  3. 시간적(Temporal): 특정 시간에 처리되어야 하는 활동들을 한 모듈에서 처리
  4. 절차적(Procedural): 모듈 안의 구성요소들이 그 기능을 순차적으로 수행
  5. 통신적(Communicational): 동일한 입력과 출력을 사용하여 다른 기능을 수행하는 활동들이 모여있을 경우
  6. 순차적(Sequential): 모듈 내에서 한 활동에서 나온 출력값을 다른 활동이 사용할 경우
  7. 기능적(Functional): 모듈 내부의 모든 기능이 단일한 목적을 위해 수행되는 경우

 

5. 디자인 패턴 (시험 직전에 확인)

생성 패턴(Creational Patterns) 5 : 객체 생성에 대한 패턴

종류 설명
Abstract Factory 서브 클래스를 상세히 정의하지 않고도 서로 관련성이 있는 여러 객체들을 생성하기 위한 인터페이스를 제공하는 패턴
Builder 복잡한 객체들을 단계별로 생성하는 패턴
Factory Method 상위 클래스에서 객체를 생성하는 인터페이스를 정의하고, 하위 클래스에서 인스턴스를 생성하는 패턴
Virtual-Constructor 패턴
Prototype 원본 객체를 복사하여 새 객체를 생성하는 패턴
SingleTon 오직 하나의 객체만을 생성하는 패턴

구조 패턴(Structural Patterns) 7 : 클래스나 객체를 조합해 더 큰 구조를 만드는 패턴

종류 설명
Adapter 호환되지 않는 인터페이스를 가진 객체들간의 기능을 변환하여 호환성을 제공하는 패턴
Bridge 추상화 클래스 계층과 구현 클래스 계층을 분리하는 패턴
Composite 객체 집합 속에 또 다른 객체 집합을 갖는 패턴
Decorator 새로운 기능이 추가될 때마다 새로운 객체를 만들고, 이전 객체의 기능은 새로운 객체내에서도 그대로 유지되는 패턴
Facade 서브시스템이 복잡할 경우 간단한 인터페이스를 통해 서브 시스템의 주요기능을 사용할 수 있도록 하는 패턴
Fly Weight 인스턴스의 공유를 통해 불필요한 객체 생성을 하지 않도록 하는 패턴
Proxy 원래 객체에 대한 접근을 제어하여, 요청이 원래 객체에 전달되기 전 또는 후에 추가적인 작업을 수행할 수 있도록 하는 패턴

행위 패턴(Behavioral Patterns) 11 : 객체나 클래스 간 알고리즘이나 상호 작용을 정의하기 위한 패턴

종류 설명
Chain of Responsibility 여러개의 객체를 체인으로 연결하여 그 객체의 체인을 순차적으로 걸어 가면서 최종적인 객체를 결정
Command 명령을 나타내는 클래스의 인스턴스를 하나로 표현
Interpreter 언어나 표현식을 해석하고 실행하는데 사용
Iterator 집합체의 요소에 차례로 액세스를 실시
Mediator 중개자을 통해서 행동을 일으키게 하는 방식
Memento 객체의 상태를 저장하고 복원하는 데 사용되며, 주로 "뒤로 가기" 기능이나 객체의 상태를 일시적으로 저장해야 하는 상황에서 유용
Observer 주로 분산 이벤트 핸들링 시스템을 구현하는데 사용
State 상태를 클래스로 표현하고 클래스를 전환하여 상태 변경을 나타내는 방법
Strategy 특정 작업 또는 알고리즘의 다양한 전략(방법)을 정의하고, 이들을 동적으로 교체하여 사용할 수 있게 하는 패턴
Template Method 슈퍼 클래스로 처리의 틀을 정해서 서브 클래스로 그 구체적 내용을 정하는 방식
Visitor 데이터 구조와 처리를 분리하는 방법

 

6. 파일 구조

파일의 구조는 파일을 구성하는 레코드들이 보조기억장치에 편성되는 방식을 의미하는 것으로, 편성 방법에 따라 순차, 색인, 랜덤, 해싱 등이 있다.

 

7. V모델

  1. 단위(Unit) 테스트
    : 개발자가 명세서의 내용대로 정확히 구현되었는지 단위 중심으로 테스트
    • 정적
      • 소스코드의 실행없이 내부 확인
      • 도구
        • PMD, SonarQube, FindBugs, CheckStyle, CppCheck, Cobertura
    • 동적: 입력값에 대한 출력값 확인
  2. 통합(Integration) 테스트
    : 단위 테스트를 통과한 컴포넌트 간의 인터페이스를 테스트
    • 빅뱅 테스트: 모든 모듈이 결합된 프로그램 전체가 대상
    • 상향식 테스트: 드라이버(Driver) 사용
    • 하향식 테스트: 깊이 우선 통합법, 넓이 우선 통합법 사용, 스텁(Stub) 사용
    • 혼합식 통합 테스트: : 하위 수준-상향식 통합, 상위 수준-하향식 통합 사용, 샌드위치(Sandwich)식 통합 테스트 방법
    • 회귀 테스팅(Regression Testing): 통합 테스트가 완료 된 후 변경된 모듈이나 컴포넌트가 있을 경우, 다른 부분에 영향을 미치는지 테스트하여 새로운 오류 여부를 확인
  3. 시스템(System) 테스트
    : 전체 시스템 또는 제품의 동작에 대해 테스트
    • 기능 요구사항 테스트: 기능 관련
    • 비기능 요구사항 테스트: 기능 외 성능, 보안, 품질 관련
  4. 인수(Acceptance) 테스트
    : 계약상의 요구사항이 만족되었는지 확인
    • 알파 테스트: 개발자 + 사용자
    • 베타 테스트: 사용자
    • 형상 테스트: 구조 확인

 

Test Oracle

: 테스트의 결과가 참인지 거짓인지를 판단하기 위해서 사전에 정의된 참값을 입력하여 비교하는 기법

  • 종류
    • 참(True) 오라클: 모든 입력값에 대해 기대하는 결과를 전수 검사
    • 샘플링 오라클: 특정 몇몇 입력값에 대해서만 검사
    • 휴리스틱 오라클: 특정 몇몇 입력값에 대해서만 검사 + 나머지는 추정으로 처리
    • 일관성 검사 오라클: 이전 수행결과와 현재 수행결과가 동일한지 검사

화이트/블랙박스 테스트

  • 화이트 박스 테스트: 모듈 내부 소스 코드를 보면서 수행하는 테스트
    • 종류
      • 기본 경로 커버리지(Base Path Coverage): 수행 가능한 모든 경로 테스트
      • 데이터 흐름 테스트(Data Flow Testing): 프로그램에서 변수의 정의와 변수 사용의 위치에 초점을 맞추어 검사
      • 조건 커버리지(Condition Coverage): 각 개별 조건식이 적어도 한 번은 참과 거짓의 결과가 되도록 수행
      • 구조적 커버리지: 애플리케이션에서 테스트를 수행한 정도
        • 구문(문장) Coverage: 코드 구조 내의 모든 구문에 대해 한 번 이상 수행하는 테스트 커버리지
        • 조건 Coverage: 결정 포인트 내의 모든 개별 조건식(if 조건문 내 and와 or로 연결된 개별 조건문)에 대해 수행하는 테스트 커버리지
        • 결정(분기) Coverage: 결정 포인트(if 조건문 전체) 내의 모든 분기문에 대해 수행하는 테스트 커버리지
        • 조건/결정 Coverage: 결정 포인트와 개별 조건식이 모두 T/F를 가져야 함
        • 변경/조건 Coverage: 모든 결정 포인트 내의 개별 조건식은 적어도 한 번의 T/F를 가져야 함
        • 다중 조건 Coverage: 결정 포인트 내의 모든 개별 조건식의 가능한 조합을 100% 보장
      • 루프 테스트
  • 블랙 박스 테스트: 외부 사용자의 요구사항 명세를 보면서 수행하는 테스트
    • 동등(동치, 균등) 분할 테스트(Equivalence Partitioning Testing): 입력값의 범위를 유사한 특징을 갖는 동등그룹으로 나누고 각 그룹마다 대표값을 선정하는 테스트 기법
    • 경곗값 분석 테스트(Boundary Value Analysis Testing): 경계값을 테스트 케이스로 선정하여 검사
    • 원인-결과 그래프 테스트(Cause-Effect Graphing Testing): 입력 데이터간의 관계와 출력에 영향을 미치는 상황을 체계적으로 분석하여 효용이 높은 테스트 케이스를 선정하여 검사
    • 오류 예측 테스트(Fault Based Testing)
    • 의사 결정 테이블 테스트(Decision Table Testing)
    • 상태 전이 테스트(State Transition Testing)

SW 테스트 방법

  • 결함 집중(파레토 법칙)
    • 대다수의 결함은 소수의 특정 모듈에 집중되는 경향이 있다.
  • 살충제 패러독스
    • 동일한 테스트 케이스를 반복적으로 수행하는 경우 더 이상 새로운 결함을 찾아낼 수 없다.
  • 오류-부재의 궤변
    • 거의 모든 결함을 확인 후 제거하였다고 해도 사용자의 요구 또는 비즈니스 목적을 충족시키지 못하는 경우 품질이 높다고 할 수 없다.

소프트웨어 생명 주기

  • 폭포수 모형 (Waterfall Model)
    • 계획 → 분석 → 설계 → 구현 → 테스트 → 유지보수
    • 이전 단계로 돌아갈 수 없다는 전제
    • 각 단계가 끝난 후에는 다음 단계를 수행하기 위한 결과물이 명확하게 산출되어야 함
  • 나선형 모델
    • 계획 및 정의 → 위험 분석 → 공학적 개발 → 고객 평가
  • 프로토타입 모형(Prototype Model, 원형 모델)
    • 실제 개발될 소프트웨어에 대한 견본품을 만들어 최종 결과물을 예측하는 모형
  • RAD 기법 모델
    • 짧은 개발 기간동안 개발하기위한 순차적 프로세스 모델
  • V 모델
    • 단위 테스트 → 통합 테스트 → 시스템 테스트 → 인수 테스트
    • 작업 결과의 검증(테스트)에 초점
  • 4세대 기법
    • 자동화 도구들을 이용하여 요구사항 명세서로부터 실행코드를 자동으로 생성할 수 있게 해주는 방법

애자일 방법론

  • eXtreme Programming: 수시로 발생하는 고객의 요구사항에 유연하게 대응하기 위해 고객의 참여와 개발 과정의 반복을 극대화하여 개발 생산성을 향상시키는 방법
    • 5가지 핵심 가치: 의사소통, 피드백, 존중, 용기, 단순성
  • Scrum
    • 짧은 단위시간(Sprint) 내 실행가능한 SW 개발
    • 매일 15분 정도의 Scrum meeting 회의

 

8. UI

UI: 사용자가 제품, 서비스와 상호작용할 수 있도록 만들어진 매개체

UX: 사용자 경험의 약자로, 사용자가 어떠한 서비스나 제품을 직간접적으로 이용하면서 느끼는 종합적인 만족

UI 설계 원칙 4가지

  • 직관성
  • 유효성: 사용자의 목적을 정확하게 달성해야 함
  • 학습성
  • 유연성: 사용자의 요구사항을 최대한 수용해야 함

UI 종류

  • GUI(Graphic User Interface)
  • CLI(Command Line Interface) = CUI(Character User Interface)
  • NUI(Natural User Interface): 키보드나 마우스 없이 신체 부위를 이용하는 사용자 인터페이스(터치, 음성 포함)
  • OUI(Organic User Interface): 입력장치가 곧 출력장치가 되고, 현실에 존재하는 모든 사물이 입출력장치로 변화할 수 있는 사용자 인터페이스

 

9. UML(Unified Modeling Language) (시험 직전에 확인)

: 표준화된 모델링(개발하기 위한 그림을 그려주는) 언어

종류

구조적(정적) 다이어그램

  • 객체: 객체 정보
  • 클래스
    -시스템을 구성하는 클래스 사이의 관계 표현
    • 자기만의 속성(field)과 일정한 행동(method)으로 구성
  • 패키지: 클래스 다이어그램의 집합, 그룹
  • 컴포넌트: 컴포넌트끼리의 구조 관계를 표현
  • 컴포지트: 복합구조
  • 배치(Deployment): SW, HW 등을 포함한 시스템의 물리적 구조를 나타냄

행위적(동적) 다이어그램

  • 유스케이스: 사용자 관점에서 바라본 시스템을 표현
    • 구성요소(Component): System, Actor, UseCase, Relation
      • System: 만들고자 하는 프로그램
      • Actor: 시스템의 외부에 있고 시스템과 상호작용을 하는 사람(시스템의 기능을 사용하는 사람), 시스템(시스템에 정보를 제공하는 또 다른 시스템)
      • UseCase: 사용자 입장에서 바라본 시스템의 기능
      • Relation: 액터와 유스케이스 사이의 의미있는 관계
        • 연관: 유스케이스와 액터간의 상호작용이 있음
        • 확장: "글을 등록한다" 기능을 수행 할 때 "파일을 첨부한다" 기능을 선택적으로 수행 할 수 있다는 것
        • 포함: "글을 등록한다" 기능을 동작하기 위해서 "로그인 한다" 기능이 반드시 동작되어야 한다는 것
        • 일반화(Generalization): 그룹을 만들어 이해도를 높이기 위한 관계, "글을 검색한다"를 "글쓴이로 검색한다"와 "날짜로 검색한다"로 구체화 한 것
  • 활동: 활동의 흐름
  • 상태: 객체의 상태 변화
  • 순차: 시간의 흐름에 따른 객체 사이의 상호 작용
  • 커뮤니케이션
  • 인터렉션 오버뷰: 활동 + 순차
  • 타이밍: 시간 흐름에 따른 상태 변화

UML 클래스 관계

  1. 일반화 관계(Generalization): 한 클래스가 다른 클래스를 포함하는 상위 개념일 때의 IS-A 관계
  2. 실체화 관계(Realization): 한 객체가 다른 객체에게 오퍼레이션을 수행하도록 지정(추상 클래스와 구현)
  3. 의존관계(Dependency): 연관관계와 같이 한 클래스가 다른 클래스에서 제공하는 기능을 사용할 때 표시(참조, 매개변수, 일시성)
  4. 연관관계(Association): 2개 이상 사물이 서로 관련된 관계(참조, 긴밀성, 양방향성)
    • 직접 연관관계(Directional): 한쪽으로만 방향성이 있는 연관관계(명령/수행)
    • 집합 연관관계(Aggregation)
      • 클래스들 사이의 전체 또는 부분과 같은 관계
      • 한 객체가 다른 객체를 소유하는 HAS-A 관계
      • 전체가 삭제되더라도 부분은 삭제되지 않는 경우
    • 합성 연관관계(Composition)
      • 부분 객체가 전체 객체에 속하는 관계로 긴밀한 필수적 관계
      • 전체가 삭제되면 부분도 삭제되는 경우

 

10. 암호화 알고리즘

  • 단방향(Hash): MD ▶ SHA
  • 양방향
    • 대칭키
      • 빠른 속도
      • 많은 양
      • 키 개수: n*(n-1)/2
      • 종류
        • Stream: RC4
        • Block: DES ▶ AES, IDEA, SEED, ARIA
          • DES: 페이스텔 구조
          • AES: 비페이스텔 구조
    • 비대칭키(공개키)
      • 느린 속도
      • 적은 양 ◀ 내용보다는 키를 암호화하는 방식으로 사용
      • 키 개수: 2*n
      • 종류
        • 소인수분해: RSA, Robin
        • 이산대수: DH, DSA, EIGmal
        • 타원곡선: ECC, ECDSA

 

11. 테스트 케이스 구성요소

  • 테스트 항목
  • 테스트 조건
  • 테스트 데이터
  • 테스트 예상결과
  • 테스트 시나리오: 전체적인 테스트 케이스 모음

 

13. OSI 7 Layer Model

  1. 물리 계층(Physical Layer)
    • 0과 1의 비트 정보를 회선에 보내기 위한 전기적 신호 변환
    • 단위: 비트
    • 주요 장비: 허브, 리피터
  2. 데이터 링크 계층(Data Link Layer)
    • 인접 노드 간 프레임 전송, 신뢰성 있는 정보 전달
    • 단위: 프레임
    • 주요 장비: 스위치, 브릿지
  3. 네트워크 계층(Network Layer)
    • 단말기 간 데이터 전송을 위한 최적화된 경로 제공
    • 단위: 패킷
    • 주요 장비: 라우터
    • 프로토콜
      • IP: 데이터 전달
      • ICMP: IP 패킷을 처리할 때 발생되는 문제를 알려주는 프로토콜
      • ARP: 논리 주소인 IP 주소 ▶ 실제적인 물리 주소인 MAC 주소로 변환
      • RARP: 실제적인 물리 주소인 MAC 주소 ▶ 논리 주소인 IP 주소로 변환
  4. 전송 계층(Transport Layer)
    • 단말기(종단)간의 연결, 신뢰성 있는 정보 전달
    • 단위: 세그먼트(TCP) / 데이터그램(UDP)
    • 프로토콜
      • TCP
        • FTP(20-데이터, 21-제어): 파일 전송
        • telnet(23): 원격지의 호스트 컴퓨터에 접속하기 위해 사용되는 인터넷 프로토콜
        • HTTP(80): 웹 서비스
        • SMTP(25): 메일 송신
        • POP3(110): 메일 수신
      • UDP
        • DHCP: IP 자동 할당
        • SNMP: 네트워크 관리
        • DNS(53): 도메인 ▶ IP 주소로 변환
  5. 세션 계층(Session Layer)
    • 송수신 간의 논리적 연결
    • 단위: 데이터
  6. 표현 계층(Presentation Layer)
    • 데이터 형식 설정, 암/복호화
    • 단위: 데이터
  7. 응용 계층(Application Layer)
    • 일반적인 응용 서비스를 수행
    • 단위: 데이터

데이터 교환 방식

  • 전용 회선: 회선을 직접 연결
  • 교환 회선
    • 회선 교환 방식: 전화국에서 회선을 직접 연결해주는 형태
    • 축적 후 교환 방식
      • 메시지 교환: 길게 보냄
      • 패킷 교환: 짧게 보냄
        • 가상 회선: 패킷 전송을 하기 전에 논리적인 연결을 먼저 수행하여 패킷을 주고 받음(TCP)
        • 데이터 그램: 각 패킷 전송을 미리 정해진 경로 없이 독립적으로 처리하여 교환하는 방식(UDP)

공격 기법

Dos(Denial of Service)

  • Ping Of Death: 정상 크기보다 큰 ICMP 패킷을 작은 조각(Fragment)으로 쪼개어 공격 대상이 조각화된 패킷을 처리하게 만드는 공격
  • Smurf Attack: IP를 위조하여 ICMP 받을 대상에 과부하
  • Land Attack: Packet의 보내는 사람과 받는 사람을 동일하게 설정
  • Teardrop Attack: Fragment를 재조립 시 정확한 조립을 위해 오프셋이라는 값을 더하게 되는데 이 오프셋 값을 고의적으로 수정하여 시스템의 기능을 마비시켜 버리는 방법
  • SYN Flooding: 접속을 요청하는 SYN Packet을 대량으로 전송해 네트워크를 마비 시킴
  • UDP Flooding: 많은 수의 UDP packet을 전송하여 정상적인 서비스가 불가능하도록 하는 공격
  • Ping Flooding: 많은 ICMP Echo를 보내 이에 대한 응답을 하기 위해 자원을 모두 사용해버려 시스템이 정상적으로 동작하지 못하도록 하는 공격

DDoS (Distributed Denial of Service)

  • Phishing: 공격자가 사람들을 속이기 위해 악성 이메일을 보내는 것
  • Pharming: 피싱 기법 중 하나로, 정확한 웹 페이지 주소를 입력해도 가짜 웹 페이지에 접속하게 하여 개인정보를 훔치는 것
  • Sniffing: 네트워크 중간에서 남의 패킷 정보를 도청하는 것
  • Smishing: SMS와 Phishing의 결합어로 문자메시지를 이용한 피싱
  • Qshing: QR코드와 피싱(Phishing)의 합성어로 QR코드를 이용한 피싱
  • Ransomware: 컴퓨터 시스템을 감염시켜 접근을 제한하고 일종의 몸값을 요구하는 악성 소프트웨어
  • Key Logger: 컴퓨터 사용자의 키보드 움직임을 탐지해 ID, 패스워드 등 개인의 중요한 정보를 몰래 빼가는 해킹 공격
  • SQL Injection: 임의로 작성한 SQL 구문을 애플리케이션에 삽입하는 공격 방식
  • XSS(Cross Site Scripting): 악의적인 스크립트를 포함하여 정보 유출 등의 공격을 하는 것

기타

  • Rainbow Table Attack
    • 해시함수에 입력한 값과 해시값을 저장한 일종의 정답지를 갖고 일치하는 해시값을 통해 Key 값을 찾는 방식
    • Salt: 해커들의 레인보우 테이블이 키 값에 대한 해시값을 갖고 있으므로, 해당 값에 다른 값을 덧붙여서 다른 암호 값으로 저장되도록 추가하는 값
  • Session HiJacking
    • 다른 사람의 세션 상태를 훔치거나 가로채는 해킹 기법
    • 로그인된 상태를 가로채는 것

Routing Protocol

  • 정적: 관리자가 직접 라우터에 경로 설정
  • 동적: 라우터가 직접 경로 설정
    • EGP: 외부 게이트웨이 프로토콜
      • BGP: Board Gateway Protocol
    • IGP: 내부 게이트웨이 프로토콜
      • Distance Vector
        • RIP: Routing Information Protocol
          • 인접한 라우터간 일정 시간마다 상태 공유
          • 최대 홉수 15로 제한
      • Link State
        • OSPF: Open Shortest Path First (Protocol)
          • 변경된 데이터가 있을 때마다 상태 공유
          • 가장 많이 사용되는 내부 라우팅 프로토콜
          • 홉 수 제한 X

 

15. SQL

SELECT COUNT(*) AS CNT FROM A CROSS JOIN B WHERE A.NAME LIKE B.NAME

CNT
4

-- CROSS JOIN(상호 조인): 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인

 

16. Python

출력값: false가 아닌 False 유의

x, y = 100, 200;
print(x == y);

# False

 

17. C

struct jsu{
    char name[12];
    int os, db, hab, hhab;
};
int main(){
    struct jsu st[3]{{"데이터1", 95, 88}, {"데이터2", 84, 91}, {"데이터3", 86, 75}};
    struct jsu *p; /* 포인터 변수 선언 */

    p = &st[0]; /* & - 주소값 반환 */
    (p + 1) -> hab = (p + 1) -> os + (p + 2) -> db;
    (p + 1) -> hhab = (p + 1) -> hab + p -> os + p -> db;
    printf("%d\n", (p + 1) -> hab + (p + 1) -> hhab);
}

/*
name    os    db    hab    hhab
데이터1  95    88
데이터2  84    91  (84+75) (159+95+88)
데이터3  86    75

159 + 342 = 501

*/

 

18.C

void main(){
    int *arr[3]; /* 포인터 변수 선언 */
    int a = 12, b = 24, c = 36;

    arr[0] = &a; /* &연산자: 주소값 반환 */
    arr[1] = &b;
    arr[2] = &c;

    printf("%d\n", *arr[1] + *arr + 1);
    /* *연산자: 포인터변수에 저장되있는 주소가 가르키는 실제 데이터값을 불러오는 연산자 */
}

/*
              10        11        12
arr[3] = |a의 주소값|b의 주소값|c의 주소값|
  10          12        24        36

24 +  12 + 1 = 37

*/

 

19. Java

int a = 3, b = 4, c =3, d = 5;
if((a == 2 | a == c) & !(c > d) & (1 == b^c != d)){
    a = b + c;
    if(7 == b^c !=a){
        System.out.println(a);
    } else {
        System.out.println(b);
    }
} else {
    a = c + d;
    if(7 == c^d !=a){
        System.out.println(a);
    } else {
        System.out.println(d);
    }

}

// ^: exclusive or
// 1^1 = 0
// 1^0 = 1
// 0^1 = 1
// 0^0 = 0

// 7

 

20. Java

class Connection{
    private static Connection _in = null;
    private int count = 0;

    static public Connection get(){
        if(_in == null){
            _in = new Connection();
            return _in;
        }
        return _in;
    }

    public void count() {count++;}
    public int get() {return count;}
}
public class Testcon{
    public static void main(String[] args){
        Connection conn1 = Connection.get();
        conn1.count();
        Connection conn2 = Connection.get();
        conn2.count();
        Connection conn3 = Connection.get();
        conn3.count();

        System.out.println(conn1.getCount());
    }
}

// 3

 

 

 

🔗 마크다운 파일

GitHub

 

📚 참고 자료

 

흥달쌤

흥달쌤과 함께하는 IT 채널입니다. 정보처리기사 자격증 관련된 강의 및 실무 노하우, 프로그래밍 언어(JAVA, C언어, Python) 특강 등이 진행됩니다. 앞으로 진행 예정인 동영상은 IT 관련된 이야기

www.youtube.com

 

[C 언어] 포인터의 개념과 & / *연산자

포인터 포인터란 메모리상에 위치한 데이터의 주소를 보관하는 변수이다. int *p; 포인터 변수 p는 int형 데이터의 주소값을 저장할수있는 변수이다. & 연산자 포인터변수에 어떤 변수의 주소값을

ksr930.tistory.com

 

2021 #정보처리기사 필기요약 #1-2. 화면 설계

2021년 NCS기반 정처기 필기입니다. 이기적2020과 수제비2021 수험서를 함께 보고 공부한 기록입니다. 제 1과목 소프트웨어 설계 > 화면 설계 (1) UI 요구사항 확인 UI(User Interface; 사용자 인터페이스) UI

simuing.tistory.com

 

반응형
반응형

정보처리기사 실기

1. AD-hoc Network

네트워크의 구성 및 유지를 위해 기지국이나 엑세스 포인트와 같은 기반 네트워크 장치를 필요로 하지 않고, 멀티 홉 라우팅 기능에 의해 무선 인터페이스가 가지는 통신 거리상의 제약을 극복하며, 노드들의 이동이 자유롭기 때문에 네트워크 토폴리지가 동적으로 변화되는 특징을 갖고 있다.
응용 분야로는 긴급 구조, 긴급 회의, 전쟁터에서의 군사 네트워크 등이 있다.

LAN 802.X

  • 802.3: CSMA/CD, 유선랜 충돌 감지
  • 802.11: CSMA/CA, 무선랜 충돌 회피
  • 802.4: 토큰 버스
  • 802.5: 토큰 링
  • 802.15: 블루투스

 

2. UI, UX

UI: 사용자가 제품, 서비스와 상호작용할 수 있도록 만들어진 매개체

UX: 사용자 경험의 약자로, 사용자가 어떠한 서비스나 제품을 직간접적으로 이용하면서 느끼는 종합적인 만족

UI 설계 원칙 4가지

  • 직관성
  • 유효성: 사용자의 목적을 정확하게 달성해야 함
  • 학습성
  • 유연성: 사용자의 요구사항을 최대한 수용해야 함

 

3. Python

a = 100;
result = 0;

for i in range(1,3):
    result = a>>i;
    result = result + 1;
print(result);

# a(2) = 1100100(2)
# a>>2 = 11001(2) = 25(10)
# 26

 

4. 디자인 패턴 (시험 직전에 확인)

생성 패턴(Creational Patterns) 5 : 객체 생성에 대한 패턴

종류 설명
Abstract Factory 서브 클래스를 상세히 정의하지 않고도 서로 관련성이 있는 여러 객체들을 생성하기 위한 인터페이스를 제공하는 패턴
Builder 복잡한 객체들을 단계별로 생성하는 패턴
Factory Method 객체를 생성하는 인터페이스를 정의하고 객체의 타입은 서브클래스가 결정하도록 하는 패턴
Prototype 원본 객체를 복사하여 새 객체를 생성하는 패턴
SingleTon 오직 하나의 객체만을 생성하는 패턴

구조 패턴(Structural Patterns) 7 : 클래스나 객체를 조합해 더 큰 구조를 만드는 패턴

종류 설명
Adapter 호환되지 않는 인터페이스를 가진 객체들간의 기능을 변환하여 호환성을 제공하는 패턴
Bridge 추상화 클래스 계층과 구현 클래스 계층을 분리하는 패턴
Composite 객체 집합 속에 또 다른 객체 집합을 갖는 패턴
Decorator 새로운 기능이 추가될 때마다 새로운 객체를 만들고, 이전 객체의 기능은 새로운 객체내에서도 그대로 유지되는 패턴
Facade 서브시스템이 복잡할 경우 간단한 인터페이스를 통해 서브 시스템의 주요기능을 사용할 수 있도록 하는 패턴
Fly Weight 인스턴스의 공유를 통해 불필요한 객체 생성을 하지 않도록 하는 패턴
Proxy 원래 객체에 대한 접근을 제어하여, 요청이 원래 객체에 전달되기 전 또는 후에 추가적인 작업을 수행할 수 있도록 하는 패턴

행위 패턴(Behavioral Patterns) 11 : 객체나 클래스 간 알고리즘이나 상호 작용을 정의하기 위한 패턴

종류 설명
Chain of Responsibility 여러개의 객체를 체인으로 연결하여 그 객체의 체인을 순차적으로 걸어 가면서 최종적인 객체를 결정
Command 명령을 나타내는 클래스의 인스턴스를 하나로 표현
Interpreter 언어나 표현식을 해석하고 실행하는데 사용
Iterator 집합체의 요소에 차례로 액세스를 실시
Mediator 중개자을 통해서 행동을 일으키게 하는 방식
Memento 객체의 상태를 저장하고 복원하는 데 사용되며, 주로 "뒤로 가기" 기능이나 객체의 상태를 일시적으로 저장해야 하는 상황에서 유용
Observer 주로 분산 이벤트 핸들링 시스템을 구현하는데 사용
State 상태를 클래스로 표현하고 클래스를 전환하여 상태 변경을 나타내는 방법
Strategy 특정 작업 또는 알고리즘의 다양한 전략(방법)을 정의하고, 이들을 동적으로 교체하여 사용할 수 있게 하는 패턴
Template Method 슈퍼 클래스로 처리의 틀을 정해서 서브 클래스로 그 구체적 내용을 정하는 방식
Visitor 데이터 구조와 처리를 분리하는 방법

 

UML(Unified Modeling Language) (시험 직전에 확인)

: 표준화된 모델링(개발하기 위한 그림을 그려주는) 언어

종류

구조적(정적) 다이어그램

  • 객체: 객체 정보
  • 클래스: 시스템을 구성하는 클래스 사이의 관계 표현
  • 패키지: 클래스 다이어그램의 집합, 그룹
  • 컴포넌트: 컴포넌트끼리의 구조 관계를 표현
  • 컴포지트: 복합구조
  • 배치(Deployment): SW, HW 등을 포함한 시스템의 물리적 구조를 나타냄

행위적(동적) 다이어그램

  • 유스케이스: 사용자 관점에서 바라본 시스템을 표현
    • 구성요소(Component): System, Actor, UseCase, Relation
      • System: 만들고자 하는 프로그램
      • Actor: 시스템의 외부에 있고 시스템과 상호작용을 하는 사람(시스템의 기능을 사용하는 사람), 시스템(시스템에 정보를 제공하는 또 다른 시스템)
      • UseCase: 사용자 입장에서 바라본 시스템의 기능
      • Relation: 액터와 유스케이스 사이의 의미있는 관계
        • 연관: 유스케이스와 액터간의 상호작용이 있음
        • 확장: "글을 등록한다" 기능을 수행 할 때 "파일을 첨부한다" 기능을 선택적으로 수행 할 수 있다는 것
        • 포함: "글을 등록한다" 기능을 동작하기 위해서 "로그인 한다" 기능이 반드시 동작되어야 한다는 것
        • 일반화: 그룹을 만들어 이해도를 높이기 위한 관계, "글을 검색한다"를 "글쓴이로 검색한다"와 "날짜로 검색한다"로 구체화 한 것
  • 활동: 활동의 흐름
  • 상태: 객체의 상태 변화
  • 순차: 시간의 흐름에 따른 객체 사이의 상호 작용
  • 커뮤니케이션
  • 인터렉션 오버뷰: 활동 + 순차
  • 타이밍: 시간 흐름에 따른 상태 변화

UML 클래스 관계

uml_class_relation

  1. 일반화 관계(Generalization): 상속
  2. 실체화 관계(Realization): 구현
  3. 의존관계(Dependency): 참조, 매개변수, 일시성
  4. 연관관계(Association): 참조, 긴밀성, 양방향성
    • 직접 연관관계(Directional): 한쪽으로만 방향성이 있는 연관관계(명령/수행)
    • 집합 연관관계(Aggregation): 전체/부분 연관 관계, 전체가 삭제되더라도 부분은 삭제되지 않는 경우
    • 합성 연관관계(Composition): 전체/부분 연관 관계, 전체가 삭제되면 부분도 삭제되는 경우

 

5. Transaction

  • 원자성(Atomicity): Commit, Rollback
  • 일관성(Consistency): 무결성
  • 격리성(Isolation)
  • 영속성(Durability)

 

6. 정규형

정규화 종류

  • 제 1정규형: 도메인이 원자값
  • 제 2정규형: 부분 함수 종속성 제거
  • 제 3정규형: 이행적 함수 종속성 제거
  • BCNF: 결정자이면서 후보키가 아닌것 제거
  • 제 4정규형: 다치 종속 제거
  • 제 5정규형: 조인 종속 제거

이상 현상

데이터베이스 내의 데이터들이 중복돼 검색이나 조작 등을 제대로 수행할 수 없는 현상

  • 삽입 이상: 릴레이션(테이블)에 데이터를 삽입할 때 의도와는 상관없는 값들도 함께 삽입되는 현상
  • 삭제 이상: 릴레이션에서 한 튜플(행)을 삭제할 때 의도와는 상관없는 값들이 함께 삭제되는 현상
  • 갱신 이상: 릴레이션에서 튜플에 있는 속성값을 갱신할 때 일부 튜플의 정보만 갱신되며 정보에 모순이 생기는 현상

데이터 모델링 3단계

  1. 개념
    • ERD 생성
  2. 논리
    • 정규화
    • Transaction Interface 설계
  3. 물리
    • 성능 향상(인덱스, 파티션, 반정규화 등)
    • 물리 DB 성능 향상 활동 = 튜닝

Index Hint

  • 쿼리 실행 시 특정 인덱스를 사용하도록 강제하는 주석
  • SELECT /*+ [힌트절] */ ... FROM ...;

CRUD 매트릭스

crud_matrix

Key

  1. Super Key: 유일성-대상을 유일하게 식별할 수 있으면 충족
  2. Candidate Key: 유일성 + 최소성
    • Alternate Key: PK가 아닌 후보키
    • Primary Key: AK 중 가정 적합한 키(예: 학교에서 PK는 학번)

 

7. 암호화 알고리즘

  • 단방향(Hash): MD ▶ SHA
  • 양방향
    • 대칭키
      • 빠른 속도
      • 많은 양
      • 키 개수: n*(n-1)/2
      • 종류
        • Stream: RC4
        • Block: DES ▶ AES, IDEA, SEED, ARIA
    • 비대칭키(공개키)
      • 느린 속도
      • 적은 양 ◀ 내용보다는 키를 암호화하는 방식으로 사용
      • 키 개수: 2*n
      • 종류
        • 소인수분해: RSA, Robin
        • 이산대수: DH, DSA, EIGmal
        • 타원곡선: ECC, ECDSA

 

8. C

int main(){
    int array[3];
    int s = 0;

    *(array + 0) = 1;
    array[1] = *(array + 0) + 2;
    array[2] = *array + 3;
    for(int i=0; i<3; i++){
        s = s + array[i];
    }
    printf("%d", s);
}

/*
0 1 2
1 3 4

8
*/

 

9. Java

public class Class01{
    public static void main(String[] args){
        Class01 c1 = new Class01();
        Class02 c2 = new Class02();
        System.out.println(c1.sum(3, 2) + c2.sum(3, 2));
    }
    int sum(int x, int y){
        return x + y;
    }
}
public class Class02 extends Class01{
    int sum(int x, int y){
        return x - y + super.sum(x, y);
    }
}

// c1.sum(3, 2) = 5
// c2.sum(3, 2) = 6

 

10. SQL

  SELECT * 
    FROM 학생 
   WHERE 이름 
    LIKE '이%' 
ORDER BY 이름 DESC;

WHERE + 와일드 카드
%: 글자 수 제한 X
_: 1글자

 

11. 병행 제어

  1. 로킹(Locking)
    : 트랜잭션이 어떤 데이터에 접근하고자 할 때 로킹을 수행하며 로킹을 한 트랜잭션만이 로킹을 해제할 수 있음
  2. 2단계 로킹 규약
    : 트랜잭션이 확장단계(Key 획득)와 축소단계(Key 반납)를 구분하여 실행됨
  3. 타임스탬프(Time Stamp)
    : Transaction 간의 처리순서를 미리 결정
  4. 다중 버전 병행제어(Multi-version Concurrency Control)
    : 트랜잭션의 데이터 접근 시, 해당 트랜잭션의 타임스탬프와 접근 데이터의 여러 버전의 타임스탬프를 비교하여 현재 실행중인 스케쥴의 직렬 가능성이 보장되는 버전 선택
  5. 낙관적 병행제어(Optimistic Concurrency Control)
    : 트랜잭션 수행 동안은 어떠한 검사도 하지 않고, 트랜잭션 종료 시에 일괄적으로 검사

병행 문제점

  1. 비완료 의존성: 아직 Commit되지 않은 Transaction을 읽으려는 경우
  2. 모순성: 데이터베이스의 일관성을 해치는 경우
  3. 연쇄 복귀: 두개의 트랜잭션 중 한 개의 트랜잭션이 성공적으로 일을 수행하였다 하더라도 다른 트랜잭션이 처리하는 과정에서 실패하게 되면 두 개의 트랜잭션 모두가 복귀되는 경우
  4. 갱신분실: 두 개의 트랜잭션이 같은 데이터에 대해서 동시에 갱신 작업을 하면 하나의 갱신 작업이 분실되는 경우

 

12. 모듈의 독립성을 판단하는 두 가지 지표로, 결합도(Coupling)는 모듈과 모듈간의 상호 의존 정도, 응집도(Cohesion)는 모듈 내부의 기능적인 집중 정도이다.

결합도(Coupling)

: 모듈과 모듈간의 상호 의존 정도

  1. 자료(Data): 파라미터로 만을 전달하는 경우
  2. 스탬프(Stamp): 파라미터로 배열이나 오브젝트, 스트럭쳐 등의 객체가 전달되는 경우
  3. 제어(Control): 파라미터로 값뿐만 아니라 제어 요소도 전달되는 경우
  4. 외부(External): 어떤 모듈에서 선언한 데이터(변수)를 외부의 다른 모듈에서 참조하는 경우
  5. 공통(Common): 공유되는 공통 데이터 영역(전역변수)을 여러 모듈이 사용하는 경우
  6. 내용(Content): 한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 직접 참조하거나 수정하는 경우
    • 내용 결합도가 높을 경우, 스파게티 코드가 될 수 있음
  • Spaghetti Code: 소스 코드가 복잡하게 얽힌 경우
  • Alien Code: 아주 오래되거나 참고문서가 없어 유지보수가 어려운 경우
  • Legacy Code: 더 이상 쓰기 힘들고 난해한 경우

응집도(Cohesion)

: 모듈 내부의 기능적인 집중 정도

  1. 우연적(Coincidental): 모듈 내부의 각 구성요소들이 연관이 없을 경우
  2. 논리적(Logical): 유사한 성격을 갖는 요소들이 한 모듈에서 처리
  3. 시간적(Temporal): 특정 시간에 처리되어야 하는 활동들을 한 모듈에서 처리
  4. 절차적(Procedural): 모듈 안의 구성요소들이 그 기능을 순차적으로 수행
  5. 통신적(Communicational): 동일한 입력과 출력을 사용하여 다른 기능을 수행하는 활동들이 모여있을 경우
  6. 순차적(Sequential): 모듈 내에서 한 활동에서 나온 출력값을 다른 활동이 사용할 경우
  7. 기능적(Functional): 모듈 내부의 모든 기능이 단일한 목적을 위해 수행되는 경우

 

13. SQL

UPDATE 학생
   SET 과목평가 = 'A'
 WHERE 점수 >=90;
-- DML
INSERT INTO TABLE_NAME(COLUMN1, COLUMN2, ...) VALUES(VAL1, VAL2, ...);
SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ...;
UPDATE TABLE_NAME SET COL1=VAL1, COL2=VAL2 WHERE ...;
DELETE FROM TABLE_NAME WHERE ...;

 

14. 데이터 교환 방식

  • 전용 회선: 회선을 직접 연결
  • 교환 회선
    • 회선 교환 방식: 전화국에서 회선을 직접 연결해주는 형태
    • 축적 후 교환 방식
      • 메시지 교환: 길게 보냄
      • 패킷 교환: 짧게 보냄
        • 가상 회선: 패킷 전송을 하기 전에 논리적인 연결을 먼저 수행하여 패킷을 주고 받음
        • 데이터 그램: 각 패킷 전송을 미리 정해진 경로 없이 독립적으로 처리하여 교환하는 방식

 

15. SQL

SELECT * 
  FROM 학과정보 T1 
  JOIN 학과정보 T2 
    ON T1.학과 = T2.학과;

 

16. V모델

  1. 단위(Unit) 테스트
    : 개발자가 명세서의 내용대로 정확히 구현되었는지 단위 중심으로 테스트
    • 정적
      • 소스코드의 실행없이 내부 확인
      • 도구
        • PMD, SonarQube, FindBugs, CheckStyle, CppCheck, Cobertura
    • 동적: 입력값에 대한 출력값 확인
  2. 통합(Integration) 테스트
    : 단위 테스트를 통과한 컴포넌트 간의 인터페이스를 테스트
    • 빅뱅 테스트: 모든 모듈이 결합된 프로그램 전체가 대상
    • 상향식 테스트: 드라이버(Driver) 사용
    • 하향식 테스트: 깊이 우선 통합법, 넓이 우선 통합법 사용, 스텁(Stub) 사용
    • 혼합식 통합 테스트: : 하위 수준-상향식 통합, 상위 수준-하향식 통합 사용, 샌드위치(Sandwich)식 통합 테스트 방법
    • 회귀 테스팅(Regression Testing): 통합 테스트가 완료 된 후 변경된 모듈이나 컴포넌트가 있을 경우, 다른 부분에 영향을 미치는지 테스트하여 새로운 오류 여부를 확인
  3. 시스템(System) 테스트
    : 전체 시스템 또는 제품의 동작에 대해 테스트
    • 기능 요구사항 테스트
    • 비기능 요구사항 테스트
  4. 인수(Acceptance) 테스트
    : 계약상의 요구사항이 만족되었는지 확인
    • 알파 테스트: 개발자 + 사용자
    • 베타 테스트: 사용자
    • 형상 테스트: 구조 확인

 

Test Oracle

: 테스트의 결과가 참인지 거짓인지를 판단하기 위해서 사전에 정의된 참값을 입력하여 비교하는 기법

  • 종류
    • 참(True) 오라클: 모든 입력값에 대해 기대하는 결과를 전수 검사
    • 샘플링 오라클: 특정 몇몇 입력값에 대해서만 검사
    • 휴리스틱 오라클: 특정 몇몇 입력값에 대해서만 검사 + 나머지는 추정으로 처리
    • 일관성 검사 오라클: 이전 수행결과와 현재 수행결과가 동일한지 검사

화이트/블랙박스 테스트

  • 화이트 박스 테스트: 모듈 내부 소스 코드를 보면서 수행하는 테스트
    • 종류
      • 기본 경로 커버리지(Base Path Coverage): 수행 가능한 모든 경로 테스트
      • 데이터 흐름 테스트(Data Flow Testing): 프로그램에서 변수의 정의와 변수 사용의 위치에 초점을 맞추어 검사
      • 조건 커버리지(Condition Coverage): 각 개별 조건식이 적어도 한 번은 참과 거짓의 결과가 되도록 수행
      • 루프 테스트
      • 구조적 커버리지: 애플리케이션에서 테스트를 수행한 정도
        • 구문(문장) Coverage: 코드 구조 내의 모든 구문에 대해 한 번 이상 수행하는 테스트 커버리지
        • 조건 Coverage: 결정 포인트 내의 모든 개별 조건식(if 조건문 내 and와 or로 연결된 개별 조건문)에 대해 수행하는 테스트 커버리지
        • 결정(분기) Coverage: 결정 포인트(if 조건문 전체) 내의 모든 분기문에 대해 수행하는 테스트 커버리지
        • 조건/결정 Coverage: 결정 포인트와 개별 조건식이 모두 T/F를 가져야 함
        • 변경/조건 Coverage: 모든 결정 포인트 내의 개별 조건식은 적어도 한 번의 T/F를 가져야 함
        • 다중 조건 Coverage: 결정 포인트 내의 모든 개별 조건식의 가능한 조합을 100% 보장
  • 블랙 박스 테스트: 외부 사용자의 요구사항 명세를 보면서 수행하는 테스트
    • 동등(동치, 균등) 분할 테스트(Equivalence Partitioning Testing): 입력값의 범위를 유사한 특징을 갖는 동등그룹으로 나누고 각 그룹마다 대표값을 선정하는 테스트 기법
    • 경곗값 분석 테스트(Boundary Value Analysis Testing): 경계값을 테스트 케이스로 선정하여 검사
    • 원인-결과 그래프 테스트(Cause-Effect Graphing Testing): 입력 데이터간의 관계와 출력에 영향을 미치는 상황을 체계적으로 분석하여 효용이 높은 테스트 케이스를 선정하여 검사
    • 오류 예측 테스트(Fault Based Testing)
    • 의사 결정 테이블 테스트(Decision Table Testing)
    • 상태 전이 테스트(State Transition Testing)

SW 테스트 방법

  • 결함 집중(파레토 법칙)
    • 대다수의 결함은 소수의 특정 모듈에 집중되는 경향이 있다.
  • 살충제 패러독스
    • 동일한 테스트 케이스를 반복적으로 수행하는 경우 더 이상 새로운 결함을 찾아낼 수 없다.
  • 오류-부재의 궤변
    • 거의 모든 결함을 확인 후 제거하였다고 해도 사용자의 요구 또는 비즈니스 목적을 충족시키지 못하는 경우 품질이 높다고 할 수 없다.

 

17. Java

public class ClassA{
    public static void main(String[] args){
        System.out.println(check(1));
    }
    static String check(int num){
        return num;
    }
}

 

19. 객체지향적 분석 기법

: 상향식 접근 방식

  • Rumbaugh: 가장 일반적으로 사용되는 방법으로 분석 활동을 객체, 동적, 기능 모델로 나누어 순서대로 수행
    • 객체 모델링(Object Modeling): 클래스 다이어그램을 이용하여 시스템에서 요구되는 객체을 표현한 것
    • 동적 모델링(Dynamic Modeling): 상태 다이어그램을 이용하여 시간의 흐름에 따른 객체들 사이의 동적인 행위를 표현한 것
    • 기능 모델링(Functional Modeling): 자료 흐름도(DFD)를 이용하여 다수의 프로세스들 간의 자료 흐름을 중심으로 처리 과정을 표현한 것
  • Booch: 미시적(Micro) 개발 프로세스와 거시적(Macro) 개발 프로세스를 모두 사용
  • Jacobson: UseCase를 강조하여 사용
  • Coad와 Yourdon: E-R다이어그램을 사용
  • Wirfs-Brock: 분석과 설계간의 구분이 없음

 

20. C

int fp(int base, int exp){
    int result = 1;
    for(int i=0; i<exp; i++){
        result = result * base;
    }
    return result;
}

int main(){
    int result;
    result = fp(2 ,10);
    printf("%d", result);
    return 0;
}

/*
1024
*/

 

 

 

🔗 마크다운 파일

GitHub

 

📚 참고 자료

 

흥달쌤

흥달쌤과 함께하는 IT 채널입니다. 정보처리기사 자격증 관련된 강의 및 실무 노하우, 프로그래밍 언어(JAVA, C언어, Python) 특강 등이 진행됩니다. 앞으로 진행 예정인 동영상은 IT 관련된 이야기

www.youtube.com

 

반응형
반응형

정보처리기사 실기

1. OSI 7 Layer Model

  1. 물리 계층(Physical Layer)
    • 0과 1의 비트 정보를 회선에 보내기 위한 전기적 신호 변환
    • 단위: 비트
    • 주요 장비: 허브, 리피터
  2. 데이터 링크 계층(Data Link Layer)
    • 인접 노드 간 프레임 전송, 신뢰성 있는 정보 전달
    • 단위: 프레임
    • 주요 장비: 스위치, 브릿지
  3. 네트워크 계층(Network Layer)
    • 단말기 간 데이터 전송을 위한 최적화된 경로 제공
    • 단위: 패킷
    • 주요 장비: 라우터
    • 프로토콜
      • IP: 데이터 전달
      • ICMP: IP 패킷을 처리할 때 발생되는 문제를 알려주는 프로토콜
      • ARP: 논리 주소인 IP 주소 ▶ 실제적인 물리 주소인 MAC 주소로 변환
      • RARP: 실제적인 물리 주소인 MAC 주소 ▶ 논리 주소인 IP 주소로 변환
  4. 전송 계층(Transport Layer)
    • 단말기(종단)간의 연결, 신뢰성 있는 정보 전달
    • 단위: 세그먼트(TCP) / 데이터그램(UDP)
    • 프로토콜
      • TCP
        • FTP(20-데이터, 21-제어): 파일 전송
        • telnet(23): 원격지의 호스트 컴퓨터에 접속하기 위해 사용되는 인터넷 프로토콜
        • HTTP(80): 웹 서비스
        • SMTP(25): 메일 송신
        • POP3(110): 메일 수신
      • UDP
        • DHCP: IP 자동 할당
        • SNMP: 네트워크 관리
        • DNS(53): 도메인 ▶ IP 주소로 변환
  5. 세션 계층(Session Layer)
    • 송수신 간의 논리적 연결
    • 단위: 데이터
  6. 표현 계층(Presentation Layer)
    • 데이터 형식 설정, 암/복호화
    • 단위: 데이터
  7. 응용 계층(Application Layer)
    • 일반적인 응용 서비스를 수행
    • 단위: 데이터

Routing Protocol

routing_protocol

  • 정적: 관리자가 직접 라우터에 경로 설정
  • 동적: 라우터가 직접 경로 설정
  • EGP: 외부 게이트웨이 프로토콜
    • BGP: Board Gateway Protocol
  • IGP: 내부 게이트웨이 프로토콜
    • Distance Vector
      • RIP: Routing Information Protocol
        • 인접한 라우터간 일정 시간마다 상태 공유
        • 최대 홉수 15로 제한
    • Link State
      • OSPF: Open Shortest Path First (Protocol)
        • 변경된 데이터가 있을 때마다 상태 공유
        • 가장 많이 사용되는 내부 라우팅 프로토콜
        • 홉 수 제한 X

 

2. 데이터 베이스 설계 순서

요구사항 분석 → 개념적 설계 → 논리적 설계 → 물리적 설계 → 구현

데이터 모델링 3단계

  1. 개념적 설계
    • 사람이 이해할 수 있는 형태의 정보구조를 만들어가는 과정
    • ERD 생성
  2. 논리적 설계
    • 개념적 설계에서 만들어진 구조를 컴퓨터가 이해하고 처리할 수 있도록 변환하는 과정
    • 정규화
    • Transaction Interface 설계
  3. 물리적 설계
    • 실제 저장정치에 어떻게 저장할지 설계하는 단계
    • 성능 향상(인덱스, 파티션, 반정규화 등)

Index Hint

  • 쿼리 실행 시 특정 인덱스를 사용하도록 강제하는 주석
  • SELECT /*+ [힌트절] */ ... FROM ...;

 

3. 용어

  • 튜플(Tuple):
    • 개체 인스턴스, 릴레이션 인스턴스
    • 릴레이션을 구성하는 각각의
    • 하나의 릴레이션에 포함된 튜플은 모두 상이
    • 속성의 모임
    • 튜플의 수: Cardinality 또는 기수
  • 속성(Attribute):
    • 개체 스키마, 릴레이션 스키마
    • 데이터베이스를 구성하는 가장 작은 논리적 단위
    • 개체의 특성을 기술
    • 속성의 수를 Degree 또는 차수
  • 도메인(Domain)
    • 하나의 속성(attribute)이 취할 수 있는 같은 타입의 원자값들의 집합
  • 릴레이션(Relation)
    • 테이블
  • 스키마(Schema)
    • 데이터베이스의 구조와 제약조건에 관해 전반적인 명세를 기술한 것

 

4. EAI(Enterprise Application Integration) 유형

: 기업에서 운영하는 서로 다른 플래폼, App간의 정보 전달, 연계, 통합을 위한 솔루션

  • Point To Point
    • 중간에 미들웨어를 두지 않고, 각 애플리케이션 간 연결
    • 상대적으로 저렴하게 통합 가능
    • 변경, 재사용이 어려움
  • Hub & Spoke
    • 허브 시스템을 통해 데이터를 전송하는 중앙 집중적 방식
    • 확장, 유지보수 용이
    • 허브 장애 시, 전체에 영향
  • Message Bus(ESB)
    • 애플리케이션 사이 미들웨어(버스)를 두어 처리
    • 시스템과 버스를 두어 연결하여 확장성이 뛰어나고, 대용량 처리가 가능
  • Hybrid
    • 그룹 내: Hub & Spoke, 그룹 외: Message Bus
    • 데이터 병목 최소화

SOAP

  • HTTP, HTTPS 등을 통해 XML 기반의 메세지를 컴퓨터 네트워크 상에서 교환하는 프로토콜
  • XML을 이용하여 분산처리환경에서 정보 교환을 쉽게 할 수 있도록 도와줌
  • WSDL: SOAP 사용 설명서, XML 형식 ▶ UDDI에 등록 ▶ SOAP을 이용해 실제 통신
    • WSDL: 서비스 제공 장소, 서비스 메시지 포맷, 프로토콜 등 웹 서비스의 구체적 내용이 기술되어 있는 언어

REST

  • 자원을 표현, 즉 이름으로 자원의 상태, 정보를 주고받는 것
  • URI로 자원을 표현하고, HTTP Method(GET, POST 등)를 통해 자원의 행위를 표현

 

5. 데이터 모델 구성요소

  • 구조
    • 논리적으로 표현된 개체 타입들 간의 관계로서 데이터 구조 및 정적 성질 표현
  • 연산
    • 데이터베이스에 저장된 실제 데이터를 처리하는 작업에 대한 명세로 데이터베이스를 조작하는 도구
  • 제약조건
    • 데이터베이스에 저장될 수 있는 실제 데이터의 논리적인 제약조건

 

6. 화이트/블랙박스 테스트

  • 화이트 박스 테스트: 모듈 내부 소스 코드를 보면서 수행하는 테스트
    • 종류
      • 기본 경로 커버리지(Base Path Coverage): 수행 가능한 모든 경로 테스트
      • 데이터 흐름 테스트(Data Flow Testing): 프로그램에서 변수의 정의와 변수 사용의 위치에 초점을 맞추어 검사
      • 조건 커버리지(Condition Coverage): 각 개별 조건식이 적어도 한 번은 참과 거짓의 결과가 되도록 수행
      • 루프 테스트
  • 블랙 박스 테스트: 외부 사용자의 요구사항 명세를 보면서 수행하는 테스트
    • 동등(동치, 균등) 분할 테스트(Equivalence Partitioning Testing)
      • 입력값의 범위를 유사한 특징을 갖는 동등그룹으로 나누고 각 그룹마다 대표값을 선정하는 테스트
      • 유효값과 그렇지 않은 범위의 값을 나누어야 할 경우 사용하는 테스트
    • 경계값 분석 테스트(Boundary Value Analysis Testing): 경계값을 테스트 케이스로 선정하여 검사
    • 원인-결과 그래프 테스트(Cause-Effect Graphing Testing)
    • 오류 예측 테스트
    • 의사 결정 테이블 테스트
    • 상태 전이 테스트

 

7. 공격 기법

Dos(Denial of Service)

  • Ping Of Death: 정상 크기보다 큰 ICMP 패킷을 작은 조각(Fragment)으로 쪼개어 공격 대상이 조각화된 패킷을 처리하게 만드는 공격
  • Smurf: IP를 위조하여 ICMP 받을 대상에 과부하
  • Land Attack: Packet의 보내는 사람과 받는 사람을 동일하게 설정
  • Teardrop Attack: Fragment를 재조립 시 정확한 조립을 위해 오프셋이라는 값을 더하게 되는데 이 오프셋 값을 고의적으로 수정하여 시스템의 기능을 마비시켜 버리는 방법
  • SYN Flooding: 접속을 요청하는 SYN Packet을 대량으로 전송해 네트워크를 마비 시킴
  • UDP Flooding: 많은 수의 UDP packet을 전송하여 정상적인 서비스가 불가능하도록 하는 공격
  • Ping Flooding: 많은 ICMP Echo를 보내 이에 대한 응답을 하기 위해 자원을 모두 사용해버려 시스템이 정상적으로 동작하지 못하도록 하는 공격

DDoS (Distributed Denial of Service)

  • Phishing: 공격자가 사람들을 속이기 위해 악성 이메일을 보내는 것
  • Pharming: 피싱 기법 중 하나로, 정확한 웹 페이지 주소를 입력해도 가짜 웹 페이지에 접속하게 하여 개인정보를 훔치는 것
  • Sniffing: 네트워크 중간에서 남의 패킷 정보를 도청하는 것
  • Smishing: SMS와 Phishing의 결합어로 문자메시지를 이용한 피싱
  • Qshing: QR코드와 피싱(Phishing)의 합성어로 QR코드를 이용한 피싱
  • Ransomware: 컴퓨터 시스템을 감염시켜 접근을 제한하고 일종의 몸값을 요구하는 악성 소프트웨어
  • Key Logger: 컴퓨터 사용자의 키보드 움직임을 탐지해 ID, 패스워드 등 개인의 중요한 정보를 몰래 빼가는 해킹 공격
  • SQL Injection: 임의로 작성한 SQL 구문을 애플리케이션에 삽입하는 공격 방식
  • XSS(Cross Site Scripting): 악의적인 스크립트를 포함하여 정보 유출 등의 공격을 하는 것

기타

  • Rainbow Table Attack
    • 해시함수에 입력한 값과 해시값을 저장한 일종의 정답지를 갖고 일치하는 해시값을 통해 Key 값을 찾는 방식
    • Salt: 해커들의 레인보우 테이블이 키 값에 대한 해시값을 갖고 있으므로, 해당 값에 다른 값을 덧붙여서 다른 암호 값으로 저장되도록 추가하는 값
  • Session HiJacking
    • 다른 사람의 세션 상태를 훔치거나 가로채는 해킹 기법
    • 로그인된 상태를 가로채는 것

 

8. IP 주소 체계

  • IPv4
    • 주소 길이: 32bit (8bit*4)
    • 주소 개수: 2^32개
    • 주소 할당: A, B, C 클래스 등 비순차적 할당
    • 주소 체계: 유니캐스트(1:1), 멀티캐스트(1:다), 브로드캐스트(방송)
    • 보안: IPSec, SSL(HTTPS), S-HTTP Protocol 별도 설치
  • IPv6
    • 주소 길이: 128bit (16bit*8)
    • 주소 개수: 2^128
    • 주소 할당: 순차적 할당
    • 주소 체계: 유니캐스트(1:1), 멀티캐스트(1:다), 애니캐스트(가장 자까운 수신자에게 전달)
    • 보안: 자체 보안기능 제공

IPv4 → IPv6 전환 기술

  • 듀얼 스택(Dual Stack)
    • IPv4 / IPv6 동시 지원
  • 터널링(Tunneling)
    • 두 IPv6 네트워크 간 터널을 이용하는 기술
    • 캡슐화
  • 주소 변환(Addressing Translation)
    • IPv4와 IPv6 간 주소를 변환하여 두 버전을 이용

 

9. 모듈의 독립성

모듈의 독립성을 판단하는 두 가지 지표로, 결합도(Coupling)는 모듈과 모듈간의 상호 의존 정도, 응집도(Cohesion)는 모듈 내부의 기능적인 집중 정도이다.

결합도(Coupling)

: 모듈과 모듈간의 상호 의존 정도

  1. 자료(Data): 파라미터로 만을 전달하는 경우
  2. 스탬프(Stamp): 파라미터로 배열이나 오브젝트, 스트럭쳐 등의 객체가 전달되는 경우
  3. 제어(Control): 파라미터로 값뿐만 아니라 제어 요소도 전달되는 경우
  4. 외부(External): 어떤 모듈에서 선언한 데이터(변수)를 외부의 다른 모듈에서 참조하는 경우
  5. 공통(Common): 공유되는 공통 데이터 영역(전역변수)을 여러 모듈이 사용하는 경우
  6. 내용(Content): 한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 직접 참조하거나 수정하는 경우
    • 내용 결합도가 높을 경우, 스파게티 코드가 될 수 있음
  • Spaghetti Code: 소스 코드가 복잡하게 얽힌 경우
  • Alien Code: 아주 오래되거나 참고문서가 없어 유지보수가 어려운 경우
  • Legacy Code: 더 이상 쓰기 힘들고 난해한 경우

응집도(Cohesion)

: 모듈 내부의 기능적인 집중 정도

  1. 우연적(Coincidental): 모듈 내부의 각 구성요소들이 연관이 없을 경우
  2. 논리적(Logical): 유사한 성격을 갖는 요소들이 한 모듈에서 처리
  3. 시간적(Temporal): 특정 시간에 처리되어야 하는 활동들을 한 모듈에서 처리
  4. 절차적(Procedural): 모듈 안의 구성요소들이 그 기능을 순차적으로 수행
  5. 통신적(Communicational): 동일한 입력과 출력을 사용하여 다른 기능을 수행하는 활동들이 모여있을 경우
  6. 순차적(Sequential): 모듈 내에서 한 활동에서 나온 출력값을 다른 활동이 사용할 경우
  7. 기능적(Functional): 모듈 내부의 모든 기능이 단일한 목적을 위해 수행되는 경우

 

10. 요구사항 분석

  • 기능적 분석: 기능 관련
  • 비기능적 분석: 기능의 성능, 보안, 품질 관련

 

접근 제어

  1. 강제적 접근제어(MAC, Mandatory Access Control)
    : 높은 보안 수준을 요구하는 정보가 낮은 보안 수준의 주체에게 노출되지 않도록 하는 접근 제어 방법
  2. 임의적 접근제어(DAC, Discretionary Access Control)
    : 객체의 소유주가 접근 여부를 결정
  3. 역할기반 접근제어(RBAC, Role Based Access Control)
    : 조직내에서 맡은 역할에 기초하여 자원에 대한 접근허용 여부를 결정하는 방법

MAC 보안 모델

  1. Bell-LaPadula Confidentiality Model; BLP
    • 기밀성 강조
    • No Read Up: 낮은 등급의 주체는 높은 등급의 객체를 읽을 수 없음
    • No Write Down: 높은 등급의 주체는 낮음 등급의 객체를 수정할 수 없음
  2. Biba Integrity Model
    • 무결성 강조
    • No Read Down: 높은 등급의 주체는 낮은 등급의 객체를 읽을 수 없음
    • No Write Up: 낮은 등급의 주체는 상위 등급의 객체를 수정할 수 없음
  3. Clark-Wilson Integrity Model
    • 무결성 강조
    • 상업용
  4. Brewer Nash, Chinese Wall Model
    • 이익 충돌 방지를 위한 모델
  5. Lattice
    • 정보의 흐름을 안전하게 제어

 

13. V모델

  1. 단위(Unit) 테스트
    : 개발자가 명세서의 내용대로 정확히 구현되었는지 단위 중심으로 테스트
    • 정적
      • 소스코드의 실행없이 내부 확인
      • 도구
        • PMD, SonarQube, FindBugs, CheckStyle, CppCheck, Cobertura
    • 동적: 입력값에 대한 출력값 확인
  2. s
    : 단위 테스트를 통과한 컴포넌트 간의 인터페이스를 테스트
    • 빅뱅 테스트: 모든 모듈이 결합된 프로그램 전체가 대상
    • 상향식 테스트: 드라이버(Driver) 사용
    • 하향식 테스트: 깊이 우선 통합법, 넓이 우선 통합법 사용, 스텁(Stub) 사용
    • 혼합식 통합 테스트: : 하위 수준-상향식 통합, 상위 수준-하향식 통합 사용, 샌드위치(Sandwich)식 통합 테스트 방법
    • 회귀 테스팅(Regression Testing): 통합 테스트가 완료 된 후 변경된 모듈이나 컴포넌트가 있을 경우, 다른 부분에 영향을 미치는지 테스트하여 새로운 오류 여부를 확인
  3. 시스템(System) 테스트
    : 전체 시스템 또는 제품의 동작에 대해 테스트
    • 기능 요구사항 테스트
    • 비기능 요구사항 테스트
  4. 인수(Acceptance) 테스트
    : 계약상의 요구사항이 만족되었는지 확인
    • 알파 테스트: 개발자 + 사용자
    • 베타 테스트: 사용자
    • 형상 테스트: 구조 확인

소프프웨어 개발 방법론

애자일 방법론: 일정한 주기를 갖고 계속 검토해 나가며 필요할 때마다 요구사항을 더하고 수정하여 커다랗게 살을 붙이면서 개발하는 프로세스 모델 방식

소프트웨어 생명 주기

  • 폭포수 모형 (Waterfall Model)
    • 계획 → 분석 → 설계 → 구현 → 테스트 → 유지보수
    • 이전 단계로 돌아갈 수 없다는 전제
    • 각 단계가 끝난 후에는 다음 단계를 수행하기 위한 결과물이 명확하게 산출되어야 함
  • 나선형 모델
    • 계획 및 정의 → 위험 분석 → 공학적 개발 → 고객 평가
  • 프로토타입 모형(Prototype Model, 원형 모델)
    • 실제 개발될 소프트웨어에 대한 견본품을 만들어 최종 결과물을 예측하는 모형
  • RAD 기법 모델
    • 짧은 개발 기간동안 개발하기위한 순차적 프로세스 모델
  • V 모델
    • 단위 테스트 → 통합 테스트 → 시스템 테스트 → 인수 테스트
    • 작업 결과의 검증(테스트)에 초점
  • 4세대 기법
    • 자동화 도구들을 이용하여 요구사항 명세서로부터 실행코드를 자동으로 생성할 수 있게 해주는 방법

 

15. IPC(Inter Process Communication)

프로세스 간 통신을 가능하게 하는 기술로, 파이프, 메시지 큐, 공유메모리, 세마포어, 소켓 등이 있다.

 

16. SQL

SELECT COUNT(*) 
  FROM TABLE01 
 WHERE EMPNO > 100 
   AND SAL >= 3000 
    OR EMPNO = 200;

-- 1
-- DML
INSERT INTO TABLE_NAME(COLUMN1, COLUMN2, ...) VALUES(VAL1, VAL2, ...);
SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ...;
UPDATE TABLE_NAME SET COL1=VAL1, COL2=VAL2 WHERE ...;
DELETE FROM TABLE_NAME WHERE ...;

 

17. Python

class arr:
    a = ["Seoul", "Kyeonggi", "Incheon", "Daejeon", "Daegu", "Pusan"];
str = '';
for i in arr.a:
    str = str + i[0];
print(str);

# SKIDDP

 

18. Java

int i, sum;
for(i = 0; i <= 5; i++){
    sum += i;
    System.out.print(i);
    if(i==5){
        System.out.print("=");
        System.out.print(sum);
    }
    else {
        System.out.print("+");
    }
}

// 0 + 1 + 2 + 3 + 4 + 5 = 15

 

19. Java

int val[][] = {{45, 50, 75}, {89}};
System.out.println(val[0].length); // 3
System.out.println(val[1].length); // 1
System.out.println(val[0][0]); // 45
System.out.println(val[0][1]); // 50
System.out.println(val[1][0]); // 89

 

20. C

개행, 띄어쓰기 유의

int main(){
    struct insa {
        char name[10];
        int age;
    } a[] = {"Kim", 28, "Lee", 38, "Park", 41, "Choi", 30};
    struct insa *p;
    p = a;
    p++;
    print("%s ", p → name);
    print("%d", p → age);
}

 /* Lee 38 */

 

 

 

🔗 마크다운 파일

GitHub

 

📚 참고 자료

 

흥달쌤

흥달쌤과 함께하는 IT 채널입니다. 정보처리기사 자격증 관련된 강의 및 실무 노하우, 프로그래밍 언어(JAVA, C언어, Python) 특강 등이 진행됩니다. 앞으로 진행 예정인 동영상은 IT 관련된 이야기

www.youtube.com

 

반응형
반응형

정보처리기사 실기

1. 디자인 패턴 (시험 직전에 확인)

GoF(Gang of Four) 디자인 패턴

생성 패턴(Creational Patterns) 5 : 객체 생성에 대한 패턴

종류 설명
Abstract Factory 서브 클래스를 상세히 정의하지 않고도 서로 관련성이 있는 여러 객체들을 생성하기 위한 인터페이스를 제공하는 패턴
Builder 복잡한 객체들을 단계별로 생성하는 패턴
Factory Method 객체를 생성하는 인터페이스를 정의하고 객체의 타입은 서브클래스가 결정하도록 하는 패턴
Prototype 원본 객체를 복사하여 새 객체를 생성하는 패턴
SingleTon 오직 하나의 객체만을 생성하는 패턴

구조 패턴(Structural Patterns) 7 : 클래스나 객체를 조합해 더 큰 구조를 만드는 패턴

종류 설명
Adapter 호환되지 않는 인터페이스를 가진 객체들간의 기능을 변환하여 호환성을 제공하는 패턴
Bridge 추상화 클래스 계층과 구현 클래스 계층을 분리하는 패턴
Composite 객체 집합 속에 또 다른 객체 집합을 갖는 패턴
Decorator 새로운 기능이 추가될 때마다 새로운 객체를 만들고, 이전 객체의 기능은 새로운 객체내에서도 그대로 유지되는 패턴
Facade 서브시스템이 복잡할 경우 간단한 인터페이스를 통해 서브 시스템의 주요기능을 사용할 수 있도록 하는 패턴
Fly Weight 인스턴스의 공유를 통해 불필요한 객체 생성을 하지 않도록 하는 패턴
Proxy 원래 객체에 대한 접근을 제어하여, 요청이 원래 객체에 전달되기 전 또는 후에 추가적인 작업을 수행할 수 있도록 하는 패턴

행위 패턴(Behavioral Patterns) 11 : 객체나 클래스 간 알고리즘이나 상호 작용을 정의하기 위한 패턴

종류 설명
Chain of Responsibility 여러개의 객체를 체인으로 연결하여 그 객체의 체인을 순차적으로 걸어 가면서 최종적인 객체를 결정
Command 명령을 나타내는 클래스의 인스턴스를 하나로 표현
Interpreter 언어나 표현식을 해석하고 실행하는데 사용
Iterator 집합체의 요소에 차례로 액세스를 실시
Mediator 중개자을 통해서 행동을 일으키게 하는 방식
Memento 객체의 상태를 저장하고 복원하는 데 사용되며, 주로 "뒤로 가기" 기능이나 객체의 상태를 일시적으로 저장해야 하는 상황에서 유용
Observer 주로 분산 이벤트 핸들링 시스템을 구현하는데 사용
State 상태를 클래스로 표현하고 클래스를 전환하여 상태 변경을 나타내는 방법
Strategy 특정 작업 또는 알고리즘의 다양한 전략(방법)을 정의하고, 이들을 동적으로 교체하여 사용할 수 있게 하는 패턴
Template Method 슈퍼 클래스로 처리의 틀을 정해서 서브 클래스로 그 구체적 내용을 정하는 방식
Visitor 데이터 구조와 처리를 분리하는 방법

 

2. UML(Unified Modeling Language) (시험 직전에 확인)

: 표준화된 모델링(개발하기 위한 그림을 그려주는) 언어

종류

구조적(정적) 다이어그램

  • 객체: 객체 정보
  • 클래스: 시스템을 구성하는 클래스 사이의 관계 표현
  • 패키지: 클래스 다이어그램의 집합, 그룹
  • 컴포넌트: 컴포넌트끼리의 구조 관계를 표현
  • 컴포지트: 복합구조
  • 배치(Deployment): SW, HW 등을 포함한 시스템의 물리적 구조를 나타냄

행위적(동적) 다이어그램

  • 유스케이스: 사용자 관점에서 바라본 시스템을 표현
    • 구성요소(Component): System, Actor, UseCase, Relation
      • System: 만들고자 하는 프로그램
      • Actor: 시스템의 외부에 있고 시스템과 상호작용을 하는 사람(시스템의 기능을 사용하는 사람), 시스템(시스템에 정보를 제공하는 또 다른 시스템)
      • UseCase: 사용자 입장에서 바라본 시스템의 기능
      • Relation: 액터와 유스케이스 사이의 의미있는 관계
        • 연관: 유스케이스와 액터간의 상호작용이 있음
        • 확장: "글을 등록한다" 기능을 수행 할 때 "파일을 첨부한다" 기능을 선택적으로 수행 할 수 있다는 것
        • 포함: "글을 등록한다" 기능을 동작하기 위해서 "로그인 한다" 기능이 반드시 동작되어야 한다는 것
        • 일반화: 그룹을 만들어 이해도를 높이기 위한 관계, "글을 검색한다"를 "글쓴이로 검색한다"와 "날짜로 검색한다"로 구체화 한 것
  • 활동: 활동의 흐름
  • 상태: 객체의 상태 변화
  • 순차: 시간의 흐름에 따른 객체 사이의 상호 작용
  • 커뮤니케이션
  • 인터렉션 오버뷰: 활동 + 순차
  • 타이밍: 시간 흐름에 따른 상태 변화

 

UML 클래스 관계

uml_class_relation

  1. 일반화 관계(Generalization): 상속
  2. 실체화 관계(Realization): 구현
  3. 의존관계(Dependency): 참조, 매개변수, 일시성
  4. 연관관계(Association): 참조, 긴밀성, 양방향성
    • 직접 연관관계(Directional): 한쪽으로만 방향성이 있는 연관관계(명령/수행)
    • 집합 연관관계(Aggregation): 전체/부분 연관 관계, 전체가 삭제되더라도 부분은 삭제되지 않는 경우
    • 합성 연관관계(Composition): 전체/부분 연관 관계, 전체가 삭제되면 부분도 삭제되는 경우

 

3. Test Oracle

: 테스트의 결과가 참인지 거짓인지를 판단하기 위해서 사전에 정의된 참값을 입력하여 비교하는 기법

  • 종류
    • 참(True) 오라클: 모든 입력값에 대해 기대하는 결과를 전수 검사
    • 샘플링 오라클: 특정 몇몇 입력값에 대해서만 검사
    • 휴리스틱 오라클: 특정 몇몇 입력값에 대해서만 검사 + 나머지는 추정으로 처리
    • 일관성 검사 오라클: 이전 수행결과와 현재 수행결과가 동일한지 검사

 

4. 테스트 기법

화이트/블랙박스 테스트

  • 화이트 박스 테스트: 모듈 내부 소스 코드를 보면서 수행하는 테스트
    • 종류
      • 기본 경로 커버리지(Base Path Coverage): 수행 가능한 모든 경로 테스트
      • 데이터 흐름 테스트(Data Flow Testing): 프로그램에서 변수의 정의와 변수 사용의 위치에 초점을 맞추어 검사
      • 조건 커버리지(Condition Coverage): 각 개별 조건식이 적어도 한 번은 참과 거짓의 결과가 되도록 수행
      • 루프 테스트
  • 블랙 박스 테스트: 외부 사용자의 요구사항 명세를 보면서 수행하는 테스트
    • 동등(동치, 균등) 분할 테스트(Equivalence Partitioning Testing): 입력값의 범위가 유사한 동등그룹으로 나누고 각 그룹마다 대표값을 선정하는 테스트 기법
    • 경곗값 분석 테스트(Boundary Value Analysis Testing): 경계값을 테스트 케이스로 선정하여 검사
    • 원인-결과 그래프 테스트(Cause-Effect Graphing Testing): 입력 데이터간의 관계와 출력에 영향을 미치는 상황을 체계적으로 분석하여 효용이 높은 테스트 케이스를 선정하여 검사
    • 오류 예측 테스트(Fault Based Testing)
    • 의사 결정 테이블 테스트(Decision Table Testing)
    • 상태 전이 테스트(State Transition Testing)

 

5. SQL

SELECT 학과, COUNT(학과) AS '학과별 튜플수' FROM 학생 GROUP BY 학과;

집계 함수 종류

AVG, SUM, MIN, MAX, COUNT

 

6. Sniffing

네트워크 상 패킷들의 내용을 엿보는 행위

서비스 공격 유형 종류

Dos(Denial of Service)

  • Ping Of Death: 정상 크기보다 큰 ICMP 패킷을 작은 조각(Fragment)으로 쪼개어 공격 대상이 조각화된 패킷을 처리하게 만드는 공격
  • Smurf: IP를 위조하여 ICMP 받을 대상에 과부하
  • Land Attack: Packet의 보내는 사람과 받는 사람을 동일하게 설정
  • Teardrop Attack: Fragment를 재조립 시 정확한 조립을 위해 오프셋이라는 값을 더하게 되는데 이 오프셋 값을 고의적으로 수정하여 시스템의 기능을 마비시켜 버리는 방법
  • SYN Flooding: 접속을 요청하는 SYN Packet을 대량으로 전송해 네트워크를 마비 시킴
  • UDP Flooding: 많은 수의 UDP packet을 전송하여 정상적인 서비스가 불가능하도록 하는 공격
  • Ping Flooding: 많은 ICMP Echo를 보내 이에 대한 응답을 하기 위해 자원을 모두 사용해버려 시스템이 정상적으로 동작하지 못하도록 하는 공격

DDoS (Distributed Denial of Service)

  • Phishing: 사람들을 속이기 위해 악성 이메일을 보내는 것
  • Pharming: 피싱 기법 중 하나로, 가짜 웹 페이지에 접속하게 하여 개인정보를 훔치는 것
  • Sniffing: 네트워크 중간에서 남의 패킷 정보를 도청하는 것
  • Smishing: SMS와 Phishing의 결합어로 사람들을 속이기 위해 악성 문자를 보내는 것
  • Qshing: QR코드와 Phishing의 합성어로 사람들을 속이기 위해 악성 QR code를 보내는 것
  • Ransomware: 컴퓨터 시스템을 감염시켜 접근을 제한하고 대금을 요구하는 것
  • Key Logger: 컴퓨터 사용자의 키보드 움직임을 탐지해 개인 정보를 빼가는 공격
  • SQL Injection: SQL 구문을 애플리케이션에 삽입하여 비정상적으로 데이터베이스를 조작하는 공격
  • XSS(Cross Site Scripting): 악의적인 스크립트를 포함시켜 정보 유출 등을 하는 것

기타

  • Rainbow Table Attack: 해시 함수 입력값과 해시값을 저장한 테이블로 해시값을 통해 Key 값을 찾는 것
    • Salt: 레인보우 테이블이 있으므로, 다른 암호 값으로 저장되도록 입력값에 추가하는 값

 

7. 정보보안의 3요소

  • 기밀성: 인가된 사용자만 접근
  • 무결성: 인가된 사용자만 인가된 방법으로 자원 수정
  • 가용성: 인가된 사용자가 필요할 때 언제든지 데이터에 접근할 수 있는 능력
    • DoS, DDos: 가용성을 떨어트리는 공격

 

8. 이상 현상

데이터베이스 내의 데이터들이 중복돼 검색이나 조작 등을 제대로 수행할 수 없는 현상

  • 삽입 이상: 릴레이션(테이블)에 데이터를 삽입할 때 의도와는 상관없는 값들도 함께 삽입되는 현상
  • 삭제 이상: 릴레이션에서 한 튜플(행)을 삭제할 때 의도와는 상관없는 값들이 함께 삭제되는 현상
  • 갱신 이상: 릴레이션에서 튜플에 있는 속성값을 갱신할 때 일부 튜플의 정보만 갱신되며 정보에 모순이 생기는 현상

정규화 종류

  • 제 1정규형: 도메인이 원자값
  • 제 2정규형: 부분 함수 종속성 제거
  • 제 3정규형: 이행적 함수 종속성 제거
  • BCNF: 결정자이면서 후보키가 아닌것 제거
  • 제 4정규형: 다치 종속 제거
  • 제 5정규형: 조인 종속 제거

 

9. 회복 기법

  • 로그 기반 회복 기법
    • 즉시 갱신 기법
      • 데이터 변경 시 로그와 DB에 즉시 갱신
      • 커밋되기 전에 장애가 나면 UNDO, 커밋 후에 장애가 나면 REDO를 수행
    • 지연 갱신 기법
      • 트랜잭션 커밋 완료까지 갱신 내용을 로그에만 저장하고 DB에 저장하지 않고 지연
      • 중간에 갱신을 하지 않았음으로 UNDO가 필요 없고, REDO만 하면 됨
    • 체크포인트 회복 기법
      • 로그 기록을 이용하되, 일정 시간 간격으로 검사 시점(Checkpoint)을 만들어두고 장애가 발생하면 가장 최근 검사 시점 이전의 트랜잭션에는 회복 작업을 수행하지 않고, 이후의 트랜잭션에만 회복 작업을 수행
  • 비로그 기반 회복 기법
    • 그림자 페이징 기법
      • 로그를 사용하지 않고, 트랜잭션 실행동안 현재 페이지 테이블과 그림자 페이지 테이블 2개를 관리하는 기법
      • 데이터 변경 시 현재 페이지 테이블만 변경, 회복 시 현재 페이지 테이블을 그림자 테이블로 대체
    • 미디어 회복기법
      • 디스크와 같은 비휘발성 저장 장치의 내용이 손상되는 장애 발생 시 회복을 위한 기법

REDO는 영속성을 보장 / UNDO는 원자성을 보장

 

10. 프로세스 상태 전이도

process_state

+ 실행 → 대기: Block

11. IP 주소 체계

  • IPv4
    • 주소 길이: 32bit (8bit*4)
    • 주소 개수: 2^32개
    • 주소 할당: A, B, C 클래스 등 비순차적 할당
    • 주소 체계: 유니캐스트(1:1), 멀티캐스트(1:다), 브로드캐스트(방송)
    • 보안: IPSec, SSL(HTTPS), S-HTTP Protocol 별도 설치
  • IPv6
    • 주소 길이: 128bit (16bit*8)
    • 주소 개수: 2^128
    • 주소 할당: 순차적 할당
    • 주소 체계: 유니캐스트(1:1), 멀티캐스트(1:다), 애니캐스트(가장 자까운 수신자에게 전달)
    • 보안: 자체 보안기능 제공

 

IPv4 → IPv6 전환 기술

  • 듀얼 스택(Dual Stack)
    • IPv4 / IPv6 동시 지원
  • 터널링(Tunneling)
    • 두 IPv6 네트워크 간 터널을 이용하는 기술
    • 캡슐화
  • 주소 변환(Addressing Translation)
    • IPv4와 IPv6 간 주소를 변환하여 두 버전을 이용

IP Class

A Class: 0

B Class: 10

C Class: 110

서브넷 마스크 구하기

203.241.132.82/27

=> 1111 1111 . 1111 1111 . 1111 1111 . 1110 0000

=> 255.255.255.224

 

12. 운영 체제

UNIX

  • 대부분 C언어로 작성되어 있어 이식성이 높음
  • 트리 구조의 파일 시스템

 

13. Hadoop

  • 대규모 데이터 세트를 분산 처리할 수 있는 오픈 소스 프레임워크
  • 일반 PC급 컴퓨터들로 가상화된 대형 스토리지 형성
  • MapReduce: 분산처리엔진 역할을 하는 하둡의 중심 모듈

Data Mining

수많은 데이터에서 가치있는 유용한 정보를 찾아내는 것

Data Warehouse

DB에 축적된 데이터를 공통의 형식으로 변환하여 관리하는 DB

Data Mart

DB의 한 부분으로 비교적 작은 규모의 Data Warehouse
예시: Data Mart(삼성 물산, 삼성 전자, 삼성 화재) ▶ Data Warehouse(삼성)

OLAP(Online Analytical Processing)

데이터 웨어하우스, 데이터 마트 또는 기타 중앙화된 통합 데이터 저장소의 대용량 데이터를 고속으로 다차원 분석하는 소프트웨어

Mashup

웹에서 제공하는 정보 및 서비스를 이용하여 새로운 SW나 서비스, DB 등을 만드는 기술

 

15. NAT(Network Address Translation)

한정된 공인 IP를 여러 개의 내부 사설 IP로 변환하기 위해 사용하는 기술

 

16. C언어

void main(){
    char*p="KOREA";
    printf("%s\n", p); /* KOREA */
    printf("%s\n", p+3); /* EA */
    printf("%c\n", *p); /* K */
    printf("%c\n", *(p+3)); /* E */
    printf("%c\n", *p+2); /* M */
}

p   K   O   R   E   A
10  10  11  12  13  14

 

17. JAVA

public static void main(String[] args){
    int[][] arry = new int[3][5];
    for(int i=0; i<3; i++){
        for(int j=0; j<5; j++){
            arry[i][j] = j*3 + (i+1);
            System.out.print(arry[i][j]+"");
        }
        System.out.println();
    }
}

 

18. JAVA

int[8] != a[8]

// 처리 결과
00001010

int a[] = new int[8];
int i = 0, n = 10;
while(i < 8){
    a[i++] = (n % 2);
    n /= 2;
}

for(i = 7; i>=0; i--){
    System.out.printf("%d", a[i]);
}

 

19. JAVA - Override

class Parent{
    int compute(int num){
        if(num <= 1)
            return num;
        return compute(num - 1) + compute(num - 2);
    }
}

class Child extends Parent{
    int compute(int num){
        if(num <= 1)
            return num;
        return compute(num - 1) + compute(num - 3);
    }

}

Parent obj = new Child();
System.out.println(obj.compute(4)); // 1

/*
풀이 과정

compute(3) + compute(1)
= (compute(2) + compute(0)) + compute(1)
= {(compute(1) + compute(-1)) + compute(0)} + compute(1)
= 1 + (-1) + 0 + 1
= 1 
*/

20. Python

lol = [[1, 2, 3], [4, 5], [6, 7, 8, 9]];

print(lol(lol[0])); # [1, 2, 3]
print(lol(lol[2][1])); # 7

for sub in lol:
    for item in sub:
        print(item, end=" "); # end = " ", 개행 대신 띄어쓰기
    print();

# 1 2 3
# 4 5
# 6 7 8 9

 

 

 

🔗 마크다운 파일

GitHub

 

📚 참고 자료

 

흥달쌤

흥달쌤과 함께하는 IT 채널입니다. 정보처리기사 자격증 관련된 강의 및 실무 노하우, 프로그래밍 언어(JAVA, C언어, Python) 특강 등이 진행됩니다. 앞으로 진행 예정인 동영상은 IT 관련된 이야기

www.youtube.com

 

반응형
반응형

정보처리기사 실기

1. 형상 통제

소프트웨어의 형상 변경 요청을 검토하고 승인하여 현재의 baseline에 반영할 수 있도록 통제하는 것

형상 관리 절차

식별 → 통제(BaseLine 설정) → 감사 → 기록(형상 관리 위원회: Configuration Control Board)

2. EAI 유형

: 기업에서 운영하는 서로 다른 플래폼, App간의 정보 전달, 연계, 통합을 위한 솔루션

  • Point To Point
    • 중간에 미들웨어를 두지 않고, 각 애플리케이션 간 연결
    • 상대적으로 저렴하게 통합 가능
    • 변경, 재사용이 어려움
  • Hub & Spoke
    • 허브 시스템을 통해 데이터를 전송하는 중앙 집중적 방식
    • 확장, 유지보수 용이
    • 허브 장애 시, 전체에 영향
  • Message Bus(ESB)
    • 애플리케이션 사이 미들웨어(버스)를 두어 처리
    • 시스템과 버스를 두어 연결하여 확장성이 뛰어나고, 대용량 처리가 가능
  • Hybrid
    • 그룹 내: Hub & Spoke, 그룹 외: Message Bus
    • 데이터 병목 최소화

3. UI 설계 원칙 4가지

  • 직관성: 사용자가 기능을 쉽게 파악할 수 있도록 해야 함
  • 유효성: 사용자의 목적을 정확하게 달성해야 함
  • 학습성: 누구나 쉽게 배울 수 있어야 함
  • 유연성: 사용자의 요구를 최대한 수용하고, 오류를 최소화 해야 함

4. Code Coverage

애플리케이션에서 테스트를 수행한 정도

  • 구문 Coverage: 코드 구조 내의 모든 구문에 대해 한 번 이상 수행하는 테스트 커버리지
  • 조건 Coverage: 결정 포인트 내의 모든 개별 조건식(if 조건문 내 and와 or로 연결된 개별 조건문)에 대해 수행하는 테스트 커버리지
  • 결정 Coverage: 결정 포인트(if 조건문 전체) 내의 모든 분기문에 대해 수행하는 테스트 커버리지
  • 조건/결정 Coverage: 결정 포인트와 개별 조건식이 모두 T/F를 가져야 함
  • 변경/조건 Coverage: 모든 결정 포인트 내의 개별 조건식은 적어도 한 번의 T/F를 가져야 함
  • 다중 조건 Coverage: 결정 포인트 내의 모든 개별 조건식의 가능한 조합을 100% 보장

5. 화이트/블랙박스 테스트

  • 화이트 박스 테스트: 모듈 내부 소스 코드를 보면서 수행하는 테스트
    • 종류
      • 기본 경로 커버리지(Base Path Coverage): 수행 가능한 모든 경로 테스트
      • 데이터 흐름 테스트(Data Flow Testing): 프로그램에서 변수의 정의와 변수 사용의 위치에 초점을 맞추어 검사
      • 조건 커버리지(Condition Coverage): 각 개별 조건식이 적어도 한 번은 참과 거짓의 결과가 되도록 수행
      • 루프 테스트
  • 블랙 박스 테스트: 외부 사용자의 요구사항 명세를 보면서 수행하는 테스트
    • 동등(동치, 균등) 분할 테스트(Equivalence Partitioning Testing): 입력값의 범위를 유사한 특징을 갖는 동등그룹으로 나누고 각 그룹마다 대표값을 선정하는 테스트 기법
    • 경곗값 분석 테스트(Boundary Value Analysis Testing): 경계값을 테스트 케이스로 선정하여 검사
    • 원인-결과 그래프 테스트(Cause-Effect Graphing Testing): 입력 데이터간의 관계와 출력에 영향을 미치는 상황을 체계적으로 분석하여 효용이 높은 테스트 케이스를 선정하여 검사
    • 오류 예측 테스트(Fault Based Testing)
    • 의사 결정 테이블 테스트(Decision Table Testing)
    • 상태 전이 테스트(State Transition Testing)

6. SQL - ALTER

속성 추가
ALTER TABLE 테이블_이름 ADD 속성_이름 데이터_타입;
속성 변경
ALTER TABLE 테이블_이름 MODIFY 속성_이름 데이터_타입;
속성 추가
ALTER TABLE 테이블_이름 DROP 속성_이름;

7. SQL - GROUP BY & HAVING

  SELECT 과목이름, 
         MIN(점수) AS 최소점수, 
         MAX(점수) AS 최대점수
    FROM 성적
GROUP BY 과목번호
  HAVING AVG(점수)>=90;

8. SQL - DML

DELETE FROM 학생 WHERE 이름='민수'

INSERT INTO TABLE_NAME(COLUMN1, COLUMN2, ...) VALUES(VAL1, VAL2, ...);
SELECT * FROM TABLE_NAME;
UPDATE TABLE_NAME SET COL1=VAL1, COL2=VAL2 WHERE ...;
DELETE FROM TABLE_NAME WHERE ...;

9. (개념) Schema

데이터베이스의 전체적인 구조와 제약조건을 정의한 것

Schema

  1. 외부 스키마
    : 사용자의 입장에서 필요로 하는 DB의 논리적 구조
  2. 개념 스키마
    : DB의 전체를 정의, 조직 전체의 DB로 하나만 존재
  3. 내부 스키마
    : 물리적인 저장장치의 입장에서 본 DB의 논리적 구조
  • 독립성
    • 논리적 독립성: 개념 스키마의 변경은 외부 스키마에 영향을 미치지 않음
    • 물리적 독립성: 내부 스키마의 변경은 개념, 외부 스키마에 영향을 미치지 않음
      (varchar2(10) ▶ varchar2(30)으로 변경한다고 해서 외부스키마와 개념스키마에 영향 X)

10. 관계 대수(Relation Algebra) & 관계 해석 (Relation Calculus)

관계 대수(Relation Algebra)

  • 주어진 릴레이션 조작을 위한 연산 집합
    • 일반 집합 연산: 합집합(∪), 교집합(∩), 차집합(-), 카티션 프로덕트(X)
    • 순수 관계 연산: SELECT(σ), PROJECT(∏), DIVISION(÷), JOIN(▷◁)
      • SELECT(σ)
        • σ조건(테이블): 테이블에서 조건을 만족하는 튜플을 구하기 위한 연산
      • PROJECT(∏)
        • ∏속성리스트(테이블): 테이블에서 주어진 속성들의 값으로만 구성된 튜플 반환
      • JOIN(▷◁)
        • R▷◁S: 테이블 R과 테이블 S에서 공통으로 가지고 있는 속성을 이용해서 하나의 새로운 테이블을 만드는 연산자
      • DIVISION(÷)
        • R ÷ S: 테이블 R의 튜플 중 테이블 S에 속한 컬럼과 튜플을 제외하는 연산자
        • 
          R1          S1      S2
          A B C       A       B C
          1 2 3       1       5 6
          4 5 6       4       8 9
          7 8 9
          5 2 3
          3 5 6
          
          R1 ÷ S1     R1 ÷ S2
          B C         A
          8 9         1
          2 3         5
          5 6
          
  • 절차적 언어
  • 원하는 정보를 얻기 위해 어떻게 (how) 질의를 해석하는지를 기술
  • 관계 해석 (Relation Calculus)
  • 비절차적 언어
  • 원하는 정보가 무엇 (what) 인지만 명시

11. Routing Protocol

routing_protocol

  • 정적: 관리자가 직접 라우터에 경로 설정
  • 동적: 라우터가 직접 경로 설정
  1. EGP: 외부 게이트웨이 프로토콜
    • BGP: Board Gateway Protocol
  2. IGP: 내부 게이트웨이 프로토콜
    • Distance Vector
      • RIP: Routing Information Protocol
        • 인접한 라우터간 일정 시간마다 상태 공유
        • 최대 홉수 15로 제한
    • Link State
      • OSPF: Open Shortest Path First (Protocol)
        • 변경된 데이터가 있을 때마다 상태 공유
        • 가장 많이 사용되는 내부 라우팅 프로토콜
        • 홉 수 제한 X

12. ICMP

  • IP의 비신뢰성을 보완하기 위한 Protocol
  • IP 패킷 전송 중 발생하는 에러의 원인을 알려주거나 네트워크 상태를 진단해주는 기능을 제공

OSI 7 Layer Model

  1. 물리 계층(Physical Layer)
    • 0과 1의 비트 정보를 회선에 보내기 위한 전기적 신호 변환
    • 단위: 비트
    • 주요 장비: 허브, 리피터
  2. 데이터 링크 계층(Data Link Layer)
    • 인접 노드 간 프레임 전송, 신뢰성 있는 정보 전달
    • 단위: 프레임
    • 주요 장비: 스위치, 브릿지
  3. 네트워크 계층(Network Layer)
    • 단말기 간 데이터 전송을 위한 최적화된 경로 제공
    • 단위: 패킷
    • 주요 장비: 라우터
    • 프로토콜
      • IP: 데이터 전달
      • ICMP: IP 패킷을 처리할 때 발생되는 문제를 알려주는 프로토콜
      • ARP: 논리 주소인 IP 주소 ▶ 실제적인 물리 주소인 MAC 주소로 변환
      • RARP: 실제적인 물리 주소인 MAC 주소 ▶ 논리 주소인 IP 주소로 변환
  4. 전송 계층(Transport Layer)
    • 단말기(종단) 간의 연결. 신뢰성 있는 정보 전달
    • 단위: 세그먼트(TCP)/데이터그램(UDP)
    • 프로토콜
      • TCP
        • FTP(20-데이터, 21-제어): 파일 전송
        • telnet(23): 원격지의 호스트 컴퓨터에 접속하기 위해 사용되는 인터넷 프로토콜
        • HTTP(80): 웹 서비스
        • SMTP(25): 메일 송신
        • POP3(110): 메일 수신
      • UDP
        • DHCP: IP 자동 할당
        • SNMP: 네트워크 관리
        • DNS(53): 도메인 ▶ IP 주소로 변환
  5. 세션 계층(Session Layer)
    • 송수신 간의 논리적 연결
    • 단위: 데이터
  6. 표현 계층(Presentation Layer)
    • 데이터 형식 설정, 암/복호화
    • 단위: 데이터
  7. 응용 계층(Application Layer)
    • 일반적인 응용 서비스를 수행
    • 단위: 데이터

13. 헝가리안 표기법

프로그래밍 언어에서 변수 및 함수의 이름 앞에 데이터 타입을 명시하는 코딩 규칙

  • iAge
  • strName

14. Refactoring

성능 향상을 위해서 결과의 변경 없이 코드의 구조를 재조정하는 것

15. 통신 프로토콜의 기본요소 3가지

  • 규약(Protocol): 컴퓨터가 메시지를 전달하고, 메시지가 제대로 도착했는지 확인하며, 미 도착 시 메시지를 재전송하는 일련의 방법
  • 구문(Syntax): 데이터의 구조나 형태를 정의
  • 타이밍(Timing)
  • 의미(Semantic)

16. C언어

void main()
{
    int i=0, c=0;
    while(i<10){
        i++;
        c*=i;
    }
    printf("%d", c); /* 0 */
}

17. C언어

int r1(){
    return 4;
}
int r10(){
    return (30+r1());
}
int r100(){
    return (200+r10());
}
void main(){
    printf("%d", r100()); /* 234 */
}

18. JAVA

경계값 계산 유의

i==9일 때, sum에는 10이 더해짐

public static void main(String[] args){
    int i=0;
    int sum=0;
    while(i<10){
        i++;
        if(i%2 == 1)
            continue;
        sum += i;
    }
    System.out.println(sum); // 30
}

19. JAVA

메서드 호출 시 어떤 메서드가 호출되는지는 참조 변수의 타입에 따라 결정
obj.getName("String") 시, Vehicle Type에는 존재하지 않으므로 오류 발생

public static abstract class Vehicle {
    String name;
    public Vehicle(String val){
        this.name = val;
    }
    public String getName(){
        return "Vehicle name: " + name;
    }
}

public static class Car extends Vehicle{
    private String name;
    public Car(String val){
        super(val);
        name = val;
    }
    public String getName(String val){
        return "Car name: " + val;
    }
    public String getName(byte val[]){
        return "Car name: " + val;
    }
}

public static void main(String[] args) throws IOException {

    Vehicle obj = new Car("Spark");
    System.out.println(obj.getName()); // Vehicle name: Spark

}

20. 생성자

객체 생성 시 자동으로 호출되는 메서드로, 멤버를 초기화하는 목적으로 주로 사용



🔗 마크다운 파일

GitHub

 

📚 참고 자료

 

흥달쌤

흥달쌤과 함께하는 IT 채널입니다. 정보처리기사 자격증 관련된 강의 및 실무 노하우, 프로그래밍 언어(JAVA, C언어, Python) 특강 등이 진행됩니다. 앞으로 진행 예정인 동영상은 IT 관련된 이야기

www.youtube.com

 

6장 관계 데이터 연산

reference: 데이터베이스 개론 2판 01 관계 데이터 연산의 개념 01-1 데이터 모델의 구성 데이터 모델 = 데이터 구조(data structure) + 연산(operation) + 제약조건 (constraint) 01-2 관계 데이터 연산(relational data

hoit1302.tistory.com

 

반응형

*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*