현대의 웹 애플리케이션은 동시에 다양한 일을 처리해야 하는 경우가 발생
프론트엔드 영역에서 UI를 갱신하면서 복잡한 계산을 해야 할 수도 있고, 이에 따라 브라우저에 표시되는 과정이 느려지는 경우도 생길 수 있다.
백엔드 영역에서는 다양한 요청이 하나의 데이터베이스, 혹은 프로세스에 접근하면서 동시성 문제가 발생할 수도 있다.
이러한 문제를 풀기 위한 원리는 결국 컴퓨터 공학 이론에 기초
전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준이며, 유니코드 협회(Unicode Consortium)가 제정. 또한 이 표준에는 ISO 10646 문자 집합, 문자 인코딩, 문자 정보 데이터베이스, 문자들을 다루기 위한 알고리즘 등을 포함
목적 : 현존하는 문자 인코딩 방법들을 모두 유니코드로 교체
어떤 문자나 기호를 컴퓨터가 이용할 수 있는 신호로 만드는 것
신호를 입력하는 인코딩과 문자를 해독하는 디코딩을 하기 위해서는 미리 정해진 기준을 바탕으로 입력과 해독이 처리되어야 하는데, 이를 문자열 세트 또는 문자셋(charset)이라고 합니다. 이 문자 셋의 국제 표준이 유니코드입니다.
ASCII 문자
영문 알파벳을 사용하는 대표적인 문자 인코딩으로 7비트로 표현 가능합니다. 52개의 영문 알파벳 대소문자와, 10개의 숫자, 32개의 특수 문자, 그리고 하나의 공백 문자를 포함(유니코드는 ASCII를 확장한 형태)
UTF-8
가변 길이 인코딩
유니코드 한 문자를 나타내기 위해 1byte(=8bit) 에서 4byte까지 사용
UTF-16
코드 그대로 바이트로 표현 가능, 바이트 순서가 다양함
비트맵(래스터) | 벡터 | |
---|---|---|
기반 기술 | 픽셀 기반 | 수학적으로 계산된 Shape 기반 |
특징 | 사진과 같이 색상의 조합이 다양한 이미지에 적합 | 로고, 일러스트와 같이 제품에 적용되는 이미지에 적합 |
확대 | 확대에 적합하지 않음, 보다 큰 사이즈의 이미지가 필요할 때 사용하려는 크기 이상으로 생성하거나 스캔해야 함 | 품질 저하없이 모든 크기로 확대 가능하며, 해상도의 영향을 받지 않음 |
크기(dimension)에 따른 파일 용량(file size) | 큰 크기의 이미지는, 큰 파일 사이즈를 가짐 | 큰 크기의 벡터 그래픽은 작은 파일 사이즈를 유지할 수 있음 |
상호 변환 | 이미지의 복잡도에 따라 벡터로 변환하는 것에 오랜 시간이 걸림 | 쉽게 래스터 이미지로 변환 가능 |
대표적인 파일 포맷 | jpg, gif, png, bmp, psd | svg, ai |
웹에서의 사용성 | jpg, gif, png 등이 널리 쓰임 | svg 포맷은 현대의 브라우저에서 대부분 지원 |
하드웨어에게 일을 시키는 주체
시스템 자원 관리
응용 프로그램 관리
응용 프로그램: 운영체제를 통해 컴퓨터에게 일을 시키는 것
시스템 콜(System call)
응용 프로그램이 시스템 자원을 사용할 수 있도록 운영체제 차원에서 다양한 함수를 제공하는 것
가이드서적
한글문서
사용자가 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 메모리를 할당 받아 애플리케이션의 코드를 실행
하나의 애플리케이션은 다중 프로세스를 만들기도 함:
ex) Chrome 브라우저를 두 개 실행하면, 두 개의 프로세스가 생성
"한 가닥의 실"
-> 한 가지 작업을 실행하기 위해 순차적으로 실행한 코드를 실처럼 이어놓았다
하나의 스레드는 하나의 코드 실행 흐름이기 때문에 한 프로세스 내에 스레드가 두 개라면 두 개의 코드 실행 흐름이 생긴다는 의미
멀티 태스킹 : 두 가지 이상의 작업을 동시에 처리하는 것
운영체제는 멀티 태스킹을 할 수 있도록 CPU및 메모리 자원을 프로세스마다 적절히 할당해주고, 병렬로 실행시킴
멀티 프로세스 -> 애플리케이션 단위의 멀티 태스킹
멀티 스레드 -> 애플리케이션 내부에서의 멀티 태스킹
프로세스를 이용하여 동시에 처리하던 일을 스레드로 구현할 경우
-> 메모리 공간과 시스템 자원 소모가 줄어들게 됨
스레드 간의 통신이 필요한 경우- 전역 변수의 공간 또는 동적으로 할당된 공간인 Heap 영역을 이용
-> 프로세스 간 통신 방법(IPC)에 비해 스레드 간의 통신 방법이 훨씬 간단
서로 다른 스레드가 데이터와 힙 영역을 공유하기 때문에 어떤 스레드가 다른 스레드에서 사용중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정할 수 있다
-> 동기화 작업 필요 __작업 처리 순서를 제어하고 공유 자원에 대한 접근을 제어
(시분할)
동시에 돌릴 수 있는 스레드 수는 컴퓨터에 있는 코어 갯수로 제한되므로, 운영체제(또는 가상 머신)은 각 스레드에 시간을 나눠주면서 여러 스레드를 돌아가면서 실행시켜야 합니다
병행성(Concurrency)
여러 개의 스레드가 시분할 방식으로 동시에 수행되는것 처럼 착각을 불러일으키는 것이
병렬성(Parallelism)
멀티코어 환경에서와 같이 여러 개의 스레드가 실제로 동시에 수행되는 것
다른 태스크(프로세스, 스레드)가 시작할 수 있도록 한 태스크(프로세스, 스레드)를 멈추는 것