AWS EB로 배포하기

곽향훈·2023년 5월 19일
1

Trouble Shooting

목록 보기
1/10

Issue

회사 내 여러 서비스 중 "maimovie(en)" 프로젝트에서 연합뉴스 모듈 연동 개발 요청이 들어왔다. 해당 요청을 수행하기 위해 개발 서버에서 간단한 수정 작업을 진행하고 배포 프로세스를 실행했으나, 실패한 상황이다. 따라서, 문제를 해결하기 위해 정상화 작업을 진행하려고 한다.


Problem

  • 소스코드 내 배포 프로세스 확인해봤더니 AWS EB(Elastic Beanstalk) 사용
  • package.json에 작성된대로 yarn deploy:dev 돌려봤으나 실패

Solution

  1. 백엔드개발자에게 해당 프로젝트 AWS IAM 계정을 받음
  2. EB에 들어가서 애플리케이션 환경 파악(dev, stage, prod 서버로 구성되어 있었음)
  3. node12 버전으로 환경세팅이 되어있음(해당 프로젝트는 14로 구성)
  4. 테스트를 위해 eb deploy 방식이 아닌 알집으로 직접 업로드 해봄 > 실패(단순 업로드는 __MAXOSX 문제)
  5. 업로드 후 정상작동 안됨(에러 로그.ebextensions를 보니 AWS EFS 연결이 안되어 있는 것 같음)
  6. EB에서 EFS에 연결하는 설정을 백엔드개발자에게 요청 > 실패(VPN 등 연결 문제)
  7. 오래된 프로젝트라 히스토리를 정확히 알고있는 개발자가 없어 EB새로 구축
  8. node 환경을 16버전으로 재구성
  9. 그에맞게 package도 14에서 16으로 migration
  10. eb init > eb create > eb deploy 순서로 배포 성공

What I Learn

  • AWS EB 명령어, 사용법, 배포 프로세스에 대한 개념 및 실무 경험 쌓음
    • eb CLI : "eb" 명령줄 인터페이스(CLI)는 로컬 개발 환경에서 Elastic Beanstalk와 상호 작용하는 데 사용된다. 애플리케이션 및 환경 생성, 새 코드 배포 및 설정 관리에 사용할 수 있다.
    • eb create : "eb create" 명령은 AWS에서 새 환경을 만드는 데 사용된다. 새 환경을 만들 때 환경 이름, 애플리케이션 이름 및 구성 설정을 지정할 수 있다.
    • eb deploy : "eb deploy" 명령은 기존환경에 새 코드를 업로드하는데 사용된다. 애플리케이션의 새 버전을 생성하고 코드를 AWS에 업로드한 다음 환경에 배포한다.
    • eb health : "eb health" 명령은 확인하는 데 사용된다. 전체 상태 및 개별 리소스의 상태를 포함하여 환경 상태에 대한 정보를 표시한다.
    • eb logs : "eb logs" 명령은 로그를 보는 데 사용된다. 이 명령은 환경 인스턴스에서 로그를 검색하여 로컬 콘솔에 표시한다.
  • dev, stage, prod로 서버를 나누는 이유에 대해 심층적으로 알게 됨
    • 관심사 분리 : 각 환경은 서로 다른 용도로 사용되며 요구 사항도 다르다. 이들을 분리하면 개발, 테스트 및 생산 활동 간의 충돌을 피할 수 있다. 이렇게 하면 프로덕션으로 출시되기 전에 제어된 환경에서 변경 사항을 철저히 테스트할 수 있다.
    • 위험 완화 : 별도의 환경을 사용하면 오류나 문제가 발생할 위험을 최소화할 수 있다. 프로덕션에 배포하기 전에 스테이징 환경에서 변경 사항을 테스트하고 검증할 수 있다.
    • 제어된 테스트 : 개발 및 스테이징 환경을 통해 개발자는 배포하기 전에 제어된 환경에서 변경 사항을 테스트할 수 있다. 이렇게 하면 고객에게 영향을 미치기 전에 문제를 식별하고 해결할 수 있다.
    • 환경별 구성 : 환경마다 서버 리소스, 보안 설정 및 데이터베이스 자격 증명과 같은 다른 구성이 있을 수 있다. 환경을 분리하면 이러한 구성을 개별적으로 관리할 수 있으므로 문제를 더 쉽게 관리하고 해결할 수 있다.
    • 공동 작업 개선 : 환경을 분리하면 팀이 더 쉽게 공동 작업하고 효율적으로 작업할 수 있다. 개발자는 개발 환경에서 변경 사항을 작업할 수 있고 테스터는 스테이징 환경에서 해당 변경 사항을 테스트할 수 있다. 이는 코드 품질을 개선하고 변경 사항을 프로덕션에 배포하는 데 걸리는 시간을 줄이는 데 도움이 된다.
    • 요약하면 서버를 개발, 스테이징 및 프로덕션 환경으로 나누는 것은 소프트웨어 애플리케이션의 품질, 안정성 및 보안을 개선하는 데 도움이 되는 모범 사례다. 이를 통해 개발자는 제어된 환경에서 변경 사항을 테스트하고, 오류 또는 문제의 위험을 줄이고, 팀 간의 협업을 개선할 수 있다.
  • 새 버전을 별도의 환경에 배포한 후, 두 환경의 CNAME을 바꿔 트래픽을 새 버전으로 즉시 리디렉션하는 Blue/Green 무중단 배포에 대해 학습
  • AWS EFS의 실무 활용 경험 쌓음
  • 노드 버전을 migration 하면서 나타나는 문제들(node-sass, sass-loader 등) 해결능력 향상

0개의 댓글