무한의 창고와 우리만의 영토 (S3 & VPC)

문과생 성시은의 AWS 정복기

by 혼북헌터 민짱

“대표님! 동시 접속자 50명 넘었습니다! 지금… 70명! 와, 미쳤다!”


월요일 오전, 이철민의 목소리에는 월요병 따위는 날려버릴 듯한 흥분이 가득했다. 사무실 한편에 비치된 40인치 모니터에는 구글 애널리틱스의 실시간 접속 현황 그래프가, 마치 주말 사이 억눌렸던 등산객처럼 가파른 우상향 곡선을 그리고 있었다. 성시은은 벅차오르는 가슴을 애써 진정시키며 자신의 자리에서 일어났다.


죽음의 문턱에서 돌아온 ‘커넥트-AI’가 구름 위에서 다시 날갯짓을 시작한 지 일주일. 서버가 터졌다는 소문은 ‘전설적인 조력자의 등장으로 단 하루 만에 서비스를 복구하고 인프라를 10배로 확장했다’는, 훨씬 더 극적인 영웅 서사로 바뀌어 IT 커뮤니티에 퍼져나갔다. 위기가 오히려 바이럴 마케팅이 된 셈이었다.


“서준 님, 이대로라면 서버 증설… 아니, EC2 인스턴스 추가해야 하는 거 아니에요? 우리 스쿠터(t2.micro) 터지는 거 아니에요?”


시은의 들뜬 목소리에, 그러나 박서준은 웃지 못했다. 그의 눈은 실시간 접속 현황이 아닌, 다른 모니터에 떠 있는 고객 문의 채널에 고정되어 있었다. 그의 미간에 잡힌 희미한 주름을 시은은 놓치지 않았다.


“대표님, 트래픽이 문제가 아닙니다. 지금 고객 채널이… 난리 났습니다.”


“네? 또 무슨 일인데요?”


시은이 그의 자리로 다가가 화면을 들여다보았다. 칭찬과 격려가 가득할 것이라 생각했던 채널에는, 지난주와는 결이 다른 불만들이 폭포수처럼 쏟아지고 있었다.


‘서비스 아이디어는 정말 좋은데, 프로필 사진 한 장 뜨는 데 30초가 걸리네요. 제 얼굴이 그렇게 무거운가요?’

‘로딩 화면만 보다가 앱 껐습니다. 제 소중한 데이터 돌려주세요.’

‘혹시 저희 집 인터넷이 느린가요? 넷플릭스 4K는 잘만 나오는데…’

‘이 앱은 인내심 테스트용인가요? 콘텐츠 생성 버튼 누르고 양치하고 왔는데 아직도 로딩 중이네요.’


지난주의 문제는 ‘죽음(Dead)’이었다면, 이번 주의 문제는 ‘마비(Paralysis)’였다. 서비스는 살아있지만, 제대로 움직이지 못했다. 시은의 얼굴에서 웃음기가 사라졌다.


“이게… 어떻게 된 거죠? 서버는 멀쩡하다면서요?”


“서버는 멀쩡합니다. CPU 사용률도 20%대로 아주 안정적이고요.” 서준이 피곤한 목소리로 설명했다. “문제는… 우리 EC2 인스턴스가 너무 많은 일을 동시에 하고 있다는 겁니다.”


그는 화이트보드에 네모 하나를 그리고 ‘EC2’라고 적었다.


“사용자가 접속하면, 우리 EC2는 글씨를 보여주고(HTML), 디자인을 입히고(CSS), 버튼도 누르게 하고(JavaScript), 동시에 사용자의 프로필 사진이나 광고 배너 같은 이미지 파일도 보내줘야 합니다. 사용자가 적을 땐 이게 문제가 안 됐죠. 그런데 지금처럼 수십 명이 동시에 ‘사진 보여줘!’, ‘배너 보여줘!’라고 소리치니까, 이미지 파일을 보내주는 길목에 병목이 생긴 겁니다. 도로는 1차선인데, 차가 수십 대가 몰린 거죠.”


