Cloud Service Practice 06

퍼블릭 EC2 웹 서버 설정의 비밀: 서버 그 자체와 접속 조건

EC2 생성 화면에서 AMI, 인스턴스 유형, 키 페어, 보안 그룹, 서브넷, 퍼블릭 IP가 한꺼번에 나와서 무엇이 서버 자체이고 무엇이 접속 조건인지 뒤섞인다.

근거 · 교안 p37-p49

퍼블릭 EC2 웹 서버 설정의 비밀: 서버 그 자체와 접속 조건 대표 이미지

1장: 서버의 몸체: AMI와 인스턴스 유형

솔라는 노트북 화면을 띄워 둔 채 미동도 하지 않았다. 화면에는 AWS의 EC2 인스턴스 생성 페이지가 펼쳐져 있었다. 수많은 옵션들이 빽빽하게 나열된 스크롤바는 중간쯤에 멈춰 있었다. 솔라의 표정은 마치 처음 보는 외국어 문법책을 마주한 사람 같았다.

“언니, 나 잠깐만 뭐 좀 물어봐도 돼?”

거실에서 책을 읽던 루나가 고개를 들었다.

“이거 봐봐. 분명히 나는 ‘웹 서버’ 하나를 만들려고 하는 건데… AMI, 인스턴스 유형, 키 페어, 네트워크 설정, 서브넷, 퍼블릭 IP, 보안 그룹… 끝도 없어. 그냥 이 모든 게 합쳐져서 ‘서버’라는 거대한 무언가가 되는 거야? 각각이 도대체 뭘 하는 건지 감이 안 와.”

솔라의 손가락은 화면의 여러 항목들을 불안하게 오갔다. 그녀의 말대로였다. 초심자에게 EC2 생성 화면은 서버라는 단일한 목표를 향한 여정이 아니라, 의미를 알 수 없는 파편들의 집합처럼 보이기 쉬웠다. 모든 선택지가 서버 ‘자체’를 구성하는 필수 부품처럼 뒤섞여 있었다.

루나는 소파에서 일어나 솔라의 옆으로 다가왔다. 화면을 잠시 들여다보던 그녀는 책상 위의 빈 노트를 가져와 펜을 들었다. 복잡한 화면 대신 새하얀 노트를 솔라 앞에 펼쳐 보였다.

“서버 말고, 그냥 컴퓨터를 한 대 조립한다고 생각해 봐. 솔라 네가 쓸 컴퓨터를 사러 용산에 갔어. 가장 먼저 뭘 결정해야 할까?”

“내 컴퓨터?”

솔라는 잠시 생각에 잠겼다. “음… 일단 성능? CPU는 뭘로 할지, 메모리는 몇 기가로 할지. 그리고 하드디스크 용량도 정해야 하고. 아, 그리고 운영체제도. 윈도우를 깔지, 맥을 쓸지.”

“바로 그거야.”

루나는 노트 위에 네모난 상자를 하나 그렸다. 그리고 그 안에 솔라가 말한 것들을 간결하게 적어 넣었다.

CPU / 메모리 운영체제 (OS)

“지금 솔라 네가 말한 게 바로 이 컴퓨터의 정체성이자 기본적인 ‘몸체’야. 얼마나 똑똑한지(CPU), 한 번에 얼마나 많은 일을 할 수 있는지(메모리), 그리고 어떤 종류의 소프트웨어를 이해하고 실행할 수 있는지(OS)를 결정하는 핵심이지.”

루나는 잠시 말을 멈추고 EC2 화면의 윗부분을 가리켰다. ‘애플리케이션 및 OS 이미지(Amazon Machine Image)’와 ‘인스턴스 유형’ 항목이 눈에 들어왔다.

“여기 AMI라고 적힌 게 바로 ‘어떤 운영체제와 기본 소프트웨어가 설치된 상태로 시작할 것인가’를 고르는 선택이야. Amazon Linux, Ubuntu, Windows 같은 것들 말이지. 그리고 ‘인스턴스 유형’은 t3.micro, t2.small처럼 암호 같은 이름으로 되어 있지만, 사실은 CPU 성능과 메모리 크기의 조합을 미리 정해놓은 상품명 같은 거야.”

