2024. 3. 25. 18:33ㆍ정보처리기사
1. 용어 정리
AJAX(Asynchronous JavaScript And XML)
: 비동기적인 웹 애플리케이션의 제작을 위해
JavaScript와 XML을 이용한 비동기적 정보 교환 기법
분기 커버리지
: 분기점 위주로 테스트.
모든 분기점을 최소 한 번씩은 실행해야 함

분기 커버리지를 만족하기 위한 테스팅 순서는 여러 개가 있을 수 있음.
예를 들어 1 2 4 5 6 7 순서로 갈 수도 있고
1 2 3 4 5 6 1로 갈 수도 있다.
조건 커버리지
- 프로그램 내에 있는 결정포인트 내의 모든 각 개별 조건식에 대한
모든 가능한 결과(참/거짓)에 대해 적어도 한번 수행한다. - 소프트웨어 테스트 수행 시 소스코드를 어느 수준까지 수행하였는가를
나타내는 기준을 나타낸다.
UML 다이어그램의 종류
정적(구조적) 다이어그램
- 클래스 다이어그램: 클래스와 클래스가 가지는 속성, 클래스 사이의 관계를 표현
- 객체 다이어그램: 클래스에 속한 사물들, 즉 인스턴스를 특정 시점의 객체와 객체 사이의 관계로 표현
- 컴포넌트 다이어그램: 실제 구현 모듈인 컴포넌트 간의 관계나 컴포넌트 간의 인터페이스를 표현
- 배치(Deployment) 다이어그램: 결과물, 프로세스, 컴포넌트 등 물리적 요소들의 위치를 표현
- 복합체 구조(Composite Structure) 다이어그램
: 클래스나 컴포넌트가 복합 구조를 갖는 경우 그 내부 구조를 표현 - 패키지 다이어그램: 유스케이스나 클래스 등의 모델 요소들을 그룹화하여 의존 관계를 표현.
관련있는 객체들을 하나로 묶어 상위 개념으로 추상화한 것.
동적(행위) 다이어그램
- 유스케이스 다이어그램: 사용자의 요구를 분석하는 것으로 기능 모델링 작업에 사용
- 순차(Sequence) 다이어그램: 상호 작용하는 시스템이나 객체들이 주고받는 메시지를 표현
수직 방향이 시간의 흐름을 나타냄.
구성 요소에는 회귀 메시지, 제어 블록 등이 있다. - 커뮤니케이션 다이어그램: 순차 다이어그램과 같이 동작에 참여하는 객체들이 주고받는 메시지뿐만 아니라
개체들 간의 연관까지 표현 - 상태 다이어그램 : 하나의 객체가 자신이 속한 클래스의 상태 변화 혹은
다른 객체와의 상호 작용에 따라 상태가 어떻게 변화하는지를 표현 - 활동(Activity) 다이어그램: 시스템이 어떤 기능을 수행하는지 객체의 처리 로직이나
조건에 따른 처리의 흐름을 순서에 따라 표현
- Cause-Effect Graphing Testing(원인-효과 그래프 검사)
: 입력 데이터 간의 관계와
출력에 영향을 미치는 상황을 분석한 후
효용성이 높은 테스트 케이스를 선정하여 검사하는 기법 - Boundary Value Analysis(경계값 분석)
: 입력 자료에만 치중한 동치 분할 기법을 보완하기 위한 기법으로 입력 조건의 중간값보다 경곗값에서 오류가 발생될 확률이 높다는 점을 이용하여 입력 조건의 경곗값을 테스트 케이스로 선정하여 검사하는 기법 - Comparison Testing(비교 검사)
: 여러 버전의 프로그램에 동일한 테스트 자료를 제공하여
동일한 결과가 출력되는지 테스트하는 기법 - Equivalence Partitioning Testing(동치 분할 검사)
: 프로그램의 입력 조건에 중점을 두고,
어느 하나의 입력 조건에 대하여 타당한 값과 그렇지 못한 값을 설정하여
해당 입력 자료에 맞는 결과가 출력되는지 확인하는 테스트 기법 - Error Guessing(오류 예측 검사)
: 과거의 경험이나 확인자의 감각으로 테스트하는 기법
<클라우드 서비스>
IaaS(Infrastructure as a Service)
PaaS(Platform as a Service)
SaaS(Software as a Service)