“이미지 크기를 줄이면 안 되나요?” 옆에서 듣고 있던 철민이 명쾌한 해답이라는 듯 말했다. “요즘 사람들 화질 그렇게 신경 안 써요. 화질 좀 포기하더라도 속도가 우선이죠!”


“그것도 한계가 있습니다.” 서준이 고개를 저었다. “이미 웹에 최적화된 포맷으로 충분히 압축했어요. 여기서 더 줄이면… 10년 전 싸이월드 시절 화질이 될 겁니다. 저희 서비스의 첫인상은 ‘세련됨’인데, 이미지가 깨져 보이면 허접해 보일 거에요.”


“그럼 어떡해요? 길을 넓혀야 하나요? EC2 인스턴스를 더 좋은 걸로 바꿔요? 스쿠터 말고 세단으로?” 시은이 물었다.


“그것도 방법이지만, 근본적인 해결책은 아닙니다. 세단으로 바꿔도 길은 여전히 1차선이니까요. 결국 또 막힐 겁니다.”


바로 그때, 시은의 노트북에서 ‘띵!’ 하는 슬랙 알림이 울렸다. 안민준이었다. 그는 어떠한 인사도 없이, 마치 CCTV로 모든 상황을 지켜보고 있었다는 듯 짧은 메시지만을 보내왔다.


[안민준] : 혹시 미슐랭 스타를 받은 레스토랑에 갔는데, 주방장 혼자서 입구에서 손님 인사하고, 주문받고, 요리하고, 서빙하고, 계산하고, 심지어 주방 옆 냉장고에서 음료수까지 꺼내주고 있으면 어떤 생각이 드시나요?


시은은 잠시 그의 비유를 상상했다. 눈코 뜰 새 없이 뛰어다니는 백종원 같은 셰프의 모습이 떠올랐다.


[성시은] : 음… 그 주방장님 곧 쓰러지시겠구나, 그리고 음식은 엄청 늦게 나오겠구나 싶겠죠. 아무리 요리 실력이 좋아도요.


[안민준] : 바로 그겁니다. 지금 박 개발자님이 만든 EC2가 그 주방장입니다. EC2라는 주방에서 혼자 모든 걸 하고 있는 거죠.


[성시은] : 그럼 어떻게 해야 하죠? 주방장을 더 뽑아야 하나요? EC2를 여러 대 돌려야 한다는 말씀이신가요?


[안민준] : 아니요. 일을 나눠야죠. 불을 쓰고 섬세한 기술이 필요한 ‘요리’처럼 복잡한 건 주방장이 계속하고, 냉장고에서 음료수 꺼내주고, 미리 만들어둔 밑반찬 내어주는 것처럼 단순하고 반복적인 일은 전담 직원을 따로 두는 겁니다. 홀 서빙 직원이요.


그는 링크 하나를 공유했다. ‘Amazon S3’라고 적혀 있었다.


“S3… Simple Storage Service.” 서준이 나지막이 읊조렸다. “단순 스토리지 서비스. 거의 무한대에 가까운 용량의 파일 저장소. 이미지나 영상, CSS 파일 같은 정적 파일을 저장하고 전송하는 데 최적화되어 있죠.”


“정적 파일이요?” 시은이 되물었다.


“네. 한번 올려두면 내용이 거의 바뀌지 않는 파일들입니다. 음료수나 밑반찬처럼요.” 서준의 눈에 조금씩 빛이 돌아오기 시작했다. “반대로 사용자의 요청에 따라 실시간으로 내용이 바뀌는 건 동적 파일이라고 하고요. 이건 요리죠.”


“그럼 저기에 이미지 파일을 다 옮기면, 우리 주방장님은 요리에만 집중할 수 있게 되는 건가요?”


“네, 대표님!” 서준의 목소리가 커졌다. “EC2는 사용자의 요청을 처리하고 동적인 콘텐츠를 만들어내는 ‘두뇌’ 역할만 하고, 이미지나 CSS 파일 전송은 S3라는 ‘거대한 창고 겸 전문 배달부’가 전담하게 되는 거죠. 그럼 속도는… 비교할 수 없을 만큼 빨라질 겁니다. 왜 이 생각을 못 했지….”


