2020-02-06 TIL

할 일 목록

  1. 코드스피츠 강의 다 듣기
  2. 어제 못푼 코딩 문제 풀기
  3. 네트워크 스터디
  4. 코틀린 스터디

완료하지 못한 목록

완료 목록

  1. 코드스피츠 강의 다 듣기
  2. 네트워크 스터디
  3. 코틀린 스터디
  4. 어제 못푼 코딩 문제 풀기

5Fs

1. Fact

1. 네트워크

  • 정보 보안의 3개 요소

    1. 기밀성

      • 허가 받은 사람만 정보를 이용할 수 있으며 그 이외의 사람에게 노출하지 않는다는 특징이다.
    2. 무결성

      • 정보가 본래의 내용으로 유지되고 있다는 성격이다.
      • 기밀성이 유지되고 있더라도 그 내용이 올바르지 않으면 정보의 가치가 없어져 버린다.
    3. 가용성

      • 정보를 적절히 사용할 수 있는 상태라는 특징이다.
      • 기밀성과 안정성을 유지하고 싶다고 해도 정보를 필요에 따라 적절하게 사용할 수 있게 해야한다.
    4. 정보에 대해 위의 세가지 요소를 적절히 유지하고자 하지만 이걸 방해하는 다양한 리스크가 존재한다.

      • 위협 : 어떤 위해를 당할 우려가 있는 요인
      • 취약성 : 위협에 대해 내재되어 있는 약점을 가리킨다.
  • 암호화와 전자증명서

    1. 정보를 암호로 만들(암호화) 때나 암호화된 정보를 원래대로 되돌릴(복호화) 때에는 “암호 알고리즘”(암호 계산의 절차를 정해둔 것)과 암호키를 사용한다.
    2. 공통키 암호화 : 데이터 암호화와 복호화에 동일한 키를 사용하는 것

      • 비교적 적은 양의 계산으로 빠르다.
      • 암호화된 정보를 넘긴 대상에게 복호하기 위한 키를 어떻게 넘길지가 문제다
    3. 공개키 암호 : 위의 문제를 해결한 암호화이고, 공개키 암호에는 쌍을 이루는 공개키 비밀키가 존재하며 쌍으로 조합할 경우 암호화 풀리도록 되어져 있다. 공개키는 누구나에게 전해지며, 이것을 통해 공통키를 암호화 하여 전송할 수 있다.
    4. 본인 이름이나 메일 주소와 공개키를 세트로 해서 신용할 수 있는 사람이 디지털 서명(위조 방지 조치)을 한것을 전자 증명서라고 한다.
  • 부정 침입 방지

    1. 부정 침입이란 시스템이 갖고 있는 취약성 또는 설정 미비등을 노리고 정규 접속 권한이 없음에도 불구하고 사내 네트워크 또는 컴퓨터에 숨어 들어가는것을 말한다.
    2. 가장 중요한 것은 부정하게 침입 당하지 않는 것이고, 그러기 위해 대책을 결합해서 잘 세워야한다.
  • 방화벽과 DMZ

    1. 어떤 네트워크를 통해 인터넷에 접속할 때에는 최소한 방화벽이 필요하다. 전용 장치로 독립되어져 있는 것과 라우터 등에 기능으로 내장되어져 있다.
    2. 패킷 필터형 : 패킷의 IP 주소와 포트번호를 조건으로 통신을 허가/거부한다.

      • 정적 필터링 : 고정된 조건으로 방화벽에서의 통과와 차단에 대해 판단하는 것을 정적 필터링이라고 한다.
      • 동적 필터링 : 반해 진행 상황에 따라 시시각각 조건을 변경하는 것
    3. DMZ : 인터넷에 완전히 드러난 것과 내부에 네트워크 처럼 단단히 보호된 것 사이의 중간 보호 상태의 네트워크이다. 이곳에 WEB 서버나 메일 서버 등 외부로 공개된 서버를 설치한다.
    4. IDS(침입 탐지 시스템)/IPS(침입 방지 시스템)은 시그니처에 따른 부정 검출과 평소와 다른 상황을 헤아리는 이상 감지를 한다. 방화벽과 다르게 어플리케이션 계층의 내용을 확인하여 처리한다.

