Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions study/endb1228/8주차/네트워크.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# 네트워크

## RESTful이란 무엇이며, 이것에 대해서 아는대로 설명해보세요.

---

### REST이란?

REST (**RE**presentational **S**tate **T**ransfer)

www의 탄생 이후 서버-클라이언트의 사이에서 HTTP로 통신할 때,
균일한 인터페이스를 제공하도록 하기 위해 생겨난 아키텍처 스타일.

### REST의 특징

1. Client-Server architecture
- HTTP를 통해 클라이언트와 서버가 통신하는 형태를 띰.

2. Statelessness
- 서버는 클라이언트의 상태를 저장하지 않음으로써 서버 부하를 줄여 성능을 향상시킴.

3. Cacheability
- 클라이언트는 응답을 캐싱하여 성능을 향상시킬 수 있음.

4. Layered system
- 클라이언트와 서버는 계층적으로 분리되어 있음.
- 클라이언트와 서버는 서로 직접 연결되어 있는지, 중간자를 통해 연결되어 있는지 알지 못 함.
- 클라이언트와 서버 둘 중 하나가 업데이트 되더라도 나머지 하나도 업데이트될 필요는 없음.

5. Uniform interface
- 통일된 인터페이스를 제공함.
- 다음과 같은 네 가지 제약 조건이 있음.
1) URI를 통해 리소스를 식별함.
2) 클라이언트가 데이터를 가공하기에 충분하도록 리소스를 제공해야 함.
3) 요청/응답을 어떻게 처리해야할지 명확하게 명시해야 함.
4) HATEOAS: 서버가 응답을 내릴 때, 이후에 수행할 수 있는 동작에 대한 API 목록을 내려주어야 함.
즉, API의 책임을 전적으로 서버에 위임함.

6. Code on demand (optional)
- 필요한 경우, 서버는 클라이언트가 실행 가능한 코드를 내려줄 수 있음.
36 changes: 36 additions & 0 deletions study/endb1228/8주차/데이터베이스.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# 데이터베이스

## Redis에 대해서, 그리고 Redis와 Memcached의 차이에 대해서 설명해주세요.

---

### Redis란?

******Remote dictionary server**

오픈소스 인메모리 key-value DB로, 가장 유명한 NoSQL DB중 하나이다.

인메모리 DB의 빠른 속도로 세션이나 자주 접근하는 데이터의 캐싱에 사용한다.

### Redis와 Memcached의 차이

Redis와 Memcached는 모두 오픈소스 인메모리 DB로 동일하지만, 다음과 같은 몇 가지 차이점이 있다.

1. 스레드
- Redis는 싱글스레드인 반면, Memcached는 멀티스레드를 지원한다.

2. 백업 및 복구
- Memcached는 서드파티 툴을 이용해 백업/복구를 수행하나, Redis는 AOF와 같은 방식으로 해당 기능들을 제공한다.

3. 복제
- Redis는 DB 복제 기능 역시 기본적으로 제공한다.

4. 자료구조
- Redis는 List, set, hash 등의 자료구조도 지원한다.
- Memcached는 각 value는 1MB의 크기 제한이 있으나, Redis는 최대 512MB까지 가능하다.

5. 트랜잭션
- Redis는 트랜잭션을 지원한다.

6. 메시징
- Redis는 pub/sub 메시징을 지원한다.****
24 changes: 24 additions & 0 deletions study/endb1228/8주차/운영체제.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# 운영체제

## 세마포어와 뮤텍스의 차이에 대해 설명해보세요.

---

### 뮤텍스란?

**Mut**ual **Ex**clusion

프로세스가 리소스에 접근할 때, 해당 리소스에 락을 걸어 다른 프로세스가 접근하지 못 하도록 하는 방법.
락을 건 프로세스가 락을 해제하기 전까지는 다른 프로세스가 접근할 수도, 락을 해제할 수도 없다.

### 세마포어란?

**Semaphore**

리소스에 카운터를 설정하고 카운터 수만큼의 프로세스만 접근할 수 있도록 하는 방법.
세마포어는 해당 리소스에 대해`wait()`, `signal()` 함수로 접근을 제어한다.

어떤 프로세스에서 `wait()`함수를 실행하면 다른 프로세스에서 `signal()`함수가 실행될 때까지 대기한다.
이는 락을 설정/해제하는 주체가 하나의 프로세스인 것과 차이가 있다.

카운터가 1인 바이너리 세마포어는 뮤텍스와 유사한 역할을 할 수 있다.
59 changes: 59 additions & 0 deletions study/endb1228/8주차/컴퓨터 구조.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# 컴퓨터 구조

## 컴퓨터의 구성 요소는?

---

### 컴퓨터의 구성 요소

1. 전원 공급 장치

2. 메인보드
- CPU, 메모리 등을 연결하는 인터페이스를 제공.
- 전원 공급 장치로부터 전력을 공급받아 다른 장치에 전달.
- BIOS가 저장되는 공간.

