티스토리 뷰

 

[인프라 찍먹하기] 프론트 개발자, 드디어 도커의 문을 두드리다.

 

네, 부스트캠프가 끝나고 두 달동안 설렁설렁 놀다가

다시 마음을 잡게 된 취준생 민다입니다😭

 

이력서를 쓰는게 이렇게 어려운 일인 줄 몰랐네요...

시간 가는 줄 모르고 문서 정리하고, 여행 다녀오니 두달이 훌쩍 지난 거있죠...?

 

이대로는 안 될 것 같아서 매주 주제를 정해 학습해보려고합니다.

이번 주 주제는 바로 가상화와 컨테이너에요!

 

최근 업무 자동화 툴인 n8n에 관심이 생겨서,

사이드프로젝트 에러 해석 자동화툴을 만들고 있었는데요.

코드와 정책을 수립하고나니, 최종적으로 제 앞길을 가로막는 장벽을 마주치게 되었어요.

 

먼저 도커를 설치하고 컨테이너를 띄우세요...

 

서버 이야기만 나오면 저는 그냥 AI 따라무새가 되곤 했거든요.

더 이상 피할 수 없다는 결론에 도달했습니다.

 

코드를 누가 짜주건, 결국 내 코드가 어떤 환경에서 돌아가는지 설명하고 책임질 줄 알아야하잖아요?

 

그래서 이 책을 집어 들었습니다.

매일 한 장씩 학습하며 저만의 언어로 정리해보려고 해요.

 


 

오늘의 주제는 제 1장, 가상화 기초 지식입니다.

 

1. 가상화, 거대한 고철 덩어리에 영혼을 불어넣다!

예전의 데이터 센터는 거대한 물리 서버들의 집합소였다고 해요.

서버 한 대를 사면 그 위에는 딱 하나의 운영체제만 올릴 수 있었던거죠.

 

그런데 이 경우엔 아주 큰 문제가 발생하는데요,

아무리 비싼 고성능 서버를 사봤자,

우리가 돌리는 프로그램이 서버 힘의 10%도 채 사용하지 못해

그 막강한 성능을 만끽하지 못한다는 점이에요.

 

결국 나머지 성능은 전기 먹고 노는 셈이죠.

서버는 마치 대형 트럭과 같은 녀석이라,

일단 부팅하는 것만으로도 엄청 연료를 소모하거든요!

 

일을 얼마나 시키든,

서버를 킨 순간 기본 전력이라는 고정비가 전체 비용의 대부분을 차지하게 됩니다.

 

그렇다고 서버 한 대에 여러 프로그램을 억지로 쑤셔넣다가

프로그램끼리 충돌나면 전체가 뻗는 상황이 발생하겠죠...

하드웨어 가상화

 

이 문제를 위해 나오게 된 개념이 바로 가상화입니다!

쉽게 말해, 물리적인 하드웨어와 소프트웨어를 분리하는 마법이죠.

 

실제 기계가 한대여도,

소프트웨어 층을 더 쌓아서 여러 대의 독립된 컴퓨터가 있는 것처럼 속이는 것입니다.

이런 가짜 컴퓨터들을 우리가 가상 서버(VM)이라고 불렀던거죠.

 

가상 서버 덕분에...🧚

1. 효율성
    노는 자원 없이 물리 서버 한 대를 꽉꽉 채워 사용할 수 있음
2. 유연성
    새로운 서버가 필요할 때 기계를 주문하지 않아도,
    새로운 가상서버를 클릭으로 만들 수 있음
3. 가용성
     물리 서버 한 대에 문제가 생기더라도,
     그 위에 돌던 가상 서버들을 살아있는 다른 물리 서버로 옮길 수 있음.
     서비스 중단의 두려움에서 해방!

2. 인프라 전체를 뒤덮은 가상화의 매력

 

가상화는 서버에만 국한된 개념은 아니에요. 

 

현대의 데이터 센터는 컴퓨팅 자원부터 네트워크,

저장소까지 모든 인프라 구성 요소를

소프트웨어로 논리적으로 분리해 관리하거든요.

 

서버 가상화

 

물리 서버 한 대의 자원(CPU, 메모리 등)을 나누어

여러 대의 가상 머신을 구동하는 기술이에요!

 

예를 들어, 맥북 환경에서 개발하고 있어도

VMware나 VirtualBox를 통해

가상 윈도우를 동시에 띄워 윈도우 전용 테스트가 가능한 셈이죠.

 

네트워크 가상화

 

물리적인 케이블 연결 상태와 관련 없이,

소프트웨어 설정을 통해 논리적인 네트워크 망을 구성할 수 있어요!

 

같은 사무실 안의 공용 와이파이를 사용하더라도,

  • 사내 업무용 망
  • 외부인 전용 망

을 논리적으로 차단해 서로 간의 데이터 접근을

차단하고 보안을 강화할 수 있게 되었죠.

 

VLAN(가상 랜)이나 SDN(소프트웨어 정의 네트워크)을 사용해

하나의 물리 스위치에서도 독립된 여러 개의 네트워크 분리가 가능해졌어요!

 

스토리지 가상화

 

여러 개의 물리적 저장 장치를 하나의 거대한 논리적 저장 풀로 통합할 수 있어요.

물론, 반대로 쪼개어 관리할 수도 있구요!

 

씬 프로비저닝이라는 기술을 사용하는데,

사용자에게는 실제 물리 용량보다 큰 가상 용량을 할당하고,

실제 데이터가 저장될 때만 물리 공간을 소비하게 만드는거에요.

 

그러니까, 사용자에게 기본 10GB 제공이라고 표시하더라도,

실제로는 사용자가 업로드한 용량만큼만 물리 디스크 공간을 점유

