Cloudflare Proxy 적용

2025. 12. 20. 06:52·인프라/Cloudflare
반응형

운영중인 함쓰 가계부 앱의 사용자에게 앱이 자꾸 로그인이 풀린다는 제보가 들어왔다.

심할때는 로그인이 풀린다음 재로그인을 10번정도 시도해야 된다고 한다.

 

카페에 남긴 이 내용을 보고 처음 든생각은??  "나는 한번도 안끊기는데???"

폰의 영향인가? 최신 업데이트된 OS 탓인가?

 

마침 최근 IOS도 26이 나오고 안드로이드도 16이 나오다 보니.. 여러 가능성이 있었다.

그런데 마침 댓글에... "나만 끊기는게 아니었네요~" 라는 글이 달렸다.

오잉... 그런사람이 많다고??

 

함쓰는 JWT 토큰 인증 방식을 사용하고 있다.

AccessToken 은 15분 RefreshToken 은 2주를 셋팅하여 사용중이다.

앱 차원에서 AccessToken 이 만료되거나 가까워지면 RefreshToken 을 이용해서 자동으로 업데이트 되고 있다.

갱신되는지 모르고 사용하고 있는 샘이다.

 

그럼 언제 끊기는가?

일단 API 를 호출 하는 모든 순간에 토큰을 사용하기 때문에 앱을 한참 사용중에 끊기게 되면 화면의 갱신이 안된다. 즉 오류처럼 보이게 될것이다. (잘 구성된 앱은 이 경우에도 자연스럽게 로그인 화면으로 이동할 것이다.) 그럼 명시적으로 로그인화면으로 이동하는 순간은 언제인가? 바로 앱이 처음 동작하는 스플래시 화면이다. 이때는 인증정보를 체크하고 권한이 없으면 바로 로그인 화면으로 이동한다.

 

일단 여기까지 정보를 보았을때는 특정사용자의 DB정보에 잘못된 무언가가 있나? 고민했다.

그 뒤 사용자가 해외에 있다고 하여 .. 환경의 문제로 접근했다.

VPN 을 사용하는지 물어봤다. 그런데 아니라고 한다.

이제부터는 사용자에게 이것저것 물어가면서 확인이 어려워진다. 접속이 안되는 사용자는 이미 카페에 남기는 글자에서 답답함과 불쾌감이 나타나고 있었다.

 

어쩌겠는가.. 앱에 네트워크 체크 기능을 만들고 업데이트 하여 눌러봐 달라고 했다.

한국에 서버를 둔 API 연결은 통신 실패!!!

파이어베이스는 통신 성공!!!

 

오호라... 서버 위치가 문제구나..

나도 최근 이사를 했을때 해외망이 저녁 9시부터 12시까지 너무 느려서 통신사에 제보하여 라인을 바꾼 경험이 있다. SK망에서 LG망으로 바꿨나? 암튼 라인 자체를 바꿨더니 개선이 되었다.

결론적으로 사용자의 인터넷 환경이 문제라고 나름대로 결정을 하였다.

 

그렇다면 해결책은?

GPT에 물어봤더니.. 무료 상품으로도 dns 뿐만 아니라 ssl 인증서, proxy 까지 가능하다고 한다.

얼마나 큰 차이가 있을까 싶으나 유의미 한 것 같기는 한다. DDOS 도 막아준다고 하니 나쁠건 없다.

 

기존 사용자의 환경은 해당 사용자의 인터넷 ISP -> 해외망 이 어떨지 모르겠으나

바꾸면 사용자의 ISP -> Cloudflare 의 가장 빠른 엣지 서버 -> 엣지서버에서 한국으로 접속

이렇게 되기 때문에 해외망의 라우팅 자체가 달라지게 되고 전세계에서 아주 많이 사용하고 있는 서비스로 신뢰할 수 있을 것 같다.

 

서론이 길었으니 이 글은 cloudflare proxy 를 적용하기 위한 과정을 기록으로 남기고자 한다.

 