2. 네트워크
가상회선
- 회선교환 방식과 데이터그램 방식의 장점을 결합한 통신 기술
- 처음 패킷으로 최적의 경로를 고정하고
경로가 고정되면 그 다음은 패킷으로 나누어 고속으로 전송할 수 있다. - 정해진 시간 안이나 다량의 데이터를 연속으로 보낼 때 적합
데이터그램
- 패킷교환 방식으로 동작하면서 IP 주소를 사용하는 인터넷을 의미
- 각 전송패킷을 미리 정해진 경로 없이 독립적으로 처리하여 교환하는 방식
- 짧은 메시지의 패킷들을 전송할 때 효과적이고 재정렬 기능이 필요
L2TP(Layer 2 Tunneling Protocol)
- 2 계층에서 구현되는 터널링 기술 중 하나
- L2F와 PPTP가 결합된 프로토콜로 VPN과 인터넷 서비스 제공자(ISP)가 이용
ICMP(Internet Control Messagae Protocol)
- TCP/IP에서 IP 패킷을 처리할 때 발생되는 문제를 알려주는 프로토콜
- 보통 다른 호스트나 게이트웨이와 연결된 네트워크에
문제가 있는지 확인하기 위한 목적으로 사용
hamming
: hamming code는 데이터 전송 시 1비트의 에러를 정정할 수 있는
오류정정부호의 일종으로 미국의 Bell 연구소의 Hamming에 의해 고안.
FEC(Forward Error Correction)
: 송신측이 전송할 문자나 프레임에 부가적 정보를 첨가하여 전송하고
수신 측이 이 부가적 정보를 이용하여 에러검출 및 에러정정을 하는 방식
: 데이터가 저장장치 내의 한 장소에서 다른 장소로 이동되거나, 컴퓨터들 간에 전송될 때,
데이터가 유실 또는 손상되었는지 여부를 점검하는 기술과 관련된 용어.
CRC(Cyclic Redundancy Checking)
: 네트워크 등을 통하여 데이터를 전송할 때
전송된 데이터에 오류가 있는지를 확인하기 위한 체크값을 결정하는 방식.
ATM(Asynchronous Transfer mode, 비동기 전송 방식)
: 자료를 일정한 크기로 정하여 순서대로 전송하는 자료의 전송방식.
- 셀이라 부르는 고정 길이 패킷을 이용하여 처리가 단순하고 고속망에 적합
- 연속적으로 셀을 보낼 때 다중화를 하지 않고 셀 단위로 동기가 이루어지지만
경우에 따라 동기식 시간 분할 다중화를 사용하기도 함.
<라우팅 프로토콜>
: 거리 벡터 라우팅 프로토콜이라하며, 최단 경로 탐색에 Bellman-Ford 알고리즘 사용.
최소 Hop count를 파악하여 라우팅.
: Link-State Vector 라우팅 프로토콜이라하며, 최단 경로 탐색에 Dijkstra 알고리즘 사
3. 디자인 패턴
Proxy
- 복잡한 시스템을 개발하기 쉽도록 클래스나 객체를 조합하는 패턴에 속하며,
대리라는 이름으로도 불린다. (직접 참조하지 않고 중간에 대리인을 거친다) - 내부에서는 객체 간의 복잡한 관계를 단순하게 정리해 주고,
외부에서는 객체의 세부인 내용을 숨기는 역할을 한다. - 구조 패턴에 해당
Visitor
- 호스트 객체의 내부 상태에 접근할 수 있는 방법을 제공하여
호스트 객체에 연산을 추가할 수 있도록 한다. - 이 패턴은 보통 합성 구조의 원소들과 상호작용하는 데 사용되며,
기존 코드를 변경하지 않고 새로운 기능을 추가하는 방법
4. SQL
릴레이션 인스턴스
: 데이터 개체를 구성하고 있는 속성들에
데이터 타입이 정의되어 구체적인 값을 가진 것으로,
실제 값을 가진 튜플을 의미
카디널리티
: 튜플의 개수를 의미
<스키마>
개념 스키마
- 데이터베이스의 전체적인 논리적 구조
- 모든 응용프로그램이나 사용자들이 필요로 하는 데이터를 종합한
조직 전체의 데이터베이스로 하나만 존재 - 개체 간의 관계와 제약 조건을 나타내고
데이터베이스의 접근 권한, 보안 및 무결성 규칙에 관한 명세를 정의 - 데이터베이스 파일에 저장되는 데이터의 형태를 나타냄
외부 스키마
- 사용자나 응용 프로그래머가 개인의 입장에서 필요한 데이터베이스의 논리적 구조
- 여러 개의 외부 스키마가 존재할 수 있다
- 여러 개의 응용 프로그램 혹은 사용자가 공유할 수 있다
<무결성 종류>
- 개체 무결성
: 기본키(Primary key)를 구성하는 어떤 속성도 Null값이나 중복된 값을 가질 수 없다. - 도메인 무결성: 주어진 속성 값이, 정의된 도메인에 속한 값이어야 한다.
- 참조 무결성: 외래키 값은 Null이거나 참조 릴레이션의 기본키 값과 동일해야 한다.
- 사용자 정의 무결성: 속성 값들이 사용자가 정의한 제약조건에 만족되어야 한다.
5. 프로그래밍
<파이썬>
집합을 출력할 때
-> {'한국', '미국'}으로 출력됨
문자열
b=a[:3] //처음부터 2번째 문자열까지 저장
c=a[4:6] //4번째 문자열부터 5번째 문자열까지 저장
d=a[28:] //28번째 문자열부터 끝까지 저장
<상속>
자식을 만들면 부모도 자동으로 만들어진다.
데이터 타입 [참/거짓] : C는 숫자, Java는 소문자, Python은 앞대문자
C언어 : 1 / 0
Java언어 : true / false
Python언어 : True / False
같은 문자열이라면 다른 변수에 저장해도 같은 곳을 가리킨다.
그러나 새로운 공간을 만들어 문자열을 저장한다면 가리키는 곳이 다르다.
String str1='Programming';
String str2='Programming';
String str3=new String('Programming');
println(str1==str2); // true
println(str1==str3); // false
println(str1.equals(str3)); true (같은 문자열이므로 이건 true)
<C언어>
char* p="KOREA";
printf("%s", p+1); //OREA : k의 다음 문자부터 끝까지 반환
printf("%C", *p); //K
printf("%C", *(p+3)); //E: K에서 3번째로 떨어진 문자 반환
printf("%C", *p+4); //O: *p=K이므로 +4하면 L M N O이므로 O 반환
구조체 포인터
구조체 포인터의 경우 ->만 사용 가능합니다.
struct insa{
char name[10];
struct insa* impl_a;
};
main(){
struct insa p1={"Kim",NULL);
struct insa p2={"Lee",NULL);
p1.impl_a=&p2;
//이때 p1으로 Lee를 출력하고 싶다면
printf("%s", p1.impl_a->name);
완전수 구하는 코드가 나오던데
구하기 귀찮아서 외우기로 했다.
공식이 있다.
2^n-1 * (2^n - 1)
n=2 -> 2*3=6
n=3 -> 4*7=28
class Person{
private String name;
public static String get(){
return name;
}
public void print(){
System.out.println(name);
}
}
* static으로 선언된 변수는 코드가 수행되는 동안 계속 공유된다.
* b++ : 후치연산 출력에 주의하자
6. 보안
템퍼 프루핑(Tamper proofing)
- 소프트웨어에서 워터마크 삭제 등과 같이 불법으로 변경되었을 경우,
그 소프트웨어가 정상 수행되지 않게 하는 기법 - 소프트웨어 변조 공격을 방어하기 위해 변조검증코드를 삽입하는 것도 한 방법으로,
프로그램이 변경되었는지 탐지하고, 탐지되었다면 프로그램이 실행되지 않게 한다.
BEC(Business Email Compromise)
: 공격자가 전자 메일을 사용하여 상대방이 금전을 보내거나
기밀 회사 정보를 누설하도록 유도하는 사이버 범죄의 일종.
<암호화 알고리즘>
대칭키: 그 나머지( DES, AES, PKI, ARIA, SEED)
비대칭키: RSA, ECC
OAuth(Open Authorization, 공개 인증)
- 인터넷 애플리케이션에서 사용자 인증에 사용되는 표준 인증 방법
- 사용자가 사용자 이름 및 암호와 같은 자격 증명을 공유하지 않고도 타사 애플리케이션이
데이터 또는 리소스에 액세스 할 수 있도록 권한을 부여할 수 있는 개방형 표준 프로토콜 - 카카오톡이나 네이버로 로그인하는 것
접근 통제 기술
- 임의 접근통제(DAC, Discretionary Access Control)
: 데이터에 접근하는 사용자의 신원에 따라 접근 권한을 부여
- 강제 접근통제(MAC, Mandatory Access Control)
: 주체와 객체의 등급을 비교하여 접근 권한을 부여
- 역할기반 접근통제(RBAC, Role Based Access Control)
: 사용자의 역할에 따라 접근 권한을 부여