TIL- 정보보안기사

kyoungyeon·2023년 10월 9일
0

TIL

목록 보기
93/110

Status

10/7 쌍 기사 시험이 끝났다
오전엔 정처가 실기, 오후엔 보안 기사 필기를 견학하러 가는 마음으로 갔다.

실은 오전에 정처기 실기를 치고 나서
너무 시간이 많이 남아서 오히려 고민이 됐다.
인강을 최대한 보며, 어차피 보안 기사는 공부를 이전 회차보다 더 못했고, 결제한 요약본 인강 마저 1회 독 못했다.

공부량으론 저번 회차보다 더 못해서, 절망적인 상황이었다.
아무리 현업으로 보안 엔지니어링 하고 있다곤 해도,
솔직히 보안 정책, 구축, 시스템 설계나 프로젝트가 진행되고 있는 게 전혀 없는 상황이라 내 실력조차 의문이었고.

그냥 가지 말까, 가봤자 의미가 없는데...

이 고민을 시험 전날까지 하다가
막상 취소하려 하니 규정상 5일 전까지 환불할 수 있었기에,
포기할 것인지에 대한 선택만 남아있었다.

결국 트렌드 분석을 위해 가보기로 했다.


정처기

  • 매번 아쉬운 마음이 드는 시험. 다행히 이번에 프로그래밍 쪽 문제를 예상보단 많이 맞힌 것 같아 기쁜데, 기쁘지 않다.
    안정적이지 않기 때문이죠.

그리고 왜 C 언어는 항상 틀리는 걸까. == 문제를 안 풀었기 때문이죠.

c 언어 개념

  • 연산자
구분연산자
대입 연산자=
산술 연산자+, -, *, /, &, ++, --
관계 연산자<, >, <=, >=, ==, !=
논리 연산자&&,
할당 연산자+=, -=, *=, /=, %=
삼항 연산자?
비트 연산자&, |, ~, ^, <<, >>
  • 출력 타입
    • %s == string 문자열
    • 문자열은 항상 NULL 문자 1개를 포함한다.
# 크기 3 , 문자배열 선언, 순서대로 자리 배정,
char str[3]  = {'c','a','t'. '\0'};

# best !
#  크기 3, 문자 배열 선언, 문자열 대입 
# 크기가 3을 벗어나는 문자열 상수는 초기화 불가 === 컴파일 오류
char str[3] ="cat";

# 문자열 상수 초기화 , 배열 크기 X , 문자열 상수 크기에 따라 자동 str 배열 크기할당, 
# 개발시 개발자가 크기 계산을 해서 알아야 하는 번거로움 있음.
char str[] = "cat" ; 
%c  == chart 하나의 문자로 출력
%d  = 10진수
%e  = 지수형
%f = 실수형
%p = 포인터 주소값

C 언어 프로그래밍 -포인터

#include
int main(){
	char*p = "KOREA";
    printf("%s",p);
    printf("%s",p+1);
    printf("%c",*p);
    printf("%c",*(p+3));
    printf("%c",*p+4);

}
### 내 오답###
0
1 
KOREA
EA
A
 
### 정답 ###

KOREA
OREA
K
E
O
오답 원인 분석
  • 분명,.. %s 가 string인 줄 알고 있었으나, % c를 몰랐다.
  • point의 개념이 헷갈려서 항상 포인터를 보면 메모리값 참조로만 이해했다.
  • 문자열 형태로 포인트 쓰는 개념을 몰랐다.
  • 왠지 둘 중 하나는 메모리값/ 배열 인덱스값일 것 같았다. 그래서 병신같은 짓을 했다.
  • 포인터
  • 문자열은 내부적으로 배열 형태 처리가 된다
  • 포인터 자체에 상수처럼 문자열을 넣는다
  • 읽기 전용 포인터로 치환될 수 있다.
  • 컴파일러가 알아서 " 문자열 리터럴"을 참조하여 남아있는 메모리에 자동으로 담길 수 있게 함.
  • 포인터는 해당 주솟값을 가지고, 문자열 변경 불가함.
#include <stdio.h>
int main(void) {
	char *a = "HI Eunjin";
    
    printf("%s\n", a);
    printf("c\n",a[0]);
    printf("c\n",a[3]);
    printf("c\n",a[6]);
    printf("c\n",a[8]);

}

    # "HI Eunjin"
    # 배열처리로 원하는 인덱스의 해당 문자따로 출력도 가능.
    # H
    # E
    # j
    # n