현 서버 구성

현재 서버는 vultr 라는 클라우드 서비스를 한국리전으로 운영중이다.

인터넷 -> 최초 Haproxy 접속 -> 이중화 API 서버 로드 밸런스

이런 구조이다.

SSL 인증서는 Haproxy 에서 일괄처리한다.

내부의 Docker 컨테이너로 연결된다.

 

해결 방안

Cloudflare 옮기기 위해서 해야하는 작업 절차는 다음과 같다.

1. Cloudflare 에 기존 DNS 업체 정보 모두 옮기기 (현재는 무료 DNSZI 를 쓰고 있다.)

2. Cloudflare 로 DNS 서버 이전 (proxy 모드로)

3. Cloudflare 로 SSL 인증서 셋팅

4. 기존 Haproxy 를 살려두고 Cloudflare -> Haproxy 통신이 가능하도록 Haproxy 에 Cloudflare 통신용 SSL 셋팅

 

특히 2,3,4 는 동시에 해야 한다.

 

그럼 계획은

0. 함쓰 사용자에게 작업 공지 (앱 공지)

1. Cloudflare 에 기존 DNS 업체 정보 모두 옮기기 (현재는 무료 DNSZI 를 쓰고 있다.)

2. Cloudflare 로 DNS 서버 이전 (proxy 모드로)

3. Cloudflare 로 SSL 인증서 셋팅

4. 기존 Haproxy 를 살려두고 Cloudflare -> Haproxy 통신이 가능하도록 Haproxy 에 Cloudflare 통신용 SSL 셋팅

 

이렇게 하면 될것 같다.

DNS가 변경되면 전세계 전파되는 시간이 좀 걸릴 것이다.

함쓰 앱에서 SSL 인증서가 안마장도 왠지 서비스가 될것 같기는 한데.. 일단 시도를 해봐야겠다.

 

Cloudflare 에 도메인 등록

일단 먼저 도메인 등록을 시도해 본다.

이런식으로 자동으로 검색된 호스트가 아래로 쭉~ 뜬다. 이중에 안나오는 애들을 내가 수동으로 등록 해줬다.

등록하고 나니 기존 DNS공급자에서 고치라고 나온다.

godaddy 에 접속해서 네임서버를 바꿨다.

 

DNSSEC 를 끄라는 안내가 있어서. 찾아봤는데 이미 꺼져있는 것 같다.

 

그냥 아침일찍 새벽에... 한번 해봤다.

 

0. 함쓰 사용자에게 작업 공지 (앱 공지) => 불필요

1. Cloudflare 에 기존 DNS 업체 정보 모두 옮기기 (현재는 무료 DNSZI 를 쓰고 있다.) => 완료

2. Cloudflare 로 DNS 서버 이전 (proxy 모드로) => 완료

3. Cloudflare 로 SSL 인증서 셋팅 => 완료

4. 기존 Haproxy 를 살려두고 Cloudflare -> Haproxy 통신이 가능하도록 Haproxy 에 Cloudflare 통신용 SSL 셋팅 => 이것도 완료인듯

 

일단 공지 없이 해봤는데.. 잘돼네?

 

API 접근 포트 확인

하나씩 잘 되는지를 확인해보자.

일단 api 서버로의 22 번 포트 접근을 해보니까. 안된다.

확인해보니 Proxy 는 80, 443만 해준다고 한다.

프록시를 꺼보자. 끄니까 잘된다.

 

작업하다보니.. 한가지 주의했어야 하는것이 있다.

무료버전 cloudflare 는 80, 443 만 프록시 한다는 것이다.

즉, 다른포트로 서비스를 하고 있었다면 차단된다는 것이다. 함쓰의 경우 최신 버전은 443을 사용하지만 이제야 배포하기 시작했고

기존 서비스는 9443으로 서비스를 했다. 즉 Proxy 를 켜두면 바라보는 IP가 바뀌기 때문에 proxy 되지 않는다는 것이다.

