diff --git a/CICD/Docker.md b/CICD/Docker.md new file mode 100644 index 0000000..4933e4e --- /dev/null +++ b/CICD/Docker.md @@ -0,0 +1,82 @@ +# 도커 + +![Docker](./img/docker.png) + +## 도커란 무엇인가 + +![Docker Architecture](./img/dockerarchitecture.svg) + +- 컨테이너 기반의 오픈소스 가상화 플랫폼 +- 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공 -> 프로그램의 배포 및 관리 단순화 +- Local PC, AWS, Azure 등 어디서든 실행할 수 있다. +- Image : 컨테이너 실행에 필요한 파일과 설정값들을 포함하고 있는 것 +- Image를 갖고 있으면 실행하기 위한 모든 정보를 갖고 있는 것 -> 이것저것 설치하고 컴파일 할 필요가 없다. + +가상화? 가상화는 VM을 사용해봤다면 많이 들어봤을 얘기이다. + +그리고 컨테이너는 또 뭐지? 이에 대해서 가상 머신과 비교해보면서 알아보자. + +## Container VS VM + +### Container Architecture + +![Container](./img/container.svg) + +- 컨테이너는 격리된 공간에서 프로세스가 동작하는 기술 +- 그림처럼 Host 운영 체제의 커널 위에서 빌드 된다. + +### VM Architecture + +![VM](./img/vm.svg) + +- 컨테이너와 달리, 가상 머신은 자체 커널을 포함한 완전한 운영체제를 실행한다. + +### vs Docker + +이번엔 도커 컨테이너와 비교 해보자. + +![VM vs Docker](./img/vmdocker.png) + +- VM은 Hypervisor가 가상화를 하여, 가상 하드웨어 위에 Guest OS가 운영을 하는 방식 +- Container는 Docker-engine 위에 Application 실행을 위해 필요한 Binary만 올라간다. +- 커널 부분은 호스트의 커널 부분을 공유한다. -> 공간 절약, IO 처리가 굉장히 쉬워짐 + +### 그럼 두개가 뭐가 다른 거야? + +- 용량도 엄청 작고, 가상 머신과 비교도 안되게 빠르다. +- 서로 다른 배포에서 환경을 동일하게 만들 수 있다. +- 컨테이너는 리소스가 더 적다 -> 쉽고 빠르게 배포 가능하며, 밀도가 높아지고, 동일한 하드웨어 장치에서 더 많은 서비스를 실행할 수 있으며 비용이 절감된다. -> MSA에 적합 + +### 장점만 있나? + +- 컨테이너는 동일한 커널에서 실행되므로 VM보다 격리성은 떨어진다.(한 컨테이너가 뚫리면 같은 커널을 공유하므로 줄줄이 영향을 받을 것) + +- Host OS와 전혀 다른 OS를 Container로 올릴 수 없다. -> OS 선택에 제약이 있음(도커는 리눅스에서 실행되는 것이 기본이며, MacOS 개발자는 Linux Container용 이미지만 만들 수 있다. Windows Container용 이미지 못만듦) + +### 또 하나의 미친 기능 + +도커 이미지는 위에 설명했듯이 컨테이너 실행을 위한 모든 정보를 갖고 있으므로, 용량이 수백메가 정도 된다. 만약, 기존 이미지에 파일 하나 추가하는 경우에, 수백 메가의 이미지를 다시 받는 것은 굉장히 비효율 적일 것이다. + +![Docker Layer](./img/dockerlayer.webp) + +이 문제를 해결하기 위해 `Layer` 라는 개념을 사용하고, 유니온 파일 시스템을 이용하여 여러 개의 레이어을 하나의 파일 시스템으로 사용할 수 있게 해준다고 한다. + +이게 무슨 얘기냐면, 예를 들어보자 + +- `ubuntu Image` : Layer A + B + C +- `ubuntu base Nginx Image` : Layer A + B + C + Nginx +- `nginx base webapp` : Layer A + B + C + Nginx + source + +여기서 webapp 소스를 수정했을 때, 이 개념이 없다면, `Layer A + B + C + Nginx + source(v2)` 를 다시 다운 받아야 한다. 이게 얹어지면 용량이 엄청나게 커지고 비효율적이겠지? + +근데 이 Layer 개념을 사용하면, `Layer A + B + C + Nginx` 는 제외하고 source layer를 soruce(v2) layer만 바꿔서 다운 받으면 된다. 굉장히 효율적으로 이미지를 관리할 수 있다.(미쳤다) + +# Reference + +[도커 공식문서](https://docs.docker.com/get-started/overview/) + +[마이크로소포트 도커란 무엇인가요?](https://docs.microsoft.com/ko-kr/dotnet/architecture/microservices/container-docker-introduction/docker-defined) + +[마이크로소프트 컨테이너와 가상 머신 비교](https://docs.microsoft.com/ko-kr/virtualization/windowscontainers/about/containers-vs-vm) + +[도커란 무엇인가](https://www.redhat.com/ko/topics/containers/what-is-docker) diff --git a/CICD/img/container.svg b/CICD/img/container.svg new file mode 100644 index 0000000..9c7e12a --- /dev/null +++ b/CICD/img/container.svg @@ -0,0 +1,3648 @@ + + + + + + + + + + + + + + Page-1 + + + + Rounded Rectangle.396 + + + + + + + + + + + + + + + + + + + + + + Rounded Rectangle.397 + + + + + + + + + + + + + + + + + + + + + + Rounded Rectangle.398 + + + + + + + + + + + + + + + + + + + + + + Rectangle.399 + + + + + + + Sheet.5 + + Rounded Rectangle + + + + + + + + + + + + + + + + + + + + + + Square + + + + + + + Multi-Line + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.169 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.170 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.171 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.172 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.173 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.174 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.175 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.176 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.177 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.178 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.179 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sheet.20 + Kernel + + + + Kernel + + Sheet.21 + + Round Corner Rectangle + + + + + + + + + + + + + + + + + + + + + + Round Corner Rectangle.194 + + + + + + + + + + + + + + + + + + + + + + Circle + + + + + + + Circle.196 + + + + + + + Circle.198 + + + + + + + + Sheet.27 + Hardware + + + + Hardware + + Rectangle.423 + + + + + + + Sheet.29 + Apps + + + + Apps + + Sheet.30 + + Rounded Rectangle.80 + + + + + + + + + + + + + + + + + + + + + + Round Same Side Corner Rectangle + + + + + + + + + + + + + + + + + + + + Circle + + + + + + + Circle.83 + + + + + + + Circle.84 + + + + + + + + Rectangle.431 + + + + + + + Sheet.37 + Services + + + + Services + + Sheet.38 + + Multi-Line + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.209 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.210 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.211 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.212 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.213 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.214 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.215 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.216 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.217 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.218 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.219 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.220 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.221 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.222 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.223 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sheet.55 + + Sheet.56 + + + + + + + + Configure + + Sheet.58 + + + + + + + + + + + Configure.140 + + Sheet.60 + + + + + + Sheet.61 + OS + + + + OS + + + Sheet.62 + + Round Corner Rectangle.457 + Container + + + + + + + + + + + + + + + + + + + + + + Container + + Rounded Rectangle.458 + + + + + + + + + + + + + + + + + + + + + + Rectangle.459 + + + + + + + Sheet.66 + Apps + + + + Apps + + Sheet.67 + + Rounded Rectangle.80 + + + + + + + + + + + + + + + + + + + + + + Round Same Side Corner Rectangle + + + + + + + + + + + + + + + + + + + + Circle + + + + + + + Circle.83 + + + + + + + Circle.84 + + + + + + + + Rectangle.467 + + + + + + + Sheet.74 + Services + + + + Services + + Sheet.75 + + Multi-Line + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.209 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.210 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.211 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.212 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.213 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.214 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.215 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.216 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.217 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.218 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.219 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.220 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.221 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.222 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.223 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sheet.92 + + Round Corner Rectangle.457 + Container + + + + + + + + + + + + + + + + + + + + + + Container + + Rounded Rectangle.458 + + + + + + + + + + + + + + + + + + + + + + Rectangle.459 + + + + + + + Sheet.96 + Apps + + + + Apps + + Sheet.97 + + Rounded Rectangle.80 + + + + + + + + + + + + + + + + + + + + + + Round Same Side Corner Rectangle + + + + + + + + + + + + + + + + + + + + Circle + + + + + + + Circle.83 + + + + + + + Circle.84 + + + + + + + + Rectangle.467 + + + + + + + Sheet.104 + Services + + + + Services + + Sheet.105 + + Multi-Line + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.209 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.210 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.211 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.212 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.213 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.214 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.215 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.216 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.217 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.218 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.219 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.220 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.221 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.222 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.223 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CICD/img/docker.png b/CICD/img/docker.png new file mode 100644 index 0000000..b96a199 Binary files /dev/null and b/CICD/img/docker.png differ diff --git a/CICD/img/dockerarchitecture.svg b/CICD/img/dockerarchitecture.svg new file mode 100644 index 0000000..afe563a --- /dev/null +++ b/CICD/img/dockerarchitecture.svg @@ -0,0 +1,2597 @@ + + + + + 2014-04-15 00:37Z + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CICD/img/dockerlayer.webp b/CICD/img/dockerlayer.webp new file mode 100644 index 0000000..71bdb50 Binary files /dev/null and b/CICD/img/dockerlayer.webp differ diff --git a/CICD/img/vm.svg b/CICD/img/vm.svg new file mode 100644 index 0000000..ff3726a --- /dev/null +++ b/CICD/img/vm.svg @@ -0,0 +1,3390 @@ + + + + + + + + + + + + + + + + + + Page-1 + + + + Rounded Rectangle.304 + + + + + + + + + + + + + + + + + + + + + + Sheet.10 + + Rounded Rectangle.305 + + + + + + + + + + + + + + + + + + + + + + Rectangle.307 + + + + + + + Sheet.13 + + Rounded Rectangle + + + + + + + + + + + + + + + + + + + + + + Square + + + + + + + Multi-Line + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.169 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.170 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.171 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.172 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.173 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.174 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.175 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.176 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.177 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.178 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.179 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sheet.28 + Kernel + + + + Kernel + + Rectangle.333 + + + + + + + Sheet.30 + Apps + + + + Apps + + Sheet.31 + + Rounded Rectangle.80 + + + + + + + + + + + + + + + + + + + + + + Round Same Side Corner Rectangle + + + + + + + + + + + + + + + + + + + + Circle + + + + + + + Circle.83 + + + + + + + Circle.84 + + + + + + + + Rectangle.341 + + + + + + + Sheet.38 + Services + + + + Services + + Sheet.39 + + Multi-Line + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.209 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.210 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.211 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.212 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.213 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.214 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.215 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.216 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.217 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.218 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.219 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.220 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.221 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.222 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.223 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sheet.56 + + Sheet.57 + + + + + + + + Configure + + Sheet.59 + + + + + + + + + + + Configure.140 + + Sheet.61 + + + + + + Sheet.62 + OS + + + + OS + + + + Sheet.64 + + Rounded Rectangle.305 + + + + + + + + + + + + + + + + + + + + + + Rectangle.307 + + + + + + + Sheet.67 + + Rounded Rectangle + + + + + + + + + + + + + + + + + + + + + + Square + + + + + + + Multi-Line + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.169 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.170 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.171 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.172 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.173 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.174 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.175 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.176 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.177 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.178 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.179 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sheet.82 + Kernel + + + + Kernel + + Rectangle.333 + + + + + + + Sheet.84 + Apps + + + + Apps + + Sheet.85 + + Rounded Rectangle.80 + + + + + + + + + + + + + + + + + + + + + + Round Same Side Corner Rectangle + + + + + + + + + + + + + + + + + + + + Circle + + + + + + + Circle.83 + + + + + + + Circle.84 + + + + + + + + Rectangle.341 + + + + + + + Sheet.92 + Services + + + + Services + + Sheet.93 + + Multi-Line + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.209 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.210 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.211 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.212 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.213 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.214 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.215 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.216 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.217 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.218 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.219 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.220 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.221 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.222 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Line.223 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sheet.110 + + Sheet.111 + + + + + + + + Configure + + Sheet.113 + + + + + + + + + + + Configure.140 + + Sheet.115 + + + + + + Sheet.116 + OS + + + + OS + + + + Rounded Rectangle.306 + + + + + + + + + + + + + + + + + + + + + + Sheet.3 + + Round Corner Rectangle + + + + + + + + + + + + + + + + + + + + + + Round Corner Rectangle.194 + + + + + + + + + + + + + + + + + + + + + + Circle + + + + + + + Circle.196 + + + + + + + Circle.198 + + + + + + + + Sheet.9 + Hardware + + + + Hardware + + Round Corner Rectangle.623 + Virtual Machine + + + + + + + + + + + + + + + + + + + + + + Virtual Machine + + diff --git a/CICD/img/vmdocker.png b/CICD/img/vmdocker.png new file mode 100644 index 0000000..adfaa77 Binary files /dev/null and b/CICD/img/vmdocker.png differ diff --git a/OS/CPU.md b/OS/CPU.md new file mode 100644 index 0000000..9ae8d26 --- /dev/null +++ b/OS/CPU.md @@ -0,0 +1,48 @@ +# CPU 작동원리 + +## CPU 구조 + +명령어 수행 과정을 앞서, 우리는 메모리에 대해서는 굉장히 많이 다뤘는데, CPU에 대해서는 많이 다루지 않아 까먹거나 모르는 부분이 많다. +그래서 명령어 수행 과정을 이해하기 위해 알 필요가 있는 CPU 구조에 대해 간단히 살펴보고자 한다. + +중앙처리 장치인 CPU는 크게 3가지로 나눌 수 있는데, 연산 장치, 제어 장치, 레지스터로 나눈다. + +- 연산 장치 : 논리연산을 수행하는 장치로, 연산에 필요한 데이터를 레지스터에서 가져오고, 연산 결과를 다시 레지스터로 보내 저장한다. + +- 제어 장치 : 명령어를 순서대로 실행할 수 있도록 제어하는 장치다. 주기억장치(메인 메모리)에서 명령어를 꺼내 해독한 뒤에 실행에 필요한 제어 신호를 여러 장치로 보낸다. 그리고 이 장치들이 보낸 신호를 받아 다음 수행할 동작을 결정한다. + +- 레지스터 : 고속의 기억장치로, 명령어 주소, 코드, 데이터, 결과 등을 임시로 저장하는 곳이다. 특수 목적 레지스터와 범용 레지스터가 있는데, `PC`, `MBR`, `AC` 등이 특수 목적 레지스터에 해당한다. + +- `PC(프로그램 카운터)` : 다음에 수행할 명령어를 저장하는 곳 +- `MBR(메모리 버퍼 레지스터)` : 메모리에서 읽어온 데이터나, 메모리에 저장할 데이터를 임시로 저장하는 곳 + +CPU의 동작 과정은 + +1. 주기억장치(메모리)에 입력장치에서 입력받은 데이터 또는 보조기억장치(HDD 등)에 저장된 프로그램을 읽어 온다. +2. CPU는 프로그램을 실행하기 위해 메모리에 저장된 명령어와 데이터를 읽어와 처리하고, 다시 메모리에 저장한다. +3. 메모리는 처리 결과를 디스크에 저장하거나 출력장치로 내보낸다. +4. 제어장치는 1~3 명령어가 순서대로 실행될 수 있도록 순서를 제어한다. + +이렇게 이해하면 되겠다. 그렇다면 메모리에 저장된 명령어를 가져와 어떻게 처리하는 지 알아보자. + +## 명령어 수행 과정 + +CPU는 메모리에 있는 프로그램의 명령을 실행함으로써 프로그램을 수행한다. 프로그램을 수행하기 위한 CPU의 명령어 수행 과정을 알아보자. + +1. 명령어 인출(Instruction Fetch) : 명령어 주소를 계산하고 그 주소에 가서 명령어를 가져오는 단계를 수행한다. Fetch Cycle이라고 볼 수 있다. +2. 명령어 해독(Instruction Decode) : 명령어를 해독하여 어떻게 수행, 동작할지 결정한다. +3. 데이터 인출(Data Fetch) : 피연산자 위치를 계산하여 불러온다. +4. 데이터 처리(Data Process) : Data Opeation을 수행하여 피연산자를 연산한다. +5. 데이터 저장(Data Store) : 연산 결과를 어디에 저장할 것인지에 대한 동작을 수행한다. + +이러한 과정들이 진행된다. + +이 파트는 면접용으로 간단하게 공부하는 것이므로, 자세한 동작은 아래 블로그 링크를 참고하면 그림과 함께 설명이 되어 있다. 이 내용들은 기본 틀만 잡는다고 생각하고 공부하고, 궁금한 것은 찾아보면 될 것 같다! + +# Reference + +https://ndb796.tistory.com/7 + +https://m.blog.naver.com/PostView.nhn?blogId=jaeyoon_95&logNo=221053588562&proxyReferer=https:%2F%2Fwww.google.com%2F + +https://velog.io/@ckstn0777/컴퓨터구조-9htxi9jo diff --git a/network/CORS.md b/network/CORS.md new file mode 100644 index 0000000..fd4ded2 --- /dev/null +++ b/network/CORS.md @@ -0,0 +1,103 @@ +# CORS + +## CORS 란? + +- Cross Origin Resource Sharing, 직역하면 교차 출처 리소스 공유 +- 추가 HTTP 헤더를 이용하여, 한 출처에서 실행 중인 웹 어플리케이션이 다른 출처의 리소스에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제 +- 즉, **Browser(브라우저)**에 포함되어 있는 정책인 것이다. 고로, 서버끼리 통신할 때는 이 정책이 적용되지 않는다. + +## 출처(Origin)란? + +우리가 네이버나 구글에 접속하는 상황을 생각해보자. +`https://www.google.com` 과 같은 URL을 입력하여 접속할 것이다. 이 URL은 단 하나의 문자열 같아 보이지만, 사실 이 URL 안에는 정말 여러가지 내용들이 담겨있다. + +![출처](./img/origin.jpg) + +- 출처 : 도메인(Domain), 프로토콜(Protocol), 포트(Port) 등 +- 포트 번호는 생략가능하다. +- 그림에서 Domain = Host 이다. + +### 같은 출처의 기준은? + +예시를 들어보자. 대충 비슷한 URL 4개가 있던 경우를 가정해보자. + +- `https://github.com/`(기준으로 삼자) +- `https://github.com/token?name=a` +- `http://github.com` +- `https://gaemihell.github.com/` + +이렇게 4가지 URL이 있을 때, 같은 출처란 무엇이 있을까? + +- 2번은 path가 다를 뿐, host, protocol, domain이 같으므로 같은 출처이다. +- 3번은 protocol이 `http`로 다르다. 고로 다른 출처이다. +- 4번은 `domain`이 다르다. 고로 다른 출처이다. + +출처에 대한 설명은 이정도면 간단하게 이해가 됐을 것이다. 그러니까, 지금 까지의 내용을 정리해보면 보안 상의 이유로 브라우저는 스크립트에서 교차 출처 HTTP 요청을 제한한다. 즉, `https://domain-a.com`의 프론트 엔드 JavaScript 코드가 Request를 이용하여 `https://domain-b.com/data.json` 에 요청을 날리는 것을 제한한다는 것이다. 이것이 다른 출처인 이유는 위의 예제를 이해했다면 충분히 이해했을 것이다. + +![CORS Example 1](./img/corsex.png) +그렇다면 우리가 백엔드, 프론트엔드를 실제 프로젝트에 적용할 때, 다른 출처에 있는 리소스에 Request를 날리는 경우가 비일비재 할 것인데, 다 불가능 한가? 절대 그렇지 않다. +특정 출처를 허용하는 등의 방식으로 다른 출처에 있는 리소스를 가져올 수 있다. 이 방법에 대해서 오늘 알아보려고 한다! + +## SOP(Same-Origin Policy) + +CORS를 설명하기 전에 SOP에 대해 잠깐 알아보자. + +Same Origin Policy, 이름만 봐도 같은 출처만 허용한다는 느낌이 들지 않는가? + +SOP는 2011년 RFC 6454에서 처음 등장한 보안 정책으로, "같은 출처에서만 리소스를 공유할 수 있다" 라는 규칙을 가진 정책이다. + +하지만 요즘 같이 MSA가 널리 쓰이고 있는 환경에서, 다른 출처에 있는 리소스를 가져오지 않고 웹사이트를 운영하는 것은 불가능하다. 그래서 몇 가지 예외 조항을 두기로 했는데, 그 중 하나가 오늘 얘기하는 CORS 이다. + +## CORS를 사용하는 이유? + +현재, 크롬 개발자 도구를 이용하면 웹 사이트에서 제공하는 리소스와 자바스크립트 코드등 대부분의 것들이 개방되어 있다. 그렇기 때문에, 다른 출처에 있는 리소스를 제한 없이 마음대로 열람할 수 있는 것은 굉장히 위험한 환경이다. 소스 코드가 유출 되어 `CSRF`나 `XSS`를 이용한 공격을 당하게 된다면 상황은 심각해 진다. 그렇기 때문에 기본적으로 SOP 정책을 사용하고, 예외로 CORS 를 사용할 수 있도록 하여 공격 당할 위험을 최소화 하는 것이다. + +![CORS 이용 사례](./img/cors%20header.png) + +어떤 사이트에서 구글 광고 url로 보이는 출처를 허용한 모습이다. + +## CORS 동작 방식 + +CORS 동작 방식에는 크게 3가지가 있다고 한다. + +### Preflight Request + +![Preflight](./img/corspreflight.png) + +- 이 시나리오에 해당하면 브라우저는 요청을 한번만 보내는 것이 아니라 예비 요청과 본 요청으로 나누어서 전송한다. +- 예비요청 : Prefilght +- 예비요청에는 HTTP Method 중 `OPTION` Method가 사용된다고 한다. +- 예비요청을 보낸 후 요청이 안전한다고 판단되면, 본 요청을 보내게 된다. + +### Simple Request + +- Preflight와 다르게, 단순하게 요청을 보내는 방법. +- 충족해야 하는 조건이 3가지가 있다. + - 메서드는 GET, POST, HEAD 중 하나 + - 헤더는 Accept, Accept-Language, Content-Language, Content-Type 만 허용 + - Content-Type 헤더는 application/x-www-form-urlencoded, multipart/form-data, text/plain만 허용 + +### Credential Request + +- 인증 관련 헤더를 포함할 때 사용하는 요청 +- XMLHttpRequest나 Fetch API는 별도의 옵션 없이 쿠키 정보나 인증 관련 헤더를 요청에 담지 않는다. +- 고로 Credentails 옵션을 변경하지 않으면 cookie를 주고 받을 수 없다. +- 옵션 : + - omit : 절대로 cookie 전송하거나 받지 않는다. + - same-origin : 동일 출처라면 user crendtials를 전송 한다. + - include : cross-origin 호출이어도 언제나 user crdentials를 전송한다. + +또한, Crendtial 설정을 include로 변경하면, **Access-Control-Allow-Origin을 '\*'로 지정할 수 없다.** 특정 출처를 정확히 명시해야 한다. + +## CORS 해결 방법 + +1. Access-Contorl-Allow-Origin 설정 + +- 정석대로 서버에서 설정해 주는 방법 +- 와일드 카드는 CORS를 적용하는 의미가 없다. -> 잠재적인 보안 문제 +- 유명한 백엔드 프레임워크는 이 설정을 위한 세팅이나 미들웨어를 지원하므로 어렵지 않을 것이다. + +2. Webpack Dev Server로 리버스 프록싱 + +- CORS는 프론트엔드 개발자가 로컬에서 개발할 때 가장 많이 마주치는 문제 +- 로컬 환경의 개발에서 api통신에 문제가 없게 하기 위해 프록시 기능을 이용한다. diff --git a/network/img/cors header.png b/network/img/cors header.png new file mode 100644 index 0000000..6fdc8c3 Binary files /dev/null and b/network/img/cors header.png differ diff --git a/network/img/corsex.png b/network/img/corsex.png new file mode 100644 index 0000000..eeb0f21 Binary files /dev/null and b/network/img/corsex.png differ diff --git a/network/img/corspreflight.png b/network/img/corspreflight.png new file mode 100644 index 0000000..1d9fee6 Binary files /dev/null and b/network/img/corspreflight.png differ diff --git a/network/img/origin.jpg b/network/img/origin.jpg new file mode 100644 index 0000000..784f40b Binary files /dev/null and b/network/img/origin.jpg differ