코드스테이츠 13주차 -[인증/보안] 기초 / [컴퓨터 공학] 기초

이번 주는 여태까지 공부했던 기간에서 가장 빡빡한 일정이었다. 3일 동안 인증/보안 기초에 대해서 배우는데 하루에 스프린트 하나씩 풀면서 머리에 꾸겨 넣은 느낌이었다. 어디서 봤는데 '공부할 때 머리가 아플 정도로 공부를 해야 자신이 생각했던 효율만큼 공부가 된다. 아프지 않으면 자신이 생각했던 것보다 공부가 되지 않은 것이다.'라는 내용을 보았는데 왜 우리 뇌는 아파야 똑똑해지는걸까😕
그래도 이후에는 컴퓨터공학의 이론적인 부분을 많이 배웠는데, 예전에 살짝 배웠던 부분이어서 어렵지 않고 공부했었던 부분이 조금씩 기억나기도 해서 금방 끝났다. 매일매일 페어 분과 같이 공부하다가 혼자 하려니 약간 쓸쓸하기도 했고, 여유롭기도 했던 것 같다. 이번 페어분은 되게 좋으셨다. 그분도 나와 함께했던 시간이 너무 유익했고 계속 나와 같이하고 싶다고 하셨다😆 서로 티키타카가 좋았던 느낌이랄까
공부하는 기간이 점점 늘어나고 미친 듯이 달리게 되니까 다들 조금씩 지쳐가는 것 같은 느낌을 많이 받았다. 솔직히 나도 엄청 놀고 싶고, 공부를 잠깐 쉬고 싶다는 생각하긴 했다. 내가 생각한 가장 좋은 방법은 계속 질질 끌면서 공부를 한다고 되는 것이 아니니 하루를 빡세게 공부하고 쉬는 날에는 기분전환을 해줘야 이 긴 대장정을 끝낼 수 있다고 생각했다. 단기간에 빡세게 공부하기 위해 시작했지만, 권태로움을 느끼는 순간 끝이라는 생각이다. 아직은 그래도 버틸 만 한 것 같다. 쉴 때는 조금씩 쉬고 페이스를 잃지 않도록 노력해야겠다👏


13주차 배운 내용 중 정리하고 싶은 내용

[인증/보안] 기초


  • HTTPS : Hyper Text Transfer Protocaol Secure의 약자. HTTP요청을 SSL or TLS라는 알고리즘을 이용해, HTTP통신을 하는 과정에서 내용을 암호화하여 데이터를 전송

HTTPS를 왜 사용할까? => 기밀성(privacy)와 무결성(integrity)


[HTTPS]

1. HTTPS 프로토콜의 특징 중 하는 브라우저가 응답과 함께 전달된 인증서 정보를 확인 가능
   -> 브라우저는 인증서에 대한 CA정보 확인. 서버의 공개키 제공
   
   
2. 비대칭키 암호화(암호화/복호화하는 키가 다름)
  -> 일반적으로 HTTPS에서는 공개키: 암호화, 비공개키(개인키): 복호화    *바꿀 수 있음*

    
    
    
    
[Hashing]

1. 어떤 문자열에 '임의의 연산'을 적용하여 다른 문자열로 반환하는 것.
   
2. hashing함수는 input -> output에 대해 항상 똑같은 결과를 냄.
       
3. 복호화가 사실상 불가능.

  

    
[Cookie]

1. http의 stateless(무상태성) 특징을 보완해주는 도구
   
2. 서버는 브라우저에게 일방적으로 cookie를 줄 수 있음
       
3. cookie는 브라우저에 담기고, 전송과정에서 헤더에 실림(세션의 개념은 서버에 존재)

4. 클라이언트에서 서버로 보내질때는 cookie가 헤더에 자동으로

5. connect.sid(쿠키를 생성하고 이를 식별자로 이용). res.cookie() => set cookie

  

    
[Cookie 옵션]

