DevOps/AWS

Deploy (배포) 알아보기

Judaeng 2021. 4. 24. 23:50

배포란 개발한 서비스를 사용자들이 이용 가능하게 하는 일련의 과정이다.

정리하자면 내가 개발한 서비스를 다른 사용자들도 이용할 수 있게 하는 과정이다.

회사마다 추가적인 과정이 있을 수 있지만, 기본적으로 4단계를 거쳐서 개발한 서비스를 배포하게 된다.

 

🤷‍♂️Deployment(배포)의 과정


1. Development

Development단계는 각자의 컴퓨터(Local)에서 코드를 작성하고 테스트하는 과정이다.

개발단계이기 때문에 실제 데이터를 이용하지 않고 더미데이터를 이용해서 테스트한다.

각자의 환경에서 진행하는 단계이기 때문에 변경 사항이 생겨도 별다른 문제가 되진 않는다.

 

2. Intergration

Intergration단계에서는 각자의 컴퓨터에서 작성한 코드를 합치는 과정이다.

내가 작성한 코드가 다른 코드를 침범해서 오류를 일으키지 않는지, 코드 간에 충돌(conflict)이 있지는 않는지 확인하는 과정을 거친다.

 

3. Staging

Staging단계에서는 실제 출시단계인 Production단계와 가장 유사한 환경에서 테스트를 진행한다.

실제 데이터를 복사해서 문제가 있지 않은지 등 다양한 환경에서 테스트를 진행한다.

또한 서비스와 관련된 부서 혹은 인원의 확인 과정을 거친다.

예를 들면 작성된 코드가 마케팅팀 혹은 디자인팀 예상했던 결과인지에 확인을 거치는 과정이다.

 

4. Production

Production단계에서는 개발된 서비스를 출시하는 단계이다.

사용자가 접속할 수 있는 Production환경에서 코드를 구동하고 서비스를 제공한다.

실제 데이터를 가지고 서비스가 운영되기 때문에 문제가 생기면 안 되는 단계이다.

 

🤷‍♂️Development 환경과 Production 환경


우리가 개발부터 배포까지 모든 것을 통제할 수 있는 상황이라면, 크게 걱정 없이 Production 환경을 구성할 수 있을 것이다.

그러나, 여러 명이 함께 작업하는 프로젝트라면 어떨까?

node 버전도 제각각일 거고, 인증 정보나 데이터베이스 등에 접근하기 위해 사용하는 엔드포인트도 제각각일 것이다.

예를 들어보자.

내 로컬에 설치된 데이터베이스 비밀번호는 rlazheld1234! 인데, 클라우드에 설치된 데이터베이스 비밀번호는 supersecret! 일 수 있다.

이 모든 케이스를 코드 안에 담을 수 있을까?

아니다. 이처럼 Development 환경과 Production 환경은 서로 다를 수가 있다.

마치, 우리나라에서 잘 자라는 식물을 사막 한가운데에서 똑같은 방식으로 재배한다고 잘 자라지 않는 것과 비슷하다.

따라서 배포에서는, 환경의 차이를 이해하고 환경 설정을 코드와 분리하는 것이 중요하다.

 

코드가 다른환경에서도 잘 작동하게 하려면 어떻게 해야 되나요? 아래와 같은 방법들을 사용할 수 있다.

1. 절대경로 대신 상대 경로를 사용한다.

2. 환경변수 설정을 유동적으로 할 수 있도록 한다.

환경에 따라 Port를 분기할 수 있도록. env, envvars 등을 이용해 환경변수를 설정하는 방법이 있다.

3. Docker처럼 개발환경 자체를 통일 시키는 방법이 있다.

 

배포를 위한 굉장히 다양한 플랫폼들이 있다.

예를들면 Heroku, Digital Ocean, Microsoft Azure, Amazon Web Services 등이 있다.
그중에서도 Amazon의 AWS(Amazon Web Service)에 대해 소개해보려고 한다.