코드스테이츠/코드스테이츠 @ 개발 복습

[코드 스테이츠] 104일차, "15주차 복습(1) - 컴퓨터 공학 기초"

Je-chan 2021. 10. 30. 21:51


[ 오늘의 TODO ]

  1. 코드 스테이츠) 월~화 내용 복습
    // 컴퓨터 공학 기초
    // 운영 체제
    // 가비지 컬렉션
    // 캐시
  2. 생활) 물 1L 이상 마시기
  3. 생활) 1시간 이상 걷기 
    // 걸을 시간은 여전히 없는듯 하다

 


[ 오늘의 복습 ]

1. 컴퓨터 공학 기초

1-1) 문자열

   문자열 하나가 몇 바이트인가에 대한 답변은 이 자료형이 차지하고 있는 바이트를 이해해야지만이 답변할 수 있다. 

  유니코드

  유니코드는 유니코드 협회가 제정한 전 세계 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준이다. 이 표준에 문자를 다루기 위한 여러 알고리즘이 내포되어 있다. 유니코드 탄생 이전, 같은 한글이라도 표현하는 방법은 여러가지가 있다. 다른 인코딩 형식으로 저장돼 있다면 파일을 제대로 불러올 수 없었다. 유니코드의 기본적인 목적은 인코딩 방법을 유니코드라 하는 하나의 방법으로 통일하는 것이다. 

  ASCII 

  영문 알파벳을 사용하는 대표적인 문자 인코딩 방식이다. 7비트로 모든 영어 알파벳을 표현한다. 52개의 영문 알파벳 대소문자, 10개의 숫자, 32개의 특수 문자, 하나의 공백 문자를 표현한다. 유니코드는 ASCII 를 확장한 형태다

 

  UTF-8, UTF-16

  UTF-8 과 16은 인코딩 방식의 차이다. UTF 는 Universion charater set + Transformaition Format - 의 약자로, 이 다음에 나오는 숫자가 비트를 뜻한다.

 

  UTF-8은 한 문자를 나타내기 위해 1 바이트에서 4 바이트까지 사용한다. 네트워크를 통해 전송되는 텍스트는 주로 UTF-8 로 인코딩된다. 사용된 문자에 따라 더 작은 크기의 문자열을 표현할 수 있기 때문이다. 또, 바이트 순서가 고정되어 있다. UTF-8은 16과 비교했을 때 바이트 순서를 따지지 않고, 순서가 정해져 있다. UTF-8 에서 한글은 3바이트를 차지한다.

 

  UTF-16의 경우 코드 그대로를 바이트로 표현이 가능해서 바이트 순서가 다양하다. 한글은 2 바이트를 차지한다.  

 

 

2) 그래픽

  컴퓨터의 그래픽은 크게 비트맵과 벡터로 나뉜다.

  비트맵(래스터) 벡터
기반 기술 픽셀 Shape(수학적으로 계산됨)
특징 색상의 조합이 다양한 이미지에 적합 로고, 일러스트 등 제품에 적용되는 이미지에 적합
확대 확대하면 흔히 말하는 깨짐 현상이 생긴다. 확대가 가능하고 해상도 영향을 받지 않는다
크기에 따른 파일 용량 크기와 용량은 비례한다 크기가 커도 작은 파일 사이즈와 동일하다
상호 변환 이미지 복잡도에 따라 벡터로 변환하는데 시간이 오래 걸린다 쉽게 래스터 이미지로 변환 가능하다
파일 포맷 예시 jpg, gif, png, bmp, psd svg, ai
웹에서 사용될 때 jpg, gif, png svg

 

2. 운영체제

코드스테이츠 제공

  하드웨어는 그 자체로 할 수 있는 일은 없다. 하드웨어의 설계를 바탕으로 하드웨어에게 일을 시키는 운영체제가 있어야지만이 비로소 일을 진행한다. 운영체제가 없다면 응용 프로그램은 실행될 수 없다. 응용 프로그램이란 컴퓨터를 이용해서 다양한 작업을 하는 것이 목적이다. 운영체제는 응용 프로그램이 하드웨어에게 일을 시킬 수 있도록 도와준다.

 

  만약, 모든 응용프로그램이 시스템의 자원을 마음대로 사용한다면 해커의 공격에 그대로 노출된다. 해커가 악의적 프로그램을 심어서 모든 정보에 접근하거나 스마트폰 기기에 침투해 사생활을 침해할 수 있다. 따라서 응용프로그램이 실행되고, 시스템 자원을 사용할 수 있는 권한과 사용자 관리가 필요한데 이를 운영체제에서 맡아서 한다.

 

  응용 프로그램이 운영 체제를 통해서 컴퓨터에게 일을 시키려면 컴퓨터를 조작할 수 있는 권한을 운영체제로부터 부여 받아야 한다. 권한을 부여 받은 후에는 운영체제가 제공하는 기능을 이용할 수 있다. 응용 프로그램이 운영 체제와 연결되기 위해서는 인터페이스(API)를 제공해야 한다. 응용 프로그램이 시스템 자원을 사용할 수 있도록 운영체제 차원에서 다양한 함수를 제공하는 것을 시스템 콜이라고 부른다.

 

  다음에 따로 카테고리를 만들어서 블로깅하면 좋을 것 것 같은 웹 사이트들은 아래에 올려놨다. 

 

