빌드중에 프로세스가 인터넷에 연결하면 일어나는 사고


요약

빌드 도중에 인터넷에서 뭔가를 읽으려고 하다간, 터졌을때 곤란해질 수 있다.

사건

개인 사이트 구성을 docker에서 podman으로 바꾸려고 잠깐 컨테이너를 모두 닫고 podman에서 빌드를 해 봤는데, Frontend에 해당하는 웹앱 컨테이너가 빌드가 안돼서 전체 docker-compose가 실패하는 문제가 발생했다.

이유

웹앱 컨테이너 빌드 과정에서 GraphQL 스키마를 받아오는 부분이 있는데, 스키마를 받아오려면 GraphQL 서버 컨테이너가 동작하고 있어야 한다. 근데 GraphQL 서버는 compose에 들어있기 때문에 영영 실패만 한다.

땜빵

docker-compose up -d [GraphQL] 등으로 일부 컨테이너를 우선 동작시키는 방법으로 때울 수 있었다.

장기적인 해결책

빌드를 모두 사전에 해 놓고 서버는 배포만 하는 건 어떨까?

서버가 arm이기 때문에 외부에서 빌드하게 만들려면 크로스플랫폼 빌드까지 해야 한다. 탈락!

인터넷 의존성을 모조리 삭제?

Cargo, npm 등은 필연적으로 외부에서 패키지를 긁어오는데 그걸 못한다고? 탈락!

믿을만한 인터넷 의존성과 못믿을 인터넷 의존성을 분리?

어쨌든 내가 만든 GraphQL 서버는 못믿을 녀석이니까, 스키마를 얻어오는 부분을 아예 컨테이너 빌드 과정에서 제외하는 편이 낫겠다 싶었다. 어떻게 보자면 GraphQL 스키마는 개발 작업에 필요한 사전 준비과정이라고 보는게 맞지 최종 빌드 과정에서 스키마를 최신으로 읽어야 할 필요는 없잖아?

개발할 때 스키마를 자동으로 최신으로 업데이트할 수 있는 구조가 있었으면 좋겠는데, 지금으로선 주기적으로 스키마를 읽어서 코드에 커밋하는 봇을 만드는 것 정도가 최선이지 않을까 싶다.

그래서, podman은?

뭔가 자동생성된 설정의 버전이 맞지 않아서 잘 안된다는 에러가 떠서 그냥 포기하고 docker-compose로 돌려놓았다.