스프링 부트 백엔드 개발 강좌, AWS 서비스로 우리의 서비스 배포하기

최근 몇 년 간, 자바 기반의 프레임워크인 스프링 부트(Spring Boot)는 백엔드 개발 분야에서 인기를 끌고 있습니다. 스프링 부트는 설정을 간소화하고 생산성을 높이는 데 중점을 두어 개발자들이 더욱 빠르고 효율적으로 애플리케이션을 구축할 수 있도록 도움을 줍니다. 또한, 클라우드 서비스의 발전으로 인해 우리의 서비스도 손쉽게 배포할 수 있는 시대가 열렸습니다. 특히 AWS(Amazon Web Services)는 다양한 클라우드 서비스와 기능을 제공하여 백엔드 애플리케이션을 유연하게 운영할 수 있도록 지원합니다. 이번 강좌에서는 스프링 부트를 사용해 간단한 백엔드 애플리케이션을 개발하고, 이를 AWS에 배포하는 과정에 대해 자세히 설명하겠습니다.

1. 스프링 부트 소개

스프링 부트는 ‘적은 설정으로 많은 것을 할 수 있게 해준다’는 모토를 가지고 있습니다. 전통적인 스프링 프레임워크는 많은 설정과 구성이 필요했지만, 스프링 부트는 이를 자동으로 설정하여 개발자를 지원합니다. 이로 인해 우리는 비즈니스 로직에 집중할 수 있는 환경을 제공받게 됩니다.

  • 스프링 부트의 특징
    • 자동 설정: 스프링 부트는 기본적으로 제공하는 설정으로 대부분의 기능을 사용할 수 있습니다.
    • 스타터 종속성: 필요한 라이브러리를 스타터 종속성으로 제공하여 간편하게 사용할 수 있습니다.
    • 임베디드 서버: 톰캣, 제티 같은 서버를 내장하여 배포의 복잡성을 줄입니다.
    • 프로덕션 준비: 스프링 부트는 모니터링 및 관리에 필요한 여러 기능을 기본적으로 제공합니다.

2. 스프링 부트 개발 환경 설정

스프링 부트 애플리케이션을 개발하기 위해서는 먼저 Java Development Kit(JDK)가 설치되어 있어야 합니다. 또한, IDE(통합 개발 환경)로는 IntelliJ IDEA, Eclipse, VS Code 등을 추천합니다. 이번 강좌에서는 IntelliJ IDEA를 기준으로 설명하겠습니다.

  1. JDK 설치

    JDK를 설치한 후, JAVA_HOME 환경 변수를 설정합니다. JDK의 최신 버전을 다운로드하려면 Oracle 공식 웹사이트 또는 OpenJDK를 방문하세요.

  2. IDE 설치

    IntelliJ IDEA를 다운로드하고 설치합니다. 설치 후 기본적인 설정을 완료합니다.

  3. 스프링 부트 프로젝트 생성

    IntelliJ IDEA를 실행한 후, “New Project”를 선택하고 “Spring Initializr”를 선택하여 새로운 스프링 부트 프로젝트를 생성합니다.

3. 스프링 부트 프로젝트 구성

스프링 부트 프로젝트를 만들 때는 원하는 패키지 구조와 필요한 의존성을 선택할 수 있습니다. 일반적으로 사용하는 의존성은 다음과 같습니다:

  • Spring Web: RESTful API 개발을 위한 라이브러리
  • Spring Data JPA: 데이터베이스 연동을 위한 라이브러리
  • H2 Database: 인메모리 데이터베이스로 실습에 용이

3.1 기본적인 애플리케이션 설정

프로젝트가 생성된 후, application.properties 파일을 열어 기본 설정을 추가할 수 있습니다. 예를 들어, 포트 번호 설정을 변경하고 싶은 경우 다음과 같이 설정할 수 있습니다:

server.port=8080

3.2 엔티티 클래스 생성

이번 강좌에서는 간단한 메모(또는 할 일) 관리 애플리케이션을 만들어 보겠습니다. 다음과 같이 엔티티 클래스를 생성해보겠습니다:

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Todo {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String title;
    private boolean completed;

    // Getter and Setter methods
}

3.3 리포지토리 인터페이스 생성

Spring Data JPA를 사용하여 데이터베이스와 상호작용할 수 있는 리포지토리 인터페이스를 생성합니다:

import org.springframework.data.jpa.repository.JpaRepository;

public interface TodoRepository extends JpaRepository {
}

3.4 서비스 클래스 생성

비즈니스 로직을 처리할 서비스 클래스를 작성합니다:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class TodoService {
    @Autowired
    private TodoRepository todoRepository;

    public List getAllTodos() {
        return todoRepository.findAll();
    }

    public Todo createTodo(Todo todo) {
        return todoRepository.save(todo);
    }
}

3.5 REST API 컨트롤러 생성

마지막으로, 이 애플리케이션의 REST API 인터페이스를 제공하는 컨트롤러 클래스를 생성합니다:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/todos")
public class TodoController {
    @Autowired
    private TodoService todoService;

    @GetMapping
    public List getAllTodos() {
        return todoService.getAllTodos();
    }

    @PostMapping
    public ResponseEntity createTodo(@RequestBody Todo todo) {
        return ResponseEntity.ok(todoService.createTodo(todo));
    }
}

4. AWS에 서비스 배포하기

애플리케이션을 개발한 후 AWS에 배포할 준비를 합니다. AWS에 배포하기 위해서는 AWS 계정이 필요합니다. 계정을 생성한 후 AWS Management Console에 로그인합니다.

4.1 Elastic Beanstalk 사용하기

AWS Elastic Beanstalk는 웹 애플리케이션 및 서비스 배포를 간소화해주는 PaaS(Platform as a Service)입니다. 다음 단계를 통해 애플리케이션을 배포할 수 있습니다:

  1. Elastic Beanstalk 환경 생성

    AWS Management Console에서 Elastic Beanstalk을 선택하고, “Create New Application” 버튼을 클릭합니다. 애플리케이션 이름과 설명을 입력합니다.

  2. 환경 설정

    환경을 설정할 때, “Web server environment”를 선택하고 플랫폼으로 “Java”를 선택합니다. 이후 JAR 파일을 업로드하기 위한 옵션이 제공됩니다.

  3. 애플리케이션 JAR 파일 생성

    IntelliJ IDEA에서 프로젝트를 빌드하여 JAR 파일을 생성합니다. mvn clean package 명령을 사용하여 생성할 수 있습니다.

  4. JAR 파일 업로드

    Elastic Beanstalk 대시보드로 돌아가서 생성한 JAR 파일을 업로드합니다. 이후 “Create Environment” 버튼을 클릭하여 환경을 생성합니다.

4.2 환경 URL 확인하기

환경이 생성되면 AWS가 제공하는 URL을 통해 애플리케이션에 접근할 수 있습니다. 이 URL을 브라우저에 입력하여 애플리케이션이 정상적으로 작동하는지 확인합니다.

4.3 데이터베이스 연동하기

실제 운영 환경에서는 RDS(Amazon Relational Database Service)를 사용하여 데이터베이스를 관리하는 것이 일반적입니다. RDS를 설정하고, 애플리케이션에서 데이터베이스와 연결하는 방법을 설명하겠습니다:

  1. RDS 인스턴스 생성

    RDS 대시보드에서 “Create database”를 클릭합니다. 데이터베이스 엔진을 선택하고, 인스턴스 종류 및 기타 설정을 완료합니다.

  2. 보안 그룹 설정

    RDS 인스턴스에 대한 보안 그룹을 설정하여 애플리케이션에서 접근할 수 있도록 허용합니다.

  3. 애플리케이션 설정 업데이트

    RDS의 연결 정보를 애플리케이션의 application.properties 파일에 추가합니다:

    spring.datasource.url=jdbc:mysql://:/
    spring.datasource.username=
    spring.datasource.password=

5. 결론

이번 강좌를 통해 스프링 부트와 AWS Elastic Beanstalk를 사용하여 간단한 백엔드 애플리케이션을 개발하고 배포하는 방법에 대해 살펴보았습니다. 스프링 부트는 개발자에게 많은 편리함을 제공하고, AWS는 개발한 애플리케이션을 손쉽게 배포할 수 있도록 도와줍니다. 실무에 도입하여 다양한 서비스를 구축하는 데 있어 큰 도움이 될 것입니다. 앞으로도 더 많은 기능을 학습하고 실제 비즈니스에 적용해보기를 권장드립니다.