3. 중앙 처리 장치 (CPU)
- 기계어로 된 명령어를 실행/처리하는 핵심적인 제어 장치.
- 크게 다음과 같이 3가지로 구성된다.
1. 제어 장치: 명령어를 해석하고 처리 순서를 결정한다.
2. 산술 논리 장치: 산술/논리 연산을 수행한다.
3. 레지스터: 데이터를 저장하는 공간이다. 메모리 계층에서 최상단에 위치해 있다.

4. 입출력 장치

5. 주기억 장치
- RAM (Random Access Memory)
- CPU가 작업할 수 있도록 하는 장치.
- 휘발성.
- random access는 어떤 임의의 주소에 접근하더라도 거의 동일한 시간에 접근이 가능하다는 의미임.
- ROM (Read Only Memory)
- 저장된 데이터를 읽는 것만 가능한 장치.
- 비휘발성.
- ROM 라이터를 통해 데이터 지우고 새로 저장할 수 있음.

6. 보조 기억 장치
- SSD, HDD

### 레지스터의 종류
- 데이터 레지스터
- 부동소수점 레지스터
- 상수 레지스터
- 주소 레지스터
- 범용 레지스터
- 특수 레지스터
...

### CMOS? BIOS? UEFI?

CMOS는 메인보드에 장착되어 메인보드에 연결된 장치들에 대한 정보 등을 저장하는 공간이다.
부팅에 대한 설정이나 오버클럭, BIOS/UEFI에서 설정한 값들을 저장한다.
휘발성 메모리이나, 자체 배터리를 내장하고 있어 배터리가 닳기 전까지는 데이터를 잃지 않는다.

BIOS는 BIOS ROM이라는 곳에 저장되어 메인보드에 장착된다.
컴퓨터의 펌웨어로 볼 수 있다.

현대의 컴퓨터는 대부분 BIOS가 아닌 UEFI를 사용하지만, 관습적으로 BIOS라는 용어를 사용한다.

MBR, GPT, ...

71 changes: 71 additions & 0 deletions study/endb1228/9주차/네트워크.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# 네트워크

## CORS란 무엇이며 이것에 대해 설명해보세요.

---

### CORS란?

CORS (**C**ross-**O**rigin **R**esource **S**haring)

교차 출처 리소스 공유

### 출처(Origin)?

출처는 `[protocol]://[host]:[port]/XXXX`
에서 `[protocol]://[host]:[port]`부분까지를 가리킨다.

즉, **출처가 같다**는 것은 `[protocol]://[host]:[port]`까지가 동일하다는 것과 같은 의미이다.

### SOP란?

SOP (**S**ame **O**rigin **P**olicy)

동일 출처 정책은 javascript 코드 상에서 같은 출처에서만 접근할 수 있도록 브라우저에서 제공하는 기본 정책이다.

### SOP 예외 사항
- `<script>` 태그로 스크립트를 실행하는 경우
- 이미지를 렌더링 하는 경우
- `<link>` 태그로 CSS 파일을 불러오는 경우
- HTML 문서를 화면에 보여주는 경우

### 그래서 CORS가 뭔데??

브라우저가 SOP를 기본 정책으로 설정해 놓았지만, 실제로 서비스를 하다보면 다른 출처의 리소스를 가져와야 하는 경우가 많다.
당장 웹 어플리케이션을 서비스하는 상황에서도 사용자가 접속한 웹페이지와 백엔드 서버의 출처가 다르기 때문에 오류가 발생한다.
따라서 다른 출처에서도 리소스 요청을 허용하기 위해 백엔드 서버에서는 웹페이지의 출처를 CORS 설정에 등록할 수 있다.

### CORS 확인 과정

1. Simple Request
- 원하는 요청을 바로 보내는 방법
- `GET`, `HEAD`, `POST` 메소드만 사용할 수 있음
- 설정할 수 있는 header에 제한이 있음
- `Content-Type` 헤더로 설정할 수 있는 media type이 제한
- CORS는 브라우저 정책이기 때문에, 서버는 CORS 여부에 관계없이 일단 요청을 처리함

2. Preflight Request
- 원하는 요청을 보내기 전에 `OPTIONS` 메소드로 설정된 예비 요청을 먼저 보내는 방법
- 예비 요청을 먼저 보냄으로써 본 요청을 항상 처리하는 것을 방지함

3. Credentialed Request
- Preflight request에 추가로 인증 정보 및 이에 관련된 추가 설정이 필요

### CORS 설정 방법

세 방식 모두 서버에서 응답을 내려줄 때 아래의 header를 설정해준다.
`Access-Control-Allow-Origin: [출처] (혹은 와일드카드 "*")`

Simple request는 설정할 수 있는 method와 header가 정해져 있지만,
preflight/credentialed request는 예비 요청이 있기 떄문에 서버에서 허용하는 method와 header를 설정해줄 수 있다.
예시는 아래와 같다.