C 언어 프로그래밍 -구조체

#include<stdio.h>


## 구조체 선언 s
struct student s = {24,"kim",4.3};
## 포인터 선언 p 구조체 안에 포인터가 들어감.
struct stduent *p ; 
## 아직 올바른 주소값 초기화는 안된 상태.

## 포인터를 통한 접근, 
## 구조체s의 주소를 문자 포인터 p 에 저장.
p =&s;


##*p 는 전체 구조체  . (멤버)를 붙여 사용가능.
printf("학번 =%d 이름 = %s 학점 = %f \n" , (*p).number,(*p).name,(*p).grade); 
  



# 포인터 p 가 가르키는 구조체의 멤버 number
p ->number;
(*p).number ;   
  • 구조체라고 부르는 게 dictionary처럼 보인다

  • 근데 왜 굳이 구조체랑 pointer를 따로 부르는 건지는 이해 불가하여 공부해 봄

    구조체

  • 다른종류의 데이터를 하나에 묶는다 ( int, double, char….) - 새로운 자료형을 만들 수 있는 자료형.

  • 배열은 자료형이 같은 자료만 묶을 수 있음 (차이)

  • TS의 interface 와 유사한 문법

interface Todo {
  id: number;
  content: string;
  completed: boolean;
}

let todo: Todo;

todo = { id: 1, content: 'typescript', completed: false };
  • 구조체 선언, 변수 생성

  • 참고로 c언어에선 bool 을 쓰려면 stdbool.h 를 선언해야 함

    C99-추가문법

#include <stdbool.h>
#include <stdio.h>
#키워드 태그 
struct todo { 
#멤버
	int id;
	char content[10];
	bool completed;
  
}
# 함수안 선언
int main(void){
	struct todo s1, s2;
    }
 

구조체 접근법

c언어 기초

네트워크

  • 애플리케이션 테스트 (안 나옴)
    상향식 test 스텁
    하향식 test 드라이브
  • Ipsec
  • network 계층, 3계층, 인터넷 프로토콜 IP 보안성, IP 보안 프로토콜
  • 무결성 + 인증 = 인증헤더 (HA),
  • 기밀성 = ESP 암호화
  • ATM (+LAN) ⭐⭐
    이딴걸 어떻게 아나요..
  • 비동기전달 모드
  • 광대역 서비스 특성 + 대역폭 조절 능력 + 지연시간 조절 능력
  • Cell 크기가 53 Byte
  • 통계적 다중화 방식
  • 강력한 트래픽 관리 및 제어

보안

  • 암호학 ( 공부한 건 안 나옴)
    대칭키: DES, AES, ARIA, SEED
    비대칭키 : ECC, RSA
    비밀키 : 3DES, AES, IDEA, DES
    공개키 : ECC, RSA

  • SEED 관련 문제 출제
    128bit, 개인정보보호, 한국인터넷진흥원 + experts
    DES, AES 유 사0
    파이스텔 네트워크(Feistel Network) 알고리즘 활용
    ACTIVE X의 주범

  • ARIA
    KISA에서 발명
    암호화와 복호화를 수행하는 라운드 함수와 키 확장
    평문 암호화 과정에서 사용되는 라운드 키 생성 알고리즘은 Feistel 구조.

  • 템퍼프루핑
    디지털 콘텐츠 위변조 방지 기술 중 하나

  • MAC : 보안등급, DAC : 신분, RBAC : 역할

디자인 패턴 (안나온듯)

  • command( 행위)

  • 추상 클래스+ 서브 클래스

  • 재사용성, "캡슐화"

  • observer (행위)

  • 한 객체의 상태가 바뀌면 그 객체와 의존관계의 다른 객체에 자동으로 내용이 갱신

  • one to many

  • loose coupling

  • singleton (생성)

  • 한 클래스에 하나의 객체

  • 전역변수 사용하지 않고, 하나의 객체를 어디서든지 참조.

  • builder (생성)

  • "복잡"한 인스턴스 "분리", "조립", "생성"

  • visitor(행위)

  • "기능 분리" , 객체 구조는 그대로

  • factory method(생성)

  • 상위 클래스 객체생성 인터페이스 + 하위클래스에서 인스턴스 생성

  • 상위클래스 : 인스턴스 생성 방법 결정

  • 하위클래스 : 데이터 생성 및 조작 함수 오버 로딩, "클래스 분리"

  • 서브 클래스 : 객체생성 처리 캡슐화 패턴.

  • bridge (구조)

  • 추상화 + 구현 + 확장

  • proxy (구조)

  • 다른 무언가와 이어지는 인터페이스 클래스 "대리"

  • 중간에 가로채서 다른 행위를 수행하는 객체

  • 객체를 정교하게 제어 / 객체 참조가 경우

  • 분리된 객체를 위임함으로써 대리작업을 중간단계에 삽입 가능

  • 분리된 객체를 동적 연결, 객체의 실행 시점 관리

  • Adapter(구조)

  • 중간에서 맞춰주는 역할

  • 클래스 패턴(상속) + 인스턴스 패턴(위임)