서준과 철민은 그날 오후 내내, 마치 이삿짐센터 직원처럼 서비스의 모든 이미지 파일과 CSS, JavaScript 파일들을 S3로 옮기는 작업에 매달렸다. 그리고 저녁 무렵, 시은은 자신의 스마트폰으로 다시 ‘커넥트-AI’에 접속했다.


놀라웠다. 기적 같았다.


이전에는 버벅거리며 하나씩, 마치 ‘나 여기 있소’ 하고 힘겹게 존재감을 드러내던 이미지들이, 이제는 마치 원래 그 자리에 있었다는 듯 손가락을 스크롤하는 속도에 맞춰 비단처럼 부드럽게 화면에 떠올랐다. 고객 게시판의 불만 글 위로, ‘갑자기 앱이 날아다니네요. 개발자님들 갈아 넣으셨나 봐요 ㅠㅠ’라는 감탄의 글이 하나둘씩 올라오기 시작했다.


문제가 해결되었다는 안도감에 시은이 긴 한숨을 내쉬는 순간, 또다시 안민준의 메시지가 도착했다.


[안민준] : 레스토랑이 빨라지고 손님이 많아지니 좋으시겠습니다. 이제 돈 버실 일만 남았네요.


[성시은] : 네! 다 안민준 님 덕분입니다. 정말 감사합니다. 조만간 식사 한번 대접하겠습니다.


[안민준] : 그런데, 한 가지 문제가 있습니다. 지금 대표님 레스토랑은 담벼락도, 심지어 문도 없이 길 한복판에 주방과 테이블만 덩그러니 놓여있는 상태입니다.


시은은 그의 비유를 이해할 수 없었다.


[성시은] : 그게 무슨 말씀이신가요? 저희 서비스 잘 돌아가는데요?


[안민준] : 아무나 들어와서 주방을 어슬렁거리다가, 레시피를 훔쳐 가거나, 비싼 식재료에 독을 탈 수도 있다는 뜻입니다. 손님인 척하는 강도가 마음대로 주방에 들어와 칼을 훔쳐갈 수 있는 구조라고요.


그의 말에 시은의 등골이 오싹해졌다.


[성시은] : 지금 우리 서버가… 그렇게 위험한 상태인가요?


[안민준] : 네. 인터넷이라는 거대한 광장에 그대로 노출되어 있으니까요. 지금은 운이 좋아서 아무 일도 없는 겁니다. 이제 우리만의 ‘땅’을 사고, 높은 ‘울타리’를 쳐야 합니다. 그리고 ‘경비원이 24시간 지키는 정문’을 하나만 만들어서, 손님들은 반드시 그 문으로만 들어오게 해야죠. 주방은 그 울타리 가장 안쪽, 아무나 들어올 수 없는 곳에 숨겨두고요.


그가 또 다른 링크를 공유했다. VPC (Virtual Private Cloud).


“가상 사설 클라우드…” 서준의 표정이 다시 굳어졌다. “네트워킹의 영역입니다. AWS 계정 안에, 외부와 논리적으로 완전히 격리된 우리만 사용할 수 있는 독립적인 네트워크 공간을 만드는 거죠. 이건… S3처럼 파일 몇 개 옮기는 작업이 아닙니다. 한번 잘못 만들면 전부 허물고 다시 지어야 할 수도 있어요. 이건… 신도시를 설계하는 것과 같습니다.”


“그래도… 해야죠.” 시은이 단호하게 말했다. “길 한복판에서 장사를 계속할 순 없잖아요. 우리 고객들의 소중한 정보가 담긴 주방인데. 강도가 한번 다녀가면, 이 가게는 그걸로 끝이에요.”