자원 낭비를 최소화하는 방식인거죠.

 

데스크톱 가상화

 

사용자의 데스크톱 환경 역시 중앙 서버에 가상화해 구축할 수 있어요!

 

 

예를 들어, 보안이 엄격한 금융권에서는

개인 PC에 데이터를 남기지 않게 하기 위해,

서버에 구축된 가상 PC에 접속해 업무를 수행하는 방식인거죠.

 

이 때, 모든 연산과 데이터 저장은 서버에서만 이루어지고

사용자 기기에는 화면 정보만 전송되게 되어요.


3. 가상화에서 클라우드로!

가상화가 물리 서버를 쪼개는 정교한 기술이라면,

클라우드는 이 기술을 누구나 쉽고 빠르게 이용할 수 있게 만든 서비스입니다!

 

사실 우리가 클라우드를 사용하는 이유는 명확한데요,

귀찮고 복잡한 건 하기 싫기 때문입니다.

 

예전에는 서비스 하나 만들려고

  • 서버 장비를 직접 주문하고,
  • 데이터 센터에 입주시키고,
  • OS를 설치

해야 했는데요.

이제는 AWS 같은 클라우드 업체가 미리 가상화한 자원을

손가락 몇 번으로 빌려 쓰기만 하면 되거든요.

 

여기서, 클라우드의 핵심 전략인 분산처리가 등장합니다.

 

예전에는 물리 서버를 늘리는 게 힘들었는데,

가상화 기술을 통해 EC2를 복제하기 쉬워졌으니,

여러 가상에 일을 나눠주는 방식이 선호되게 되었거든요.

스케일 업
기존에 구동 중인 가상 서버(EC2 등)의 하드웨어 사양을 높이는 수직 확장 방식
CPU의 코어 수를 늘리거나 메모리 용량을 증설해 처리 능력을 강화한다.

관리는 단순하지만 물리 서버의 하드웨어 한계를 넘을 수 없어 비용 효율이 떨어진다.

스케일 아웃
동일한 사양의 가상 서버 대수를 늘리는 수평 확장 방식
가상화 기술은 서버 이미지를 복제해 새 인스턴스를 생성하는 데 최적화되어,
스케일 아웃을 구현하기에 가장 적합한 환경을 제공한다.

서버 한 대에 장애가 발생해도 다른 서버의 서비스를 유지할 수 있어 고가용성 확보에 유리하다.

분산처리
스케일 아웃으로 늘어난 여러 대의 서버에 업무를 나누어 할당하는 일련의 과정이다.
서버 대수를 늘린다고 성능이 좋아지는 건 아니고,
유입 트래픽을 각 서버에 골고루 배분하는 로드 밸런싱 기술이 뒷받침 되어야 한다.

분산처리는 가상화 기술을 통해 다수의 논리적 자원을
하나의 거대 서비스로 안정적으로 지탱하게 만드는 운영 원리다.

 

뭐, 그렇게 비싼 고성능 서버 한 대를 키우는 스케일 업 방식보다

저렴한 가상 서버를 여러 대 늘려서

공평하게 일 시키는 스케일 아웃이 대세가 된거죠.

 

사용자가 갑자기 몰려와도 서버 한 대 더 복제해버리면 되거든요!


4. 가상화는 언제나 정답이 될 수 없다.

이번 장에서 배운 내용 중 가장 신기한 사실인데요,

가상화가 모든 상황에서 정답은 아니라고 하네요!

 

가상화 역시 오버헤드의 마수에서는 벗어나지 못했다고 합니다.

 

물리 서버와 내 서비스 사이에

가상화 소프트웨어라는 중간 관리자가 끼어 있다 보니,

명령을 전달할 때마다 미세한 지연 시간이 발생하는데,

결과적으로 성능을 쥐어짜내야 하는 특수 서비스라면

물리 서버에 직접 올리는 방식이 더 빠를 수도 있는거죠.

 

가상화의 편리함을 누리는 것과,

순수 물리 서버의 속도를 취하는 것은 결국 선택의 문제인 셈인 겁니다!


5. 그래도 우리 집 대문은 스스로 잠가야 한다.

뭐, 클라우드를 사용하게 되면...

클라우드 업체가 털리면 큰일 나는 위험이 있긴 한데요.

 

솔직히 말해서 개인이 직접 서버 보안 설정을 하는 것보다는

AWS 같은 글로벌 기업의 물리적 보안 시스템을 믿는 게 낫죠.

 

보안 전문가가 24시간 교대로 데이터 센터를 지키지 않을까요?

 

다만, 그럼에도 불구하고.

클라우드 업체는 인프라 자체의 탈취는 철저히 막아줍니다만,

그 서버의 대문을 열어둘지 말지는 우리의 책임으로 남아있습니다.

 

포트 설정을 엉망으로 하거나,

비밀번호를 허술하게 관리해서 생기는 문제는

당연히 우리 책임이겠죠!?


가볍게 1장을 마무리했습니다.

역시 그림으로 배우니 이미지가 잘 그려지네요.

 

저는 부스트캠프에서 VM을 사용했을 때,

AI로 이 사용법만 따라쳤지 솔직히 이게 뭔지도 몰랐거든요.

 

제가 뭘 하고 있는지 몰랐어요 하하하하하하하하

가상화는 자원을 아끼는데다,

현대 IT 서비스가 중단 없이 발생할 수 있게 만들어주는거군요!

 

근데 그럼 가상 서버에 OS를 매번 설치해야 하나요?

그마저 나에게는 너무 어려운 일이다.

 

OS는 관심 없고 앱만 격리해서 돌리고 싶은데~~~

바로 내일 학습해서 낋겨와보겠습니다 ㅎㅎㅎㅎ

 

댓글