6. 참고 자료

스프링 부트 백엔드 개발 강좌, AWS란

1. 서론

오늘날의 웹 애플리케이션 개발에서는 다양한 기술 스택이 존재합니다. 그 중에서도 Java 기반의 효율적인 웹 프레임워크인 스프링 부트(Spring Boot)와 클라우드 서비스의 대명사인 AWS(Amazon Web Services)는 많은 개발자에게 사랑받고 있습니다. 이 글에서는 스프링 부트를 활용한 백엔드 개발의 기초부터 AWS와의 통합까지 탐구하고자 합니다.

2. 스프링 부트란?

스프링 부트는 스프링 프레임워크를 기반으로 만들어진 자바 기반의 프레임워크입니다. 이 프레임워크는 기존의 스프링 프레임워크의 복잡성을 줄이고, 보다 간결하고 빠른 개발을 가능하게 합니다. 스프링 부트는 다양한 설정을 자동으로 구성해 주며, 이는 개발자가 비즈니스 로직에 집중할 수 있게 합니다.

2.1 특징

  • 자동 설정(Auto Configuration): 개발자는 복잡한 XML 설정 없이 엔터프라이즈급 스프링 애플리케이션을 쉽게 구축할 수 있습니다.
  • 독립 실행형(Standalone): 스프링 부트 애플리케이션은 독립적으로 실행할 수 있으며, 외부 서버에 배포할 필요가 없습니다.
  • 일관성 있는 배포: jar 파일로 패키징 할 수 있어 쉽게 배포할 수 있습니다.
  • 스타터(Starter) 의존성: 다양한 스타터를 통해 필요한 라이브러리를 간편하게 추가할 수 있습니다.

3. 스프링 부트 설치 및 환경 설정

스프링 부트를 사용하기 위해 필요한 것들은 다음과 같습니다:

3.1 요구 사항

  • Java Development Kit (JDK) 8 이상
  • IDE (IntelliJ, Eclipse 등)
  • Maven 또는 Gradle

3.2 프로젝트 생성

스프링 이니셜라이저(Spring Initializr)를 사용하여 새로운 스프링 부트 프로젝트를 생성할 수 있습니다. 필요한 의존성을 선택하고, Java 버전, 그룹, 아티팩트 등을 설정하여 프로젝트를 생성합니다.

4. RESTful API 구축

스프링 부트를 사용하여 RESTful API를 구축하는 것은 매우 간단합니다. 다음과 같은 과정을 통해 API를 정의할 것입니다.

4.1 Controller 생성


@RestController
@RequestMapping("/api")
public class UserController {

    @GetMapping("/users")
    public List getAllUsers() {
        // 사용자 목록 반환
    }
}
        

4.2 서비스 및 리포지토리 층 구현

비즈니스 로직을 처리하기 위한 서비스 클래스를 생성하고, 데이터베이스와의 상호작용을 위한 리포지토리를 구현합니다.

5. AWS란 무엇인가?

AWS(Amazon Web Services)는 아마존이 제공하는 클라우드 컴퓨팅 서비스입니다. 기업은 AWS를 통해 데이터 저장, 분석, 배포 및 관리 서비스를 이용할 수 있습니다. AWS는 전 세계에 걸쳐 데이터 센터를 운영하고 있으며, 수많은 사용자에게 안정적이고 확장 가능한 클라우드 서비스를 제공합니다.

5.1 AWS의 주요 서비스

  • EC2: Elastic Compute Cloud로, 가상 서버를 제공합니다.
  • S3: Simple Storage Service로, 파일 저장과 관리가 가능합니다.
  • RDS: Relational Database Service로, 관리형 데이터베이스 서비스를 제공받을 수 있습니다.
  • Lambdas: 서버리스 컴퓨팅을 통해 코드 실행을 간편하게 할 수 있습니다.

6. 스프링 부트와 AWS의 통합

스프링 부트 애플리케이션을 AWS에 배포하는 과정은 다음과 같습니다:

6.1 AWS EC2에 배포하기

스프링 부트 애플리케이션을 jar 파일로 패키징한 후, AWS EC2 인스턴스에 배포할 수 있습니다. EC2 인스턴스를 생성하고 환경을 구성한 다음, jar 파일을 전송하여 실행합니다.

6.2 AWS S3에 정적 파일 호스팅