`Access-Control-Allow-Methods: POST, GET, OPTIONS`
`Access-Control-Allow-Headers: Content-Type, [다른 커스텀 헤더]`
`Access-Control-Max-Age: 86400`

Access-Control-Max-Age는 예비 요청에 대한 응답이 브라우저 캐시에 남아있는 시간을 의미하므로, 해당 시간 내에 본 요청을 보내야 한다.

Credentialed request는 인증정보가 존재하는 출처로부터의 요청을 의미하므로,
`Access-Control-Allow-Origin`에 와일드카드를 사용할 수 없다.
또한 `Access-Control-Allow-Credentials: true`로 설정해 주어야 한다.
23 changes: 23 additions & 0 deletions study/endb1228/9주차/데이터베이스.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# 데이터베이스

## Elasticsearch에 대해서 설명해주세요.

---

### Elasticsearch란?

검색 엔진의 시초격인 루씬(Lucene)을 기반으로 하여 등장한 검색 엔진.
inverted index 구조를 사용한다.

### Inverted index란?

Inverted index, 역색인 구조는 document에 포함된 단어나 숫자를 이용하여 매핑된 구조를 의미한다.
데이터가 추가될 때에는 다른 index 구조에 비해 처리 비용이 많이 들지만, 텍스트 검색 시 빠른 속도를 보장하기 위해 사용한다.

### [ Elasticsearch keyword ] vs [ RDBMS LIKE ]

Elasticsearch의 키워드 검색과 RDBMS의 LIKE문을 이용한 검색 모두 입력한 표현식과 일치하는 데이터를 찾아준다.

그러나 표현식에 와일드카드가 들어갈 경우, RDBMS는 인덱스를 사용할 수 없어 결국 전체탐색을 해야 한다.

반면에 Elasticsearch는 와일드카드를 사용하더라도, 해당 표현식에 맞는 인덱스를 이용하여 검색이 가능하다.
35 changes: 35 additions & 0 deletions study/endb1228/9주차/운영체제.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# 운영체제

## 가상 메모리에 대해 설명해보세요.

---

### 가상 메모리란?

Virtual Memory

기존의 프로세스가 RAM만을 점유했다면, 보조기억장치의 일부분(Swap 영역)을 추가로 가상 메모리로 할당함으로써 프로세스를의 일부분을 RAM이 아닌 공간에 할당하는 방법.
가상 메모리를 활용하기 위해서는 MMU라는 장치가 필요함.


### MMU란?

MMU (**M**emory **M**anagement **U**nit)

가상 메모리 주소를 물리적 메모리 주소로 변환해줌.
프로세스마다 페이지 테이블을 생성하여 사용.
페이지 테이블의 수가 적다면 레지스터에 저장할 수 있지만, 대부분의 경우 RAM에 저장.

### TLB란?

TLB (**T**ranslation **L**ookaside **B**uffer)

최근에 사용한 페이지 테이블의 일부에 대한 캐시.
CPU가 물리적 메모리 주소를 요청할 때, 먼저 TLB에 캐싱되어 있는지를 확인한 후 없다면 MMU가 페이지 테이블을 통해 변환 작업을 수행햐여 주소를 반환한다.

### 가상 메모리의 특징

주기억장치인 RAM은 당연하게도 보조기억장치보다 빠르기 때문에, 기본적으로는 최대한 RAM을 위주로 사용한다.
Swap 영역은 RAM 용량이 부족할 때 시스템이 오작동하지 않도록 하기 위해 할당하는 여유 공간이다.
ready 상태에서 오랫동안 스케줄링의 대상이 되지 못하는 프로세스 혹은 오랫동안 block 상태로 남아 있는 프로세스는
suspended ready/block 상태가 되어 swap-out되고, RAM의 공간을 확보함으로써 다른 프로세스의 가용성을 늘린다.
23 changes: 23 additions & 0 deletions study/endb1228/9주차/컴퓨터 구조.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# 컴퓨터 구조

## HDD와 SSD의 차이는?

---

### HDD? SSD?

HDD (**H**ard **D**isk **D**rive)
SSD (**S**olid-**S**tate **D**rive)

HDD와 SSD는 모두 비휘발성 메모리로서 보조 기억 장치로 활용한다.

### HDD의 특징

HDD는 물리적으로 회전하는 플래터를 사용하며, 이 때문에 소음이 많이 발생한다.
플래터에 자기 패턴으로 기록하므로 플래터에 스크래치가 나는 경우 데이터가 소실되거나 오류가 발생할 수 있다.
SSD보다 속도가 느리나, 용량 대비 가격이 싸기 때문에 단순 데이터 저장, 아카이빙 용도로 많이 사용한다. (e.g. NAS)

### SSD의 특징

SSD는 전자식으로 작동하기 떄문에 HDD에 비해 소음이 적고 속도 및 반응이 빠르다.
전자적 충격 등으로 인한 데이터 유실에 취약한 편이다.