Fly.io 영속성 관리

  • Fly.io를 활요한 배포 시 기본적으로 영속성을 유지되지 않는다. 따라서 데이터 영속성을 유지하기 위해 DB와 JPA 설정이 필요하다.
  • Fly.io에서 지원하는 DB는 주로 PostgreSQL로, MySQL은 공식적으로 지원되지 않는다.

PostgreSQL 클러스터 생성

flyctl pg create

 

클러스터 이름: ssa-surl-project-db

클러스터를 생성하면 PostgreSQL 인스턴스가 배포되며, 이는 직접적인 조회가 불가능하므로 연결 정보를 따로 저장해두는 것이 좋다.

로컬에서 Fly.io PostgreSQL 클러스터 접근 (DBeaver 설정)

fly.io는 직접 접근을 허용하지 않으므로, DBeaver에서 Portal 설정을 통해 우회하는 방식으로 접근할 수 있다.

  1. DBeaver에서 새 연결 설정
  • PostgreSQL 연결 설정을 선택하고, Fly.io PostgreSQL 클러스터 정보를 입력한다.
  1. Portal 생성
  • DBeaver의 Portal 기능을 통해 Fly.io의 DB 클러스터에 접근할 수 있다.
  • Portal을 통해 Fly.io DB에 연결하면 Fly.io 정책을 우회하여 로컬 PC에서 Fly.io DB를 직접 관리할 수 있다.

 

  1. Fly.io에서 Proxy설정 Fly.io에서 생성한 PostgreSQL 클러스터에 접근하려면 로컬에서 Proxy를 설정해야한다. 이를 통해 로컬 머신에서 Fly.io PostgreSQL에 접근할 수 있다.
flyctl proxy 5433:5432 -a ssa-surl-project-db
  • 위 명령어는 로컬의 포트 5433을 Fly.io의 클러스터 포트 5432에 연결하는 프록시를 만든다.
  • -a ssa-surl-project-db는 Fly.io의 애플리케이션 이름으로, 설정한 이름에 맞게 변경해준다.
  1. DBeaver에서 Fly.io PostgreSQL 연결 (Portal)
  • DBeaver에서 PostgreSQL 연결을 생성
  • Database : Fly.io 내에 만든 PostgreSQL 데이터베이스 (surl_prod)를 입력한다.
  • Host: 로컬 Proxy 포트 (localhost: 5433)를 사용한다.

이렇게 설정하면 DBeaver에서 Fly.io PostgreSQL 데이터베이스에 접근할 수 있다.

  1. Fly.io 내부 접근 주소
  • Fly.io 내에서 PostgreSQL 클러스터는 ssa-surl-project-db.internal:5432주소를 사용하여 접근할 수 있다.
  • Fly.io 내 다른 서비스에서 데이터베이스를 호출할 때 이 내부 주소를 사용하면 된다.

로그 레벨 설정 (log.debug)

  1. 개발/테스트 모드에서만 로그 찍기
log.debug("before get id");

log.debug()는 개발 및 테스트 환경에서만 활성화되며, 운영 환경에서는 실행되지 않는다.

  1. 운영 모드에서 로그 레벨 설정
  • 운영 환경에서는 prod.yml 파일에서 로그 레벨을 INFO로 설정해두었기 때문에, DEBUG 수준의 로그는 기록되지 않는다.
  • 운영 모드에서는 성능과 보안 때문에 INFO 이상의 중요한 로그만 남기고, 개발 환경에서만 DEBUG 로그로 상세히 기록하도록 설정하는 것이 좋다.

ApplicationRunner

ApplicationRunner 인터페이스는 Spring Boot 애플리케이션이 시작된 후 가장 마지막에 실행되는 로직을 정의할 수 있는 인터페이스

 @Bean // 개발자가 new 하지 않아도 스프링부트가 직접 관리하는 객체
    @Order(4)
    public ApplicationRunner initNotProd() {
        return args -> {
            self.work1();
        };
    }

+ Recent posts