728x90 전체 글152 K6 & Grafana를 활용하여 병목 해결 & 스레드풀, 커넥션풀 조절기 배경현재 간단한 게임 친구 매칭 및 커뮤니티 앱을 운영하고 있다.초기에는 사용자 수가 많지 않아서 EC2 t2.micro 단일 인스턴스와 RDS만으로도 큰 문제 없이 서비스를 운영할 수 있었다.그런데 최근 들어 유저 수가 빠르게 늘어나면서 어느덧 100명을 넘기게 되었고, 지금은 약 120명 정도까지 증가한 상태다. 아직까지는 서비스가 크게 느려지거나 장애가 발생한 적은 없지만, 이 상태로 계속 유저가 늘어나면 언젠가는 문제가 생길 것 같다는 불안이 들기 시작했다. 이전에 부하 테스트를 간단히 해본 적은 있다. 특정 API를 하나 정해서 요청을 계속 보내보고, TPS가 어느 정도 나오는지 확인하는 식이었다. 하지만 지금 돌아보면 실제 사용자 흐름과는 거리가 있는 테스트였고, 단순히 수치만 보는 수준에 그.. 2026. 5. 11. PostgreSQL에서 JSONB vs 테이블 분리: 성능 비교와 선택 기준 최근 회사에서 다국어 필드를 확장해야 하는 요구사항이 생겼다.기존에는 name, name_en 정도로도 충분했지만, 서비스가 확장되면서 중국어, 일본어, 기타 언어까지 점점 늘어나기 시작했다.문제는 이 구조가 확장될수록 점점 비효율적이 된다는 점이다.언어가 추가될 때마다 name_cn, name_ja, name_fr처럼 컬럼을 계속 늘려야 하고, 스키마 변경과 배포 비용도 함께 증가한다.특히 웹 리포트 기능처럼 사용자가 어떤 언어 필드를 조회할지 유동적인 경우, 정적인 컬럼 구조는 점점 한계에 부딪히게 된다. 이런 상황에서 자연스럽게 떠오른 선택지가 JSON 기반 저장 방식이었다.하나의 컬럼에 다국어 값을 유연하게 담을 수 있고, 스키마 변경 없이 확장이 가능하기 때문이다.하지만 한 가지 고민이 생긴다... 2026. 5. 2. [Project] 분산환경에서 캐시는 어떻게 적용해야할까? 우리가 보통 어플리케이션 레벨 기준으로 캐시를 적용한다고 하면 2가지로 나뉜다. 왼쪽 그림과 같은 로컬 캐시와 오른쪽 그림과 같은 글로벌 캐시로 나뉜다. 로컬 캐시와 글로벌 캐시는 각각 장, 단점을 가진다. 구분로컬 캐시 장점로컬 캐시 단점분산 캐시 장점분산 캐시 단점응답속도JVM 메모리 직접 접근으로 초저지연인스턴스 당 메모리 제한 (수백 MB~수 GB)네트워크 홉이 있지만 여전히 빠른 조회 (ms 단위)네트워크 비용·레이턴시(수십~수백 μs) 발생일관성단일 인스턴스 내 강력 일관성노드 간 데이터 불일치 가능단일 소스(클러스터)에서 일관성 관리 가능클러스터 복제 지연 시 일시적 불일치확장성애플리케이션 인스턴스 늘리면 캐시 미스 증가스케일아웃해도 캐시 데이터 공유되지 않음노드 추가로 무제한 수평 확장 .. 2025. 4. 23. [Project] 인스턴스 서버에 너무 많은 부하가 쏠리다면? 지금부터 우리 서비스의 아키텍쳐를 우선 설명하겟다. 초기 아키텍쳐고 서버에선 jwt을 엑세스토큰과 리프레쉬토큰로 검증해서 사용하고 있는데 문제점이 발생했다.토큰이 유효한지 확인하려면 아래와 같이 계속해서 데이터베이스를 조회하는 과정이 있었다. 이렇게 계속해서 데이터베이스를 거치는 과정은 비용이 클 뿐만 아니라 사용자에게 안좋은 영향을 끼치고 있었다.이러한 문제점을 데이터베이스를 거치는 대신 아래와 같이 Redis를 사용하여 서비스 로직을 단축시키는 아이디어 적용해 우리 서비스에 적용할 수 있었다. 그래서 그다음 아키텍쳐 구조는 아래와 같이 진화할 수 있었다. 우리 서버에서는 자주 조회되는 데이터에 대해서 로컬캐시로 저장하고 있었다. 캐싱전략은 Cash Aside 전략을 사용해 아래와 같은 흐름으로 동.. 2025. 4. 17. 이전 1 2 3 4 ··· 38 다음 728x90