Flutter 앱을 관리할 때, 앱 버전에 따라 요청을 다르게 처리하는 전략은 서버 업데이트와 무중단 배포를 효율적으로 관리할 수 있는 좋은 방법입니다. 이 글에서는 Nginx 설정을 활용하여 앱 버전에 따라 다른 백엔드 서버로 요청을 전달하도록 설정하는 방법과 서버 업데이트를 위한 전략을 소개합니다.
Flutter 앱의 버전별로 다른 백엔드 서버로 요청을 전달해야 하는 상황이 발생할 수 있습니다.
서버 업데이트 중에도 기존 앱 사용자에게 영향을 주지 않고 무중단 배포를 구현해야 합니다.
업데이트가 완료되면 본 서버로 트래픽을 전환하는 방식으로 안정성을 유지해야 합니다.
Nginx의 map 디렉티브를 사용하여 앱의 x-app-version 헤더 값을 기반으로 요청을 다른 서버로 전달할 수 있습니다.
Nginx 설정 예시
map $http_origin $allowed_origin {
"http://host:port" $http_origin;
default "*";
}
server {
listen port;
listen [::]:port;
location / {
# CORS 처리
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' * always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization,x-api-key,X-Api-Key,pushtoken,deviceid,x-app-version' always;
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
return 204;
}
# 버전별 백엔드 서버로 프록시
if ($http_x_app_version = "1.0.8") {
proxy_pass http://host:port;
}
proxy_pass http://localhost:port;
proxy_pass $redirect_target;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header x-app-version $http_x_app_version;
}
client_max_body_size 100M;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_redirect off;
error_page 502 503 504 /custom_50x.html;
location = /custom_50x.html {
root /usr/share/nginx/html;
internal;
}
}
if 블록을 사용하여 기본값을 명시적으로 처리할 수 있습니다
스테이징 서버에서 미리 업데이트 준비:
실제 배포 전에 스테이징 서버에서 업데이트를 완료합니다.
설정 파일이나 데이터베이스를 미리 검증합니다.
Nginx를 활용한 트래픽 분리:
특정 버전(x-app-version: 1.0.8)의 요청만 새로운 백엔드 서버로 전달합니다.
다른 버전의 요청은 기존 백엔드 서버로 전달합니다.
모든 요청을 새로운 서버로 전환:
스테이징 서버가 검증된 후, Nginx 설정의 default 값을 새로운 서버로 변경합니다.
설정 파일을 적용하고 Nginx를 다시 로드합니다:
nginx -t && nginx -s reload
문제가 발생할 경우, Nginx 설정을 이전 상태로 복구하고 다시 로드합니다.
무중단 배포:
기존 사용자에게 영향을 주지 않고 새로운 업데이트를 적용할 수 있습니다.
버전별 트래픽 관리:
특정 버전의 사용자만 새로운 서버로 유도할 수 있습니다.
빠른 롤백 가능:
문제가 발생했을 때, 설정을 원래대로 복구하여 빠르게 대응할 수 있습니다.
Nginx의 map 디렉티브와 설정 파일을 활용하면 Flutter 앱의 버전별로 백엔드 서버를 동적으로 관리할 수 있습니다. 이를 통해 서버 업데이트 과정을 효율적으로 처리하고, 무중단 배포와 롤백 계획을 손쉽게 구현할 수 있습니다. 위 전략을 활용하여 안정성과 유연성을 모두 갖춘 배포 환경을 구축해보세요!