티스토리 뷰
최근에는 클라우드, 컨테이너 등의 기술이 보편화된 것 같다.
비교적 최근에 취업하여 일하기 시작한 나는 이러한 기술을 당연하게 써왔다. (물론 학교에서는 알려주지 않았다...) 하지만 누가 나에게 "왜 이 기술을 써야하는거야? 이 기술의 장점이 뭐야?" 라고 묻는다면 대답은 할 수 있지만, 논리정연하게 대답할순 없을 것 같아서 이 글을 통해 다시 한번 정리해보고자 한다.
특히 최근에 도커 아키텍처에 대해 많이 검색해보다 보니 왜?라는 질문에 대한 스스로의 답이 명확해야지 더 깊게 공부할 수 있다는 생각이 들었다.
결정적으로 작년 한 면접에서 컨테이너 기술과 가상화에 대해 물어봤는데 내 스스로가 만족할만한 답을 못했던 슬픈 기억이 있기도 하다ㅠㅠ..
평소에 정리해보고 싶었던 why에 대한 질문과 관련해서 떠오르는 질문들을 대충 번호만 붙여서 정리해보려고 한다.
1) 클라우드 컴퓨팅 기술을 왜 사용해야하는가?
- 비즈니스 요구사항이 빠르게 변화하고 있다.
=> 과거에는 IT인프라를 구축하게 위해서는 서버 구매부터 OS설치까지 많은 시간이 걸렸다. 클라우드 컴퓨팅으로 빠르게 IT인프라를 구축하고 비즈니스 요구사항에 맞는 서비스를 제공할 수 있다. - 수요를 항상 맞추긴 쉽지 않다.
=> 이벤트 등 트래픽이 몰리는 시즌에는 서버자원이 많이 필요하지만 평소에는 그렇지 않다. 클라우드 컴퓨팅을 사용하면 필요할때 필요한 만큼 서버자원을 쉽게 이용할 수 있다.
1-1) 클라우드 컴퓨팅의 주요기술인 가상화(vrtualization)란? 장점은 무엇인가?
- 가상화란 SW기술로 하드웨어를 자원을 나누는 것 이다.
- 하드웨어 - OS - Application 의 구조에서 하드웨어 - 가상화 레이어(virtualize layer) - 여러개 os 및 application 의 구조가 가능하다.
- 하드웨어 자원을 효율적으로 사용할 수 있다. 하나의 하드웨어를 서로 방해받지 않는 독립적인 공간으로 이용할 수 있기 때문에 하나의 하드웨어에서 여러 서비스를 구동할 수 있다. (예를들어 하나의 집에서 가벽을 세워 4개의 서로 방해받지 않는 공간으로 나눈것과 같다.)
2) 컨테이너 기술을 왜 사용해야하는가?
애플리케이션의 개발과 배포가 편하다
MSA와 찰떡궁합이다.
3) 컨테이너 중 왜 도커가 가장 많이 쓰이는가?
3) 컴퓨터 부팅 과정.
컴퓨터 부팅이란, 컴퓨터 전원이 켜진 후 운영체제가 실행되지까지 실행되는 일련의 작업이다.
작업 다음과 같다.
- 컴퓨터에 전원을 키면 메인보드 및 메인보드에 연결되어있는 하드웨어에 전력이 공급된다.
- CPU가 ROM(비휘발성 메모리)에 저장되어 있는 BIOS를 실행한다.
- BIOS는 POST(Power on Selft Test, 주변장치가 잘 동작하는지 체크) 작업을 진행한다.
- BIOS는 '부팅매체를 선택'하고 '부트스트랩' 작업을 진행한다. 부트스트랩은 BIOS에 있는 코드로 부트스트랩 작업이란, 부팅매체(USB, HDD, SSD 등)의 첫 512바이트에 해당하는 MBR영역에서 부트로더를 RAM으로 올리는 작업을 말한다.
- 부트로더는 디스크에 있는 운영체제코드(커널 코드)를 RAM으로 올리고 운영체제를 실행한다.
- OS 부팅 완료
부트스트랩(bootStrap)과 부트로더(BootLoader)가 헷갈릴 수 있는데,
부트스트랩은 부트로더를 메모리에 올리는 작업을 수행하는 프로그램이며,
부트로더는 운영체제 코드를 메로리에 올리는 작업을 수행하는 프로그램이다.
운영체제는 각자의 본인들만의 부트로더를 가지고 있다.
MBR영역에는 파티션에 대한 정보와 부트로더 프로그램이 저장되어 있다.
4) 운영체제와 커널(Kernel)
운영체제는 시스템프로그램과 커널로 구성된다.
커널 : 컴퓨터 자원 관리
시스템프로그램: 사용자와 커널 사이에 다리 역할
시스템프로그램에는 대표적으로 쉘(Shell)이 있으며, 사용자는 쉘을 통해 컴퓨터(커널)에 명령을 전달할 수 있다.
커널이란, 운영체제의 핵심부분으로 단어 자체로 핵심이라는 의미를 가지고 있다.
커널의 역할은 한마디로 '컴퓨터 자원(cpu, 메모리, 파일, 네트워크, 입출력장리) 관리'이며, 상세하게는 컴퓨터의 물리자원과 추상화 자원을 관리한다.
프로그램이 실행되기 위해서는 메모리에 올라가 있어야하는데, 커널은 운영체제 중 항상 메모리에 상주해야하는 부분으로 메모리의 안전한 부분에 적재되어 있다.
커널은 여러 사용자(애플리케이션)를 위해 하나의 물리자원을 여러개의 추상화된 객체로 관리한다.
추상화는 하나뿐인 하드웨어를 여러개인 것처럼 보이게 하는 기술을 말한다.
하드웨어 자원을 추상화한 개념을 표현하기 위한 용어들이다.
CPU -> 태스크(Task)
메모리(memory) -> 페이지(page), 세그먼트(segment)
디스크(disk) -> 파일(file)
네트워크(network) -> 소켓(socket)
커널에는 물리적자원과 추상화자원을 '관리'하기 위해 5가지 관리자가 존재한다.
1. 태스크 관리자 : 물리적 자원인 CPU를 추상 자원인 태스크로 제공
2. 메모리 관리자 : 물리적 자원인 메모리를 추상 자원인 페이지나 세그먼트로 제공
3. 파일 시스템 관리자 : 물리적 자원인 디스크를 추상 자원인 파일로 제공
4. 네트워크 관리자 : 물리적 자원인 네트워크 장치를 추상 자원인 소켓으로 제공
5. 디바이스 드라이버 관리자 : 각종 외부 장치(프린터, GPU 등)에 대한 접근을 제공
도커엔진이 커널을 공유한다는건 어떤 의미일까?
'CS기초' 카테고리의 다른 글
docker compose 사용 시, Docker network bridge 대역 변경하는 방법 (0) | 2022.07.18 |
---|---|
포트(port), 소켓(socket) 에 대해 알아보자. (0) | 2022.06.01 |
[리눅스] ps 명령어 (0) | 2022.04.07 |
[리눅스] tty, pts (0) | 2022.04.07 |
DNS 서버 종류 및 DNS 동작 원리 (0) | 2022.04.06 |