스프링 부트 백엔드 개발 강좌, 12.2 깃허브 액션 사용하기

안녕하세요! 이번 강좌에서는 스프링 부트 애플리케이션의 CI/CD(지속적 통합/지속적 배포)를 자동화하는 방법인 깃허브 액션에 대해 알아보겠습니다. 깃허브 액션은 GitHub 저장소에 직접 통합된 CI/CD 도구로, 소프트웨어 개발 워크플로우를 자동화하는 데 매우 유용합니다. 이번 글에서는 깃허브 액션의 기본 개념부터 설정, 그리고 스프링 부트 프로젝트에 적용하는 방법을 다룰 것입니다.

1. 깃허브 액션이란?

깃허브 액션(GitHub Actions)은 GitHub에서 제공하는 CI/CD 플랫폼으로, 프로젝트 저장소의 이벤트에 따라 다양한 작업을 자동으로 수행할 수 있게 해줍니다. 코드가 푸시되거나 PR(Pull Request)이 만들어질 때, 특정 워크플로우를 실행하여 테스트를 수행하고, 빌드를 만들고, 배포하는 등의 작업을 자동으로 처리할 수 있습니다.

1.1 깃허브 액션의 특징

  • 유연성: 사용자 정의 워크플로우와 작업을 쉽게 만들 수 있으며, 수많은 오픈 소스 액션을 활용할 수 있습니다.
  • 버전 관리: 각 액션은 버전 관리를 지원하여, 특정 버전의 액션을 사용하여 일관된 환경을 유지할 수 있습니다.
  • 안전성: 다양한 보안 도구와 인증 기능을 제공하여, 프로덕션 환경에서의 안전성을 보장합니다.

2. 준비하기

먼저, 깃허브 액션을 사용하기 위해서는 깃허브에서 리포지토리를 생성해야 합니다. 이미 리포지토리가 있다면, 그 리포지토리에 액션을 추가하면 됩니다.

2.1 GitHub 계정 생성

GitHub 계정이 없다면, 여기서 가입하세요.

2.2 새 리포지토리 만들기

GitHub에 로그인한 후, 오른쪽 상단의 ‘+’ 버튼을 클릭하고 ‘New repository’를 선택하세요. 리포지토리 이름, 설명, 공개 여부 등을 설정한 후 ‘Create repository’를 클릭하여 새 리포지토리를 생성합니다.

3. 간단한 스프링 부트 애플리케이션 만들기

이제 스프링 부트 애플리케이션을 개발해보겠습니다. Spring Initializr를 이용하여 기본 구조를 생성하겠습니다.

3.1 Spring Initializr 사용하기

다음 링크에 접속하여 프로젝트를 설정합니다: Spring Initializr. 필요한 의존성을 선택하고 ‘Generate’ 버튼을 클릭하여 zip 파일을 다운로드합니다. 이제 이 파일을 풀고, IDE에서 엽니다.

3.2 기본 코드 작성하기

간단한 REST API를 만들기 위해 아래의 코드를 작성합니다.

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "안녕하세요, 스프링 부트!";
    }
}

4. 깃허브 액션 설정하기

이제 깃허브 액션을 설정하여 자동 빌드와 실행 테스트를 추가해보겠습니다.

4.1 .github/workflows 디렉토리 만들기

프로젝트 루트 디렉토리에 .github/workflows 디렉토리를 만듭니다. 이곳에 액션의 정의 파일을 위치시킬 것입니다.

4.2 워크플로우 파일 생성하기

워크플로우 파일은 YAML 형식으로 작성됩니다. 아래의 코드를 java_ci.yml라는 파일에 기록합니다.

name: Java CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: Check out code
      uses: actions/checkout@v2

    - name: Set up JDK 11
      uses: actions/setup-java@v1
      with:
        java-version: '11'
        
    - name: Build with Gradle
      run: ./gradlew build

4.3 워크플로우 설명

위의 코드에서 on 키워드 다음에 정의한 pushpull_request는 해당 이벤트가 발생했을 때 워크플로우를 실행하도록 설정합니다. jobs에는 여러 작업을 정의할 수 있으며, 각 작업은 특정 환경에서 실행됩니다. 필요한 스크립트를 실행하기 위해 각 단계에서 steps을 정의합니다.

5. 테스트 추가하기

이제 스프링 부트 애플리케이션의 테스트 코드를 추가해 보겠습니다. 다음과 같이 간단한 단위 테스트를 추가합니다.

@SpringBootTest
public class HelloControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void helloShouldReturnMessage() throws Exception {
        mockMvc.perform(get("/hello"))
               .andExpect(status().isOk())
               .andExpect(content().string("안녕하세요, 스프링 부트!"));
    }
}

5.1 테스트 워크플로우 업데이트

위에서 작성한 YAML 파일에 테스트를 실행하는 명령어를 추가합니다.

- name: Run tests
      run: ./gradlew test

6. 커밋하고 푸시하기

모든 변경 사항을 커밋하고 원격 리포지토리에 푸시합니다.

git add .
git commit -m "Add GitHub Actions workflow"
git push origin main

6.1 워크플로우 실행 확인하기

GitHub 리포지토리의 ‘Actions’ 탭으로 이동하여 워크플로우가 성공적으로 실행되었는지 확인합니다. 빌드가 성공적으로 완료되면 모든 설정이 올바르게 구성된 것입니다.

결론

이번 강좌에서는 스프링 부트 애플리케이션에서 깃허브 액션을 사용하여 CI/CD를 간단하게 설정하는 방법을 배웠습니다. 자동화된 워크플로우를 통해 개발 및 배포 프로세스를 효율적이고 일관되게 유지할 수 있습니다. 지속적으로 깃허브 액션을 활용하여 프로젝트의 품질을 높여보세요!

추가 자료