2. 코틀린

  • block, non-block

    1. block : 점유하는 시간만큼 블록을 일으키는 함수

      • 서브루틴이 끝난 후 제어권을 반환
      • 독점적인 cpu 점유로 인해 모든 동작이 정지됨
      • 블로킹의 조합을 예측할 수 없음.
      • 첫번째 코드가 예시임
    2. non-block : 서브 루틴이 즉시 플로우 제어권을 내놓는 것.

      • 두번째 코드
const f = v -> {
    let i = 0;
    while(i++ < v);
    return i;
}
f(10);
f(10000000);
consta=123;
looper(12, console.log);
backRun(v=>v[0] + v[1], console.log, 3, 5);
console.log(a); //어쨌든콘솔은123부터출력
  • sync, async

    1. sync : 서브루틴이 즉시 값을 반환함.

      • 첫번째 코드
    2. async : 서브루틴이 콜백을 통해 값을 반환함.

      • 두번째 코드
const double = v=>v*2;
console.log(double(2)); //4
const double = (v, f)=>f(v*2);
double(2, console.log); //4
  • sync block

    1. sync : 서브루틴이 즉시 값을 반환
    2. block : 하지만 즉시 플로우 제어권을 반환 않음
const sum = n=>{
    let sum = 0;
    for(let i = 1; i <= n; i++) sum += i;
    return sum;
    };
    sum(100);
  • sync non-block

    1. sync : 서브루틴이 리턴 값으로 반환
    2. non-block : 즉시 플로우 제어권을 반환
const sum = n=>{
    const result = {isComplete:false};
    requestAnimationFrame(_=>{
        let sum = 0;
        for(let i = 1; i <= n; i++) sum += i;
        result.isComplete = true;
        result.value = sum;
        });
    };
    const result = sum(100);
    while(!result.isComplete);
    console.log(result.value);
  • async block

    1. async : 서브루틴이 콜백을 통해 값을 반환
    2. block : 즉시 플로우 제어권을 반환하지 않음
      • node의 async로 block인 jdbc를 사용 ?
const sum = (n, f)=>{
    let sum = 0;
    for(let i = 1; i <= n; i++) sum += i;
    return f(sum);
    };
    sum(10, console.log);
    console.log(123);
    //55 → 123
  • async non-block

    1. async : 서브루틴이 콜백을 통해 값을 반환
    2. non-block : 즉시 플로우 제어권을 반환
const sum = (n, f)=>{
    requestAnimationFrame(_=>{
        let sum = 0;
        for(let i = 1; i <= n; i++) sum += i;
        f(sum);
    });
};
sum(10, console.log);
console.log(123);
//123 → 55
  • blocking non-blocking 과 sync 와 async는 논의하는 관점이 좀 다르다 실제로 나의 생각이지 정확한 것은 아니다 고민해 보고 수정할 생각이다.

    1. blocking non-blocking은 실행 방식에 따른 관점이다. 실제로 sync 방식으로 할 경우 blocking을 피할 수가 없다. async로 할 경우, 다른 스레드에 실행을 시키기 떄문에 현재 스레드는 non-blocking으로 동작 할것이다.
    2. sync async는 메모리에 적재된 명령을 순서대로 실행하는 실행 순서에 대한 관점이다. async로 할 경우, 해당 콜백이 언제 실행될지 우리는 예측을 할 수가 없다. 다른 스레드에서 돌고 있기 때문에. 만약에 다른 스레드에서 콜백이 실행 되도록 해놓는다면, 당연히 sync는 메모리에 적재된 순서대로 실행하지 않을것이다.

2.Feelings

  1. 이전에는 프로젝트를 만드는 것에 관심을 뒀는데 요즘엔 정말 한 언어만 깊게 파보고 싶다는 생각이 든다.
  2. 개발자라면 언어의 숙련도가 굉장히 중요한 것 같다.
  3. 요즘 책만 읽어서 힘든 점이 있는데 코드를 쳐보면서 함께 공부해봐야겠다.

3.Findings

  1. 코틀린의 delegate의 다양한 기능
  2. sync async blocking non-blocking

4.Future Action Plan

  1. 내일은 코드스피츠의 코루틴 강의와 오늘 들었던 내용을 복습 정리해야겠다.
  2. 문제를 꾸준히 풀어야 한다.

5.FeedBack


Written by@Zero1
This blog is for that I organize what I study and my thinking, feeling and experience.

GitHub