- domain: 서버와 요청의 도메인이 일치하는가
- path: 서버의 요청의 세부경로가 일치하는가    
- maxage/expires: 쿠키의 유효기간 설정
- httpOnly: 스크립트의 쿠키 접근 가능 여부 설정
- secure: HTTPS에서만 쿠키 전송 여부 설정
- sameSite: 같은 사이트에서만 쿠키를 사용할 수 있게 설정 => none은 https에서만 사용 가능

                *secure와 sameSite는 짝꿍*
             

세션기반 인증과정


토큰기반 인증과정


설명접속상태 저장위치단점
cookie쿠키는 http의 statelss한 것을 보완해주는 도구클라이언트 (브라우저)쿠키자체는 인증이 아님
session접속 상태를 서버가 갖고 있음(stateful)
접속상태와 퀀한 부여를 위해 세션ID인 토큰을 쿠키로 전송
서버 + cookie하나의 서버에서만 접속상태를 갖기에 분산에 불리
token
(JWT가 대표적)
토큰 자체가 무결성을 증명 가능
서버가 접속상태를 갖고 있지 않아도 됨
클라이언트 (쿠키, localStorage, in-memory)모든 요청에 토큰을 보내야 함
OAuth 2.0제 3자로부터 인증을 대행하고, access token을 받음
인증을 대신할 뿐, 권한 관리는 토큰방식과 유사
클라이언트 (쿠키, localStorage, in-memory)모든 요청에 토큰을 보내야 함



[컴퓨터 공학] 기초


  • 유니코드란?

    • 전세계 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업표준
    • 목적은 현존하는 문자 인코딩 방법을 모두 유니코드로 교체하는 것

  • UTF-8/ UTF-16
UTF-8UTF-16은 인코딩 방식의 차이. 뒤에 숫자는 비트(bit)


UTF-8 : 1bytes에서 4bytes까지의 가변길이를 가지는 인코딩 방식
	네트워크를 통해 전송되는 텍스트는 주로 UTF-8로 인코딩
	바이트 순서를 따지지 않고, 순서가 정해져 있음
    	4bytes까지 사용




UTF-16 : 코드 그대로 바이트로 표현 가능
	 순서 다양
	 가변길이라고 할 수 있으나, 대부분 2바이트로 표현

     
     
  *UTF-8에서 한굴은 3바이트, UTF-16에서는 2바이트 (1byte = 8bits)*

  • 비트맵(래스터)과 백터이미지의 차이점
비트맵(래스터)백터
기반 기술픽셀 기반수학적으로 계산된 shape 기반
특징사진과 같이 색상의 조합이 다양한 이미지에 적합로고, 일러스트와 같이 제품에 적용되는 이미지에 적합
확대확대에 적합하지 않음
보다 큰 사이즈의 이미지가 필요할 때 사용하려는 크기 이상으로 생성하거나 스캔
품질저하없이 모든 크기로 확대 가능하며, 해상도의 영향을 받지 않음
크기에 따른 파일 용량큰 크기의 이미지는 큰 파일 사이즈를 가짐큰 크기의 백터 그래픽은 작은 파일 사이즈를 유지 가능
상호 변환이미지의 복잡도에 따라 벡터로 변환하는 것에 오랜 시간이 걸림쉽게 래서트 이미지로 변환 가능
대표적인 파일 포맷jpg, gif, png, bmp, psdsvg, ai
웹에서의 사용성jpg, gif, png 등이 널리 쓰임svg 포멧은 현대의 브라우저에서 대부분 지원

하드웨어는 스스로 일을 할 수 없음. 운영체제가 하드웨어에게 일을 시켜야 함

  • 운영체계

    1. 시스템 자원 관리
      -> 응용프로그램은 컴퓨터를 이용해 다양한 작업을 하는 것이 목적, 운영체제는 응용프로그램이 하드웨어에게 일을 시킬 수 있도록 도와줌
      -> CPU, RAM, 디스크 등의 시스템자원을 관리하는 주체가 운영체제

    2. 응용프로그램관리
      -> 응용프로그램이 실행되고, 시스템 자원을 사용할 수 있도록 권한과 사용자를 관리

  • 응용프로그램(운영체제를 통해 컴퓨터에게 일을 시킴)

    -> 운영체제로부터 권한을 부여받고, 운영체제가 제공하는 기능 이용 가능
    -> 응용프로그램이 사용에 대한 권한을 획득한 후에는, 사용할 때 필요한 API를 호출해야 함. 해당 API는 시스템콜로 이뤄져 있음

    • 시스템콜이란?: 시스템 자원을 사용할 수 있도록 운영체제차원에서 다양한 함수를 제공