솔라의 눈이 동그래졌다. “아… 그럼 이 두 개는 그냥 컴퓨터 본체 사양을 고르는 거였네? 내가 용산에서 부품 고르듯이?”

“맞아. 딱 그 감각이야.” 루나는 방금 그렸던 네모 상자를 펜으로 톡톡 두드렸다. “자, 그럼 질문 하나. 이 멋진 사양의 컴퓨터 본체가 지금 우리 손에 있어. 이걸로 당장 인터넷에 접속해서 친구한테 메시지를 보낼 수 있을까?”

솔라는 노트 위의 네모 상자를 빤히 쳐다봤다. 그저 텅 빈 종이 위에 그려진, 외부와 아무런 연결선도 없는 고립된 사각형일 뿐이었다.

“아니… 못하지.” 솔라가 고개를 저었다. “이건 그냥 컴퓨터 본체 깡통이잖아. 인터넷 선을 꽂을 포트도 없고, 와이파이에 연결하는 장치도 없고… 인터넷 세상에서 이 컴퓨터를 찾아올 수 있는 주소 같은 것도 없으니까.”

그 순간, 솔라의 머릿속을 어지럽히던 수많은 옵션들 사이에 처음으로 명확한 금이 가기 시작했다. 모든 것이 한 덩어리가 아니었다. 방금까지 하나의 거대한 ‘서버’라고 뭉뚱그려 생각했던 것들이 서로 다른 역할을 가진 두 개의 그룹으로 나뉘는 느낌이었다.

“그렇구나!” 솔라가 무릎을 탁 쳤다. “AMI랑 인스턴스 유형은 서버의 ‘몸체’, 그러니까 컴퓨터 그 자체의 성능과 종류를 결정하는 거였어. 내가 뭘 할 수 있는 컴퓨터를 가질지 정하는 부분이었던 거야.”

솔라는 다시 노트북 화면을 보았다. 이제 ‘AMI’와 ‘인스턴스 유형’ 항목은 더 이상 복잡한 네트워크 설정들과 뒤섞여 보이지 않았다. 그것들은 명확히 ‘컴퓨트 사양’이라는 이름표를 달고 독립적으로 보였다. 서버를 만드는 첫 단계, 바로 서버의 근본적인 신체를 정의하는 과정이었다.

“좋아. 그럼 내 서버가 어떤 몸을 가질지는 이제 알겠어.” 솔라의 목소리에 자신감이 붙었다. 하지만 그녀의 시선은 곧 화면 아래쪽의 ‘네트워크 설정’으로 향했다. 해결된 질문 뒤로 더 큰 질문이 모습을 드러내고 있었다.

“그런데 언니, 그럼 이 멋진 몸체를 만든 다음에… 이 고립된 상자를 어떻게 바깥 세상과 연결하는 거야? 길도 없고, 주소도 없고, 문도 없는데.”

2장: 외부로 통하는 길: 서브넷과 퍼블릭 IP

솔라의 질문이 끝나자, 루나는 솔라의 노트북 화면 대신 책상 위 노트를 다시 끌어당겼다. 이전 장에서 그렸던, 외부와 단절된 네모난 ‘서버 몸체’ 그림이 그대로 남아 있었다. 루나는 말없이 펜을 들어 그 네모 상자 주위로 훨씬 더 큰 점선 사각형을 그렸다.

순식간에 ‘서버 몸체’는 더 큰 공간 안에 갇힌 존재가 되었다. 그저 고립된 상자가 아니라, 어떤 영역 안에 자리 잡은 상자가 된 것이다. 솔라는 그 점선 사각형을 보며 고개를 갸웃거렸다. 마치 집 안에 놓인 가구처럼 보였다.

“그 점선은 뭐야, 언니? 갑자기 왜 더 큰 상자를 그려?”

“솔라 네가 방금 한 질문에 대한 답을 찾으려면, 우리가 만든 이 서버 몸체가 어디에 ‘놓여있는지’부터 정해야 하거든.”

루나는 EC2 생성 화면의 ‘네트워크 설정’ 부분을 가리켰다. 솔라의 눈길이 ‘서브넷’과 ‘퍼블릭 IP 자동 할당’이라는 항목으로 향했다. 이전까지는 그저 복잡하게만 보였던 단어들이었다.

