비개발자를 위한 IT 상식 #3 서버, 클라우드, 그리고 배포

5 분 소요

앞의 두 글에서 사용자 눈에 보이지 않는 백엔드와 API를 살펴봤습니다. 그런데 한 가지 질문이 남습니다. 그 백엔드와 API는 대체 어디에서 실행되고 있을까요. 개발자의 노트북이 꺼져 있어도 우리는 새벽 세 시에 앱을 켜서 주문을 할 수 있습니다. 그렇다면 그 프로그램은 어딘가 다른 곳에서 계속 실행되고 있다는 뜻입니다.

그 어딘가가 바로 서버입니다. 그리고 개발자가 만든 코드를 그 서버에 올려 사용자에게 공개하는 일을 배포라고 부릅니다. “서버 내려갔어요”, “지금 배포 중이에요”, “운영에 반영됐어요” 같은 말은 모두 이 이야기입니다. 이번 글에서는 서버, 클라우드, 배포라는 세 단어를 차례로 풀어보겠습니다.

이번 시리즈는 비개발자를 위한 IT 상식 5편으로 구성됩니다.

  • #1 웹사이트는 무엇으로 이루어지는가 — 프론트엔드,백엔드,데이터베이스
  • #2 API란 무엇인가 — 서비스끼리 대화하는 약속
  • #3 서버, 클라우드, 그리고 배포 ← 이번 글
  • #4 버그, 핫픽스, 롤백 — 개발자가 장애에 대응하는 법
  • #5 Git과 버전 관리 — 여러 명이 한 코드를 고치는 법

서버는 항상 켜져 있는 컴퓨터입니다 #

서버라는 말이 거창하게 들리지만, 본질은 컴퓨터입니다. 우리가 쓰는 노트북이나 데스크톱과 같은 컴퓨터인데, 역할이 다릅니다. 서버는 다른 컴퓨터의 요청을 받아 처리해 주는 일을 전담하는 컴퓨터입니다. 서버라는 이름 자체가 “제공하는 쪽"이라는 뜻입니다.

지난 글에서 본 백엔드 프로그램이 바로 이 서버 위에서 실행됩니다. 사용자의 앱이 API로 요청을 보내면, 서버에서 실행되던 백엔드가 그 요청을 받아 처리하고 응답합니다. 사용자가 전 세계 어디에 있든, 새벽이든 한낮이든 요청을 보낼 수 있으려면 이 서버가 잠들지 않고 계속 켜져 있어야 합니다.

여기서 내 노트북과의 차이가 분명해집니다. 내 노트북은 내가 닫으면 꺼지고, 한 번에 나 한 사람만 씁니다. 반면 서버는 24시간 켜진 채로, 수천 수만 명의 요청을 동시에 받아내야 합니다. 그래서 잘 꺼지지 않도록, 그리고 많은 요청을 견디도록 따로 마련한 컴퓨터를 서버라고 부릅니다.

그 서버를 직접 사지 않고 빌리는 것이 클라우드입니다 #

그렇다면 이 서버는 누가 마련할까요. 예전에는 회사가 직접 서버 컴퓨터를 사서 전산실에 두고 관리했습니다. 하지만 요즘은 대부분 클라우드를 씁니다. 클라우드는 거대한 데이터센터의 컴퓨터를 필요한 만큼 빌려 쓰고, 쓴 만큼 요금을 내는 방식입니다.

직접 서버를 사면 비싼 장비를 미리 갖추고 고장과 관리까지 떠안아야 합니다. 클라우드를 쓰면 몇 분 만에 서버를 켜고, 사용자가 몰리면 수를 늘리고, 한가하면 줄일 수 있습니다. 그래서 오늘날 많은 서비스의 백엔드는 클라우드에서 빌린 서버 위에서 구동됩니다.

클라우드가 무엇인지 더 자세히 알고 싶다면 클라우드란 결국 남의 컴퓨터를 빌리는 것 글을 먼저 읽어 보시길 권합니다. 이 글에서는 “백엔드가 실행되는 서버를 클라우드에서 빌려 쓴다” 정도로만 짚고 넘어가겠습니다.