AWS S3를 사용하여 웹 애플리케이션의 정적 파일을 관리하고 배포할 수 있습니다. 이러한 방식은 효율적이고 비용 효과적입니다.

7. 결론

스프링 부트와 AWS는 현대의 웹 애플리케이션 개발에서 매우 중요한 역할을 합니다. 이를 통해 개발자는 더욱 신속하고 효율적으로 애플리케이션을 개발하고 배포할 수 있습니다. 앞으로도 다양한 강좌와 예제를 통해 더욱 깊이 있는 지식을 전달할 예정이니 많은 관심 부탁드립니다.

© 2023 스프링 부트 백엔드 개발 강좌

스프링 부트 백엔드 개발 강좌, @SpringBootApplication 이해하기

@SpringBootApplication 이해하기

스프링 부트(Spring Boot)는 엔터프라이즈 애플리케이션 개발을 간편하게 만들어주는 프레임워크입니다. 개발자는 종종 복잡한 설정을 잊거나 번거로운 작업을 수행하는 데 시간을 허비하게 됩니다. 이를 해결하기 위해 스프링 부트는 다양한 기능을 제공하는데, 그중에서도 @SpringBootApplication 어노테이션은 가장 기본적이고 중요한 역할을 합니다. 이번 강좌에서는 이 어노테이션의 기능과 역할, 그리고 스프링 부트 애플리케이션 개발에 어떻게 활용되는지에 대해 자세히 살펴보겠습니다.

@SpringBootApplication의 정의

@SpringBootApplication은 스프링 부트 애플리케이션의 시작점으로, 여러 어노테이션을 조합하여 만든 복합 어노테이션입니다. 내부적으로 @Configuration, @EnableAutoConfiguration, @ComponentScan 등의 어노테이션이 포함되어 있어, 스프링 부트 애플리케이션을 신속하게 구성할 수 있는 기능을 제공합니다.

1. @Configuration

@Configuration 어노테이션은 해당 클래스를 스프링의 설정 클래스로 지정합니다. 이는 Bean을 정의하고 스프링 컨테이너에 등록하는 데 사용됩니다. Spring Boot에서는 별도로 이 설정을 구성하지 않아도 됩니다. 애플리케이션을 시작하면 스프링 부트가 자동으로 설정을 감지하고 Configuration 클래스를 통해 Bean을 생성합니다.

2. @EnableAutoConfiguration

@EnableAutoConfiguration은 스프링 부트 애플리케이션에서 자동으로 설정을 구성하도록 지시하는 역할을 합니다. 이 어노테이션을 통해 스프링 부트는 애플리케이션 클래스패스에 포함된 라이브러리와 설정에 따라 필요한 구성 요소를 자동으로 설정합니다. 예를 들어, 데이터베이스 관련 라이브러리가 존재한다면, 스프링 부트는 해당 라이브러리에 맞는 DataSource와 Repository 및 관련 Bean을 자동으로 구성합니다.

3. @ComponentScan

@ComponentScan 어노테이션은 스프링에게 특정 패키지에서 컴포넌트를 검색하라고 지시합니다. 이 어노테이션을 통해 애플리케이션의 다양한 컴포넌트, 서비스, 레포지토리 등을 자동으로 검색하고 등록합니다. 기본적으로 @SpringBootApplication이 선언된 클래스가 위치한 패키지와 그 하위 패키지를 자동으로 스캔하도록 지정되어 있습니다.

예제 코드

아래의 코드는 간단한 스프링 부트 애플리케이션을 구현한 예제입니다.


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MySpringBootApplication {
    public static void main(String[] args) {
        SpringApplication.run(MySpringBootApplication.class, args);
    }
}

애플리케이션 실행

위의 클래스는 MySpringBootApplication이라는 이름의 스프링 부트 애플리케이션을 정의합니다. main 메서드에서 SpringApplication.run() 메서드를 호출하여 애플리케이션을 실행합니다. 이 과정에서 @SpringBootApplication이 적용된 모든 설정이 자동으로 로딩됩니다.

스프링 부트의 추가 기능들

스프링 부트는 @SpringBootApplication을 기반으로 다양한 추가 기능을 제공합니다. 여기에는 프로파일(profile), 외부 설정파일(application.properties 또는 application.yml), 데이터베이스 마이그레이션, 로깅, 모니터링, 테스트 기능 등이 포함됩니다.