“서버 몸체가 컴퓨터 본체라면, 이 네트워크 설정은 그 컴퓨터를 어디에 둘지, 그리고 어떻게 인터넷 선을 연결할지를 정하는 과정이야. 이 컴퓨터, 지금 어디에 있지?”

“내 방?” 솔라는 얼떨결에 대답했다.

“그래, 네 방. 그리고 네 방은 우리 집의 일부지. 그리고 우리 집은 외부 인터넷 세상과 ‘공유기’를 통해 연결되어 있고.” 루나는 익숙한 비유를 꺼내 들었다. “바로 그 감각을 여기에 적용해 보는 거야. 네 노트북이 어떻게 인터넷에 연결되는지 한번 생각해 봐.”

솔라는 잠시 눈을 감고 자신의 노트북이 와이파이에 연결되는 과정을 떠올렸다. “음… 내 노트북이 켜지면, 우리 집 와이파이를 잡고… 공유기가 노트북에 ‘192.168…’로 시작하는 주소를 줘. 그러면 인터넷이 되지.”

“정확해.” 루나는 노트에 재빨리 그림을 추가했다. 큰 점선 사각형에 ‘우리 집(VPC)‘이라고 적었다. 그리고 그 안에 작은 실선 사각형 몇 개를 그리고, 그중 하나에 ‘솔라 방(서브넷)‘이라고 썼다. 그 ‘솔라 방’ 안에 원래 있던 ‘서버 몸체(EC2)’ 그림을 넣었다.

“여기서 ‘우리 집’ 전체가 AWS에서 제공하는 나만의 사설 네트워크 공간, 즉 ‘VPC’야. 그리고 그 집 안의 여러 구역, 예를 들어 ‘네 방’, ‘내 방’, ‘거실’처럼 공간을 나눈 게 바로 ‘서브넷’이지.”

솔라의 눈이 커졌다. “잠깐, 그럼 EC2 생성 화면에서 ‘서브넷’을 고르라는 건, 내가 만든 서버를 우리 집 안의 어느 방에 둘지 결정하는 거랑 똑같은 거네?”

“맞아. 서버는 허공에 떠 있을 수 없어. 반드시 VPC라는 집 안의, 서브넷이라는 특정 방 안에 위치해야 해. 그래야 네트워크에 연결될 준비가 되는 거야.”

루나는 말을 이었다. “그럼 아까 네가 말한 ‘192.168…’ 주소는 뭘까? 그 주소로 옆집 철수가 네 노트북에 바로 접속할 수 있을까?”

“아니, 그건 우리 집 안에서만 쓰는 주소니까 안되지.” 솔라는 단호하게 말했다. “그건 내부 주소잖아. 외부에서 나를 찾으려면 우리 집 공유기가 통신사에서 받은 진짜 인터넷 주소가 필요할 거야.”

그 순간, 솔라의 머릿속에서 ‘퍼블릭 IP 자동 할당’이라는 스위치가 ‘딸깍’하고 켜지는 소리가 들리는 듯했다. 지금까지 서버 몸체의 일부라고 오해했던 것들의 정체가 드러나고 있었다.

“아! 알겠다!” 솔라가 외쳤다. “서브넷은 서버를 위치시킬 ‘내부 공간’을 정하는 거고, ‘퍼블릭 IP 자동 할당’을 활성화하는 건, 외부 인터넷 세상에서 찾아올 수 있는 진짜 ‘공개 주소’를 달라고 요청하는 거구나! 마치 우리 집에 우편물이 배달될 수 있도록 도로명 주소를 받는 것처럼!”

서버 ‘몸체’와 서버로 가는 ‘길’은 완전히 다른 문제였다. AMI와 인스턴스 유형이 서버의 근육과 뇌를 결정했다면, 서브넷과 퍼블릭 IP는 그 서버가 세상과 소통할 수 있는 주소와 통로를 만들어주는 역할이었다. 하나는 존재 자체를, 다른 하나는 관계를 정의하는 선택이었다.

솔라는 다시 노트북 화면의 ‘네트워크 설정’ 부분을 바라보았다. 더 이상 혼란스럽지 않았다. ‘서브넷 선택’은 서버를 어느 동네에 둘지 정하는 일이었고, ‘퍼블릭 IP 자동 할당: 활성화’는 그 집에 누구나 찾아올 수 있도록 번지수를 부여하는 일이었다. 모든 것이 명확하게 구분되어 보였다.

