우리 회사의 모바일 앱은 Expo기반의 React Native 로 개발된다. 최근에 알림 기능을 개발하면서 Expo Push Notification 을 사용했다. 테스트 서버에서도 잘 동작하기에 별 걱정 없이 프로덕션 단계로 넘어갔다.
그러나 알림이 동작하지 않아, 서버의 로그 메시지를 확인해보니 다음과 같은 에러가 발생하고 있었다.
x.509 certificate signed by unknown authority
처음에는 적잖이 당황했는데, 왜냐하면 딱 봐도 코드에서 발생한 에러는 아닌 것 같다는 생각이 들어서다. 난 아무래도 코드 외에 발생하는 에러에 좀 약하다.
이유는 도커의 이미지 빌드에 있었다. 나는 불필요한 용량을 없애기 위해, golang-alpine
을 베이스 이미지로 하여 빌드한다. 하지만 alpine
이미지는 기본적인 CA certificates 를 OS 단에서 포함하고 있지 않다.
golang:-alpine images are intentionally minimal and do not have a system certificate pool. (StackOverflow 질문글)
StackOverflow 질문글에서도 말했듯이, 가장 간단한 해결책은 빌드하면서 certificates를 추가해주는 것이다.
나의 도커 빌드파일에 아래와같이 코드를 추가해주어 해결했다. (참고)
RUN apk update && apk upgrade && apk add --no-cache ca-certificates
개인적으로 도커 빌더 패턴을 사용하기 때문에, apk
로 받은 certificates
파일들을 옮겨주는 작업이 아래와 같이 필요하다.
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/