프로파일(profile)

스프링 부트에서는 환경에 따라 달라지는 설정을 관리하기 위한 프로파일 기능을 제공합니다. 이를 통해 개발, 테스트, 운영 환경에 따라 다른 설정을 쉽게 관리할 수 있습니다. 예를 들어, 로컬 환경에서는 H2 데이터베이스를 사용하고, 운영 환경에서는 MySQL을 사용할 수 있습니다.

외부 설정파일

스프링 부트에서는 application.properties 또는 application.yml 파일을 통해 애플리케이션의 설정을 외부에서 관리할 수 있게 돕습니다. 다양한 설정을 이 파일들에 정의할 수 있으며, 환경변수를 통해 민감한 정보를 관리할 수 있습니다.

데이터베이스 마이그레이션

스프링 부트에서는 Flyway나 Liquibase와 같은 데이터베이스 마이그레이션 도구를 쉽게 통합할 수 있습니다. 이를 통해 데이터베이스 스키마를 관리하고, 애플리케이션 버전 변화에 따라 필요한 마이그레이션을 자동으로 수행할 수 있습니다.

로깅

스프링 부트는 SLF4J와 Logback을 기본 로깅 프레임워크로 사용합니다. 로깅 설정은 간단한 프로퍼티로 조정할 수 있으며, 필요에 따라 로그 레벨, 출력 형식 등을 조절할 수 있습니다.

모니터링

스프링 부트 액추에이터(Spring Boot Actuator)는 애플리케이션의 상태를 모니터링하고 관리하기 위한 도구를 제공합니다. 이를 통해 애플리케이션의 헬스 체크, 메트릭스, 트래픽 모니터링 등을 손쉽게 할 수 있습니다.

테스트

스프링 부트는 JUnit과 Mockito를 활용한 테스트를 쉽게 구성할 수 있게 해줍니다. @SpringBootTest 어노테이션을 통해 통합 테스트를 만들어 각 구성 요소가 제대로 동작하는지 확인할 수 있습니다.

결론

스프링 부트는 개발자에게 매우 강력한 도구입니다. @SpringBootApplication 어노테이션은 이러한 기능을 가장 간단하게 설정할 수 있는 방법입니다. 이 어노테이션 외에도 다양한 추가 기능을 통해 스프링 부트를 활용하면 백엔드 개발의 생산성을 크게 높일 수 있습니다.

참고 자료

스프링 부트 백엔드 개발 강좌, AWS 계정 생성하기

안녕하세요! 이번 강좌에서는 스프링 부트 백엔드 개발을 위해 필요한 첫 단계인 AWS(Amazon Web Services) 계정을 생성하는 방법에 대해 알아보겠습니다. AWS는 클라우드 컴퓨팅 서비스 제공업체로, 다양한 서비스와 도구를 제공하여 개발자들이 애플리케이션을 쉽고 빠르게 배포할 수 있도록 돕습니다.

1. AWS란 무엇인가?

AWS는 아마존에서 제공하는 클라우드 서비스 플랫폼으로, 다음과 같은 장점을 가지고 있습니다:

  • 신뢰성: 전 세계에 걸쳐 데이터 센터를 운영하여 높은 가용성과 장애 복구를 제공
  • 비용 효율성: 사용한 만큼만 비용을 지불하는 구조로 유연한 비용 관리 가능
  • 확장성: 필요한 만큼 리소스를 쉽게 늘리거나 줄일 수 있는 유연성
  • 다양한 서비스: 컴퓨팅, 스토리지, 데이터베이스, 머신러닝 등 다양한 서비스를 지원

2. AWS 계정 생성하기

AWS 계정을 생성하는 과정은 간단하면서도 몇 가지 단계를 요구합니다. 아래의 단계에 따라 계정을 생성해 보겠습니다.

2.1 AWS 홈페이지 접속하기

웹 브라우저를 열고 AWS 공식 홈페이지로 이동합니다.

2.2 “계정 만들기” 선택하기

홈페이지 상단에 있는 “계정 만들기” 버튼을 클릭합니다. 이미 AWS 계정이 있는 경우 로그인 페이지로 이동하게 됩니다.

2.3 이메일 주소와 비밀번호 입력하기

