Infra 12

Port Forwarding 대신 CloudFlare Tennel 사용하기

1. 상황운영중인 서비스에서 간혈적인 522 Connection Timed out 에러가 발생하기 시작했습니다. 그리고 전반적으로 요청 응답 속도가 느려졌으며 특히 서버를 통한 Swagger 접속 시 522에러가 발생하거나 접속에 오랜 시간이 걸리는 이슈가 발생했습니다.이번에는 해당 이슈의 원인을 찾고 해결 방법을 찾아보겠습니다.2. 원인 찾기현재 통신 구조는 위와 같습니다. 클라이언트에서 요청을 보내면 cloudflare dns 서비스를 통해 서버와 통신하며 내부적으로 proxy를 서버로 돌려줍니다. 그러면 iptime 공유기로 요청이 들어오면 이후 내부적으로 설정한 port로 어플리케이션 인스턴스로 접근합니다.먼저 grafana 모니터링 대시보드에서는 특이사항이 발견되지 않았습니다. prometheu..

Infra 2026.02.02

서비스 개선기 - 3. Blue-Green 무중단 배포 적용

1. 상황현재 서비스의 일일 사용자가 70 - 100 명 정도를 생기고 새벽 시간대 외에는 사용자가 분포해있어 서버의 가용성이 중요해졌습니다. 하지만 기존의 배포 방식은 단순히 배포 방식을 자동화 시킨 방식이기 때문에 서버에서 새로운 버전으로 갈아끼는 동안 잠깐의 다운 타임이 생깁니다. 따라서 보다 다운 타임을 줄이기 위해 무중단 배포를 적용해보도록 하겠습니다. 2. 무중단 배포란?기존의 배포 방식은 서버에서 가동중인 서비스를 잠시 중단 시키고 새로운 서비스를 가동시키는 방식을 사용하는데 이때 잠깐의 다운 타임이 발생합니다. 이를 없애 사용자가 끊김 없이 서비스를 이용할 수 있도록하는 배포 전략이며 종류는 크게 3가지가 있습니다.2.1 Blue-Green블루를 구버전, 그린을 신버전으로 지칭하여 짧은 ..

Infra 2026.01.18

데이터 잃고 서버 고치기

1. 상황미니 피씨를 구매 후 개인 서버로 사용하있으며 여러 컨테이너를 올려놓고 사용중입니다.MySQL도 도커로 간단하게 올려놓고 사용하던 중 팀원한테 서버 오류가 발생한다는 연락을 받았습니다. Spring 로그를 보니 DB 연결 오류가 발생하길래 의아해하며 DB를 확인하니 테이블들이 싹 날라가있었습니다.... 혹시나 하는 마음으로 데이터 저장 위치로 가니 RECOVER_YOUR_DATA파일이 생겨있고 내용을 보니 복구를 원하면 비트코인을 달라는 내용이었습니다MySQL 컨테이너가 내려가있지는 않고 테이블과 데이터만 날라간 상황이라 서버 자체가 뚫린것보다는 DB가 뚫린 상황이라 생각해 조취를 취해봅시다!DB에 데이터는 복구보다는 다시 기초 데이터를 삽입하는 작업으로 대체했습니다.... 2. 보안 취약점DB..

Infra 2025.10.13

미니PC와 함께 홈서버를 구축해보자 - 서버 설정

이유매번 AWS Free Tier를 사용하며 성능이 항상 아쉬웠습니다. 그렇다고 성능을 높이거나 여러 인스턴스를 사용하면 결국 비용 문제가 발생하니 쿠버네티스도 편하게 학습하고 개발중인 서비스의 서버도 담당할 겸 미니 피씨를 사용해서 비용 걱정없이 사용하려고 결정했습니다. https://www.coupang.com/vp/products/7842887355?vendorItemId=89133683172&sourceType=gnb_cart_item_list GMKtec GMK G3 미니 PC 소형 데스크탑 인텔 12세대 코어 N100 WIN11 PRO - 미니PC | 쿠팡현재 별점 4.5점, 리뷰 105개를 가진 GMKtec GMK G3 미니 PC 소형 데스크탑 인텔 12세대 코어 N100 WIN11 PRO!..

Infra 2025.08.04

Termux를 사용해서 웹서버를 띄워보자

🎈 문제상황지난 포스트에서 `Termux`에서 qemu를 사용해 alpine linux container를 띄워서 그 안에서 `docker`를 사용해 프로젝트를 띄웠습니다. 하지만 속도가 굉장히 느렸고 prometheus, grafana 관련 에러가 지속적으로 발생해 모니터링 스택을 임시로 없애고 termux만을 사용해 웹서버를 구축하기로했습니다.  그럼 termux에서 spring application을 돌려봅시다!! 🎈 사전 준비안드로이드 기기와 와이파이를 사용해 자체 배포하는 방법입니다.안드로이드 기기는 termux를 다운받고 권한을 허용해주면 되며 와이파이는 몇 개의 설정을 수정해줘야합니다. 해당 설정들을 termux에서 docker를 사용하기 위한 포스팅에서 이미 설정을 했으므로 해당 포스팅..

