AWS Beanstalk (Node.js 22 on Amazon Linux 2023) + yarn
AWS Beanstalk 에서 Node.js 기반 웹서비스를 운영중인데 Node.js 18 LTS 지원 만료에 앞서 22 LTS 로 업그레이드하기 위해 Amazon Linux 에서 Amazon Linux 2023에 Yarn을 설정하는 방법을 소개한다.

AWS 클라우드 서비스중 Beanastalk를 사용하여 무중단 웹 서비스를 운영중이다. Beanstalk는 로더밸런스를 포함한 웹 서비스에 필요한 서비스들을 완전 관리형으로 제공하고 있어 개발에만 집중할 수 있기 때문에 처음부터 Beanstalk를 이용하여 웹 서비스를 운영하고 있다. 현재 사용하고 있는 Node.js 버전은 LTS 버전 중에 18을 사용하고 있었는데 2025년 상반기에 공식적인 유지보수 지원이 끝나기 때문에 상위 버전 LTS를 사용하여 마이그레이션을 진행해야한다.

AWS Beanstalk 에서 Node.js 18 버전까지는 기존의 Amazon Linux를 사용하기 때문에 플랫폼 자체를 업그레이드할 필요는 없었는데, Node.js 20 이상 사용하기 위해서는 Amazon Linux 2023 플랫폼을 사용해야한다. Amazon Linux 와 Amazon Linux 2023의 호환성 문제 때문에 그동안 플랫폼 업그레이드를 하지 않았지만, 이젠 더이상 미룰수만 없기 때문에 Amazon Linux 2023 플랫폼에 Node.js 22 환경으로 마이그레이션을 진행하기로 했다.
지금 운영중인 웹 서비스는 TypeScript 기반으로 yarn 패키지메니저를 사용하고 있다. AWS Code Commit + AWS Code Build + AWS Code Deploy를 모두 파이프로 연결한 AWS Code Pipeline 을 사용하여 소스관리, 빌드와 자동 배포까지 자동화시켜 운영하고 있다.
AWS Beanstalk 에서 yarn 을 사용하여 패키지를 자동으로 설치하는 설정을 소개한다. Amazon Linux 에서는 corepack 이라는 것이 설치되어 있기 때문에 기존에는 yarn 을 사용하여 패키지를 설치하기 위해서 corepack enable 만 .platform 에 추가해서 자동설치를 진행했다. 하지만 Amazon Linux 2023에서는 corepack이라는 것이 설치되어 있지 않기 때문에 설치하는 환경을 추가해야 한다.
AWS Beanstalk를 플랫폼 설정을 위해서는 프로젝트 루트 디렉토리에 .platform
디렉토리를 만들어서 필요한 hooks 디렉토리를 만들어서 이벤트가 발생할 때 스크립트를 자동 실행하게 만들 수 있다. AWS Beanstalk에서 인스턴스의 워크플로우는 다음과 같다. 자세한 설명은 Instance deployment workflow 글을 참조하면 된다.

우리는 yarn을 사용하기 위해서 인스턴스가 빌드되기 전에 corepack을 설치하는 처리를 추가하려고 한다. 2가지 스크립트를 추가할 것이다. 하나는 npm 설치를 예방하기 위한 스크립트와 다른 하나는 corepack을 설치하는 스크립트 이다.
config hook 에 npm 설치 차단하기
.platform/confighooks/prebuild/01_prevent-npm.sh
파일에 다음 내용을 저장한다. npm 프로젝트에서 node_modules 라는 디렉토리가 있으면 npm install 실행을 하지 않기 때문에 디렉토리를 만들어둔다.
#!/bin/bash
mkdir node_modules
config hook 에 corepack 설치하기
.platform/confighooks/prebuild/02_corepack.sh
파일에 다음 내용을 저장한다.
#!/bin/bash
npm i -g corepack
config hook 에 yarn 을 이용해서 패키지를 설치하기
.platform/confighooks/predploy/01_yarn.sh
파일에 다음 내용을 저장한다.
#!/bin/bash
corepack yarn
config hook에 관한 플랫폼 스크립트를 추가하면 이젠 hook 스크립트를 추가한다. hooks에 들어갈 내용은 config hook 의 내용과 같다. 앞서 만든 파일을 hook으로 복사한다.
hook 에 npm 설치 차단하기
cp .platform/confighooks/prebuild/01_prevent-npm.sh .platform/hooks/prebuild/01_prevent-npm.sh
hook 에 corepack 설치하기
cp .platform/confighooks/prebuild/02_corepack.sh .platform/confighooks/hooks/02_corepack.sh
hook 에 yarn 을 이용하여 패키지 설치하기
cp .platform/confighooks/predeploy/01_yarn.sh .platform/hooks/predeploy/01_yarn.sh
이렇게 .platform
설정 디렉토리 안에 confighooks
과 hooks
디렉토리가 있게 되고 각각 prebuild
, redeploy
디렉토리가 그 아래 있게 되고 스크립트 파일들이 존재하게 된다. .platform
디렉토리는 프로젝트 루트 디렉토리에 있고 이 디렉토리의 파일 구조는 아래 그림과 같다.

이제 AWS Code Pipeline 을 이용해서 소스코드를 빌드, 배포하면 자동으로 AWS Beanstalk (Node.js 22 on Amazon Linux 2023) 플랫폼에 웹 프로젝트가 배포되면서 yarn을 이용하여 자동으로 패키지를 설치하게 된다.
질문 및 의견을 남겨주세요 >