3 minute read

Day07

1. 네트워크 기초 2. 컴퓨터 시간 원리 3. 암호화 4. 함수형 프로그래밍 5. 객체지향과 프로토타입 6. 이벤트 루프

1. 네트워크 기초


1.1 브라우저에 URL을 입력시 발생하는 일

  1. URL을 해석한다.
  2. DNS를 조회한다.
  3. 해당 IP가 존재하는 서버로 이동한다.
  4. ARP를 이용하여 MAC 주소 변환을 한다.
  5. TCP 통신을 위해 socket을 연다.
  6. 서버는 응답을 반환한다.
  7. 브라우저는 렌더링을 한다.

    2. 컴퓨터 시간 원리


2.1. 시간이 결정되는 방법

  • 물리량
    • 시간은 물리학 관점에서 봤을 때 시각과 시각 사이 간격을 표현하는 단위를 뜻한다.
  • 위치
    • 시간은 위치에 따라 다르게 표현될 수 있다.
  • 천문 현상
    • 지구 자전속도의 불규칙성, 지구의 자전주기와 공전주기 등 천문 현상으로 인한 시간 보정이 필요
  • 문화
    • 문화에 따라 시간 표현이 다를 수 있다.
  • 역사
    • 역사적 사건에 의해 시간은 다르게 표현될 수 있다.
  • 사회
    • 사회적 제도에 의해 시간은 변할 수 있다.

2.2. 협정 세계시

  • 원자 시계와 윤초 보정을 기반으로 표준화한 시각
  • 모든 시간대는 UTC+0을 기준으로 환산한다.
  • 대한민국의 시간은 UTC+9
  • 표기법은 ISO 8601을 따른다.
    • 2021-03-20T09:00:00.000Z // UTC+0기준 2021년 3월 20일 9시
    • 2021-03-20T09:00:00.000+09:00 // UTC+9기준 2021년 3월 20일 9시
    • 가운데 T는 Time읠 의미하고 Z는 Zulu Time을 뜻한다.
    • 경도 0(Zero)의 앞글자 z를 나타내고 z는 무선 통신 용어로 Zulu라고 표현된다.

      2.3. 컴퓨터가 시간을 표현하는 방법

  • 하드웨어의 시스템 클럭을 이용한다.
  • 특정 시각(epoch)을 기준으로 시스템 클럭의 틱을 세는 것으로 구현된다.
  • 이를 시스템 시간이라 부른다.
  • 시스템 시간을 값으로 표현한 것을 타임스탬프(Timestamp)라고 부른다.
  • 타임스탬프는 운영체제마다 기준 시간과 단위가 다를 수 있다.
  • 유닉스 계열 운영체제에서 시간을 표시하는 방법을 Unix Time이라 부른다.

    2.4. 시스템 클럭의 원리

  • RTC(Real Time Clock)이라는 모듈을 사용한다.
  • RTC는 메인보드에 붙어있어 전원을 끄더라도 계속 작동한다.
  • RTC는 카운터 회로를 통해 클럭을 발생시킨다.

    2.5. Unix Time

  • 1970년 1월 1일 0시 0분 0초가 기준 시각이다.
  • 1970년 1월 1일 0시 0분 0초인 이유는 유닉스를 개발한 데니스 리치가 그냥 이유 없이 정한 날짜이다.
  • 1970년 1월 1일 0시 0분 0초 이전 시간은 음수로 표현된다.
  • 초 단위로 시간이 증가한다.

    2.6. 현재 시간을 알아내는 방법

  • 시스템 시간을 네트워크 타임 프로토콜(NTP)를 통해 동기화할 수 있다.
    • NTP 서버에 네트워크 요청을 하여 현재 시간을 받을 수 있다.
    • NTP 서버는 계층으로 이루어져 있으며 그 계층을 Stratum이라고 부른다.
    • 최상위 계층을 PRC(Primary Reference Clock)이라 부른다.

      2.7. 시간을 사용할 기준

  • 해당 지역 시간
  • UTC
    • 로깅
    • 감사
    • 시계열 데이터
  • Time Zone이 적용된 시간
    • 결제 시각
    • 푸시 알림 시각
    • UI 시각 표시
    • 캘린더

      2.8. JavaScript에서 사용법

  • 간단하게 사용하면 Data객체를 사용할 수 있다.
  • 조금 더 자세히 알고 싶다면

    3. 암호화


3.1. 암호화

  • 평문을 해독할 수 없는 암호문으로 변환하는 것을 의미한다.
  • 단방향과 양방향 암호화가 존재한다.