새 계정을 만들기 위해 유효한 이메일 주소를 입력하고, 비밀번호를 설정합니다. 여기에서 입력한 이메일 주소는 AWS의 모든 커뮤니케이션을 받을 주소가 됩니다.

2.4 계정 유형 선택하기

AWS에서 제공하는 계정 유형은 개인 또는 사업체 계정으로 나뉩니다. 본인의 상황에 맞는 계정을 선택합니다.

2.5 결제 정보 입력하기

AWS의 대부분의 서비스는 무료 티어를 제공하지만 기본적인 결제정보(신용카드 정보)를 입력해야 합니다. 이 정보는 AWS에서 요금을 부과할 때 사용됩니다. 보안상의 이유로, AWS는 카드 정보를 안전하게 보호합니다.

2.6 신원 인증하기

신원 인증을 위해 전화 인증을 수행해야 합니다. 입력한 전화번호로 전송된 코드를 입력하여 인증을 완료합니다.

2.7 지원 계획 선택하기

AWS에서는 다양한 지원 계획을 제공합니다. 개인 사용자나 소규모 개발자는 무료 플랜을 선택하는 것이 일반적입니다.

2.8 계정 생성 완료하기

이제 계정 생성이 완료되었습니다. 입력한 이메일 주소로 전송된 확인 메일을 통해 계정 활성화를 진행하세요.

3. AWS 콘솔 탐색하기

계정을 생성한 후 AWS 콘솔에 로그인하여 다양한 서비스를 탐색할 수 있습니다. AWS 콘솔은 사용하기 쉬운 웹 기반의 대시보드이며, 여기에서 모든 AWS 서비스에 접근할 수 있습니다.

3.1 서비스 선택하기

콘솔 메인 화면에서 사용 가능한 다양한 서비스가 나열되어 있습니다. 예를 들어, EC2(가상 서버), S3(스토리지 서비스), RDS(관계형 데이터베이스 서비스) 등을 선택할 수 있습니다.

3.2 리전 선택하기

AWS에서는 리전을 선택하여 가까운 서버를 사용할 수 있습니다. 리전을 선택함으로써 대기 시간을 줄일 수 있고, 재해 복구 계획에도 도움이 됩니다.

4. 스프링 부트와 AWS의 통합

이제 AWS 계정이 생성되었으니, 스프링 부트 애플리케이션을 AWS에 배포하는 방법을 알아보겠습니다. AWS는 스프링 부트 애플리케이션을 호스팅하는 데 적합한 다양한 서비스를 제공합니다.

4.1 Amazon EC2

Amazon EC2(Elastic Compute Cloud)는 AWS에서 제공하는 가상 서버 서비스입니다. EC2 인스턴스를 생성하면, 스프링 부트 애플리케이션을 직접 배포하고 관리할 수 있습니다.

4.2 AWS Elastic Beanstalk

AWS Elastic Beanstalk는 애플리케이션을 쉽고 빠르게 배포할 수 있도록 돕는 플랫폼 서비스입니다. 스프링 부트를 지원하며, 배포, 서버 관리, 모니터링 등을 자동화할 수 있습니다.

4.3 Amazon RDS

Amazon RDS(Relational Database Service)는 관계형 데이터베이스를 관리하는 서비스입니다. 스프링 부트 애플리케이션에 필요한 데이터베이스를 손쉽게 설정하고 운영할 수 있습니다.

5. 결론

이번 강좌에서는 스프링 부트 백엔드 개발을 위한 첫 단추인 AWS 계정 생성 방법과 기본적인 AWS 서비스에 관하여 상세히 알아보았습니다. AWS를 통해 스프링 부트 애플리케이션을 클라우드에서 쉽게 배포하고 관리할 수 있는 환경을 구축할 수 있습니다.

앞으로의 강좌에서 이론을 보다 구체적으로 다루고 실제 프로젝트를 통해 실습하는 시간을 가질 것입니다. 지속적으로 열심히 해봅시다!

참고 자료

스프링 부트 백엔드 개발 강좌, 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를 간단하게 설정하는 방법을 배웠습니다. 자동화된 워크플로우를 통해 개발 및 배포 프로세스를 효율적이고 일관되게 유지할 수 있습니다. 지속적으로 깃허브 액션을 활용하여 프로젝트의 품질을 높여보세요!

추가 자료