Spring Boot 마이크로 서비스 빌드

완료됨

이 모듈에서는 클라우드 지원 Spring Boot 마이크로 서비스를 빌드할 예정입니다. Spring Boot 마이크로 서비스는 Azure Spring Apps에서 관리 및 지원되는 Spring Cloud 서비스 레지스트리 Spring Cloud Config Server를 사용합니다.

이 마이크로 서비스는 Spring Data JPA를 사용하여 Azure Database for MySQL 데이터베이스에서 데이터를 읽고 씁니다.

  • Azure Spring Apps는 해당 데이터베이스를 서비스에 자동으로 바인딩합니다.
  • Azure Database for MySQL은 Azure에서 실행되는 완전 관리형 MySQL 버전입니다.

Azure Spring Apps에서 애플리케이션 만들기

Azure Spring Apps 인스턴스에서 특정 todo-service 애플리케이션을 만듭니다.

az spring app create --name todo-service --resource-group "$RESOURCE_GROUP_NAME" --service "$SPRING_CLOUD_NAME" --runtime-version Java_17

MySQL 데이터베이스 만들기

Azure Database for MySQL 만들기:

az mysql server create \
    --name ${SPRING_CLOUD_NAME}-mysql \
    --resource-group "$RESOURCE_GROUP_NAME" \
    --sku-name B_Gen5_1 \
    --storage-size 5120 \
    --admin-user "spring"

이 작업은 몇 분 정도 걸릴 수 있으며 JSON 문서를 출력합니다. 나중에 사용해야 하니 해당 문서에서 password 특성을 복사합니다.

이번에는 서버에 todos 데이터베이스를 만들고 Azure Spring Apps가 액세스할 수 있도록 방화벽을 엽니다.

az mysql db create \
    --name "todos" \
    --server-name ${SPRING_CLOUD_NAME}-mysql
az mysql server firewall-rule create \
    --name ${SPRING_CLOUD_NAME}-mysql-allow-azure-ip \
    --resource-group "$RESOURCE_GROUP_NAME" \
    --server ${SPRING_CLOUD_NAME}-mysql \
    --start-ip-address "0.0.0.0" \
    --end-ip-address "0.0.0.0"

이 작업이 완료되면 이 워크숍에 대해 만든 리소스 그룹에 생성된 항목을 확인할 수 있습니다.

애플리케이션에 MySQL 데이터베이스 바인딩

Azure Spring Apps는 우리가 만든 MySQL 데이터베이스를 자동으로 마이크로 서비스에 바인딩할 수 있습니다.

  1. Azure Spring Apps 인스턴스로 이동합니다.

  2. 을 선택합니다.

  3. todo-service 애플리케이션을 선택합니다.

  4. 서비스 커넥터를 선택한 다음 + 만들기를 선택합니다.

    1. 서비스 형식으로 DB for MySQL 단일 서버를 선택합니다.
    2. 연결 이름을 지정합니다(예: mysql_todos).
    3. 올바른 구독이 표시되는지 확인합니다.
    4. 이전 단계에서 만들어진 MySQL 서버를 선택합니다.
    5. 이전에 만든 MySQL 데이터베이스를 선택합니다.
    6. 클라이언트 유형으로 SpringBoot를 선택합니다.
    7. 하단에서 다음: 인증 단추를 선택합니다.
  5. 인증 페이지에서 연결 문자열이 선택되었는지 확인합니다.

  6. 계속...데이터베이스 자격 증명을 선택하고 사용자 이름과 암호 필드를 입력합니다. 사용자 이름은 "spring"이고 암호는 이전에 복사한 암호 특성입니다.

    참고 항목

    암호를 잊어버린 경우 az mysql server update -n ${SPRING_CLOUD_NAME}-mysql -g "$RESOURCE_GROUP_NAME" -p <new-password>를 사용하여 다시 설정할 수 있습니다.

  7. 대상 서비스에 액세스할 수 있도록 방화벽 규칙 구성이 선택되어 있는지 확인합니다.

  8. 다음: 검토 + 만들기를 클릭합니다.

  9. 유효성 검사를 통과한 메시지가 나타나면 만들기 단추를 선택하여 서비스 커넥터를 만듭니다.

Spring Boot 마이크로 서비스 만들기

지금까지 Azure Spring Apps 인스턴스를 프로비저닝하고 서비스 바인딩을 구성했으니 이제 todo-service의 코드를 준비해 보겠습니다.