그날 밤, 세 사람은 퇴근도 잊은 채 안민준이 보내준 가이드와 씨름하며 그들의 첫 번째 ‘영토’를 설계하기 시작했다. 10.0.0.0/16 같은 암호 같은 숫자로 땅의 크기를 정하고, 외부와 연결될 ‘상업 지구(Public Subnet

)’와 데이터베이스처럼 중요한 시설을 숨겨둘 ‘보안 주거 지구(Private Subnet)’를 나누었다. 인터넷이라는 외부 세계와 통하는 유일한 ‘정문(Internet Gateway)’을 만들고, 각 구역의 차량들이 어떤 길로 다녀야 할지 정해주는 ‘도로 교통법(Route Table)’을 설정했다.


아직은 텅 빈 가상의 땅이었지만, 시은은 그곳에 앞으로 지어질 수많은 건물과, 그 안에서 북적이게 될 사람들을 상상했다. 이것은 단순한 서버 이전 작업이 아니었다. 구름 위에, 그들만의 안전하고 번영할 왕국을 건설하는 첫 삽을 뜨는 역사적인 순간이었다.


▶ 3화 기술 TIP

S3 (Simple Storage Service): ‘단순 스토리지 서비스’라는 이름처럼, 파일(객체)을 저장하고 검색하는 기능에 특화된 서비스입니다. 거의 무한대에 가까운 저장 공간을 제공하며, 99.999999999%라는 경이로운 내구성을 갖도록 설계되었습니다. 이미지, 동영상, 로그 파일, 백업 데이터 등 웹사이트의 정적 콘텐츠를 저장하고 사용자에게 직접 전송하는 용도로 널리 사용됩니다. EC2의 부담을 덜어주어 웹사이트의 전반적인 속도를 크게 향상시킬 수 있습니다.

정적 콘텐츠 vs 동적 콘텐츠: 정적 콘텐츠는 이미지, CSS, JavaScript 파일처럼 한번 저장되면 내용이 변하지 않는 파일을 의미합니다. 안민준의 비유처럼 ‘미리 만들어둔 밑반찬’이나 ‘냉장고 속 음료수’와 같습니다. 반면 동적 콘텐츠는 사용자의 요청에 따라 서버가 실시간으로 데이터베이스를 조회하고 계산해서 만들어내는 결과물(예: 개인화된 추천 목록, 현재 시간)을 의미합니다. 이것이 바로 ‘주방장의 요리’입니다. S3는 정적 콘텐츠 처리에, EC2는 동적 콘텐츠 처리에 강점을 가집니다.

VPC (Virtual Private Cloud): AWS 클라우드 내에 논리적으로 격리된 사용자 전용 가상 네트워크 공간입니다. 1 사용자가 직접 IP 주소 범위를 선택하고, 서브넷을 생성하며, 라우팅 테이블 및 네트워크 게이트웨이를 구성하는 등 가상 네트워크 환경을 완벽하게 제어할 수 있습니다. 3 VPC를 사용하면 중요한 자원(예: 데이터베이스)을 외부에서 직접 접근할 수 없는 안전한 공간에 배치하여 보안을 크게 강화할 수 있습니다. 안민준의 ‘울타리 친 우리 땅’ 비유가 바로 VPC의 핵심 개념입니다.

VPC의 핵심 구성 요소:

Subnet (서브넷): VPC라는 큰 땅을 용도에 맞게 나눈 작은 구역들입니다. 일반적으로 인터넷과 직접 통신이 가능한 ‘퍼블릭 서브넷’(상업 지구)과, 외부에서는 접근할 수 없고 내부 통신만 가능한 ‘프라이빗 서브넷’(보안 주거 지구)으로 나누어 사용합니다. 웹 서버는 퍼블릭 서브넷에, DB 서버는 프라이빗 서브넷에 배치하는 것이 일반적인 보안 구성입니다.

Internet Gateway (인터넷 게이트웨이): VPC와 인터넷 간의 통신을 가능하게 하는 ‘정문’입니다.

Route Table (라우팅 테이블): 네트워크 트래픽이 어디로 가야 할지를 결정하는 ‘도로 교통 표지판’ 또는 ‘내비게이션 규칙’의 집합입니다. 예를 들어, ‘인터넷으로 나가는 모든 차량은 인터넷 게이트웨이로 가라’와 같은 규칙을 정의합니다.

keyword
월, 수, 금 연재