728x90

정보처리기사 실기

1. C

#include <stdio.h>

void main(){
    int n[5]={5, 4, 3, 2, 1};
    int i;
    for(i=0; i<5; i++){
        printf("%d", n[(i+1)%5]);
    }
}

// 4 3 2 1 5

2. C

#include <stdio.h>

void main(){
    int n[3]={73, 95, 82};
    int i, sum=0;
    for(i=0; i<3; i++){
        sum += n[i];
    }
    switch(sum/30){
        case 10:
        case 9: printf("A");
        case 8: printf("B");
        case 7: 
        case 6: printf("C");
        default: printf("D");
    }
}

// BCD

3. C

#include <stdio.h>
#define MAX_SIZE 10

int isWhat[MAX_SIZE];
int pointer=-1;

int isEmpty(){
    if(point==-1) return 1;
    return 0;
}

int isFull(){
    if(point==10) return 1;
    return 0;
}

void into(int num){
    if(point>=10) printf("Full");
    isWhat[++point]=num;
}

int take(){
    if(isEmpty()==1) printf("Empty");
    return isWhat[point--];
}

void main(){
    into(5);
    into(2);
    while(!isEmpty()){
        printf("%d", take());
        into(4);
        into(1);
        printf("%d", take());
        into(3);
        printf("%d", take());
        printf("%d", take());
        into(6);
        printf("%d", take());
        printf("%d", take());
    }
}

// 213465

5. C

%s: null을 만나기 전까지 출력

gets(): 이전 호출에서 입력된 문자열이 현재 호출에서 입력된 문자열로 덮어써짐

#include <stdio.h>

// 전역변수
char n[30];
char *soojebi(){ // return type: char *
    gets(n);
    // gets(): 지운 다음 다시 입력
    return n;
}
void main(){
    char *p1 = soojebi();
    // pointer 변수는 주소값 입력 받음
    char *p2 = soojebi();
    // 전역변수를 사용하므로 새로 입력된 값으로 덮어쓰기 됨
    char *p3 = soojebi();
    printf("%s\n", p1);
    // %s: null을 만나기 전까지 출력
    printf("%s\n", p2);
    printf("%s\n", p3);
}

/*
박영희
박영희
박영희

*/

7. C

#include <stdio.h>
void main(){
    int m = 4620;
    int a, b, c, d;
    a = m/1000;
    b = (m%1000)/500;
    c = (m%500)/100;
    d = (m%100)/10;
    printf("1000원: %d개\n", a);
    printf("500원: %d개\n", b);
    printf("100원: %d개\n", c);
    printf("10원: %d개\n", d);

}

9. C

#include <stdio.h>
void main(){
    int arr[] = {65, 25, 12, 22, 11};
    int n = sizeof(arr)/sizeof(arr[0]);
    int i=0, j, tmp;
    do{
        j=i+1;
        do{
        if(arr[i]>arr[j]){
            tmp = arr[i];
            arr[i] = arr[j];
            arr[j] = tmp;
            }
            j++;
        } while(j<n);
        i++;
    } while(i<n-1);
    for(i=0; i<=4; i++)
        printf("%d", arr[i]);
}

14. C

#include <stdio.h>
void main(){
    int c=0;
    int i;

    for(i=1; i<=2023; i++){
        if(i%4==0) c++;
    }

    printf("%d", c);
}

// 505

18. Python

a="engineer information programming";
b=a[:3]; # eng
c=a[4:6]; # ne
d=a[29:]; # ing
e=b+c+d;
print(e);

# engneing

19. Java

String 동일한 문자열은 같은 주소값을 참조

문자열 리터럴을 사용하면 Java는 문자열 상수 풀(string pool)이라는 곳에 문자열을 저장하고, 동일한 문자열 리터럴을 가리키는 다른 문자열 변수들은 같은 메모리 위치를 참조

그러나 new String("soojebi")와 같이 new 키워드를 사용하여 명시적으로 새로운 String 객체를 생성하면, 새로운 메모리 공간에 문자열을 저장

class Soojebi{
    public static void main(String[] args){
        String str1="soojebi";
        String str2="soojebi";
        String str3= new String("soojebi");

        System.out.println(str1==str2); // true
        System.out.println(str1==str3); // false
        System.out.println(str1.equals(str3)); // true
        System.out.println(str2.equals(str3)); // true

    }
}

 

 

 

📚 참고 자료

 

수제비

수제비(수험생 입장에서 제대로 쓴 비법서) IT 채널입니다! 정보처리기사 / 정보처리산업기사 / 빅데이터 분석기사 / 전자계산기 조직응용기사 / SQLD / ADsP 등 다양한 분야의 자격증에 대해 학습에

www.youtube.com

 

728x90
728x90

정보처리기사 실기

1. Java

class Static{
    public int a = 20;
    static int b = 0;
}
public class Soojebi{
    public static void main(String[] args){
        int a;
        a=10;
        Static.b=a; // 10
        Static st = new Static();
        System.out.println(Static.b++); // 10
        System.out.println(st.b); // 11
        System.out.println(a); // 10
        System.out.println(st.a); // 20
    }
}

2. C

포인터/배열 수식: 배열+i == &배열[i]

*와 &는 만나면 상쇄됨

\0=NULL

#include <stdio.h>
void main(){
    char a[]="Art";
    char* p = NULL;
    int i=0;

    p=a;
    printf("%s\n", a);
    // a == a+0 == &a[0]
    printf("%c\n", *p);
    // *p == *&a[0] → *p == a[0]
    // *와 &는 만나면 상쇄됨
    printf("%c\n", *a);
    printf("%s\n", p);

    for(i=0; a[i]!='\0'; i++)
        printf("%c", a[i])
    // 중괄호 생략: ;전까지 계산
}

/*
Art
A
A
Art
Art

*/ 

3. C

이중 for문 i당 j모두 반복 주의

#include <stdio.h>
void main(){
    char* a="qwer";
    char* b="qwety";
    int i, j;
    for(i=0; a[i]!='\0'; i++){
        for(j=0; a[j]!='\0'; j++){
            if(a[i]==b[j])
                printf("%c", a[i]);
        }
    }
}

// qwe

9. C

수식 계산 후, 프로그램 실행해보기

#include <stdio.h>
void main(){
    int input = 101110;
    int di=1;
    int sum=0;
    while(1){
        if(input==0) break;
        else{
            sum = sum + (input % 10)*di;
            di=di*2;
            input=input/10;
        }
    }
    printf("%d", sum);
}

12. SQL

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

14. Java