“좋아. 이제 내 서버가 어디에 있고, 외부에서 어떻게 찾아올 수 있는지도 알게 됐어.” 솔라는 만족스러운 표정으로 말했다. 길과 주소가 생긴 서버는 더 이상 고립된 상자가 아니었다.

하지만 이내 새로운 질문이 고개를 들었다. 그녀의 표정이 미묘하게 바뀌었다.

“그런데 언니, 이렇게 길을 내고 주소를 온 세상에 공개해버리면… 아무나 우리 집 문 앞까지 그냥 막 찾아올 수 있는 거 아냐? 이건 좀 위험한데?“

3장: 안전한 대문: 키 페어와 보안 그룹

솔라의 걱정 어린 질문이 공중에 채 가라앉기도 전에, 루나는 조용히 움직였다. 그녀는 솔라의 노트북 화면에서 눈을 떼고, 다시 책상 위의 노트로 시선을 돌렸다. 노트에는 이전 장에서 그렸던 그림이 남아있었다. 커다란 점선 사각형 ‘우리 집(VPC)’ 안에, 작은 실선 사각형 ‘솔라 방(서브넷)’이 있고, 그 안에 네모난 ‘서버 몸체(EC2)’가 자리를 잡고 있었다. 외부 인터넷으로 향하는 화살표와 ‘퍼블릭 IP’라는 공개 주소까지 그려져, 이제 이 집은 세상과 연결된 상태였다.

루나는 말없이 펜을 들어 그 그림 위에 무언가를 덧그리기 시작했다. 그녀는 ‘우리 집(VPC)’과 외부 인터넷을 연결하는 길목에 두껍고 단단해 보이는 ‘대문’ 하나를 그려 넣었다. 이 문은 외부에서 집 안으로 들어오는 유일한 통로를 막아서는 모양새였다. 방금 길을 내고 주소를 공개했는데, 이제는 그 길을 떡하니 가로막는 대문이라니. 솔라는 의아한 표정으로 루나의 펜 끝을 지켜보았다.

“언니, 길을 열어두는 게 아니었어? 갑자기 왜 문을 그려?” 솔라의 목소리에는 미처 해소되지 않은 불안감이 묻어났다.

“솔라 네 말이 맞아. 길을 열고 주소를 공개하면 누구든 우리 집 대문 앞까지는 올 수 있어.” 루나는 펜으로 방금 그린 대문을 톡톡 두드렸다. “하지만 대문 앞까지 오는 것과, 문을 열고 안으로 들어오는 건 전혀 다른 문제지. 바로 이 지점에서 EC2 화면의 마지막 퍼즐 조각이 필요해져.”

루나는 다시 솔라의 노트북 화면을 가리켰다. 솔라의 시선이 ‘키 페어(로그인)’와 ‘네트워크 설정’ 항목 아래에 있는 ‘방화벽(보안 그룹)’으로 향했다. 지금까지는 그저 복잡하고 귀찮은 절차라고만 생각했던 부분이었다. 특히 가이드 문서마다 ‘새 키 페어를 생성하고 .pem 파일을 안전하게 보관하세요’라거나, ‘보안 그룹에서 SSH와 HTTP 포트를 여세요’ 같은 지시 사항은 의미도 모른 채 따라 해야 하는 주문처럼 느껴졌다.

“아… 저것들. 키 페어는 무슨 암호 파일 같고, 보안 그룹은 숫자가 잔뜩 적혀 있어서 그냥 시키는 대로 설정했는데… 이것들이 방금 언니가 그린 저 대문이랑 관련이 있는 거야?”

“정확히는, 저 대문을 ‘어떻게’ 열고 들어올지 정하는 규칙과 열쇠야.” 루나는 다시 집 그림 비유로 돌아왔다. “우리 집에 아무나 못 들어오게 하려면 크게 두 가지가 필요해. 첫째는 집 주인만 가진 ‘현관문 열쇠’. 둘째는 방문객에게 적용되는 ‘방문 규칙’. 예를 들면 ‘택배 기사님은 초인종만 누르고 물건은 문 앞에 두세요’ 같은 규칙 말이야.”

