우리가 만들고 있는 웹 서비스는 배포가 되지 않는다면, 더 이상 의미를 가질 수 없다.
웹 개발자는 배포에 대한 기본 지식을 갖추고 간단한 배포는 스스로 할 수 있어야 한다.
해당 개념을 배우기 전에
클라이언트-서버-데이터베이스 의 관계,
환경변수의 사용방법
리눅스 운영체제에서 개발 환경을 처음부터 구축할 수 있어야 한다.
이제 AWS의 역할이 있기 전 클라우딩 컴퓨터의 등장 배경을 알아보자.
클라우드 등장 이전에는 흔히 말하는 전산실 등에 컴퓨터를 배치하고 인터넷을 연결하여 서비스를 제공했었다.
하지만 서버 요청에 대한 수용 능력이 한계에 도달하면 어떻게 될까?
처음에는 컴퓨터를 추가하거나 컴퓨터 성능을 업그레이드 하는 방식을 선택했다.
하지만 이 또한 서버 고장시 수리해야하는 인력과 그에따른 비용이 증가했고 컴퓨터가 늘어남에 따라 대기업이 데이터센터를 세우고 유휴 컴퓨터를 다른 기업에 대여해주기 시작했다.
이것이 클라우드 컴퓨팅의 시초이다. 지금은 aws에서 만든 가상 컴퓨터를 이용해 서버를 확장하고 있는데 이것이 차이점이다.
장점은 실제 현실에서 데이터센터를 세우거나 컴퓨터를 대여하지 않아도 서버를 확장하여 서비스를 이용할 수 있다는 것이다.
단점은 AWS와 같은 특정 클라우드 제공자에 종속되기 떄문에 AWS 서버에 문제가 생기면 우리 회사의 서버의 배포 및 관리에 문제가 생길 수 밖에 없다. 또한 AWS이 제시하는 특정 기술로만 백엔드를 구성할 수 밖에 없어서 다양한 기술을 적용할 수 없다는 단점도 존재한다.
클라우드 컴퓨팅을 어느정도 이해했다면 배포의 개념을 알아보자.
배포는 우리가 개발한 서비스를 사용자들이 이용 가능하게 하는 과정을 말한다.
총 4단계로 이루어져 있는데 한 단계씩 살펴보자.
Development
각자의 컴퓨터에서 코드를 작성하고 테스트하는 과정이다.
말 그대로 개발단계이기 때문에 실제 데이터가 아닌 더미 데이터를 이용해 테스트 한다.
Integration
각자의 컴퓨터에서 작성한 코드를 합치는 과정이다.
내가 작성한 코드가 다른 코드를 침범해서 오류를 일으키진 않는지, 코드 간에 충돌이 있는지 확인한다.
staging
Production 단계와 가장 유사한 환경에서 테스트한다.
복제된 실제 데이터를 이용해서 테스트 하고 모든 관계자들에게 검증 하는 단계라고 할 수 있다. 예를 들어 마케팅 팀 혹은 디자인팀이 예상했던 결과인지 확인을 거치는 과정이다.
Production
개발환경과는 구분 된 환경이다.
실제 데이터를 사용해 서비스가 제공되는 단계를 말한다.
주의해야 할 점은 development 환경과 production 환경이 서로 다르다는 것이다.
협업하는 상황이라면, 각각 로컬에서 작업할 때의 node 버전, 인증정보, DB등에 접근하기 위해 사용하는 엔드포인트도 제각각일 것이다.
혹은 로컬에 설치된 DB 비밀번호가 a1234 인데, production 환경에서는 b4321일 수 있다.
마치 우리나라에서 잘 자라는 식물의 재배 방식을 사막 한가운데서 똑같이 적용하면 안되는 것과 마찬가지다.
그렇기 때문에 환경 설정을 코드와 분리하는 것이 중요하다.