그래서 일단 api 서버는 proxy 는 꺼두었다. 최신 버전이 어느정도 배포 되고 나면 그때 켜야겠다.

켜기만 하면 문제 없다는 뜻.

 

Haproxy 로그 확인

money.gglab.app 사이트의 haproxy 로그를 확인해봤다.

우리집의 아이피가 찍히지 않고 알수없는 아이피가 찍혔다.

검색해보니 cloudflare 아이피 대역이 맞다고 한다.

일단 통과

 

기존 서버에서의 Certbot 동작 확인

기존 certbot 이 잘 동작하는지 확인을 해봐야겠다.

root@ggmoney-haproxy:/etc/haproxy/certs# ./ssl_renew_money.gglab.app.sh 
checking expiration date for money.gglab.app...
the certificate for money.gglab.app will be updated
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Renewing an existing certificate for money.gglab.app

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   *****/money.gglab.app/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/money.gglab.app/privkey.pem
   Your certificate will expire on 2026-03-19. To obtain a new or
   tweaked version of this certificate in the future, simply run
   certbot again. To non-interactively renew *all* of your
   certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

강제로 갱신해봤는데 잘 된다.

 

개발서버 DDNS 자동 업데이트 셋팅

운영서버는 문제 없지만 개발 서버는 집에 놓고 쓰기 때문에 IP가 유동IP이다.

경험상 잘 바뀌지는 않지만 혹시나 바뀌었을 경우를 대비해서 자동 업데이트를 만들어본다.

Cloudflare API 토큰을 먼저 만든다.

요기서 Edit Zone dns 템플릿으로 선택

그리고 내 개발 서버쪽에서 docker 를 하나 띄워서 자동 업데이트를 한다.

services:
  # 그룹 1: 프록시 사용 (웹 서비스용)
  ddns-proxied:
    image: favonia/cloudflare-ddns:latest
    restart: always
    environment:
      - CLOUDFLARE_API_TOKEN=[발급받은토큰]
      - DOMAINS=ggmoney-api-dev.gglab.app,jenkins.gglab.app
      - PROXIED=true
      - UPDATE_CRON=@every 5m

요런식으로 처리한다.

 

 

그럼 새 버전 앱이 배포되기를 기다렸다가.

api Proxy 를 ON 하면 될것 같다.

구버전을 사용하는 사람들을 한번에 업데이트 유도할 수 있을것 같다.

안된다고 제보가 올 것이니까.

 

 

반응형

'인프라 > Cloudflare' 카테고리의 다른 글

k3s 에 cloudflare ddns 업데이터 적용  (0) 2025.12.20
'인프라/Cloudflare' 카테고리의 다른 글
  • k3s 에 cloudflare ddns 업데이터 적용
GG.Lab
GG.Lab
GG.Lab
    반응형
  • GG.Lab
    GG.Lab
    GG.Lab
  • 전체
    오늘
    어제
    • 분류 전체보기 (50)
      • APP (25)
        • 함쓰가계부 (22)
        • 랭킹구구단 (3)
      • 인프라 (18)
        • Docker (1)
        • Proxmox (4)
        • Kubernetes (8)
        • Network (3)
        • Cloudflare (2)
      • DB (7)
        • Postgresql (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 함쓰 메뉴얼
    • 함쓰 카페
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자작앱
    문자자동인식
    부부가계부
    커플가계부
    함께쓰는가계부
    함쓰
    공유가계부
    쿠버네티스
    함쓰가계부
    traefik
    k3s
    연인가계부
    플러터
    sms인식가계부
    k3s외부서비스
    pfsense
    postgresql이중화
    문자자동인식가계부
    가계부편의기능
    PostgreSQL
    해외통화가계부
    patroni
    Flutter
    Proxmox
    구구단
    K8s
    앱출시
    external-svc
    Kubernetes
    해외통화지원
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
GG.Lab
Cloudflare Proxy 적용
상단으로

티스토리툴바