https://parksb.github.io/article/5.html

 

🦕 공룡책으로 정리하는 운영체제 Ch.1: Overview

Abraham Silberschatz의 Operating System Concepts는 운영체제의 바이블로 불린다. 이번에 운영체제 수업을 들으면서 Operating System Concepts 9th Edition의 내용을 정리해보기로 했다.Ch.1은 책 전체 내용이 담겨있

parksb.github.io

https://codex.cs.yale.edu/avi/os-book/OS10/index.html

 

Operating System Concepts - 10th edition

 

codex.cs.yale.edu

 

2-1) Proces (프로세스)

  운영체제에서 실행 중인 하나의 애플리케이션을 프로세스라고 부른다. 맥OS 의 경우 활성 상태창, Windows 에서는 작업 관리자(ctrl + alt + delete) 를 살펴 보면 모든 프로세스를 확인할 수 있다. 만약 크롬 브라우저를 두 개 실행한다면 두 개의 프로세스가 생성되는데 하나의 애플리케이션이 여러 프로세스를 생성할 수 있다.

 

2-2) Thread (스레드)

  스레드는 한 가닥의 실이라는 의미다. 한 가지 작업(프로세스)을 실행하기 위해 필요한 코드들이 하나의 실처럼 나열돼 있다고 해서 붙은 이름이다. 즉, 스레드는 하나의 일련 과정, 흐름이다. 스레드는 프로세스 내에 스레드가 두 개라면 코드가 실행되는 흐름이 두 가지로 나뉜다는 것을 의미한다. 각 스레드마다 Call Stack(실행 중인 서브 루틴을 작성하는 자료 구조) 이 존재한다. 그래서 스레드는 다른 스레드와 독립적으로 동작한다. 

 

2-3) Multi Thread( 멀티 스레드)

  운영체제는 멀티 태스킹을 하기위해 프로세스마다 CPU, 메모리 자원을 적절하게 할당하고 병렬로 실행한다. 그래서 우리는 유튜브로 음악을 틀고 VSC 로 코딩을 할 수 있다. 멀티 태스킹은 애플리케이션 단위에서 여러 일을 한 번에 처리할 때 사용되는 언어다. 비슷한 언어로 멀티 스레드가 있다. 멀티 스레드는 애플리케이션 내부에서의 멀티 태스킹이다. 하나의 프로세스 내에서 멀티태스킹하는 것을 의미한다. 멀티 스레드는 대용량 데이터 처리 시간을 줄이기 위해 데이터를 분할하여 병렬로 처리할 때 사용할 수 있고 UI 를 가지고 있는 애플리케이션에서 네트워크 통신을 하기 위해 사용할 수 있다. 

 

  장점

  프로세스를 이용해 동시 처리하는 일을 스레드로 구현하면 메모리 공간과 시스템 자원의 소모가 줄어든다. 독립적인 스레드 사이에 통신이 필요한 경우 별도의 자원을 이용하지 않고 동적으로 할당된 공간인 Heap 영역을 사용한다. 이렇게 되면 프로세스 간의 통신 보다 스레드 간의 통신 방법이 훨씬 간단해진다. 시스템 처리량은 향상되고 자원 소모는 줄어들어 프로그램 응답 시간이 더욱 빨라진다. 이런 장점으로 여러 프로세스로 구현할 일을 하나의 프로세스 안에 여러 스레드로 나눠서 수행하는 경우가 있다.

  단점 

  멀티 프로세스 기반으로 프로그래밍 할 때 프로세스 간에 공유 자원이 없다. 즉, 공유하는 자원에 대한 고민이 필요하다. 서로 다른 스레드가 같은 데이터에 접근하고, Heap 영역을 공유하기에 스레드가 이미 사용중인 변수나 자료구조에 접근해서 엉뚱한 값을 불러올 수 있다.

 

  그렇기에 멀티 스레딩 환경에서는 동기화 작업이 필요하다. 동기화로 작업 처리 순서를 제어하고, 공유 자원에 대한 접근을 제어해야 한다. (데드락, 뮤텍스, 세마포어 등) 

 

 