Infra 2025.01.19

핸드폰으로 Docker를 사용해 백엔드 서버를 무료 배포해보자!(without Root)

🎈문제상황외부 프로젝트 팀에 참가해 작업했던 프로젝트의 EC2 기간이 끝났습니다. 해당 프로젝트는 기능 개선 후 추가 개발 예정이라 기획 / 디자인 팀에서 심혈을 기울여 작업중에 있으며 인스타 등의 마케팅을 하며 서버가 계속 살아있어야 하는데 EC2, RDS 두 개를 사용하면 계속해서 AWS에서 비용이 발생합니다. 그래서 해당 프로젝트의 프로젝트 종료 전까지는 지속적으로 사용할 서버가 필요해 안쓰는 안드로이드 핸드폰을 사용해 자체적으로 배포하기로했습니다. 단순히 안드로이드 기기를 웹서버로 가용하는 방법은 간단합니다. 밑에 설명할 와이파이와 관련된 설정을 작업 후 termux, userland와 같은 터미널 에뮬러이터를 사용해 언어, 프레임워크등을 다운 후  gradlew build, java -jar ..

Infra 2025.01.06

프리티어 RDS를 진짜 free로 써보자

🔥 문제상황분명 프리티어 RDS를 사용하는데 요금이 발생합니다. 돈이 없는 저는 공짜로 쓰고싶습니다.  🤔 프리티어는 공짜인데 왜 돈이 나올까?프리티어는 많은 사람들이 토이 프로젝트, 포트폴리오, 학습 등의 배포를 목적으로 사용합니다. 저도 현재 포트폴리오 용 DB가 필요해 자주 애용하고 있습니다. 그런데 사실 프리티어가 무제한이 아닙니다.RDS 생성 페이지를 보시면 사진처럼 무료 사용 용량이 기제되있습니다. 또 인스턴스 구성 탭을 보면 1기가의 메모리를 가진 서버를 빌려줍니다. t3, t4g등 인스턴스 유형에 따른 차이점도 있는데 해당 포스팅에선 넘어가겠습니다.그리고 가장 중요한 퍼블릭 엑세스입니다.이 설정 때문에 요금이 부과되는겁니다. 정확히는 퍼블릭 엑세스를 허용하면 해당 RDS를 실행시킨 서버..

Infra 2024.10.07

[Server] Certbot을 사용한 https 적용

vercel에 front를 배포 후 api 연동을 하는데 https를 적용하라는 에러가 발생했습니다.토이 프로젝트라 https 안하고 있었는데 이번 기회에 cerbot을 사용한 간단한 https 적용을 해보겠습니다.준비물ec2domainec2서버는 준비 되있을테니 넘어가겠습니다. domain은 가비아같은 도메인 서비스를 이용해도되지만 저는 간단한 프로젝트라 무료 도메인을 사용했습니다.https://xn--220b31d95hq8o.xn--3e0b707e/ 내도메인.한국 - 한글 무료 도메인 등록센터한글 무료 도메인 내도메인.한국, 웹포워딩, DNS 등 무료 도메인 기능 제공xn--220b31d95hq8o.xn--3e0b707e해당 사이트에서 도메인을 구입하면 p-e.kr같은 웹서핑하면서 본 적 없는 신기한..

Infra 2024.07.22

[Server] curl을 사용한 cors 테스트

spring으로 cors를 열어놓고 테스트를 위해 postman, cors 테스트 툴 등 여러가지를 알아보던 중 curl 커맨드가 가장 간편해 보여서 해당 방법으로 진행했습니다!먼저 프로젝트 실행 후 git bash를 켜줍니다.curl -X OPTIONS 'http://localhost:8080' -H 'Origin: http://localhost' -H 'Access-Control-Request-Method: GET' -v첫 번째 주소는 목적지, 두 번째 주소는 출발지 주소입니다.다음과 같이 나온다면 cors설정이 잘 되었다는 뜻이고 다음과 같이 마지막 줄에 Invalid CORS라고 뜬다면 cors에 문제가 있는 상태입니다.저는 설정 충돌로 이슈가 있었네요 ;;@Override public void..

Infra 2024.07.01

[CI/CD] workflow_dispatch

github action을 사용하며 github secret를 변경 후 재배포를 하는데 현재 코드상으론 변동사항이 없어 pr을 날려 action을 발동시킬 수 없었습니다. 그래서 수동 배포 트리거를 구현했습니다. name: Java CI with Gradleon: push: branches: [ "main" ] workflow_dispatch: inputs: logLevel: description: 'Log level' required: true default: 'warning' tags: description: 'Test scenario tags'현재 main의 커밋이 merge되면 action이 발동하는 로직에서 wor..

Infra 2024.07.01