배포는 만든 코드를 서버에 올려 공개하는 일입니다 #

이제 배포 차례입니다. 개발자는 보통 자기 컴퓨터에서 코드를 작성하고 시험합니다. 하지만 그 코드가 개발자의 컴퓨터 안에만 있으면 사용자는 쓸 수 없습니다. 만든 코드를 사용자가 접속하는 서버에 올려서, 실제로 동작하게 만들어야 합니다. 이 과정을 배포라고 부릅니다.

새로운 기능을 만들거나 버그를 고쳤을 때, 개발자는 그 변경을 배포해야 비로소 사용자에게 반영됩니다. “이 기능 다 만들었어요"와 “이 기능 배포됐어요"는 다른 말입니다. 만들어 두기만 하고 배포하지 않았다면, 사용자 화면에는 아직 아무것도 바뀌지 않은 상태입니다.

그래서 개발 현장에서는 환경을 나눠 둡니다. 개발자가 마음껏 시험하는 개발 환경이 있고, 실제 사용자가 쓰는 운영 환경이 따로 있습니다. 운영 환경은 프로덕션이라고도 부릅니다. 새 코드는 보통 개발 환경에서 충분히 확인한 뒤에 운영 환경으로 배포합니다. “운영에 반영됐어요"라는 말은 변경이 실제 사용자에게까지 나갔다는 뜻입니다.

실무 대화가 이렇게 풀립니다 #

이제 몇 가지 익숙한 말이 다르게 들릴 것입니다.

  • “서버 내려갔어요"는 백엔드가 실행되던 서버에 문제가 생겨, 요청을 처리하지 못하는 상태라는 뜻입니다. 이때는 화면도 함께 멈추거나 오류가 납니다.
  • “지금 배포 중이에요"는 새 코드를 서버에 올리는 작업이 진행 중이라는 뜻입니다. 배포하는 잠깐 동안 서비스가 불안정할 수 있어서, 요즘은 사용자가 눈치채지 못하게 끊김 없이 배포하는 방법을 많이 씁니다.
  • “개발에선 되는데 운영에선 안 돼요"는 개발 환경과 운영 환경의 차이에서 오는 문제입니다. 두 환경이 똑같지 않기 때문에 종종 벌어집니다.

왜 비개발자가 알면 일이 편해지는가 #

서버와 배포를 이해하면 일정과 상황을 읽는 눈이 생깁니다.

  • “언제 반영돼요?“의 답을 가늠할 수 있습니다. 기능을 다 만들었어도 배포라는 단계가 남아 있고, 운영에 안전하게 올리려면 확인 시간이 필요합니다. “만들었다"와 “사용자에게 나갔다” 사이의 간격을 이해하게 됩니다.
  • 장애 상황을 침착하게 읽을 수 있습니다. “서버 문제"인지 “방금 배포 때문"인지 구분되면, 지금이 어떤 상황이고 얼마나 걸릴지 함께 가늠할 수 있습니다.
  • 비용 감각이 생깁니다. 서버는 켜 두는 동안 클라우드 요금이 발생합니다. 사용자가 늘면 서버도 늘려야 하므로 비용도 함께 커집니다.

정리 #

이번 글에서는 백엔드가 실제로 어디서 동작하는지 살펴봤습니다.

  • 서버는 사용자의 요청을 받아 처리하기 위해 항상 켜져 있는 컴퓨터입니다.
  • 클라우드는 그 서버를 직접 사지 않고 빌려 쓰는 방식입니다.
  • 배포는 개발자가 만든 코드를 서버에 올려 실제 사용자에게 공개하는 일입니다.

그런데 배포한 코드에 문제가 있으면 어떻게 될까요. 잘못된 변경이 운영 환경에 나가 사용자가 영향을 받는 순간, 개발팀은 빠르게 대응해야 합니다. 다음 글에서는 이런 상황에서 등장하는 버그, 핫픽스, 롤백이 무엇인지, 개발자가 장애에 어떻게 대응하는지 알아보겠습니다.

X