
처음봐서 헷갈리는 컴퓨터 공학 용어들 정리하자!
문자열
인코딩: 어떤 문자나 기호를 컴퓨터가 이용할 수 있는 신호로 만드는 것
- 이 신호를 입력하는 인코딩과 문자를 해독하는 디코딩을 하기 위해서는 미리 정해진 기준을 바탕으로 입력과 해독이 처리되어야 함
- 인코딩과 디코딩의 기준을 문자열 세트 또는 문자셋이라고 하고 문자셋의 국제표준이 유니코드
유니코드: 유니코드 협회가 제정하는 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준
ASCII 문자
: 영문 알파벳을 사용하는 대표적인 문자 인코딩으로 7 비트로 모든 영어 알파벳을 표현할 수 있음
- 52개의 영문 알파벳 대소문자와, 10개의 숫자, 32개의 특수 문자, 그리고 하나의 공백 문자를 포함함
: 유니코드 한 문자를 나타내기 위해 1byte(=8 bits)에서 4 bytes까지 사용함 (한글은 3바이트)
- 사용된 문자에 따라 더 작은 크기의 문자열을 표현할 수 있기 때문에 네트워크를 통해 전송되는 텍스트는 주로 UTF-8로 인코딩됨
- 바이트 순서가 고정됨
UTF-16
:유니코드 코드 대부분을 16bits 로 표현함
- 대부분에 속하지 않는 기타문자는 32bit(4 bytes)로 표현하므로 UTF-16도 가변 길이라고 할 수 있으나, 대부분은 2bytes로 표현함
- 바이트 순서가 정해져 있음
그래픽

1.벡터 (svg, ai)
- shape 기반
- 로고, 일러스트와 같이 제품에 적용되는 이미지에 적합
- 품질 저하 없이 모든 크기로 확대 가능, 해상도의 영향 X
- 큰 크기의 벡터 그래픽은 작은 파일 사이즈 유지 가능
- 현대의 브라우저에서 대부분 지원
2. 비트맵 (jpg, gif, png, bmp, psd)
- pixel 기반
- 색상의 조합이 다양한 이미지에 적합
- 확대에 적합하지 않음
- 큰 크기의 이미지 = 큰 파일 사이즈
- jpg, gif, png 등이 널리 쓰임
운영체제
1. 운영체제
1️⃣ 시스템 자원 관리
- 응용 프로그램은 컴퓨터를 이용해 다양한 작업을 하는 것이 목적이고, 운영체제는 응용 프로그램이 하드웨어에게 일을 시킬 수 있도록 도와줌
- 하드웨어를 구성하는 일을 하는 CPU, 자료를 저장하는 RAM, 디스크 등의 시스템 자원을 관리하는 주체
2️⃣ 응용 프로그램 관리
- 응용 프로그램이 실행되고, 시스템 자원을 사용할 수 있도록 권한과 사용자를 관리함
2. 응용 프로그램
: 운영 체제를 통해 컴퓨터에게 일을 시키는 것
- 컴퓨터에게 일을 시키려면, 컴퓨터를 조작할 수 있는 권한을 운영체제로부터 부여받아야 함
- 권한을 부여받고 난 후에는, 운영체제가 제공하는 기능을 이용할 수 있음
- 응용 프로그램이 운영체제와 소통하기 위해서는, 운영체제가 응용 프로그램을 위해 인터페이스를 제공해야함
- 시스템 콜(System call): 응용 프로그램이 시스템 자원을 사용할 수 있도록, 운영체제 차원에서 다양한 함수를 제공하는 것
용어 정리
1. 프로세스 (process)
: 사용자가 애플리케이션을 실행하면, 운영체제로부터 실행에 필요한 메모리를 할당 받아 애플리케이션의 코드를 실행하고, 이 애플리케이션을 프로세스라 부름
2. 스레드 (thread)
: 프로세스 내에서 실행되는 흐름의 단위
- 각 스레드 마다 call stack이 존재
- 스레드는 다른 스레드와 독립적으로 동작
3. 멀티 스레드 (multi-Thread)
: 두 가지 이상의 작업을 동시에 처리하는 것
- 멀티 태스킹을 할 수 있도록, 프로세스마다 CPU 및 메모리 자원을 적절히 할당하고 병렬로 실행함
- 메모리 공간과 시스템 자원의 소모가 줄어듬
- 스레드 간의 통신이 필요한 경우에도 전역 변수의 공간 또는 동적으로 할당된 공간인 Heap 영역을 이용해서 훨씬 간단함
- 시스템의 처리량이 향상되고 자원 소모가 줄어들어 자연스럽게 프로그램의 응답 시간이 단축됨
<-> 프로세스 간 공유하는 자원이 없음
서로 다른 스레드가 같은 데이터에 접근하고, 힙 영역을 공유하기 때문에 서로 다른 스레드가 서로 사용중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정하는 일이 발생할 수 있음
=> 그래서 멀티스레딩 환경에서는 동기화를 통해 작업 처리 순서를 제어하고, 공유 자원에 대한 접근을 제어해야 함
4. 동시성 & 병렬성
- 동시성, 병행성(concurrency): 여러 개의 스레드가 시분할 방식으로 동시에 수행되는 것처럼 착각을 불러일으킴
- 병렬성(parallelism): 멀티 코어 환경에서 여러 개의 스레드가 실제로 동시에 수행됨
5. context switching
: 다른 task(프로세스, 스레드)가 시작할 수 있도록 이미 실행중인 task를 멈추는 것
6. 가비지 컬렉션
: 프로그램에서 더 이상 사용하지 않는 메모리를 자동으로 정리하는 것
-
트레이싱: 한 객체에 flag를 두고, 가비지 컬렉션 사이클마다 flag에 표시 후 삭제하는 mark and sweep방법
객체에 in-use flag를 두고, 사이클마다 메모리 관리자가 모든 객체를 추적해서 사용중인지 아닌지를 mark하고, 그 후 표시되지 않은 객체를 삭제(sweep)하는 단계를 통해 메모리를 해제함
-
레퍼런스 카운팅:한 객체를 참조하는 변수의 수를 추적하는 방법
7. 캐시
:많은 시간이나 연산이 필요한 작업의 결과를 저장해두는 것
- 캐시의 데이터는 일반적으로 RAM과 같이 빠르게 액세스할 수 있는 하드웨어에 저장되며, 소프트웨어 구성 요소와 함께 사용될 수도 있음
- 기본 스토리지 계층(SSD. HDD)에 액세스하여 데이터를 가져오는 더 느린 작업의 요구를 줄이고, 데이터 검색의 성능을 높임
- 장점: 애플리케이션 성능 개선, 데이터베이스 비용 절감, 백엔드 부하 감소, 예측 가능한 성능, 데이터베이스 핫스팟 제거, 읽기 처리량 증가