3.2. 단방향 암호화

  • 해시 알고리즘을 이용하여 평문을 복호화할 수 없는 형태로 암호화 한다.
  • 대표적으로 MD5와 SHA 알고리즘이 있다.
  • MD5와 SHA-0, SHA-1은 해시 충돌이 발생할 수 있는 취약점이 있기에 사용을 권하지 않는다.
  • 복호화가 불가능 하지만 Rainbow Table을 통해 원문을 알아낼 수도 있다.
  • 이는 salt, key stretching 등의 추가적인 방법을 이용하여 해결할 수 있다.
    • salt
      • salt는 평문에 임의의 문자열을 추가하여 암호화하는 방법을 말한다.
      • salt는 128bit 이상으로 만들 것을 권장한다.
      • 사용자마다 다른 salt를 사용하게 하면 더 안전하다.
    • key stretching
      • 해시를 여러 번 반복하여 원문을 알기 힘들게 만드는 방법
      • 일반적인 시스템에서 0.2초 이상 반복되면 안전하다고 한다.
  • sal와 key stretching을 이용하는 알고리즘
    • PBKDF2
      • NIST(미국표준기술연구소)에서 승인된 알고리즘
      • DIGEST = PBKDF2(
    • bcrypt
      • 비밀번호 저장을 목적으로 탄생했다.
      • OpenBSD에서 기본으로 사용하고 있는 알고리즘

        3.3. 양방향 암호화

  • 평문을 복호화할 수 있는 형태로 암호화하는 방법
  • 대칭키와 비대칭키 알고리즘으로 나뉜다.
  • 대칭키 알고리즘 : 같은 키를 사용하여 암호화, 복호화가 가능하다. 대표적으로 AES가 있다.
  • 비대칭키 알고리즘 : 같은 키를 사용하여 암호화는 가능하지만 복호화는 불가능하다. 대표적으로 RSA가 있다. 공개키와 개인키가 존재한다. RSA는 소인수분해를 기반으로 만들어진 알고리즘이다.
  • JavaScript에서 암호화하는 방법
    • crypto-js를 사용한다.

      4. 함수형 프로그래밍


  • 프로그램은 순차, 분기, 반복, 참조로 구성된다.

함수형

4.1. 함수형 패러다임

  • 객체지향 추상화의 최소 단위가 객체인 것처럼 함수형은 함수가 최소 단위이다.
  • 함수 단위로 나눠지므로 재사용성이 높다.
  • 불변성을 지향하기에 동작을 예측하기도 쉽고 사이드 이펙트를 방지한다.
  • 객체지향은 제어 흐름의 간접적인 전환에 부과되는 규율
  • 함수형은 변수 할당에 부과되는 규율

4.2. 함수형 프로그래밍의 장점 및 단점

  • 상태가 없기 때문에 사이드 이펙트가 없다.
  • 재사용성이 높다.
  • 코드가 짧고 간결하다.

4.3. 선언형 프로그래밍

  • 기존 명령형 프로그래밍은 문제를 어떻게 해결해야 하는지 컴퓨터에게 명령을 내리는 방법
  • 선언형 프로그래밍은 무엇을 해결할지에 집중하고 해결 방법은 컴퓨터에게 위임하는 방법

5. 객체지향과 프로토타입


5.1. 객체지향이란?

  • 객체지향의 객체는 현실에 있는 것을 추상화한 것이다.
  • 객체 지향이란 객체 위주로 설계하고 프로그래밍하는 패러다임
  • 객체지향 언어에선 추상화의 최소 단위가 객체이다.
  • 각각의 객체는 메세지를 주고받을 수 있다.

    5.2. JavaScript에서의 객체지향

  • 클래스 기반 언어처럼 속성(attribute)와 행위(method)를 정의할 수 있다.
  • 객체 리터럴, Object, 생성자 함수 세 가지 방법을 이용할 수 있다.

    5.3. 프로토타입의 필요성

메모리 낭비

  • 프로토타입이란 기존의 객체를 복사하여 새로운 객체를 생성하는 방식이다.
상속 흉내내기1 상속 흉내내기2 상속 흉내내기3

6. 이벤트 루프


  • JavaScript 엔진은 Single Thread로 동작한다.
  • JavaScript의 Call stack은 하나만 존재한다.
  • 브라우저의 multithread로 동작하기에 javascript로 여러 다양한 작업들을 할 수 있다.
  • 비동기 작업은 task queue뿐만 아니라 microtask queue, animation frames에도 등록된다.

Categories:

Updated: