개발 환경

A suite of tools and configurations used by software developers to build software.

— 소프트웨어 형상 관리 및 빌드 인프라 표준 사양서에서 정의하는, 개발 공정 효율화와 정합성 증명을 위한 개인 세팅의 학술적 개념

프로젝트 코딩을 본격 시작하기도 전에, 알 수 없는 버전 충돌과 경로 꼬임 에러창 50개를 먼저 두들겨 패며 등골 서늘한 첫날 신고식을 치르게 만드는 전산실의 입국 심사대. 새로 이직한 회사에서 '가이드 노션 문서 보고 세팅 다 끝내고 빌드 한 번 돌려보세요'라는 차가운 지시 뒤에서, 유물 라이브러리 빌드가 안 돼 식은땀을 뻘뻘 흘리는 최전선(...)

1. 개요

소스코드가 에러 없이 원활하게 생산, 수정, 가동, 모니터링될 수 있도록 개발자의 개인 장비(로컬 컴퓨터)나 독립된 원격 가상 컨테이너 위에 설치해 둔 컴파일러, IDE, Node/Java 런타임 엔진, 로컬 데이터베이스, 그리고 이들을 정교하게 엮어주는 환경 변수 등의 종합 소프트웨어 인프라 및 가상화 시스템 세팅을 뜻한다.

2. 로컬(Local), 개발(Dev), 스테이징(Staging), 운영(Prod)의 사단계 격리 장벽

프로페셔널 실무 소프트웨어 엔지니어링은 하나의 시스템에 무지성으로 소스를 고쳐 다이렉트 들이밀지 않는다. 완벽한 무중단 품질 검증을 위해 개발 환경을 4단계의 삼엄한 장벽으로 완벽히 격리한다.

  • 로컬 환경(Local): 개발자 자신의 노트북 안에서 나 혼자 마음껏 지르고 망치며 코딩을 테스트해보는 개인 운동장이다.
  • 개발 환경(Dev): 팀원들이 각자 코딩한 소스를 한 자리에 모아 깃허브로 합친 뒤, 가상의 원격 개발 클라우드 서버에 올려 연동 에러가 없는지 맞추는 통합 놀이터이다.
  • 스테이징 환경(Staging): 실제 프로덕션(운영) 서버와 100% 동일한 고스펙 장비를 갖춰두고, 가상 고객 데이터 트래픽을 가동해 데이터 정합성과 동시성 과부하를 최종 포렌식 검토하는 리허설 무대이다.
  • 운영 환경(Prod/Production): 진짜 전 세계 사용자들이 접속해 카드 결제를 쏘고 데이터를 긁어가는 실전 전장이다. 단 0.1초의 장애도 금전적 폭사 사고로 이어지므로 이 영역은 철저히 접근이 제한된다.1

3. 내 노트북에서는 잘 돌았는데? Docker의 구원 혁명

과거 개발실의 최대 넌센스 중 하나는 '내 로컬 노트북 개발 환경에서는 60FPS 속도로 매끄럽게 잘 돌았는데, 운영 서버 리눅스 장비로 이사만 가변 라이브러리 경로가 꼬여서 프로그램이 사망해 버리는 기괴한 저주'였다. 이 노트북과 저 서버의 OS 버전, 환경 변수 한 끗 차이가 파멸적 불일치를 낳았기 때문이다. 이 끔찍한 환경 불일치 잔혹사를 단 한 큐에 격파하며 현대 역사를 구원한 장본인이 바로 컨테이너 가상화 Docker(도커)이다. 도커는 내 코드뿐만 아니라, 내 코드가 돌던 OS 부속품 환경 설정 전체를 하나의 단단한 압축 컨테이너 이미지로 구워 배포해 버린다. 이 기적 덕분에 내 노트북에서 돌던 그 환경 100% 그대로 클라우드 아마존 웹서비스 서버에서도 단 1비트의 꼬임 없이 똑같이 실행되는 완벽한 호환성 낙원이 수립되었다.

4. 관련 밈 및 드립

4.1. 그럼 고객 컴퓨터에 님 노트북을 통째로 설치하셈

운영 서버에서 빌드 에러가 나거나 참사 버그가 터졌을 때 주니어 코더가 등 뒤의 시니어 아키텍트에게 '제 노트북 개발 환경에서는 버그 한 줄 없이 정말 이쁘게 잘 돌았었는데요...'라며 억울해 할 때, 시니어가 자비 없이 뺨 때리듯 촌철살인으로 날려버리는 초엘리트 냉소 드립이다. 이들은 '그렇게 네 노트북 환경이 자랑스러우면, 고객 수십만 명의 집에 네 노트북 장비를 트럭으로 배달해서 서버로 쓰게 보급해라'라며 훈수를 두곤 한다.(...)

5. 여담

  • 이직 첫날의 시련 (Onboarding): 신입 사원이 오면 사수들은 '노션에 개발 환경 세팅 가이드 친절히 적혀 있으니 천천히 하세요'라며 새 깡통 노트북을 쥐여준다. 하지만 노션 문서는 1년 전에 작성되어 있어, 가이드대로 따라 하면 100% 확률로 최신 OS 호환성 충돌이 터져 첫날 빌드조차 못 한 채 온종일 구글 삽질만 하다가 눈치를 보며 퇴근하는 지독한 입국 신고식 시련이 도사리고 있다.
  • 환경 변수 (.env) 누출 대참사: 개발 환경에서 테스트하기 위해 사내 DB 접속 비밀번호와 구글 API 보안키를 소스 내에 무심코 하드코딩해 두었다가, 이를 그대로 깃허브 공용 저장소(github)에 커밋 푸시해 올리는 참사가 수시로 터진다. 해커들의 스캐너 봇이 0.1초 만에 이를 낚아채 사내 서버를 털거나 수백만 원짜리 AWS 비트코인 채굴 청구서 폭탄을 날리기 때문에, 개발 환경의 보안 자산은 언제나 코드와 격리된 .env 파일에 락을 잠가 보관해야 한다.
  • 개발자들의 성스러운 테마 튜닝: 개발 환경 구축의 화룡점정은 사실 컴파일 설정보다 에디터 테마 꾸미기이다. 주니어들은 정작 로직 코딩 알고리즘은 짜지도 않았으면서, 에디터 폰트는 뭐가 코딩 가독성이 좋은지(D2Coding vs JetBrains Mono), 터미널 프롬프트 테마는 어느 네온 초록색 간지가 뿜어져 나오는지 하루 종일 테마 쇼핑에 영혼을 불태우곤 한다.

6. 관련 문서

각주

  1. 실제로 이 다단계 환경의 데이터베이스 데이터들도 서로 오염되는 것을 철저히 격리하기 위해, DEV DB는 가짜 더미 데이터로 꽉 채워 돌리고, PROD DB는 삼엄한 방화벽과 감사 로깅 세팅 속에서 데이터 격리를 철저히 수리 운영하고 있다.