반복적인 작업을 줄이고 개발에만 집중할 수 있는 환경을 만드는 것은 생산성 향상의 핵심입니다

수동으로 Docker 이미지를 빌드하고 Docker Hub에 업로드하는 작업은 반복적이고 오류 발생 가능성이 높습니다. 이를 해결하기 위해 GitHub Actions를 활용하여 특정 브랜치에 코드가 merge될 때, 자동으로 이미지를 빌드하고 Docker Hub에 업로드하는 과정을 구현했습니다.
Github Actions을 통해 이미지 파일 자동 업로드하기
수동으로 Docker 이미지를 빌드하고 Docker Hub에 업로드하는 작업은 반복적이고 오류 발생 가능성이 높습니다. 이를 해결하기 위해 GitHub Actions를 활용하여 특정 브랜치에 코드가 merge될 때, 자동으로 이미지를 빌드하고 Docker Hub에 업로드하는 과정을 구현했습니다.
1. Github Action?

개발자는 반복적인 작업을 3번이상 하면 몸에 이상반응이 올 수 있다고합니다.
빌드 및 배포를 자동화 할 수 있다니 사용하지 않을 이유가 없네요 바로 적용해 보았습니다.
우선 자동화 배포를 적용하기 전 코드를 올리고 배포까지의 과정을 그림으로 간단하게 그렸습니다.

목표는 코드를 Github에 Push하면 서버에 배포까지 하는걸 목표로 잡았습니다.
간단 요약
1. 사용자가 Github에 코드를 push
2. 특정 브랜치에 코드변경사항 감지
3. 변경된 코드를 바탕으로 빌드
4. 빌드된 파일을 서버에 배포
2. Github Action 적용
Github Action을 적용할 범위입니다.

GitHub Actions를 사용하려면 저장소에 .github/workflows 디렉터리를 만들고, 여기에 .yml 파일로 워크플로 설정을 작성해야 합니다
파일 예시)
name: Build and Push Docker Image
on:
push:
branches:
- DEV
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check out the repository
uses: actions/checkout@v2
- name: Set up JDK 17
uses: actions/setup-java@v2
with:
distribution: 'zulu'
java-version: '17'
- name: Build with Gradle
run: ./gradlew build -x test
- name: Log in to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
- name: Build and push Docker image
run: |
docker build -t ${{ 빌드이미지파일명 }} .
docker push ${{ 빌드이미지파일명 }}
3. 워크플로 동작 설명
- 트리거 조건
- on.push.branches 설정을 통해 DEV, PROD 브랜치에 변경사항이 있을 때 워크플로가 실행됩니다.
- Docker 로그인
- docker/login-action@v2를 사용해 Docker Hub에 로그인합니다
- GitHub Secrets에 Docker Hub의 사용자 이름과 비밀번호를 저장하고 이를 참조합니다
- Docker 이미지 빌드
- docker build 명령어로 Docker 이미지를 생성합니다
- 이미지 파일명으로 환경별 이미지를 구분
- Docker 이미지 푸시
- 빌드된 이미지를 Docker Hub로 푸시합니다
4. GitHub Secrets 설정
위 설정 파일에서 사용된 secrets.DOCKER_USERNAME과 secrets.DOCKER_PASSWORD는 GitHub의 Secrets 기능을 사용해 설정
- GitHub 저장소의 Settings > Secrets and variables > Actions로 이동
- New repository secret 버튼을 클릭
- DOCKER_USERNAME과 DOCKER_PASSWORD를 각각 Docker Hub 계정 정보로 설정
5. 결과 확인
- 코드 변경 후 브랜치에 push하면 GitHub Actions가 실행됩니다.
- Actions 탭에서 실행 상태와 로그를 확인
- Docker Hub에서 업로드된 이미지를 확인하여 워크플로가 제대로 작동했는지 검증

배포 자동화를 프로젝트 중~후반쯤에 적용했는데, 이 작업이 개발 생산성에 얼마나 크게 기여하는지 깨달았습니다.
솔직히, 이 자동화 시스템을 프로젝트 초반에 도입하지 않은 것이 가장 아쉬웠습니다. 초반부터 도입했다면 불필요한 반복 작업에서 벗어나 더 빠르게 기능 개발과 배포를 진행할 수 있었을텐데...
개발 및 운영 서버가 아직 준비되지 않았다는 핑계로 배포 자동화 도입을 미뤄왔던 제 자신을 반성하게 되었습니다. 사실 배포 자동화는 서버가 준비되었는지 여부와는 무관하게, 개발 초반부터 도입했어야 했고, 다음에 이런 기회가 또 주어진다면 이런 작업들을 우선적으로 적용하여 개발자가 배포와 같은 반복적인 작업에서 벗어나, 오로지 개발에만 집중할 수 있는 환경을 먼저 마련해야겠다는 교훈을 얻었습니다.
자동화의 도입이 개발 과정에서 얼마나 큰 차이를 만들어낼 수 있는지 몸소 체감한 경험이었으며, 이 글이 비슷한 고민을 하고 있는 분들께 작은 도움이 되길 바랍니다.
'개발' 카테고리의 다른 글
| Github Actions으로 서버배포 자동화하기 (1) (1) | 2024.11.17 |
|---|---|
| CORS 운영 서버에서의 문제 해결 경험 (0) | 2024.11.02 |
| Render에 무료로 JAVA + SPRING BOOT 서버 올리기 (1) | 2024.04.25 |