이번 프로젝트에서 CI/CD를 맡다보니 가상 메모리 부분에 대해 잘 모르는 것이 많다고 생각하여 널널한 개발자님의 유튜브 강의 몇개를 보고 정리한 내용이다. 가상 메모리가 왜 필요한지, 어떻게 사용되는지 아주 쉽게 설명해주셨으니 가상 메모리를 전혀 모르는 분들이라면 가볍게 보는걸 추천드린다 :)

https://www.youtube.com/watch?v=dPoNLIPo3_8
예전에는 물리 메모리 안에 OS, 프로세스가 모두 같이 관리되었음
OS를 통하지 않고 프로세스가 생성, 소멸되다보니 프로세스가 죽으면 프로그램이 다운되어 버리는 문제가 발생
그래서 OS를 기반으로 가상 메모리를 만들어서 프로세스에게 메모리를 할당, 회수 할 수 있도록 함
OS를 통해서 만들어야 프로세스에서 오류가 발생해도 메모리를 회수할 수 있음 (어느 메모리에 할당 되어있는지 암)
사용자나 애플리케이션단 프로세스가 직접 메모리에 접근하는 것은 전체 시스템에 위협요소임
RAM 영역이 부족해질 때, 비효율적으로 사용하고 있을 때 등에 자주 사용되는 프로세스를 RAM으로 올리고 자주 사용되지 않는 프로세스를 HDD로 넘기는 과정
OS가 담당한다
DISC I/O로 인해 HDD에 있는 프로세스는 느리지만 작동은 한다는게 핵심
추상화 과정으로 사용자는 해당 프로세스가 RAM에 있는지 2차 메모리에 있는지 모름. 알 필요도 없음
해당 내용은 AWS 프리티어로 jenkins CI/CD를 테스트 해보는 과정에서 RAM이 1G만 제공되기 때문에 swap 메모리를 늘려서 사용해야 했었다. 이 과정에서 swap 메모리 개념을 잡을 수 있었다.
프로세스들 사이에 서로 데이터를 주고받는 행위 또는 그에 대한 방법이나 경로를 의미
생각보다 어려운 개념이 아님
원래 프로세스간은 영향을 줄 수 없어야 한다
그러나 때로는 프로세스간 데이터를 공유해야하는 경우가 있는데
가장 흔히 쓰는게 복사 붙여넣기이다
내가 최근에 배운 내용중에서 Docker.sock 을 -v로 볼륨마운트 하는 것 또한 같은 과정이라고 생각한다. 호스트에서 사용하는 docker.sock과 컨테이너의 docker.sock을 공유하여 컨테이너 내에서 호스트 docker deamon을 컨트롤 할 수 있는 방식에도 해당 개념이 사용된다 (docker out of docker).
여담으로 jenkins로 빌드하는 과정에서 컨테이너 별로 파일을 영구적으로 저장해야 하거나 로그를 기록하기 위해 호스트에 특정 디렉토리를 volume mount하여 사용하기도 한다. 해당 내용에 대해서는 다음 포스트에서 더 자세히 기록하겠다!