로컬 · 스테이징 · 운영 환경
Local / Staging / Production
로컬이란?
- 로컬(내 PC)→스테이징(테스트)→운영(실사용)
- 단계로 나눠 안전 배포
- 프로덕션은 실사용자용
환경을 나누는 진짜 이유는 테스트를 한 번 더 하기 위해서가 아니라, 문제를 발견하는 시점을 앞으로 당기기 위해서입니다. 로컬에서 잡은 버그는 개발자 한 명이 10분이면 고치지만, 같은 버그가 프로덕션에서 터지면 고객센터 문의, 환불 처리, 사후 보고서까지 따라붙습니다. 환경이 하나뿐인 팀은 고칠 기회가 한 번뿐이고, 세 단계로 나눈 팀은 같은 실수를 세 번 걸러낼 기회를 갖습니다. 배포가 느려지는 게 아니라 되돌리는 비용이 싸지는 구조입니다.
조직 규모에 따라 단계 수는 달라집니다. 개발자 3~5명이면 로컬·스테이징·프로덕션 3단계로 충분하고, 20명이 넘어가면 개발(dev)·QA·스테이징을 따로 두는 4~5단계가 흔합니다. 다만 핵심은 개수가 아니라 스테이징이 운영과 얼마나 닮았는가입니다. 서버 사양, DB 버전, 결제·배송 같은 외부 API의 테스트 계정, 데이터 건수가 다르면 스테이징 통과는 도장 찍는 형식 절차로 전락합니다. 운영 데이터를 복사해 쓸 때는 주민번호·연락처·카드정보를 마스킹한 뒤 옮기는 게 원칙이고, API 키와 DB 접속 정보는 코드가 아니라 환경변수나 시크릿 저장소에 둡니다.
현장에서 제일 자주 나오는 말이 '제 로컬에서는 됐는데요'입니다. 대개 로컬에만 있던 설정 파일이나 임시 데이터에 기대고 있었다는 뜻이라, 로컬 성공은 검증이 아닙니다. 더 위험한 건 급하니까 이번만 운영에서 직접 고치자는 판단인데, 그 한 줄은 다음 배포 때 덮어써지고 원인 추적도 불가능해집니다. 스테이징을 만들어 놓고 관리하지 않는 것도 흔한 함정입니다. 라이브러리 버전이 반년째 뒤처진 스테이징은 통과해도 아무것도 보증하지 못합니다. 마지막으로 로컬 PC에서 운영 DB에 직접 접속하는 관행은 조건절 오타 한 번으로 실데이터를 날리는 사고로 이어집니다.
소프트웨어 배포의 위험을 줄이기 위해 개발·테스트·운영 환경을 분리하는 관행에서 정립됐고, 클라우드·CI/CD와 함께 표준이 됐습니다.
가상의 사례로 살펴보겠습니다. 임직원 320명 규모의 온라인 식자재 유통사 A사입니다. 개발팀 6명이 스테이징 없이 운영 서버에서 바로 코드를 고치는 방식으로 3년을 버텼습니다. 지난 분기에만 결제 장애가 4회 났고, 그중 금요일 밤 장애는 복구까지 2시간 20분이 걸려 주문 1,100건이 취소됐습니다.
- CTO가 장애 보고서를 펼쳐놓고 '원인을 아무도 설명 못 하는 게 더 문제'라고 말한 뒤, 운영 서버 직접 수정을 그날부로 금지했습니다.
- 백엔드 리더가 2주에 걸쳐 운영과 같은 사양의 스테이징 서버를 세웠고, 결제·배송사 연동은 테스트 계정으로, 고객 데이터 12만 건은 이름과 연락처를 마스킹해 옮겼습니다.
- 코드에 박혀 있던 운영 DB 비밀번호와 API 키 17개를 걷어내 환경변수로 분리했고, 로컬 PC에서 운영 DB로 붙던 계정은 DBA 1명만 남기고 전부 회수했습니다.
- QA 담당자가 스테이징에서 결제·환불·정산 시나리오 32개를 돌리고 통과 기록을 남겨야 운영 배포 버튼이 열리도록 배포 파이프라인을 바꿨습니다.
- 6개월 뒤 결제 장애는 분기 4회에서 0회, 평균 복구 시간은 2시간 20분에서 18분으로 줄었고, 배포 횟수는 주 1회에서 주 3회로 오히려 늘었습니다.