https://hw0603.tistory.com/134

 

  동시에 돌릴 스레드 수는 컴퓨터에 있는 코어 갯수로 제한된다. 운영체제는 각 스레드를 시간에 따라 분할해 여러 스레드가 일정 시간마다 돌아가며 실행되도록 하는데 이런 방식을 시분할이라고 한다. 동시성이란 여러 스레드가 시분할 방식으로 동시에 수행된는 것처럼 착각을 불러 일으키는 것이고 병렬성은 멀티 코어 환경에서 여러 스레드가 실제로 동시에 순행되는 것을 의미한다. 

 

 

 

3. 가비지 컬렉션과 캐시

3-1) 가비지 컬렉션

  가비지 컬렉션은 프로그램에서 더 이상 사요하지 않는 메모리를 자동으로 정리하는 것을 의미한다. 이 기능을 가진 언어는 따로 존재하는데 자바, C#, 자바 스크립트 등이다.

 

  가비지 컬렉션의 방법으로는 대표적으로 두 가지가 있다.

 

  트레이싱

  한 객체에 flag 를 세우고 가비지 컬렉션 사이클마다 flag 에 표시 후 삭제하는 mark and sweep 방식이다. 객체에 in-use flag 를 두고 사이클마다 메모리 관리자가 모든 객체를 추적한다. 관리자는 사용중인지 아닌지를 Marking 한다. 이후 표시되지 않은 객채는 Swwep 하는 방식으로 메모리를 해제한다

  레퍼런스 카운팅

  한 객체를 참조하는 변수의 수를 추적하는 방법이다. 객체를 참조하는 변수는 처음에는 특정 메모리에 대한 레퍼런스가 하나뿐이지만, 변수의 레퍼런스가 복사될 때마다 레퍼런스 카운트가 늘어난다. 객체를 참조하는 변수의 값이 바뀌거나 변수 스코프를 벗어나면 카운트는 줄어든다. 그렇게 카운트가 0이 되면 그 객체와 관련된 메모리는 비울 수 있다는 뜻이 된다. 

 

   자바 스크립트를 사용하는 사람으로서 크롬 브라우저, Node.js 의 V8 엔진은 어떻게 가비지 컬렉팅을 하는 지 다음 밑의 문서를 참조하자. 

 

https://developer.chrome.com/docs/devtools/memory-problems/memory-101/

 

Memory terminology - Chrome Developers

This section describes common terms used in memory analysis, and is applicable to a variety of memory profiling tools for different languages.

developer.chrome.com

 

3-2) 캐시

  캐시란 많은 시간이나 연산이 필요한 작업의 결과를 저장해두는 것을 의미한다. 컴퓨팅에서 캐시는 일시적인 데이터를 저장하기 위한 목적으로 존재하는 데이터 저장 공간이다. 첫 작업 이후 이 데이터에 대한 요청이 잇다면 데이터 기본 저장 공간에 접근할 때보다 더 빠르게 요청할 수 있다. 캐싱을 사용하면 이전에 검색하거나 계산한 데이터를 효율적으로 재사용할 수 있다.

 

  캐시는 일반적으로 RAM 과 같이 빠르게 액세스할 수 있는 하드웨어에 저장된다. 사용될 때는 소프트웨어 구성요소와 함께할 수 있다. 캐시는 기본 스토리지 계층, SSD 나 HDD 에 액세스 해서 데이터를 가져오는 더 느린 작업의 요구를 줄이고 데이터 검색의 성능을 높인다. 속도를 위해 용량을 절충하는 캐시는 일반적으로 데이터 하위 집합을 일시적으로 저장하는데 일시적이라는 점에서 영속적인 데이터베이스와 대조를 이룬다.

 

  캐시의 장점은 다음과 같다

  1. 애플리케이션 성능이 개선된다
  2. 데이터베이스 비용이 절감되고 데이터베이스 핫스팟을 제거한다.
  3. 백엔드 부하가 감소한다
  4. 읽기 처리량이 증가한다

  클라이언트에서는 HTTP 캐시 헤더, 브라우저 등에서 사용된다. 네트워크에서는 HTTP 캐시 헤더, DNS 서버, CDN, 리버스 프록시 등에서 사용된다. 서버 및 데이터베이스에서는 키-값 데이터 스토어(Redis 등), 로컬 캐시(in-meory, 디스크 등)에 사용된다.

 

https://aws.amazon.com/ko/caching/

 

캐싱이란 무엇이고 어떻게 작동합니까 | AWS

다양한 캐싱 사용 사례 알아보기 데이터베이스 캐싱 속도와 처리량 면에서, 데이터베이스가 제공하는 성능은 애플리케이션 전체 성능에 무엇보다 크게 영향을 미칠 수 있습니다. 또한 오늘날

aws.amazon.com