PostCover

Vercel 없이 GitHub Actions로 배포하기

Vercel 없이 SSH와 SCP를 통해 React 프로젝트 배포하기

프로젝트 진행 중 CI/CD 파이프라인을 구축할 필요성을 느끼며, 특히 정적 웹 어플리케이션을 배포하는 데 있어 무료로 제공되는 도구에서 벗어나 직접적인 배포 환경을 구성해야 하는 상황이 있었습니다. 이 글에서는 SCP와 SSH를 활용한 CI/CD 환경 구축 경험과 선택 배경, 그리고 구현 과정을 공유하려 합니다.

왜 이런 방법을 선택했는가?

기존 Vercel에서의 제약

처음에는 Vercel을 활용해 정적 웹 애플리케이션을 무료로 호스팅했습니다. Vercel은 손쉽게 CI/CD를 설정하고, 배포 과정을 자동화할 수 있어 효율적이었습니다. 하지만, Organization 소유의 Repository를 호스팅하려면 유료 플랜으로 전환해야 했습니다. 이는 프로젝트 초기에 예상하지 못했던 비용 증가로 이어졌습니다.

SCP/SSH를 선택한 이유

  1. 비용 효율성 무료로 제공되던 Vercel에서 벗어나 직접 호스팅을 구성하면 추가적인 비용 없이 자체 서버 환경을 활용할 수 있었습니다. SSH와 SCP는 이러한 요구에 가장 적합한 솔루션이었습니다.
  2. 유연성 및 직접 제어 SSH를 활용하면 서버 파일 시스템과 배포 과정을 직접 제어할 수 있어, 배포 전략이나 파일 구조를 원하는 대로 설계할 수 있었습니다. 이를 통해 Vercel처럼 제한적인 자동화 도구가 아닌, 맞춤형 배포 환경을 구현할 수 있었습니다.
  3. 단순한 정적 웹 배포에 적합 복잡한 컨테이너 환경 없이, 단순히 정적 파일을 전송하여 배포할 수 있는 SCP는 소규모 프로젝트에 적합한 선택이었습니다. 초기 설정만 완료하면 추가적인 도구 없이도 안정적인 배포를 유지할 수 있습니다.

CI/CD Workflow 설계

GitHub Actions를 사용해 pull_request_target 이벤트를 기반으로 워크플로우를 설계했습니다. 이 설정은 브랜치로의 PR 생성, 병합 등이 발생했을 때 파이프라인을 실행합니다.

build 작업은 PR이 병합된 이후 실행되며, 주요 작업은 다음과 같습니다.

  1. 소스 코드 체크아웃 GitHub Actions의 기본 기능을 활용해 현재 PR의 코드베이스를 가져옵니다.
  2. 의존성 설치 및 빌드 Node.js 환경에서 의존성을 설치하고 애플리케이션을 빌드합니다. 빌드 결과물은 dist 디렉토리에 생성됩니다.
  3. 환경 변수 설정 .env 파일을 생성해 API 서버 URL과 같은 환경 변수를 설정합니다. 이는 배포된 애플리케이션에서 올바른 서버와 통신할 수 있도록 보장합니다.
  4. 원격 서버 파일 정리 및 배포 SCP와 SSH를 활용해 원격 서버에 기존 파일을 삭제하고, 새로운 빌드 파일을 전송합니다. 이를 통해 서버 상태를 항상 최신으로 유지할 수 있습니다.

어떤 점이 좋았는가?

우선 장점으로는 무료로 사용할 수 있는 프로토콜인 SSH와 SCP를 사용했기 때문에 초기 비용을 최소화하면서도 배포 환경을 설정할 수 있었습니다. 또한, 서버의 파일 시스템과 디렉토리를 직접 관리할 수 있어, 배포 환경에 대한 제어권을 가질 수 있었습니다.

어떤 점이 아쉬웠는가?

SCP와 SSH는 단순 파일 전송에 초점이 맞춰져 있어, 대규모 프로젝트나 복잡한 배포 전략에는 적합하지 않을 수 있습니다.

장기적으로는 Docker를 통해 컨테이너를 활용한 배포를 진행하거나, AWS S3와 같은 클라우드 기반 배포 환경을 검토할 필요가 있습니다.

결론적으로, 작은 규모의 프로젝트에서는 SCP/SSH를 활용한 배포가 충분히 효율적이며, 단순한 환경에서 빠르게 CI/CD를 구축해야 할 때 유용한 선택이 될 수 있습니다.