# Deploy

## 빌드

* 불필요한 데이터를 없애고, 여러 갈래로 퍼져있는 데이터들을 통합/압축하여 **배포하기에 최적화된 상태를 만드는 것**
* 빌드 과정을 진행하기 전과 비교했을 때 데이터의 **용량이 줄어들고**, 웹 사이트의 **로딩 속도가 빨라진다**는 장점이 있음
* 일반적인 의미의 빌드는, **소스코드를 실행 가능한 번들로 변환하는 컴파일 과정**을 의미
* 웹 앱에서와 같이 HTML, CSS, JS의 형태로 배포하는 경우는 조금 다르며, 웹 앱은 배포 가능한 **정적 파일(static files)의 형태**로 만들어 주어야 함.

\


## 배포

* 개발한 서비스를 사용자들이 이용 가능하게 하는 일련의 과정
* 배포에서는 환경의 차이를 이해하고 **환경 설정을 코드와 분리하는 것이 중요**

### 배포의 4단계

* **Development**
  * 각자의 컴퓨터에서 코드를 작성하고 테스트하는 과정
  * 개발 단계이기 때문에 실제 데이터를 이용하지 않고 더미 데이터를 이용해서 테스트
* **Integration**
  * 각자의 컴퓨터에서 작성한 코드를 합치는 과정
  * 내가 작성한 코드가 다른 코드를 침범해서 오류를 일으키지 않는지, 코드 간에 conflict 여부 확인
* **Staging**
  * 실제 출시 단계인 Production 단계와 가장 유사한 환경에서 테스트를 진행
  * 실제 데이터를 복사해 문제가 있지 않은지 등 다양한 환경에서 테스트를 진행
  * 서비스와 관련된 부서 혹은 인원의 확인 과정을 거치기도 함.
* **Production**
  * 개발된 서비스를 출시하는 단계
  * 사용자가 접속할 수 있는 Production 환경에서 코드를 구동하고 서비스를 제공
  * 실제 데이터를 가지고 서비스가 운영되기 때문에 문제가 생기면 안 되는 단계

\


## 작성한 코드가 다른 환경에서 정상 작동 하게 하려면?

* 절대 경로 대신 상대 경로를 사용
* 환경에 따라 포트를 분기할 수 있도록 환경변수(env) 설정
  * 환경 변수는 코드 변경 없이 배포 때마다 쉽게 변경할 수 있음.
  * 설정 파일과 달리, 잘못해서 코드 저장소에 올라갈 가능성도 낮음.
* Docker와 같은 개발 환경 자체를 통일시키는 솔루션 사용