[프로세스]


사용자가 애플리케이션을 실행하는 운영체제로부터 실행에 필요한 메모리를 할당 받아 애플리케이션의 코드를 실행 
  => 이때 실행되는 애플리케이션을 프로세스라 부름

여러 프로세스(다중 프로세스)를 만들기도 함






[스레드]


프로세스 내에서 실행되는 흐름의 단위

각 스레드마다 callstack이 존재
  *callstack: 실행중인 서브루틴을 저장하는 자료구조*
  
스레드는 다른 스레드와 독립적으로 동작

동시에 돌릴 수 있는 스레드 수 = 컴퓨터에 있는 코어의 갯수
시분할이란? 운영체제가 각 스레드를 시간에 따라 분할하여, 여러 스레드가 일정시간마다 돌아가면서 실행되도록






[멀티스레드]


두가지 이상의 작업을 동시에 처리하는 것

운영체제는 멀티 태스킹을 할 수 있도록, 프로세스마다 CPU 및 메모리 자원을 적절히 할당하고 병렬로 실행
멀티프로세스 => 애플리케이션 단위의 멀티 태스킹 / 멀티스레드 => 애플리케이션 내부에서의 멀티 태스킹

대용량 데이터의 처리 시간이 줄어듬. 데이를 분할하여 병렬로 처리하는데 사용






[멀티스레드 장점]


메모리공간과 시스템 자원의 소모가 줄어들고, 프로그램 응답 시간이 줄어듬
여러 프로세스로 할 수 있는 작업을 하나의 프로세스에서 스레로 나눠 수행



[멀티스레드 단점]


프로세스 간 공유하는 자원이 없음

서로 다른 스레드가 같은 데이터에 접근하고 힙 영역을 공유하기 때문에 다른 스레드가 서로 사용중인 변수나 자료구조에 접근하여
값을 잘못읽거나 수정하는 일 발생 가능  =>  동기화 작업필요(작업처리 순서를 제어, 공유자원에 대한 접근 제어)
              


  • 가비지 컬렉션이란?

    -> 프로그램에서 더이상 사용하지 않는 메모리를 자동으로 정리하는 것
    -> JAVA, C#, JS 등이 기능을 갖고 있음
    -> 메모리 누수를 방지할 수 있음

    • 트레이싱이란?: 한 객체에 flag를 두고, 가비지컬렉션사이클마다 flag에 표시 후 삭제하는 mark and sweep 방법
    • 레퍼런스카운팅이란?: 한 객체를 참조는 변수의 수를 추적하는 방법

  • 캐시란?
*일시적인 데이터를 저장하기 위한 목적으로 존재하는 고속의 데이터 저장공간*

1. 작동원리
   => 일반적으로 RAM과 같이 빠르게 액세스할 수 있는 하드웨어에 저장, 소프트웨어 구성요소와 함께 사용가능
   => 캐시는 기본 스토리지 계층(SSD, HDD)에 액세스하여 느린작업의 요구를 줄이고, 데이터 검색의 성능을 높임
   => 용량을 절충하는 캐시는 일반적으로 데이터의 하위집합으로 일시적으로 저장
   => 완전하고 영구적인 데이터가 있는 데이터베이스와 대조적
   
   
  
2. 장점
   => 애플리케이션 성능이 높음. 데이터베이스 비용이 적음. 백엔드 부하가 적음. 
   예측가능한 성능. 데이터베이스 핫스팟 제거. 읽기 처리량이 많음

   
   
3. 예제
   => 클라이언트: HTTP-캐시헤더, 브라우저
   => 네트워크: DNS 서버, HTTP 캐시헤더, CDN, 리버스 프록시
   => 서버 및 데이터베이스:-데이터스토어(e.g. Redis), 로컬캐시(-메모리, 디스크)
         

좋은 웹페이지 즐겨찾기