class Soojebi{
    static void swap(int[] a, int idx1, int idx2){
        int t=a[idx1];
        a[idx1]=a[idx2];
        a[idx2]=t;
    }
    static void Usort(int[] a, int len){
        for(int i=0; i<len; i++){
            for(int j=0; i<len-i-1; j++){
                if(a[j]>a[j+1]){
                    swap(a, j, j+1)
                }
            }
        }
    }
    public static void main(String[] args){
        int[] item = {5, 4, 9, 1, 3, 7};
        int nx=6;
        Usort(item, nx);
        for(int data : item){
            System.out.print(data+"");
        }
    }
}

15. Python

{}: 세트형, 중복 허용X

update: 모두 추가

a={'한국', '중국', '일본'};
a.add('베트남');
a.add('중국');
a.remove('일본');
a.update({'홍콩', '한국', '태국'});
print(a);

# {'한국', '중국', '베트남', '홍콩', '태국'}

16. SQL

집계함수가 쓰이지 않은 SELECT COL은 GROUP BY에 포함되어야 함

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

17. Java

abstract class Vehicle{
    String name;
    abstract public String getName(String val);
    public String getName(){
        return "Vehicle name: "+name;
    }
    public void setName(String val){
        name=val;
    }
}

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

public class Soojebi{
    public static void main(String[] args){
        Vehicle obj = new Car("Spark");
        System.out.println(obj.getName());
    }
}

// Vehicle name: Spark

20. Java

this는 자기 자신을 의미하며, this만 써있을 경우 생성자를 호출하게 됨

class Parent{
    int x=100;
    Parent(){ // (1)
        this(500);
        // this = 자기 자신
        // 매개변수가 1개인 생성자 호출
    }
    Parent(int x){ // (2)
        this.x=x;
    }
    int getX(){
        return x;
    }
}
class Child extends Parent{
    int x=4000;
    Child(){ // (3)
        this(5000);
    }
    Child(int x){ // (4)
        this.x=x;
    }
}

public class Soojebi{
    public static void main(String[] args){
        CHild obj = new Child();
        System.out.println(obj.getX());
    }
}

// 500

 

 

 

📚 참고 자료

 

수제비

수제비(수험생 입장에서 제대로 쓴 비법서) IT 채널입니다! 정보처리기사 / 정보처리산업기사 / 빅데이터 분석기사 / 전자계산기 조직응용기사 / SQLD / ADsP 등 다양한 분야의 자격증에 대해 학습에

www.youtube.com

 

728x90
728x90

정보처리기사 실기

1. 형상 관리 절차

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

형상관리 지원 도구

  • RCS(Revision Control System): 공유 폴더 방식, 로컬PC 공유 폴더에 저장, CVS와 달리 소스 파일의 수정을 한 사람으로 제한하여 다수의 사람이 파일의 수정을 동시에 할 수 없도록 파일 잠금 방식으로 형상을 관리하는 도구
  • CVS ▶ SVN: 클라이언트-서버 방식, 버전 관리 자료가 중앙 시스템(서버)에 저장되어 관리
  • Git: 분산 저장소 방식, 로컬 PC원격지 PC에 저장되어 관리

형상관리 용어

용어 설명
import 맨 처음 프로제트 시작 시 저장소에 등록
checkout 저장소에서 소스파일 받아오기
add 새 파일을 버전 관리 대상으로 추가
commit 수정한 파일을 저장소에 저장하여 갱신(=check-in)
update 저장소에 있는 최신 버전으로 자신의 작업공간을 동기화
diff 이전 개발자가 처음 추가한 파일과 이후 변경된 파일의 차이 확인
merge 충돌난 파일에 대해 합치는 작업
trunk 개발 메인 디렉토리
branch 메인 개발 과정과 별도로 새로운 기능의 테스트와 같이 추가적인 작업을 수행하기 위한 서브 디렉토리

 

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

