전체 글 13

[Security] Wireguard VPN으로 내 EC2 지키기

❓VPN을 도입하는 이유현재 클라우드 아키텍처에서 주요 데이터를 처리하는 RDS와 API 서버 컨테이너가 기동 중인 EC2 인스턴스는 모두 Private Subnet에 위치해 있어, 외부로부터의 직접적인 접근이 원천 차단되어 있습니다.하지만 내부 트래픽을 외부로 라우팅하기 위해 groble-monitor-instance를 NAT 인스턴스로 사용하고 있으며, 비용 절감을 위해 해당 인스턴스가 Bastion Host의 역할까지 겸하고 있습니다.즉, 외부 개발자가 Private Subnet 내 EC2 인스턴스에 접속하기 위해서는 groble-monitor-instance의 22번 포트를 통해 SSH 접속을 해야 합니다.이러한 구조는 주요 인스턴스를 Private Subnet에 배치해 외부 공격으로부터 보호하고..

Infra 2025.11.08

[AWS] Terraform으로 인프라를 코드로 "잘" 관리하기

서론기존에 수동으로 관리되던 "그로블" 서비스의 클라우드 인프라를 비용 최적화 및 보안을 고려하여 재설계하는 업무를 맡았습니다. 대표적인 IaC 툴인 Terraform을 도입하여 이번 업무를 체계적으로 수행하고자 했습니다. Terraform은 형상 관리를 통해 인프라를 체계적으로 관리를 할 수 있으며, 의존성 관리를 통해 리소스를 안정적으로 배포 및 삭제하는 등 여러 가지 장점이 존재하는 것으로 알고 있습니다. 하지만, Terraform을 쓰면서 개인적으로 느낀 가장 큰 장점은 코드베이스를 통해 AI Agent와 자유롭게 논의할 수 있다는 점이었습니다. Claude Code, Gemeni CLI와 같은 AI Agent와 현재 내 인프라의 구성 정보에 대해 논의를 나누며 인프라를 발전해 나갈 수 있다는 점..

Cloud 2025.10.04

[AWS] Private Subnet으로 EC2 이관 여정

서론이번 블로그에서는 보안을 강화하기 위해 기존에 Public Subnet에 위치했던 EC2 인스턴스를 Private Subnet으로 이전하게 된 배경과, 실제 이관 과정에서 발생했던 문제들과 이를 해결한 과정을 자세히 소개하려고 합니다. 실제 운영 환경에서 겪은 트러블 슈팅 경험과 적용한 설정들을 함께 공유함으로써, Private Subnet으로의 이관이 왜 필요한지와 구체적인 절차를 이해하는 데 도움을 드리고자 합니다.1. 기존 인프라 구조와 취약점이관 전에는 모든 EC2 인스턴스가 Public Subnet에 위치해 있었습니다. 이는 개발 단계에서 소셜 로그인, 이메일 발송 등 인터넷과 직접 통신이 필요한 기능을 별도의 추가 설정 없이 간편하게 구현하기 위함이었습니다.Prod/Dev 인스턴스 내부에는..

Cloud 2025.08.16

[Infra] 실무에서 사용해본 유용한 Docker Swarm 기능들

Docker Swarm이란?단일 컨테이너로 시작한 애플리케이션도 비즈니스 요구사항이 증가함에 따라 점차 마이크로서비스 아키텍처(MSA)를 도입하게 되고, 이에 따라 컨테이너 수도 함께 증가하게 됩니다. 컨테이너 내부에서 실행되는 애플리케이션의 특성에 따라 각기 다른 관리 전략이 필요해지고, 이는 운영 복잡도를 높입니다. 컨테이너 오케스트레이션 도구가 등장하기 전에는 인프라 관리자가 모든 컨테이너를 직접 배포하고 모니터링하며 운영을 책임져야 했습니다. 하지만, Docker Swarm을 비롯한 다양한 오케스트레이션 도구의 등장으로 이러한 작업들이 자동화되었고, 인프라를 코드로 체계적으로 관리할 수 있는 기반이 마련되었습니다. Docker의 공식 컨테이너 오케스트레이션 도구인 Docker Swarm을 한 문장..

Infra 2025.06.26

[Infra] 고가용성 Redis HA 클러스터 구축 (Redis Sentinel)

Redis HA란?Redis HA(High Availability)란 시스템에 장애가 발생하는 상황에서도 Redis 서비스의 지속적인 가용성을 보장하는 구성입니다. Redis는 일반적인 DBMS와 다르게 디스크가 아닌 메모리에 데이터를 저장하기 때문에 조회 성능에서 매우 빠른 성능을 보이지만, 메모리에 데이터를 저장되기에 데이터가 휘발될 수 있는 단점이 있습니다. 이 단점을 보완하고자 Redis HA는 다수의 Redis 서버들을 배포하여 장애 상황을 극복합니다. 사내에서 빠른 데이터 송수신 구조와 안정성을 확보한 데이터 처리를 목표로 하는 요구 사항이 있었습니다. 빠른 데이터 송수신을 위해 Redis의 Pub/Sub 기능을 사용하고 안정성을 위해서 Redis HA를 구성했습니다. 이번 블로그에서는 Red..

Infra 2025.05.01

[CI/CD] 배포에 관한 생각