정처기 디자인 패턴 - 자주 출제

프로토콜

  • OSPF (Open Shortest path first)

  • 내부 라우팅 프로토콜, 링크 상태 라우팅 프로토콜, 최단 경로 우선 프로토콜

  • RIP 단점 해결, 대규모

  • RIP

  • IGP 중 거리 벡터 알고리즘

  • 라우팅 프로토콜

SQL

  • 관계대수, 관계해석 ⭐⭐⭐
  • 여러번 나온 기출인데 계속 공부를 안했다.. 이건 진짜 멍청한 실수..
 ① join : ㉢ ⋈
 ② project : ㉡ π
③ select : ㉠ σ
④ division : ㉣ ÷

DB

  • 한번 보고 갔는데 기억이 나질 않았음
  • refernce 영어는 후보군에 떠올랐는데 결국 한글이 기억이 안 났다.

무결성 종류 의의

  • 외래키, 참조 무결성 제약 조건
  • 기본 키와 참조 키 간의 관계가 항상 유지됨을 보장합니다.
  • 참조되는 테이블의 행을 이를 참조하는 참조키가 존재하는 한 삭제될 수 없고, 기본키도 변경될 수 없습니다.
  • 사용자의 실수로 관련 데이터가 삭제되거나 수정되는 것을 막아줍니다

UML

  • 이건 진짜 전혀 예상 못하고 공부도 안 함.

  • 클래스 다이어그램

  • 전달하고자 하는 내용 위주 표기

  • 정적 구조

  • 패키지 다이어그램

  • 정적 구조

  • 전체 모듈의 구조 관계 파악 용이

  • 객체 등 같은 여러 요소를 그룹화 함.

  • 폴더를 활용해, 패키지 중첩, 패키지 간 관계 등을 만듦

UML 종류

SQL

  • union
select a from TableA
union
select a from TableB
order by a desc #내림차순( 내려갈수록 크게) 

union 시 default가 중복값은 제거였다.

아 난 unique만 중복값이 제거되는 줄 알고
중복되는 값 넣어서 틀림.

java 프로그래밍

class Person {
private String name;
public Person(String val) {
name = val;
	}
	public static String get() {
		return name;
}
	public void print() {
		System.out.println(name);
	}
 }
 public class Main {
	public static void main(String[] args) {
		Person obj = new Person("Kim");
	obj.print();
	}
 }
  • 틀린 줄?
    난 15번이 틀렸다고 생각했음
    자식 클래스가 보이지 않았고,
    Person 형 obj를 선언 후 바로 값을 넣을 수 있을 거 같아서..?
    Person obj = "Kim"

하지만 7번째 줄 오류라고 함.

error: non-static variable name cannot be referenced from a static context
  • 정상 코드
class Person {
private String name;
public Person(String val) {
name = val;
	}
    ## 변수값 자료형 선언 후 받아서 return.
	public static String get(String name) {
		return name;
}
	public void print() {
		System.out.println(name);
	}
 }
 public class Main {
	public static void main(String[] args) {
		Person obj = new Person("Kim");
	obj.print();
	}
 }
 
 ## output : Kim

후기

프로그래밍 문제 중 SQL, C 언어 2개로 총 3문제는 확실히 틀려버렸다.

프로그래밍은 너무 구멍이 많다..
솔직히 정처기는 프로그래밍 기본을 판단하는 기준이라고 생각함.

java랑 c.. 어떻게하지?
여기서 코테를 더 추가해야 하나?
지금도 버거운데?

네트워크 문제는 나름대로 자신 있었는데
ATM 문제가 크리티컬 했다. 영어로 유추하다가 AM까진 맞췄다 ㅋㅋㅋ

이론도 uml 이나 SQL 다 틀린 거 같은데.. 잘 찍었는지.. 그게 문제다….

profile
🏠TECH & GOSSIP

0개의 댓글