상세 컨텐츠

본문 제목

AWS Amplify Console에서 monorepo를 연결해서 사용할 때의 주의사항

TECH

by WEB Front-end 개발자 walkinpcm 2021. 5. 12. 20:56

본문

예전에 AWS Amplify Console을 이용해서 Frontend 프로젝트를 웹호스팅 하는 방법을 정리한 적이 있습니다.

(링크: walkinpcm.tistory.com/11)

 

비교적 최근에는 Amplify Console에서 Git Repository를 연결할 때 monorepo 임을 선택할 수 있는 설정이 생겼습니다. 저도 최근에 monorepo라고 설정하여 Amplify Console을 사용해 봤는데, 몇가지 인지해야하는 주의사항이 발견되어서 정리해봅니다.

 

(1) 스크립트의 실행 위치는 package directory 입니다.

Amplify Console에 monorepo의 git repo 자체를 연결하기 때문에 빌드를 실행할 때의 directory 위치가 repo의 root directory라고 생각할 수 있습니다.

하지만, 빌드를 실행하는 directory 위치는 monorepo 연결 설정에서 입력한 package directory입니다. 그렇기 때문에 빌드스펙에 작성하는 빌드 스크립트는 package directory내의 package.json에 있는 스크립트를 이용해야 합니다.

 

(2) Preview 기능은 monorepo에는 적합하지 않습니다.

Preview 기능은 지정한 branch를 타겟으로 Pull Request(이하 PR)를 생성했을 때, PR의 마지막 커밋을 기준으로 자동으로 빌드하고 배포하여 서비스 환경을 구축 해주는 기능입니다.

 

monorepo에서 package별로 main branch 역할을 하는 브랜치를 각각 만들어서 사용한다면 문제가 없을 것입니다. 그러나, 현재 저는 monorepo에서 main branch 하나를 상시 유지 브랜치로 사용하고 있고 모든 package의 작업 브랜치는 같은 main branch를 타겟으로 PR을 생성합니다.
이로 인해서, Amplify Console에 연결한 (가정)A package 이외의 (가정)B package의 작업 브랜치를 monorepo의 main branch로 PR을 생성했을 때도 Preview 기능이 동작하게 됩니다. 이러면 불필요한 인프라 환경이 만들어져서 비용 측면에서 비효율적입니다. 또한 Github에서 B package의 PR을 볼때 의미 없는 Preview 환경이 표시됩니다.

 

그래서 monorepo이면서 모든 package가 같은 main branch를 이용한다면, Preview 기능을 사용하지 않는 것을 추천합니다.

대안으로 아래의 방법을 추천합니다.

(1) 작업 브랜치 전용의 개발 환경이 필요하면, 작업 브랜치를 upstream remote에 push하고, 이 브랜치를 Amplify Console에서 수동으로 브랜치를 연결해서 새로운 환경을 생성합니다.

(2) 위의 방법이 번거롭다면, Amplify Console의 Branch autodetection기능과 Branch auto-disconnection기능을 이용합니다. 규칙으로, 개발환경이 필요한 브랜치는 특정 문자열로 시작하도록 정하여 autodetection의 패턴으로 등록하시면 자동으로 개발환경을 만들 수 있습니다. 작업이 끝난 브랜치는 불필요한 비용 과금을 줄이기 위해서 브랜치를 지워서 개발환경도 제거합니다.

Branch autodetection과 Branch auto-disconnection 설정 화면

 

(3) 배포 기준이 되는 브랜치는 Auto-build 기능을 disable 해야합니다.

위의 (2)번 이유와 동일하게, 모든 package가 동일한 main branch를 사용하기 때문에 (가정. Amplify Console에 연결되지 않은 package)B package의 코드가 main branch에 merge 되었을 때 (가정. Amplify Console에 연결된 package)A package가 새로 빌드 됩니다. 즉, A package가 불필요하게 다시 빌드되고 배포되는 것 입니다.

 

이런 불필요한 빌드와 배포를 방지하기 위해서 auto-build 기능을 disable하는 것이 좋습니다.

 

그렇다면, 배포가 필요할 때는 어떻게 할까요? Amplify Console의 webhooks 기능을 이용합니다. webhooks를 생성해서 이용하면 필요한 시점에 직접 빌드를 트리거 할 수 있습니다.

Webhook 설정 화면 (아직 Webhook을 만들지 않은 상태)

관련글 더보기

댓글 영역