사이드 프로젝트 진행중인 내 빌드 루트는 Git -> Github -> AWS CI/CD CodePipeline이다. 하지만, Next.js v13에서 환경변수 관한 버그들을 나도 직면하게 되었다. 내 경우는 내 디렉토리 env를 gitignore로 숨기면 AWS CodeBuild 빌드 시 환경변수를 못 읽어 오는 이슈가 있었다.
해결 방법
- gitignore 미설정으로 디렉토리 환경변수 노출
- 환경변수를 AWS에 저장
1번은 굳이 말할 필요가 없으니 2번을 택했다.
AWS CodeBuild에 환경변수 저장
별도로 CodeBuild에 환경변수를 저장해서 빌드 시에 저장해둔 환경변수를 읽도록 하는 방법이 있다. 이 방법을 하려면 AWS buildspec을 다뤄야하는데 나는 초기에 CodePipeline 구축할 때 buildspec.yml을 내 디렉토리에 만들어두었다.
pre_build: commands: - echo NEXT_PUBLIC_API_URL= ${NEXT_PUBLIC_API_URL} >> .env.production - echo NEXT_PUBLIC_KAKAOTALK_REST_API_KEY= ${NEXT_PUBLIC_KAKAOTALK_REST_API_KEY} >> .env.production - yarn build: commands: - yarn run build - yarn next export
프리 빌드로 AWS에 저장된 환경변수를 읽도록 하였고, 이후 빌드가 진행된다. 진행되면 이렇게 찍히면서 env가 읽어진다.
하지만,
AWS 환경 변수 유형이 일반 텍스트, 파라미터, Secrets Manager 이렇게 세 가지가 있다. 나는 이중에서 일반 텍스트로 환경 변수를 저장했는데, 일반 텍스트는 콘솔에 해당 값이 그대로 찍힌다는 얘기를 주워들었다. 맞는 얘기인지는 모르겠지만, 나중에 시간이 된다면 검토 후 Secrets Manager로 변경해야겠다.
Next.js @v13 directory env to aws secret manager
https://stackoverflow.com/questions/76082529/how-can-we-load-secret-environmental-variables-throught-aws-secret-manager-in-ne
댓글