마이크로 서비스를 만들려면 명령줄에서 https://start.spring.io를 사용합니다.

curl https://start.spring.io/starter.tgz -d type=maven-project -d dependencies=web,mysql,data-jpa,cloud-eureka,cloud-config-client -d baseDir=todo-service -d bootVersion=3.1.5.RELEASE -d javaVersion=17 | tar -xzvf -

참고 항목

Spring Web, MySQL Driver, Spring Data JPA, Eureka Discovery ClientConfig Client 구성 요소를 사용합니다.

Spring Data JPA로 데이터를 관리하기 위한 Spring 코드 추가

DemoApplication 클래스 옆에 Todo JPA 엔터티를 만듭니다.

package com.example.demo;

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

@Entity
public class Todo {

    public Todo() {
    }

    public Todo(String description, boolean done) {
        this.description = description;
        this.done = done;
    }

    @Id
    @GeneratedValue
    private Long id;

    private String description;

    private boolean done;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public boolean isDone() {
        return done;
    }

    public void setDone(boolean done) {
        this.done = done;
    }
}

그런 다음, 이 엔터티를 관리하는 Spring Data JPA 리포지토리(TodoRepository)를 만듭니다.

package com.example.demo;

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

public interface TodoRepository extends JpaRepository<Todo, Long> {
}

그리고 TodoController라는 Spring MVC 컨트롤러를 추가하여 이 애플리케이션의 코딩을 완료합니다.

package com.example.demo;

import org.springframework.web.bind.annotation.*;

import javax.annotation.PostConstruct;
import java.util.Arrays;

@RestController
public class TodoController {

    private final TodoRepository todoRepository;

    public TodoController(TodoRepository todoRepository) {
        this.todoRepository = todoRepository;
    }

    @PostConstruct
    public void init() {
        todoRepository.saveAll(Arrays.asList(
                new Todo("First item", true),
                new Todo("Second item", true),
                new Todo("Third item", false)));
    }

    @GetMapping("/")
    public Iterable<Todo> getTodos() {
        return todoRepository.findAll();
    }
}

데이터베이스 테이블을 만들도록 Spring Boot 구성

애플리케이션이 배포될 때 데이터베이스 테이블을 자동으로 생성하려면 src/main/resources/application.properties 구성 파일에 다음 줄을 추가합니다.

spring.jpa.hibernate.ddl-auto=create-drop

애플리케이션 배포

이제 todo-service 프로젝트를 빌드하여 Azure Spring Apps로 보낼 수 있습니다.

cd todo-service
./mvnw clean package -DskipTests
az spring app deploy --name todo-service --service "$SPRING_CLOUD_NAME" --resource-group "$RESOURCE_GROUP_NAME" --artifact-path target/demo-0.0.1-SNAPSHOT.jar
cd ..

오류가 발생하여 애플리케이션의 로그를 확인하려는 경우 az spring app logs 명령을 사용할 수 있습니다.

az spring app logs --name todo-service --service "$SPRING_CLOUD_NAME" --resource-group "$RESOURCE_GROUP_NAME" -f

클라우드에서 프로젝트 테스트

이제 애플리케이션이 배포되었으므로 테스트를 해보겠습니다.

  1. Azure Portal에서 Azure Spring Apps 인스턴스의 으로 이동합니다.
    1. todo-gateway0/1이라는 등록 상태가 있는지 확인합니다. 이 정보는 Spring Cloud 서비스 레지스트리에 올바르게 등록되어 있음을 보여 줍니다.
    2. 마이크로 서비스에 대한 자세한 내용을 보려면 todo-service를 선택합니다.
  2. 제공된 “테스트 엔드포인트”를 복사하여 붙여넣습니다.

이제 cURL을 사용하여 엔드포인트를 테스트할 수 있습니다. 테스트 명령은 다음과 같습니다.

curl https://primary:XXXXXXXXXXXXXXXXXXXXXXXXXXXXX@azure-spring-cloud-workshop.test.azuremicroservices.io/todo-service/default/

이 명령의 결과는 이전에 MySQL 데이터베이스에 삽입된 세 개의 항목이어야 합니다.

[{"id":"1","description":"First item","done":true},{"id":"2","description":"Second item","done":true},{"id":"3","description":"Third item","done":false}]

지식 점검

1.

Azure Spring Apps에 Spring Boot 마이크로 서비스를 배포하려면 애플리케이션에서 무엇을 변경해야 하나요?

2.

기본적으로 마이크로 서비스가 배포된 후에 액세스하는 방법은?