배포 방법론에 대한 생각개발자는 본인이 개발한 작업물을 불특정 다수에게 공개하기 위해 필연적으로 배포라는 과정을 거쳐야 합니다. 저 또한 처음으로 팀 프로젝트를 진행하면서 로컬에서 개발한 후, 클라우드 서비스에 배포하여 모든 팀원들이 작업물을 공유할 수 있었을 때 신기하면서도 뿌듯했던 기억이 있습니다.우연히 유튜브를 보다가 6가지 배포 전략에 대해서 소개하는 유튜브 영상을 봤습니다. (영상은 하단에 첨부했습니다) 영상에 소개된 배포 전략 중 제가 실제로 적용했던 배포 방식도 있어서 이 글에서는 제가 학부 시절 프로젝트에서 사용했던 배포 방식부터, 현재 회사에서 사용하는 배포 방식까지 소개해 보려고 합니다.배포 과정에서 자주 언급되는 개념 중 하나가 CI/CD(Continuous Integration & ..

Infra 2025.04.05

[Test] 부하 테스트 (feat. JMeter)

1. 성능 테스트란? 프로젝트가 마무리되는 시점에서 다양한 성능 테스트를 통해 서버의 내구도를 확인하고 싶었습니다. 우선, 성능 테스트란 API 요청이 많은 상황에서 서버가 어떻게 동작하는지 확인하는 테스트 입니다.  시스템이 서비스가 정상적으로 제공할 수 있는 상태인 가용성을 높이기 위해 성능 테스트를 실시합니다. 또한, "초당 1000건의 요청 처리 + 모든 조회 요청을 1초 이내로 응답"과 같은 목표치를 달성하기 위해서도 성능 테스트를 진행할 수 있습니다. 이번 블로그에서는 2. 성능 테스트 지표성능 테스트에서 주의 깊게 봐야 할 지표는 크게 "처리량"과 "응답 시간"입니다. "처리량"은 초당 처리하는 작업의 수 (TPS: Transactions Per Second) 입니다. 처리량은 서브시스템 중..

Test 2024.12.21

[Infra] 모니터링 서버 구축 (feat. Prometheus, Grafana)

1.  모니터링 서버 도입 목적프로젝트 진행 중에는 대규모 트래픽이 발생하지 않아 모니터링의 필요성을 크게 느끼지 못했습니다. 그러나 최근 JMeter를 활용해 가상의 트래픽을 발생시켜 성능을 측정한 결과, 특정 지점 이후 요청이 실패하는 문제가 발생했습니다. 이때 실패 원인을 정확히 파악할 수 없었고, 향후 대량 트래픽 상황에 대비하기 위해 모니터링 서버의 필요성이 대두되었습니다.기존에는 요청 실패 시 로그를 수작업으로 분석하여 문제를 확인하고 대응했지만, 이 과정은 시간이 오래 걸리고 비효율적이었습니다. 이러한 한계를 극복하고 실시간으로 시스템 상태를 파악하기 위해 모니터링 서버를 구축하고자 합니다. 이번 블로그에서는 모니터링 서버를 구축하는 과정과 이를 통해 유의미한 지표를 분석하는 방법을 소개하겠..

Infra 2024.12.21

[Infra] 데이터베이스 다중화

1. 데이터베이스 다중화의 개념데이터베이스 다중화는 여러 대의 데이터베이스 서버를 구성하여 시스템 전체의 성능 향상과 고가용성을 달성하는 기술입니다. 이는 MySQL Replication과 같은 "복제 기술"을 사용해 데이터를 여러 서버로 동기화 하는 방식으로 구현됩니다. "복제"는 한 서버의 데이터가 다른 서버로 동기화되는 것을 의미합니다. 특히, 소스 서버로부터 레플리카 서버로 데이터 복제가 이루어지는데, 소스 서버는 원본 데이터를 소유하고 있는 서버를 의미하며, 레플리카 서버는 복제된 데이터가 저장될 서버를 의미합니다. MySQL에서 데이터 복제가 일어나는 과정은 아래와 같습니다.2. 레플리케이션의 동작 원리소스 서버에서 발생하는 모든 변경사항(이벤트)은 "바이너리 로그 파일"에 순차적으로 기록됩니..

Infra 2024.12.20

[Spring/WebSocket] 실시간 음성 채팅 구현 (feat. Socket.IO)

1. 요구 사항프로젝트 목표: 청각 장애인과 일반 사용자가 음성으로 통화할 수 있다."들리담"은 일반 사용자와 청각 장애인이 실시간으로 음성으로 채팅할 수 있는 플랫폼입니다. 우선, 최초 회원가입 시에 청각 장애인의 목소리를 학습합니다. 이후에 청각 장애인이 일반 사용자와 음성 채팅을 할 때, 청각 장애인에게는 채팅 창이 표시됩니다. 청각 장애인에게 보내는 일반 사용자의 음성은 STT(Speech-To-Text) 과정을 거쳐 텍스트로 변환되어 청각 장애인의 채팅창에 표시됩니다. 청각 장애인은 발화 내용을 채팅창에 입력을 하면 발화 내용이 미리 학습된 본인의 목소리로 변조가 되어 상대방에게 전달됩니다. 이 글에서는 청각 장애인과 일반 사용자의 실시간 통신을 백엔드에서 어떻게 구축하였는지 알아보겠습니다.2...

WebSocket 2024.09.22