솔라는 잠시 생각에 잠겼다. 열쇠와 방문 규칙. 너무나 당연한 개념이었다.

“그럼… ‘키 페어’가 그 현관문 열쇠인 거야?”

“바로 그거야. 키 페어는 한 쌍(pair)으로 만들어져. 하나는 ‘자물쇠(Public Key)‘고, 다른 하나는 오직 너만 가지는 ‘열쇠(Private Key)‘지. 서버라는 집을 만들 때, 현관문에 이 특별한 자물쇠를 설치하는 거야. 그리고 네 컴퓨터에만 개인 열쇠를 보관하는 거지. 서버 관리자(root) 권한으로 집에 들어가서 가구를 옮기거나 내부 공사를 하려면, 반드시 이 열쇠가 있어야 해. 서버의 공개 주소를 알아도, 열쇠가 없는 사람은 절대 문을 열 수 없어.”

순간 솔라의 머릿속에서 복잡했던 개념이 ‘찰칵’하고 맞춰졌다. 키 페어는 서버에 접속할 수 있는 유일무이한 신분증명이었다.

“아! 그럼 ‘보안 그룹’은 ‘방문 규칙’이겠네!” 솔라가 이어서 외쳤다.

“맞아.” 루나는 노트의 ‘대문’ 옆에 작은 목록을 그리기 시작했다.

[ 방문 규칙 ] - 아무나(0.0.0.0/0) : 웹사이트 구경(HTTP)만 가능 - 나(내 IP 주소) : 열쇠(SSH) 가지고 들어올 수 있음

“보안 그룹은 누가 어떤 목적으로 우리 집에 접근할 수 있는지 정하는 규칙 목록이야. ‘0.0.0.0/0’은 ‘세상의 모든 IP 주소’, 즉 ‘아무나’라는 뜻이지. 이들에게는 HTTP라는 통로, 즉 웹 페이지만 보여주는 문만 열어주는 거야. 집 안으로는 못 들어오고, 바깥에서 창문을 통해 전시된 상품을 구경만 하게 하는 거지. 반면, ‘내 IP 주소’에서 오는 SSH 접속 요청, 즉 ‘내 컴퓨터에서 열쇠를 가지고 문을 열려고 시도하는 경우’에만 진짜 현관문을 열어주는 거야.”

이제야 모든 조각이 맞춰졌다. 서버의 몸체, 세상으로 통하는 길, 그리고 안전한 대문. EC2 생성 화면의 그 많던 옵션들은 더 이상 뒤죽박죽 섞인 부품 더미가 아니었다. 명확한 목적을 가진 세 개의 논리적 그룹이었다.

솔라는 펜을 집어 들었다. 그리고 지금까지의 대화를 정리하며 노트의 빈 공간에 자신만의 분류표를 만들기 시작했다.


<나만의 퍼블릭 웹 서버 만들기 체크리스트>

1. 서버의 본체 정하기 (컴퓨트)

  • AMI: 어떤 OS와 소프트웨어가 설치된 컴퓨터?
  • 인스턴스 유형: 얼마나 좋은 성능(CPU/메모리)의 컴퓨터?

2. 외부와 연결하기 (네트워크)

  • 서브넷: 우리 집(VPC) 안의 어느 방에 둘까?
  • 퍼블릭 IP: 외부에서 찾아올 수 있는 공개 주소는?

3. 접근 제어하기 (보안)

  • 키 페어: 서버 관리자만 가질 수 있는 마스터 키.
  • 보안 그룹: 누가, 어떤 목적으로 방문할 수 있는지 정하는 방문 규칙.

자신이 직접 만든 표를 보며 솔라는 환하게 웃었다. “이거였구나. 그냥 ‘서버 만들기’가 아니라, ‘컴퓨터 사양 고르기’, ‘네트워크에 연결하기’, ‘보안 설정하기’라는 세 가지 다른 일을 한 페이지에서 하고 있었던 거네.”

복잡하게만 보였던 EC2 인스턴스 생성 페이지가 이제는 명확한 설계도처럼 보였다. 무엇이 서버 그 자체이고, 무엇이 그 서버에 접속하기 위한 조건인지 완벽하게 구분할 수 있게 된 것이다. 솔라는 이제 자신 있게 ‘인스턴스 시작’ 버튼을 누를 수 있을 것 같았다.