프로그램과 프로세스, 스레드에 대한 설명
- 하나의 프로그램이 여러 프로세스를 가질 수 있다.
- 프로세스는 싱글 스레드 또는 멀티 스레드로 작동할 수 있다.
- 프로세스는 프로그램이 메모리에 적재되어 운영체제로부터 필요한 공간, 파일, 메모리를 할당받는다.
- node.js의 Event loop는 싱글 스레드 작동이지만, Worker pool은 멀티 스레드로 작동된다.
스레드에 대한 설명
- 프로세스 내에서 실행되는 흐름의 단위를 뜻한다.
- 스레드는 다른 스레드와 독립적으로 작동한다.
- 싱글 코어에서 동시에 돌릴 수 있는 스레드 수는 한 개 뿐이다.
- 프로세스는 각각 독립된 메모리 영역을 할당 받습니다.
메모리에 대한 설명
- 메모리 주소는 16진법으로 표현한다.
- 32비트 운영체제에서는 최대 4GB만 사용할 수 있다.
- 메모리는 하드디스크보다 읽기/쓰기 속도가 빠르다.
- 32비트, 64비트 운영체제는 처리할 수 있는 데이터의 단위가 32비트, 64비트로 차이나기 때문에 사용할 수 있는 최대 메모리의 용량도 다르고, 메모리 주소의 값도 다릅니다.
가비지 컬렉션에 대한 설명
- 가비지 컬렉션은 프로그램에서 더 이상 사용하지 않는 메모리를 찾아서 회수한다.
- 가비지 컬렉터가 내장되어 있는 프로그래밍 언어로는 C#, Java, Javascript 등이 있습니다.
- 가비지 컬렉션의 방법으로는 트레이싱, 레퍼런스 카운팅 등의 방법이 있습니다.
- 가비지 컬렉션을 통해 개발자가 직접 메모리를 다룰 때 생길 수 있는 메모리 누수를 방지할 수 있습니다.
이진 파일과 텍스트 파일
- 텍스트 파일이 아닌 파일은 전부 이진 파일로 취급된다.
- 메모장으로 특정 파일을 열었을 때 깨져 보이는 경우는, 인코딩 문제거나 해당 파일이 이진 파일이기 때문이다.
- 텍스트 파일은 운영체제별로 개행 문자 처리가 다르다.
UTF-8 인코딩(바이트)
한글은 주로 3바이트 영역에 집중되어 있기 때문에 거의 모든 문자에 균일하게 2바이트만 사용하는 UTF-16에 비해 오히려 크기가 커진다. 그럼에도 불구하고 세계적으로는 UTF-8 인코딩이 가장 널리 쓰이기 때문에 유니코드를 지원하는 대부분의 프로그램들은 일단 UTF-8을 디폴트 상태로 지정해 주는 경우가 많다.
- UTF-8, UTF-16 모두 유니코드의 인코딩 형식이다.
- UTF-8은 바이트 순서를 따지지 않고 순서가 정해져 있습니다.
- 네트워크를 통해 전송되는 텍스트는 주로 UTF-8 입니다.
ASCII에 대한 설명
-
문자열 셋 중 출력 가능한 문자들을 52개의 영문 알파벳 대소문자와, 10개의 숫자, 32개의 특수문자, 그리고 하나의 공백 문자로 이루어져 있다.
-
유니코드에는 ASCII가 포함되어 있다.
-
ASCII에 포함된 문자열 셋은 7비트로 표현할 수 있다.
비트맵과 벡터 이미지
- 벡터 이미지는 크기에 상관없이 작은 파일 사이즈를 유지할 수 있다.
- 벡터를 비트맵으로 변환하는 것은 비트맵에서 벡터로 변환하는 것보다 쉽다. (컴퓨터 자원을 덜 사용한다.)
- 사진과 같은 이미지는 비트맵으로 표현하는 것이 유리하다.
- svg는 벡터를 사용하는 것이 좋고, jpg, png는 비트맵을 사용하는 것이 좋다.
캐시의 장점
- 데이터베이스의 부하를 줄일 수 있다.
- 인 메모리 캐시를 사용하면 데이터를 읽는 속도를 높일 수 있다.
- 디스크를 사용하는 데이터베이스에 비해, 주로 인메모리를 사용하는 캐시 때문에 더 빠른 읽기 작업을 할 수 있다.
웹 서비스에서 캐시 적용 예
- 클라이언트: HTTP 캐시 헤더, 브라우저
- 네트워크: DNS 서버, HTTP 캐시 헤더, CDN, 리버스 프록시
- 서버 및 데이터베이스: 키-값 데이터 스토어, 로컬 캐시