기록공간

개발 환경(Development Environment) 본문

Software Engineering

개발 환경(Development Environment)

입코딩 2022. 1. 24. 14:15
반응형

일반적인 개발환경은 아래 그림과 같이 나뉘어 진다. 

각각 개발 과정에 따라, 각자의 역할과 목적이 다르고, 그에 따른 시스템의 크기도 다르다.

 

꼭 모든 환경을 갖출 필요는 없기 때문에, 프로젝트에 따라서 각 환경을 합치거나 생략해도 된다.

 

각 환경에 대한 설명

로컬 개발 환경(Local)

개발을 하기에 앞서, 개발자 개개인의 PC에 개발 및 테스트 환경이 셋업되어 있어야 한다. 각 개발자마다, 설치된 서버 환경을 로컬 개발 환경이라고 한다. (ex. 각 PC에 MySQL(DB)과 Tomcat 등의 소프트웨어를 설치하고, Eclipse와 같은 통합 개발 환경(IDE)과 컴파일러 등이 설치된 환경)

 

로컬 개발 환경을 구축할시 가장 주의해야 할 점은 모든 개발자가 같은 개발 환경을 사용해야 한다는 것이다. 실제로 많이 일어나는 문제 중에서, 다른 버전의 JVM, Tomcat을 사용하거나 문자포맷을 서로 다르게 설정하여 코드를 합칠 때, 로컬에서 잘 작동하던 코드가 작동하지 않는 경우가 많다.

 

개발 환경을 표준화 하는 방법은 여러 가지가 있지만, 전체 개발 환경(앞서 언급한 모든 소프트웨어 등)을 압축 파일 형태로 묶어 사용하는 방법이 가장 일반적이다. maven을 사용하는 경우, 개발에 사용되는 라이브러리 버전 등을 지정할 수 있기 때문에 개발 환경 차이에서 오는 문제점을 상당 부분 해소할 수 있다.

 

 

서버 개발 환경(Dev)

서버 개발 환경은 각 개발자들이, 구현한 코드들을 합쳐 서버에서 테스트 해볼 수 있는 환경이다. 소스코드를 Git이나 SVN과 같은 형상관리 시스템(VCS)에서 Commit 하면, 코드는 서버 개발 환경에 자동으로 배포되고, 테스트를 해볼 수 있게 된다. 

 

기능 개발을 위주로 하기 때문에, 서버 환경은 운영 환경 보다 훨씬 작다. 운영 환경이 클러스터링 환경으로 여러 개의 서버로 구성된다면, 개발 환경은 한 두개의 서버로 기능 구현이 가능한 정도로 구축하는 것이 일반적이다.

 

통합 개발 환경(Integration)

통합 개발 환경은 여러개의 컴포넌트를 동시 개발하는 프로젝트가 있고, 각 컴포넌트가 다른 컴포넌트에 대해 의존성으로 가지고 있을 때,  컴포넌트를 통합 및 테스트 하는 환경으로 사용한다. 

 

예를 들어 단말기와 서버를 같이 개발하는 환경의 경우 통합 환경에서 통합을 한다.

서버 개발 환경과 마찬가지로 최소한의 설정으로 구성하되 서버 개발 환경에서 릴리즈되면 주기적으로 배치한다.

 

테스팅 환경(QA)

테스트 환경은 QA 엔지니어에 의해서 사용되는 환경으로, 배포 주기에 따라서 개발환경에서 테스팅 환경으로 배포된다. 여기서는 기능 및 비기능 테스트 등을 QA 엔지니어가 수행한다.

 

비기능 테스트를 수행할 시에는 운영 환경과 거의 유사한 환경을 만들어 놓고, 테스트를 수행한다. 경우에 따라서 비기능 테스트는 배포 전에, 운영 환경에서 직접 수행하는 경우도 있다. 이런 경우 배포 주기가 매우 길 때 주로 사용하는데, 기업의 내부 IT 시스템을 만들어서 몇 년씩 사용하는 경우 이런 방식을 이용한다.

 

스테이징 환경(Staging)

운영환경과 거의 동일한 환경을 만들어 놓고, 운영 환경으로 넘어가기 전에 여러 가지 비기능적인 부분(보안, 성능, 장애 등)을 검증하는 환경이다.

 

운영 환경(Production)

실제 서비스를 위한 운영 환경이다.

 

대부분 개발환경은 별도로 운영하는 것이 일반적이고, 상황에 따라 통합, 테스팅, 스테이징 환경은 요구 사항에 따라 합치거나 별도로 운영한다. 환경이 많아지면 조금 더 다양한 형태의 검증과 각 역할별(테스터, 개발자, 사용자 등)로 테스트가 쉽지만, 반대로 각 환경을 유지 하는데 필요한 서버들과 운영 인력이 많이 소요되는 단점이 있다.

 

그래서 요즘과 같이 가상화 환경을 사용하는 경우에는 이미지를 만들어놨다가, 실제 테스트나 사용을 할 경우에만 가상 서버에 환경을 배치해서 사용하고, 사용이 끝나면 다시 이미지를 저장소에 저장해 놓는 전략을 많이 사용한다. 

 


본 내용의 출처는 https://bcho.tistory.com/759 입니다.

반응형

'Software Engineering' 카테고리의 다른 글

소프트웨어 공학이란?  (0) 2022.01.14
Comments