개요
친구들과 얘기하다가 자신의 만 나이가 stage
DB라 자기만 만나이로 산다는 얘기를 나눴다.
여기서 stage
가 정확히 무엇을 의미하는지 모르겠어서 찾아보았다!
일단, 이 용어는 개발 및 운영에 사용할 서버들을 지칭하는 용어이다.
다양한 서버들을 지칭하는 용어들에 대해 알아보자
서버 개발환경의 분류
- 개발 과정에 따라, 각자 역할과 목적이 다르며 시스템의 크기도 다르다
- 꼭 모든 환경을 갖출 필요는 없으며, 프로젝트 환경에 따라 각 환경을 합치거나 생략해도 된다
1. local - 로컬 개발 환경
- 개발을 하려면, 각자 개발자 PC에 개발 및 테스트 환경이 셋업되어 있어야 한다
- 이 때, 각 개발자마다 설치된 서버환경을
local
환경이라 한다 - ex) 각 PC에 mySql 등의 DB와 Tomcat 등의 제품을 설치하고, Eclipse와 같은 개발툴과 컴파일러 등이 설치되어 있는 환경
- 이 때, 각 개발자마다 설치된 서버환경을
- 이
local
환경을 구축할 때 가장 주의해야할 점은 모든 개발자가 같은 개발환경을 사용해야한다는 것- 다른 version의 JVM이나 Tomcat을 사용하거나, Lang(문자 local 설정)을 서로 다르게 설정해서, 정작 코드를 합칠 때 문제가 생기는 경우가 많다
- 개발환경을 표준화하는 방법은 여러 방법이 있다
- 전체 개발환경(JDK, Eclipse, 라이브러리)을 zip 파일 형태로 묶어 사용하거나, maven 등의 빌드 자동화 도구로 버전을 지정하여 관리하는 방식 등이 있다
2. dev - 서버 개발 환경
- 개발 환경은 개발자들이 만든 코드를 합쳐서 서버 환경에서 테스트해볼 수 있는 환경이다
- 소스코드를
형상관리 시스템
(ex.git
)에commit
하면, 코드는 이dev
환경에 배포되고, 이 환경에서 테스트가 이뤄진다
- 소스코드를
- 기능 개발을 위주로 하기 때문에, 서버의 환경은
production
보다 훨씬 작다- 예를 들어,
production
이 클러스터링 환경으로 수개의 서버로 구성된다면,dev
환경은 한 두개의 서버로 기능 구현이 가능한 정도로만 구축하는게 일반적이다
- 예를 들어,
3. Integration - 통합 개발 환경
- 통합 개발 환경은 여러개의 컴포넌트를 동시 개발하는 프로젝트가 있고, 각 컴포넌트가 다른 컴포넌트에 대해 dependency를 가지고 있을 때, 컴포넌트를 통합 및 테스트 하는 환경으로 사용한다
- 예를 들어, 단말과 서버를 같이 개발하는 경우, 이
integration
환경에서 통합을 한다
- 예를 들어, 단말과 서버를 같이 개발하는 경우, 이
dev
환경과 마찬가지고, 최소한의 set으로 구성하되,dev
환경에서 release가 되면 주기적으로 deploy 한다
4. QA - 테스팅 환경
- 테스팅 환경은 QA 엔지니어에 의해 사용되는 환경이다
- short release 주기에 따라 개발환경에서 QA 환경으로 배포되고, 여기서 기능 및 비기능(Load Test) 등을 QA 엔지니어가 수행한다
- 비 기능 테스트 수행시에는
production
과 거의 유사한 환경을 만들어놓고 테스트를 수행한다- 경우에 따라, 비기능 테스트를 release 전에, production 환경에서 직접 수행하는 경우도 있다
- 이 경우에는 release cycle이 아주 긴 경우 주로 사용하는 방법으로, 예시로 기업의 내부 IT 시스템을 만들어 사용할시 이런 방식을 사용한다
- 경우에 따라, 비기능 테스트를 release 전에, production 환경에서 직접 수행하는 경우도 있다
5. staging - 스테이징 환경
- 운영환경과 거의 동일한 환경을 만들어 놓고, 운영환경으로 이전하기 전에 여러가지 비 기능적인 부분 (Security, 성능, 장애 등) 을 검증하는 환경이다
6. production - 운영 환경
- 실제 서비스를 위한 운영 환경이다
정리
- 대부분 개발환경은 별도로 운영하는 것이 일반적이고, 상황에 따라서 integration, qa, staging 환경은 요구 사항에 따라서 합치거나 별도 운영한다
- 환경이 많아지면 다양한 형태의 검증과
stakeholder
(테스터, 개발자, 사용자 등) 별로 테스트하기 쉽지만- 반대로 각 환경을 유지하는데 필요한 서버들과 운영 인력이 많이 소요된다는 단점도 있다
- 따라서, 요즘과 같이
가상화 환경
을 사용하는 경우에는이미지
를 만들어 놨다가, 실제 테스트나 사용할 때에만가상 서버
에 환경을deploy
해서 사용하고, 사용이 끝나면 다시 이미지를 스토리지(storage
)에 저장해놓는 전략을 많이 사용한다
내가 있는 프로젝트는
통합 개발 환경
&staging
환경을 짬뽕해놓은 테스트 환경(개발서버)이 있다- 해당 개발환경에 실서버 배포 전에 코드를 올려보고, 다른 컴포넌트와 충돌은 안나는지, 실 서버환경에 올렸을 때 문제가 없을지 확인해보고 배포하는 목적이다
- 생각보다 배포툴로 빌드를 말아서 올릴 때 문제가 생기는 경우가 있을 수 있기 때문에, 이렇게 개발환경에서 한 번 확인해주는 방법이 배포 안정성에 도움을 주는 것 같다!
참고사이트
'개발지식 > 빌드&배포' 카테고리의 다른 글
[Git] 깃허브 소스저장소의 개념(feat. 궁금증 해결) (0) | 2023.11.23 |
---|