생성 패턴(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 데이터 구조와 처리를 분리하는 방법

 

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

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

  • 구성 요소: 사물, 관계, 다이어그램

종류

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

  • 객체: 객체 정보
  • 클래스
    • 시스템을 구성하는 클래스 사이의 관계 표현
    • 객체들의 타입을 정의하고, 객체들간의 관계를 도식화하여 시스템의 틈정 모듈이나 일부 및 전체를 구조화
  • 패키지: 클래스 다이어그램의 집합, 그룹

    pkg_diagram
  • 컴포넌트: 컴포넌트끼리의 구조 관계를 표현
  • 컴포지트: 복합구조
  • 배치(Deployment): SW, HW 등을 포함한 시스템의 물리적 구조를 나타냄

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

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

UML 클래스 관계

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

 

5. 테스트

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

애플리케이션 테스트 유형 구분

  • 프로그램 실행 여부
    • 정적 테스트: 소스코드의 실행없이 코드의 의미를 분석하여 결함을 찾아내는 코드 분석 기법
    • 동적 테스트: 소스코드를 실행하여 프로그램의 동작이나 결과를 확인하고, 메모리 누수, 스레드 결함등을 분석하는 기법
  • 테스트 기법
    • 화이트박스 테스트
    • 블랙박스 테스트
  • 테스트에 대한 시각
    • 검증 테스트: 개발자 주도
    • 확인 테스트: 사용자 주도
  • 테스트 목적
    • 회복: 시스템에 여러 가지 결함을 주어 실패하도록 한 후 올바르게 복구되는지를 확인
    • 안전: 불법적인 침입으로부터 시스템을 보호할 수 있는지를 확인
    • 강도: 과부하 시에도 소프트웨어가 정상적으로 실행되는지를 확인
    • 성능
    • 구조
    • 회귀(Regression): 변경 또는 수정된 코드에 새로운 결함이 없음을 확인
    • 병행: 변경된 소프트웨어와 기존 소프트웨어에 동일한 데이터를 입력해 결과를 비교
  • 테스트 기반
    • 명세 기반 테스트: 사용자의 요구사항 명세를 빠짐없이 구현하고 있는지 확인
    • 구조 기반 테스트: 소프트웨어 내부의 논리 흐름에 따라 테스트 케이스를 작성하고 확인
    • 경험 기반 테스트: 테스터의 경험을 기반으로 수행
      `테스트 하네스(Test Harness)의 구성 요소
  1. 테스트 드라이버: 상향식 테스트에서 사용하는 임시 모듈, 가상의 서버 역할
  2. 테스트 스텁: 하향식 테스트에서 사용하는 임시 모듈, 가상의 클라이언트 역할
  3. 테스트 슈트: 테스트 케이스의 집합
  4. 테스트 케이스: 사용자의 요구사항을 정확하게 준수했는지 확인하기 위한 입력 값, 실행 조건, 기대 결과 등으로 만들어진 테스트 항목의 명세서
  5. 테스트 스크립트: 자동화된 테스트 실행 절차에 대한 명세서
  6. 목 오브젝트: 사전에 사용자의 행위를 조건부로 입력해 두면, 그 상황에 맞는 예정된 행위를 수행하는 객체

Test Oracle

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

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

화이트/블랙박스 테스트

  • 화이트 박스 테스트: 모듈 내부 소스 코드를 보면서 수행하는 테스트
    • 종류
      • 기본 경로 커버리지(Base Path Coverage): 수행 가능한 모든 경로 테스트
      • 데이터 흐름 테스트(Data Flow Testing): 프로그램에서 변수의 정의와 변수 사용의 위치에 초점을 맞추어 검사
      • 구조적 커버리지: 애플리케이션에서 테스트를 수행한 정도
        • 구문(문장) 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): 입력 데이터간의 관계와 출력에 영향을 미치는 상황을 체계적으로 분석하여 효용이 높은 테스트 케이스를 선정하여 검사
    • 오류 예측 테스트(Error Guessing Testing)
    • 비교 검사 테스트(Comparison Testing): 여러 버전의 동일한 테스트 자료를 제공하여 동일한 결과가 출력되는지 테스트하는 기법

SW 테스트 방법

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

 

5. SSO(Single Sign-on)

하나의 시스템에서 인증에 성공하는 다른 시스템에 대한 접근 권한도 얻는 시스템(CGV Login ▶ CJ Mall Login)

 

6. 요구사항 분석 기법

구조적 분석

: 하향식 접근 방식(폭포수 모형)

  • DFD: 프로세스와 프로세스 간에 존재하는 상호작용 표현
    DFD
  • DD: 데이터 흐름도(Data Flow Diagram)에 기술된 자료들에 대해 정의
    = 정의 
    + 연결 
    () 생략 
    {} 반복 
    [|] 선택 
    ** 주석
    
  • Mini spec.: 자료 흐름도를 보완 설명
  • ERD: 시스템에서 처리되는 개체와 속성 그리고 관계를 표현하여 개체를 모델화하는 도구
  • STD(State Transition Diagram): 시스템의 상태와 변화를 모델링

 

7. 프로세스 스케쥴링

: 프로세스가 생성되어 실행될 때 필요한 시스템의 여러 자원을 해당 프로세스에 할당하는 작업

  1. 비선점(Non-Preemptive): 이미 할당된 CPU를 다른 프로세스가 강제로 빼앗아 사용할 수 없는 스케줄링 기법
    • FCFS: First Come First Served,
    • SJF: Shortest Job First
      • 가장 적은 평균 대기 시간을 제공하는 최적 알고리즘
      • 단점: 기아 현상 발생 ▶ 대안: HRN
    • HRN: Hightest Response-ratio Next
      • 우선순위를 계산하여 그 숫자가 가장 높은 것부터 낮은 순으로 우선순위가 부여
      • 우선순위 = (대기 시간 + 실행 시간)/(실행 시간)
    • 우선순위(Priority)
      • 단점: 기아 현상 발생
    • 기한부(Deadline)
  2. 선점(Preemptive): 하나의 프로세스가 CPU를 할당받아 실행하고 있을 때 우선순위가 높은 다른 프로세스가 CPU를 강제로 빼앗아 사용할 수 있는 스케줄링 기법
    • Round Robin: 프로세스는 할당된 시간 동안만 실행한 후 실행이 완료되지 않으면 다음 프로세스에 CPU를 넘겨주고 큐의 뒤로 배치
    • SRT: Shortest Remaining Time, SJF의 선점형 버전
    • MLQ(다단계 큐): 항상 가장 높은 우선순위 큐의 프로세스에 CPU를 할당 (우선순위가 낮은 큐에서 작업 실행 중이더라도 상위 단계의 큐에 프로세스가 도착하면 CPU를 빼앗는 선점형 스케줄링)
    • MFQ(다단계 피드백 큐)
      • 프로세스 생성 시 가장 높은 우선 순위 준비 큐에 등록되며 등록된 프로세스는 FCFS 순서로 CPU를 할당받아 실행
      • 해당 큐의 CPU 시간 할당량(Time Quantum)이 끝나면 한 단계 아래의 준비 큐로 이동
      • 단계가 내려갈수록 시간 할당량(Time Quantum)이 증가

프로세스 상태 전이도

process_state

+ 실행 → 대기: Block

문맥 교환(Context Switching)

하나의 프로세스가 CPU를 사용 중인 상태에서 다른 프로세스가 CPU를 사용하도록 하기 위해, 이전의 프로세스의 상태를 보관하고 새로운 프로세스의 상태를 적재하는 작업

PCB(Process Control Block)

운영체제가 프로세스를 제어하기 위해 정보를 저장해 놓는 곳으로, 프로세스의 상태 정보를 저장하는 자료구조

System Catalog

  • DBMS에서 지원하는 모든 데이터 객체에 대한 정의나 명세에 관한 정보를 유지관리하는 시스템 테이블
  • 일반 사용자도 SQL을 이용해 내용을 검색할 수 있음
  • Meta Data: 시스템 카탈로그에 저장된 정보Data Dictionary
  • DD에 수록된 데이터를 실제로 접근하는데 필요한 정보를 유지 관리하는 시스템
  • 시스템만 접근할 수 있음기아 현상특정 프로세스의 우선 순위가 낮아서 원하는 자원을 계속 할당받지 못하는 상태에이징 기법오랫동안 Ready 상태인 프로세스의 우선순위를 주기적으로 올려주는 것

 

8. Subnet Mask

192.168.1.0/24
3개의 서브넷 -> 뒤에 2자리의 비트를 빌려서 네트워크 아이디를 써야함
0000 0000
0100 0000 <- 2번째 네트워크: IP 주소(.64 ~ .127)
1000 0000
1100 0000

맨 앞: 네트워크 ID
맨 뒤: 브로드캐스트 ID
그 외: 호스트 IP

 

9. 용어

사회공학: 기술적인 방법이 아닌 사람들 간의 기본적인 신뢰를 기반으로 사람을 속여 비밀정보를 획득하는 기법

다크 데이터: 기업이 정보를 수집한 후, 저장만 하고 분석에 활용하고 있지 않은 다량의 데이터

 

10. SIEM

  • 네트워크 하드웨어 및 응용 프로그램에 의해 생성된 보안 경고의 실시간 분석 제공
  • 빅데이터 수준의 데이터를 장시간 심층 분석한 인덱싱 기반
  • 주요 기능: 데이터 통합, 상관 관계, 알림, 대시 보드

보안 솔루션

  • 방화벽(Firewall): 네트워크 간에 전송되는 정보를 선별하는 기능을 가진 침입 차단 시스템
    • 웹 방화벽(Web Firewall): 웹 기반 공격을 방어할 목적으로 만들어진 웹서버 특화 방화벽
  • 침입 탐지 시스템(IDS: Intrusion Detection System): 컴퓨터 시스템의 비정상적인 사용, 오용 등을 실시간으로 탐지하는 시스템
    • 이상 탐지: 정상에서 벗어날 경우, 탐지(오류율↑)
    • 오염 탐지: 잘못될 경우 탐지(사용↑)
  • 침입 방지 시스템(IPS: Intrusion Prevention System): 방화벽과 침입탐지 시스템을 결합한 것
  • 데이터 유출 방지(DLP: Data Language/Loss Prevention): 내부 정보의 유출을 방지하기 위한 보안 솔루션
    • USB ▶ 컴퓨터: 데이터 전송 가능 / 컴퓨터 ▶ USB: 데이터 전송 불가능
  • NAC(Network Access Control): 네트워크에 접속하는 내부 PC의 MAC 주소를 IP 관리 시스템에 등록한 후 일관된 보안 관리 기능을 제공하는 보안 솔루션
  • ESM(Enterprise Security Management)
    • 다양한 장비에서 발생하는 로그 및 보안 이벤트를 통합관리하는 보안 솔루션
    • 단기 이벤트성 위주의 분석
  • SIEM(Security Information and Event Management)
    • 네트워크 하드웨어 및 응용 프로그램에 의해 생성된 보안 경고의 실시간 분석 제공
    • 빅데이터 수준의 데이터를 장시간 심층 분석한 인덱싱 기반

 

11. 용어

  • Trust Zone: 독립적인 보안 구역을 따로 두어 중요한 정보를 보호하는 하드웨어 기반의 보안 기술
  • TypoSquatting: 사용자가 사이트의 URL 주소를 입력할 때, 철자를 잘못 입력하거나 빠뜨리는 실수를 이용하여, 해커가 만들어 놓은 유사한 URL로 접속하도록 유도하는 공격

공격 기법

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
    • 다른 사람의 세션 상태를 훔치거나 가로채는 해킹 기법
    • 로그인된 상태를 가로채는 것

 

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

관계 대수(Relation Algebra)

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

관계 해석 (Relation Calculus)

  • 원하는 정보가 무엇인지만 정의하는 비절차적 특성
  • 종류
    • 정량자
      • ∀: 모든 것에 대하여(for all)
      • ∃: 존재한다(There exist)
    • 연산자
      • V: OR
      • ㅅ: AND
      • ㄱ: NOT
정량자: 문장의 변수 부분에 적용되어 그 변수의 적용범위를 나타내는 역할을 하는 것

 

14. SQL

NULL은 SELECT COUNT에 포함되지 않음

부서 TABLE
부서코드    부서명
     10    영업팀
     20    개발팀
     30    기획팀

직원 TABLE
직원코드    부서코드
   1000         10
   2000         10
   3000         10
   4000         20
   5000         20
   6000         30
   7000         30

SELECT DISTINCT COUNT(직원코드) FROM 직원 WHERE 부서코드 = '10';
-- 3

DELETE FROM 직원 WHERE 부서코드 = '10';
SELECT DISTINCT COUNT(직원코드) FROM 직원;
-- 4
INSERT INTO TABLE(COL1, COL2) VALUES(VAL1, VAL2);
SELECT * FROM TABLE WHERE COL1=VAL1 GROUP BY COL2 HAVING COL3 ORDER BY COL4;
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;
CREATE INDEX idx_name ON STUDENT(NAME ASC);

 

14. SQL

SELECT DEPT FROM STUDENT; -- 200
SELECT DISTINCT DEPT FROM STUDENT; -- 3
SELECT COUNT(DISTINCT DEPT) FROM STUDENT WHERE DEPT='건축과'; -- 1

 

15. C (보류)

static int field[4][4] = {{0, 1, 0, 1}, {0, 0, 0, 1}, {1, 1, 1, 0}, {0, 1, 1, 1}};
static int mines[4][4] = {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}};
void calculate(int w, int h, int j, int i){
    if(i>=0 && i<w && j>=0 && j<h) mines[i][j]++;
}
void main(){
    int x, y, j, i, w=4, h=4;
    for(y=0; y<h; y++){
        for(x=0; x<w; x++){
            if(field[x][y]==0) continue;
            for(j=y-i; j<=y+1; j++){
                for(i=x-i; i<=x+1; i++){
                    calculate(w, h, j, i);
                }
            }
        }
    }
}

 

16. C

int main(){
    int result[5];
    int ary[] = {77, 32, 10, 99, 50};
    for(int i=0; i<5; i++){
        result[i]=1;
        for(int j=0; j<5; j++)
            if(ary[i]<ary[j]) result[i]++;
    }
    for(int i=0; i<5; i++){
        printf("%d", result[i]);
    }
}

result[0] = 2
result[1] = 4
result[2] = 5
result[3] = 1
result[4] = 3

24513

 

17. C

int x, y;
int cnt = 0;
for(int i=6; i<=30; i++){
    x = 0;
    y = i/2;
    for(int j=1; j<=y; j++){
        if(i%j==0)
            x = x + j;
    }
    if(x==i){
        cnt++;
    }
}
printf("%d", cnt);

/*
  i 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
  x 6 6 7 7  8  1 16 16 10  9 15  1 21  1 22 11 14  1 36  6 16 13 28  1 42
  y 3 3 4 4  5  1  6  6  7  7  8  8  9  9 10 10 11 11 12 12 13 13 14 14 15
  j 3 3 4 4  5  1  6  6  7  5  8  1  9  1 10  1 11  1 12  5 13  9 14  1 15
cnt 1                                                              1

2
*/

 

18. Java

static int[] makeAry(){
    int[] tmp = int new[4];
    for(int i=0; i<tmp.length; i++){
        tmp[i] = i;
    }
    return tmp;
}

public static void main(String[] args){
    int[] inData = makeAry();
    for(int i=0; i<inData.length; i++)
        System.out.print(inData[i]);
}

/*
inData
tmp 0 1 2 3
값  0 1 2 3

0123

*/

 

19. Java

구하는 값에 맞춰서 시작부터 도전할지 끝부터 도전할지 확인

int max = 0;
for(int i=1; i<999; i++){
    if(i%3==0 && i%2!=0)
        max = i;
}
System.out.print(max);

// 3의 배수지만 짝수가 아닌 998이하의 가장 큰 수
// 3 9 15 ... 975 981 987 993

 

20. Python

출력형태 확인, list = []

tData = [1, 2, 3, 4, 5];
tData = list(map(lambda num : num + 100, tData));
print(tData);

# [101, 102, 103, 104, 105]
728x90
728x90

정보처리기사 실기

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

관계 대수(Relation Algebra)

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

관계 해석 (Relation Calculus)

  • 원하는 정보가 무엇인지만 정의하는 비절차적 특성

 

2. 암호화 알고리즘

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

공격 기법

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(Ping)를 보내 이에 대한 응답을 하기 위해 자원을 모두 사용해버려 시스템이 정상적으로 동작하지 못하도록 하는 공격

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
    • 다른 사람의 세션 상태를 훔치거나 가로채는 해킹 기법
    • 로그인된 상태를 가로채는 것

 

3. VPN

  • 인터넷 등 통신 사업자의 공중 네트워크에 암호화 기술을 이용하여 사용자가 마치 자신의 전용 회선을 사용하는 것처럼 해주는 보안 솔루션
  • 이용자가 인터넷과 같은 공중망에 사설망을 구축하여 마치 전용망을 사용하는 효과를 가지는 보안 솔루션

보안 솔루션

  • 방화벽(Firewall): 네트워크 간에 전송되는 정보를 선별하는 기능을 가진 침입 차단 시스템
    • 웹 방화벽(Web Firewall): 웹 기반 공격을 방어할 목적으로 만들어진 웹서버 특화 방화벽
  • 침입 탐지 시스템(IDS: Intrusion Detection System): 컴퓨터 시스템의 비정상적인 사용, 오용 등을 실시간으로 탐지하는 시스템
    • 이상 탐지: 정상에서 벗어날 경우, 탐지(오류율↑)
    • 오염 탐지: 잘못될 경우 탐지(사용↑)
  • 침입 방지 시스템(IPS: Intrusion Prevention System): 방화벽과 침입탐지 시스템을 결합한 것
  • 데이터 유출 방지(DLP: Data Language/Loss Prevention): 내부 정보의 유출을 방지하기 위한 보안 솔루션
    • USB ▶ 컴퓨터: 데이터 전송 가능 / 컴퓨터 ▶ USB: 데이터 전송 불가능
  • NAC(Network Access Control): 네트워크에 접속하는 내부 PC의 MAC 주소를 IP 관리 시스템에 등록한 후 일관된 보안 관리 기능을 제공하는 보안 솔루션
  • ESM(Enterprise Security Management): 다양한 장비에서 발생하는 로그 및 보안 이벤트를 통합관리하는 보안 솔루션

 

4. Routing Protocol

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

 

5. V모델

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

애플리케이션 테스트 유형 구분

  • 프로그램 실행 여부
    • 정적 테스트: 소스코드의 실행없이 코드의 의미를 분석하여 결함을 찾아내는 코드 분석 기법
    • 동적 테스트: 소스코드를 실행하여 프로그램의 동작이나 결과를 확인하고, 메모리 누수, 스레드 결함등을 분석하는 기법
  • 테스트 기법
    • 화이트박스 테스트
    • 블랙박스 테스트
  • 테스트에 대한 시각
    • 검증 테스트: 개발자 주도
    • 확인 테스트: 사용자 주도
  • 테스트 목적
    • 회복: 시스템에 여러 가지 결함을 주어 실패하도록 한 후 올바르게 복구되는지를 확인
    • 안전: 불법적인 침입으로부터 시스템을 보호할 수 있는지를 확인
    • 강도: 과부하 시에도 소프트웨어가 정상적으로 실행되는지를 확인
    • 성능
    • 구조
    • 회귀(Regression): 변경 또는 수정된 코드에 새로운 결함이 없음을 확인
    • 병행: 변경된 소프트웨어와 기존 소프트웨어에 동일한 데이터를 입력해 결과를 비교
  • 테스트 기반
    • 명세 기반 테스트: 사용자의 요구사항 명세를 빠짐없이 구현하고 있는지 확인
    • 구조 기반 테스트: 소프트웨어 내부의 논리 흐름에 따라 테스트 케이스를 작성하고 확인
    • 경험 기반 테스트: 테스터의 경험을 기반으로 수행
      `테스트 하네스(Test Harness)의 구성 요소
  1. 테스트 드라이버: 상향식 테스트에서 사용하는 임시 모듈, 가상의 서버 역할
  2. 테스트 스텁: 하향식 테스트에서 사용하는 임시 모듈, 가상의 클라이언트 역할
  3. 테스트 슈트: 테스트 케이스의 집합
  4. 테스트 케이스: 사용자의 요구사항을 정확하게 준수했는지 확인하기 위한 입력 값, 실행 조건, 기대 결과 등으로 만들어진 테스트 항목의 명세서
  5. 테스트 스크립트: 자동화된 테스트 실행 절차에 대한 명세서
  6. 목 오브젝트: 사전에 사용자의 행위를 조건부로 입력해 두면, 그 상황에 맞는 예정된 행위를 수행하는 객체

Test Oracle

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

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

화이트/블랙박스 테스트

  • 화이트 박스 테스트: 모듈 내부 소스 코드를 보면서 수행하는 테스트
    • 종류
      • 기본 경로 커버리지(Base Path Coverage): 수행 가능한 모든 경로 테스트
      • 데이터 흐름 테스트(Data Flow Testing): 프로그램에서 변수의 정의와 변수 사용의 위치에 초점을 맞추어 검사
      • 구조적 커버리지: 애플리케이션에서 테스트를 수행한 정도
        • 구문(문장) 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 테스트 방법

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

 

7. 결합도(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): 모듈 내부의 모든 기능이 단일한 목적을 위해 수행되는 경우

 

8. Web

HTTP는 W3(World Wide Web)상에서 정보를 주고받을 수 있는 프로토콜이다.
GET, POSt 방식을 이용하여 문서를 주고받는데, 이 문서내에서 다른 문서의 링크 정보가 들어오는데, 이러한 링크정보를 만들 수 있는 게 Hypertext이다.
이런 Hypertext를 만들 수 있는 언어는 HTML이다.

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 간 주소를 변환하여 두 버전을 이용

SOAP

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

 

9. 객체지향 설계원칙, SOLID

  1. 단일 책임 원칙 (Single Responsibility Principle)
    : 모든 클래스는 각각 하나의 책임만 가져야 함
  2. 개방-폐쇄 원칙 (Open Closed Principle)
    : 확장에는 열려있고 수정에는 닫혀있어야 함
  3. 리스코프 치환 원칙 (Liskov Substitution Principle)
    : 자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있음
  4. 인터페이스 분리 원칙 (Interface Segregation Principle)
    : 자신이 사용하지않는 인터페이스는 구현하지 말아야 함
  5. 의존 역전 원칙 (Dependency Inversion Principle)
    변화하기 쉬운 것 또는 자주 변화하는 것보다는 변화하기 어려운 것, 거의 변화가 없는 것에 의존해야 함

객체지향 프로그래밍(OOP: Object-Oriented Programming) 구성요소

  • 클래스(Class): 같은 종류(또는 문제 해결을 위한)의 집단에 속하는 속성(변수)과 행위(메소드)를 정의한 것
  • 객체(Object): 클래스라는 일종의 설계도를 기반으로 실제로 생성된 그 실체가 바로 객체
  • 메서드(Method): 객체에 명령을 내리는 행위
  • 메시지(Message): 객체간의 통신이 이루어지는 방법, 메시지를 통해 메소드가 호출되어 사용

UI 설계 원칙 4가지

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

UI 설계 도구

  1. 와이어프레임 (WireFrame): 기획 단계의 초기에 제작하는 것으로, 페이지에 대한 개략적인 레이아웃이나 UI 요소 등에 대한 뼈대를 설계하는 단계
  2. 목업 (Mockup): 와이어프레임보다 좀 더 실제 화면과 유사하게 만든 정적인 형태의 모형
  3. 스토리보드 (Story Board): 와이어프레임에 콘텐츠에 대한 설명, 페이지 간 이동 흐름 등을 추가한 문서
  4. 프로토타입 (Prototype): 실제 구현된 것처럼 테스트가 가능한 동적인 형태의 모형
  5. 유스케이스 (Use Case): 사용자 측면에서의 요구사항

애자일 방법론

: 고객의 요구사항 변화에 유연하게 대응할 수 있도록 일정한 주기를 반복하면서 개발 과정을 진행

  • eXtreme Programming: 수시로 발생하는 고객의 요구사항에 유연하게 대응하기 위해 고객의 참여와 개발 과정의 반복을 극대화하여 개발 생산성을 향상시키는 방법
    • 5가지 핵심 가치: 의사소통, 피드백, 존중, 용기, 단순성
    • 12가지 기본 원리
  • Scrum
    • 짧은 단위시간(Sprint) 내 실행가능한 SW 개발
    • 매일 15분 정도의 Scrum meeting 회의
  • FDD(Feature-Driven Development): 기능주도 개발
  • 크리스탈(Crystal)
  • LEAN: 낭비 요소를 제거하여 품질을 향상

객체지향 분석의 방법론

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

 

10. Subnet Mask

IP: 192.168.100.132
Subnet Mask: 255.255.255.192
1100 0000
총 26bit를 네트워크 주소로 사용
00: 000000 - 111111
01: 000000 - 111111
10: 000000 - 111111 ◀ 132
11: 000000 - 111111

네트워크 주소: 맨 앞(192.168.100.128)
브로드캐스트 주소: 맨 뒤
총 사용 가능한 주소 개수: 256 / 4 - 2 = 64 - 2 = 62

 

11. SQL - 관계 대수

∏TTL(직원): 직원 테이블의 TTL SELECT

 

12. SQL

WHERE절에는 집계함수 쓰면 안되므로 MAX 불가

SELECT * FROM 상품
WHERE 단가 > ALL(SELECT 단가 FROM 상품 WHERE 제조사 = 'B')

ALL: 서브쿼리 결과값보다 모두 커야하는 AND 조건
ANY: 서브쿼리 결과값보다 어느 하나라도 크면 되는 OR 조건

 

13. SQL

COUNT는 NULL을 COUNT하지 않음

SELECT COUNT(COL2)
FROM TABLE
WHERE COL1 IN (2, 3) OR COL2 IN (3, 5);

-- 4

 

14. 정규화

이상 현상

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

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

데이터 모델링 3단계

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

정규화 종류

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

반정규화

: 데이터 베이스 정규화 후 성능향상을 위해 정규화 기법에 위배된 의도적 수행기법

  • 종류
    • 테이블 분할: 수평분할 / 수직분할
    • 테이블 중복: 통계 테이블 추가 / 진행 테이블 추가
    • 컬럼 중복: 중복 컬럼 추가 / 파생 컬럼 추가

 

15. C

#include<stdio.h>
struct st{
    int x, y;
};
int main(){
    struct st dt[2];
    for(int i=0; i<2; i++){
        dt[i].x = i;
        dt[i].y = i + 1;
    }
    printf("%d", dt[0].x + dt[1].y);
}

/*
0 + 2 = 2
*/

 

16. C

문법: C언어에서 문자열은 기본적으로 \0(Null 문자)를 포함

#include<stdio.h>
int main(){
    char *p1 = "2022";
    char *p2 = "202210";
    int i = func(p1);
    int j = func(p2);
    printf("%d", i + j);
    return 0;
}
int func(char *p){
    int cnt = 0;
    while(*p!='\0'){ /* *p: p의 값 */
        cnt++;
        p++;
    }
    return cnt;
}

/*
    100 101 102 103 104
p1    2   0   2   2  \0
    200 201 202 203 204 205 206
p2    2   0   2   2   1   0  \0

*/

 

17. C

#include<stdio.h>
int main(){
    int a[4] = {0, 2, 4, 8};
    int b[3];

    int *p;

    int sum = 0;
    for(int i = 1; i<4; i++){
        p = a + i;
        b[i-1] = *p - a[i-1]; /* *p: p의 값 */
        sum += b[i-1] + a[i];
    }
    printf("%d", sum);
}

    100 101 102 103
a     0   2   4   8
100
     0   1   2
b   2-0 4-2 8-4

sum = 4 + 6 + 12 = 22

 

18. Java

public static void main(String[] args){
    int i = 3;
    int sum = 0;
    switch(i){
        case 0: sum++;
        case 1: sim += 3;
        case 2: sum -= 10;
        case 3: sum = 0;
        case 4: sum += 3;
        case 5: sum -= 10;
        default: sum--;
    }
    System.out.println(sum);
}

// -8

 

19. Java

obj의 func를 호출한 것이므로 obj의 a를 사용해야 함

return값이 b인지 a+b인지 확인

class Cal{
    int a;
    Cal(int a){
        this.a = a;
    }
    int func(){
        int b = 1;
        for(int i=1; i<a; i++)
            b = a * i + b;
        return a + b;
    }
}

public class Main{
    public static void main(String[] args){
        Cal obj = new Cal(3);
        obj.a = 5;
        int b = obj.func();
        System.out.println(obj.a + b);
    }
}

// a = 5

// b = 5*1 + 1 = 6
// b = 5*2 + 6 = 16
// b = 5*3 + 16 = 31
// b = 5*4 +  31 = 51

// obj.func() = 56

// 5 + 56 = 61

 

20. Python

Python에서 slice는 끝자리 제외

str1 = "REMEMBER NOVEMBER";
str2 = str1[:3] + str1[12:16];
str3 = "R AND %s" % "STR"; # %s = % 뒤의 string을 대입
print(str2 + str3);

# str2 = REMEMBE
# str3 = R AND STR
# REMEMBER AND STR

 

정보보안의 3요소

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

 

소프트웨어 생명 주기

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

 

📚 참고 자료
https://ckim0531.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC-1%EA%B3%BC%EB%AA%A9-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-3-%EA%B4%80%EA%B3%84-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EB%AA%A8%EB%8D%B8%EA%B3%BC-%EC%96%B8%EC%96%B4-%EA%B4%80%EA%B3%84%EB%8C%80%EC%88%98-%EB%B0%8F-%EA%B4%80%EA%B3%84%ED%95%B4%EC%84%9D

728x90
728x90

정보처리기사 실기

1. RAID

두 개 이상의 하드디스크를 병렬로 연결해, 하나의 하드디스크처럼 사용하는 기술

  • RAID 0: 하나의 하드디스크가 문제가 생기면 다른 디스크까지 사용 불가능
  • RAID 1: 두 개 이상의 디스크를 미러링을 통해 하나의 디스크처럼 사용
  • RAID 2: 오류 정정을 위한 해밍코드를 사용하는 방식
  • RAID 3: 하나의 디스크를 Parity 정보를 위해 사용하고 나머지 디스크에 데이터를 균등하게 분산 저장
  • RAID 4: RAID 3과 동일한 방식, 불록 단위로 저장
  • RAID 5: 3개 이상의 디스크를 붙여서 하나의 디스크처럼 사용하고 각각의 디스크에 Parity 정보를 갖고 있는 방식
  • RAID 6: 하나의 Parity를 두 개의 디스크에 분산 저장하는 방식
  • Parity 정보: 디스크 장애 시, 데이터를 재구축하는데 사용할 수 있는 사전에 계산된 값

 

2. 회복 기법

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

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

Transaction

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

 

3. 이상 현상

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

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

데이터 모델링 3단계

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

정규화 종류

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

반정규화

: 데이터 베이스 정규화 후 성능향상을 위해 정규화 기법에 위배된 의도적 수행기법

  • 종류
    • 테이블 분할: 수평분할 / 수직분할
    • 테이블 중복: 통계 테이블 추가 / 진행 테이블 추가
    • 컬럼 중복: 중복 컬럼 추가 / 파생 컬럼 추가

 

4. UI 종류

  • GUI(Graphic User Interface)
  • CLI(Command Line Interface) = CUI(Character User Interface)
  • NUI(Natural User Interface): 특별한 하드웨어 없이 인간의 자연스러운 움직임을 인식하여 정보 제공
  • OUI(Organic User Interface): 입력장치가 곧 출력장치가 되고, 현실에 존재하는 모든 사물이 입출력장치로 변화할 수 있는 사용자 인터페이스
  • AUI(Auditory User Interface): 벨소리, 버튼음을 포함해 휴대폰에 들어가는 모든 사운드

UI 설계 원칙 4가지

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

UI 설계 도구

  1. 와이어프레임 (WireFrame): 기획 단계의 초기에 제작하는 것으로, 페이지에 대한 개략적인 레이아웃이나 UI 요소 등에 대한 뼈대를 설계하는 단계
  2. 목업 (Mockup): 와이어프레임보다 좀 더 실제 화면과 유사하게 만든 정적인 형태의 모형
  3. 스토리보드 (Story Board): 와이어프레임에 콘텐츠에 대한 설명, 페이지 간 이동 흐름 등을 추가한 문서
  4. 프로토타입 (Prototype): 실제 구현된 것처럼 테스트가 가능한 동적인 형태의 모형
  5. 유스케이스 (Use Case): 사용자 측면에서의 요구사항

애자일 방법론

: 고객의 요구사항 변화에 유연하게 대응할 수 있도록 일정한 주기를 반복하면서 개발 과정을 진행

  • eXtreme Programming: 수시로 발생하는 고객의 요구사항에 유연하게 대응하기 위해 고객의 참여와 개발 과정의 반복을 극대화하여 개발 생산성을 향상시키는 방법
    • 5가지 핵심 가치: 의사소통, 피드백, 존중, 용기, 단순성
    • 12가지 기본 원리
  • Scrum
    • 짧은 단위시간(Sprint) 내 실행가능한 SW 개발
    • 매일 15분 정도의 Scrum meeting 회의
  • FDD(Feature-Driven Development): 기능주도 개발
  • 크리스탈(Crystal)
  • LEAN: 낭비 요소를 제거하여 품질을 향상

객체지향 분석의 방법론

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

 

객체지향 설계원칙, SOLID

  1. 단일 책임 원칙 (Single Responsibility Principle)
    : 모든 클래스는 각각 하나의 책임만 가져야 함
  2. 개방-폐쇄 원칙 (Open Closed Principle)
    : 확장에는 열려있고 수정에는 닫혀있어야 함
  3. 리스코프 치환 원칙 (Liskov Substitution Principle)
    : 자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있음
  4. 인터페이스 분리 원칙 (Interface Segregation Principle)
    : 자신이 사용하지않는 인터페이스는 구현하지 말아야 함
  5. 의존 역전 원칙 (Dependency Inversion Principle)
    변화하기 쉬운 것 또는 자주 변화하는 것보다는 변화하기 어려운 것, 거의 변화가 없는 것에 의존해야 함

객체지향 프로그래밍(OOP: Object-Oriented Programming) 구성요소

  • 클래스(Class): 같은 종류(또는 문제 해결을 위한)의 집단에 속하는 속성(변수)과 행위(메소드)를 정의한 것
  • 객체(Object): 클래스라는 일종의 설계도를 기반으로 실제로 생성된 그 실체가 바로 객체
  • 메서드(Method): 객체에 명령을 내리는 행위
  • 메시지(Message): 객체간의 통신이 이루어지는 방법, 메시지를 통해 메소드가 호출되어 사용

 

6. 소스코드 분석 도구

  • 정적(Static): 소스코드의 실행없이 코드의 의미를 분석하여 결함을 찾아내는 코드 분석 기법
  • 정적(Dynamic): 소스코드를 실행하여 프로그램의 동작이나 결과를 확인하고, 메모리 누수, 스레드 결함등을 분석하는 기법

애플리케이션 테스트 유형 구분

  • 프로그램 실행 여부
    • 정적 테스트
    • 동적 테스트
  • 테스트 기법
    • 화이트박스 테스트
    • 블랙박스 테스트
  • 테스트에 대한 시각
    • 검증 테스트: 개발자 주도
    • 확인 테스트: 사용자 주도
  • 테스트 목적
    • 회복: 시스템에 여러 가지 결함을 주어 실패하도록 한 후 올바르게 복구되는지를 확인
    • 안전: 불법적인 침입으로부터 시스템을 보호할 수 있는지를 확인
    • 강도: 과부하 시에도 소프트웨어가 정상적으로 실행되는지를 확인
    • 성능
    • 구조
    • 회귀: 변경 또는 수정된 코드에 새로운 결함이 없음을 확인
    • 병행: 변경된 소프트웨어와 기존 소프트웨어에 동일한 데이터를 입력해 결과를 비교
  • 테`스트 기반
    • 명세 기반 테스트: 사용자의 요구사항 명세를 빠짐없이 구현하고 있는지 확인
    • 구조 기반 테스트: 소프트웨어 내부의 논리 흐름에 따라 테스트 케이스를 작성하고 확인
    • 경험 기반 테스트: 테스터의 경험을 기반으로 수행
      `테스트 하네스(Test Harness)의 구성 요소
  1. 테스트 드라이버: 상향식 테스트에서 사용하는 임시 모듈, 가상의 서버 역할
  2. 테스트 스텁: 하향식 테스트에서 사용하는 임시 모듈, 가상의 클라이언트 역할
  3. 테스트 슈트: 테스트 케이스의 집합
  4. 테스트 케이스: -사용자의 요구사항을 정확하게 준수했는지 확인하기 위한 입력 값, 실행 조건, 기대 결과 등으로 만들어진 테스트 항목의 명세서
  5. 테스트 스크립트: 자동화된 테스트 실행 절차에 대한 명세서
  6. 목 오브젝트: 사전에 사용자의 행위를 조건부로 입력해 두면, 그 상황에 맞는 예정된 행위를 수행하는 객체

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 테스트 방법

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

 

9. 보안

  • ISMS: 기업이 주요 정보자산을 보호하기 위해 수립, 관리, 운영하는 정보 보호 관리체계가 인증 기준에 적합한지를 심사하여 인증을 부여하는 제도
  • PIMS: 기관 및 기업이 개인정보보호 관리체계를 갖추고 체계적·지속적으로 보호 업무를 수행하는지에 대해 객관적으로 심사하여 기준 만족 시 인증을
    부여하는 제도
  • ISMS-P: ISMS + PIMS

 

10. Key

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

 

12. V모델

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

 

13. SQL

INSERT INTO TABLE(COL1, COL2) VALUES(VAL1, VAL2);
SELECT * FROM TABLE WHERE COL1=VAL1 GROUP BY COL2 HAVING COL3 ORDER BY COL4;
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;
CREATE INDEX idx_name ON STUDENT (NAME ASC);

 

15. Python

def func1(num1, num2 = 2): # 인자가 1개일 때, num2는 기본값 2를 갖음
    print('a=', num1, 'b=', num2);
func1(20);

# a=20, b=2

 

16. Java

class Car implements Runnable{
    int a;
    public void fun(){
        System.out.println("func call");
    }
}
public class main{
    public static void main(String[] args){
        Thread t1 = new Thread(new Car());
        t1.start();
    }
}

 

17. Java

class A{
    int a;
    int b;
}
public class Main{
    static void func1(A a){
        a.a *= 10;
    }
    static void func2(A a){
        a.a += a.b;
    }
    public static void main(String[] args){
        A a = new A();
        a.a = 100; // a: 100
        func1(a); // a: 1_000
        a.b = a.a; // b: 1_000
        func2(a); // a: 2_000
        System.out.println(a.a); // 2_000
    }

}

Java 접근제한자

  public protected default private
동일 클래스 O O O O
동일 패키지 O O O  
다른 패키지의 자식 클래스 O O    
다른 패키지 O      

18. C

#include<stdio.h>
int func(int i){
    if(i<=1) return 1;
    return i * func(i-1);
}
int main(){
    int in;
    scanf("%d", &in);
    /* &연산자: 주소값 반환, 사용자가 입력한 정수는 in 변수에 저장 */
    printf("%d", func(in));
}

/*
5 * func(4);
5 * 4 * func(3);
5 * 4 * 3 * func(2);
5 * 4 * 3 * 2 * 1;
120
*/

 

19. C

#include<stdio.h>
int main(){
    int num = 1234;
    int div = 10;
    int res = 0;
    while(num>0){
        res = res * div;
        res = res + num % div;
        num = num / div
    }
    printf("%d", res);
}

/*
4321

*/

 

20. C

int isPrime(int number){
    int i;
    for(i = 2; i<number; i++){
        if(number % i == 0) return 0;
    }
    return 1;
}
int main(void){
    int number = 13195, max_div = 0; i;
    for(i = 2; i<number; i++){
        if(isPrime(i) == 1 && number % i == 0) max_div = i;
        printf("%d", max_div);
        return 0;
    }
}

/*
i   2   3   4   5   6   7   8   9
isP 1   1   0   1   0   1   0   0 ... (소수 = 1)

number % i == 0 (number의 배수)
13195 / 5 = 2639
2639 / 13 = 203
203 / 7 = 29

*/

 

 

 

🔗 마크다운 파일

GitHub

 

📚 참고 자료

 

흥달쌤

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

www.youtube.com

 

PIMS란 ?

방송통신위원회가 정책기관이고, 개인정보보호협회가 위탁하여 KISA가 인증하는 PIMS는 기업이 개...

blog.naver.com

 

RAID가 뭐에요? : 동국시스템즈 포탈 디케이앤유

안녕하세요. 동국시스템즈 대외사업지원팀에서 Quotation 업무를 맡고 있는 이빛나✨입니다.코로나19 거리 두기 4단계로 현재 재택 근무를 하고 있어서 영상이 아닌 블로그로 인사를 대신하겠습니

www.dknyou.com

 

728x90