전체 글(20)
-
7. [최적화4] 불필요한 서비스 비활성화 및 최적화 결과
불필요 비활성화 이유불필요한 서비스인 multipathd, polkitd, snapd는 기본적으로 서버에서 실행되지만, 특정 환경에서는 반드시 필요하지 않은 경우가 많음이러한 서비스들은 CPU와 메모리 자원을 소모하기 때문에 비활성화하여 서버 성능을 최적화할 수 있특히, t2.micro와 같은 리소스가 제한적인 환경에서는 작은 자원 절약도 큰 영향을 미칠 수 있서비스별 역할과 비활성화 이유multipathd (Device Mapper Multipath Daemon)역할multipathd는 스토리지 장치의 중복 경로(Multipath I/O)를 관리하는 데 사용서버가 SAN(Storage Area Network)과 같은 복잡한 스토리지 아키텍처를 사용하는 경우 필수비활성화 이유대부분의 애플리케이션 서버나 ..
2025.01.25 -
6. [최적화3] ulimit와 PAM 설정을 통한 테스트 환경 최적화
ulimit와 파일 디스크립터 (File Descriptor)란?1. 파일 디스크립터(File Descriptor)란?파일 디스크립터는 운영체제에서 프로세스가 파일, 소켓, 파이프 등과 같은 자원을 참조하기 위해 사용하는 추상적인 핸들운영체제에서 열려 있는 파일, 소켓, 파이프 등을 나타내는 참조 번호서버가 클라이언트 요청을 처리할 때, 각 연결은 파일 디스크립터를 사용하여 관리예: WebSocket 연결, 데이터베이스 연결, HTTP 요청 등은 각각 파일 디스크립터를 점유문제점: 기본 제한이 낮을 경우 연결 끊김, 오류 발생(EMFILE: Too many open files) 등이 발생가능역할연결 관리 : 클라이언트와의 각 연결은 고유한 파일 디스크립터를 사용하여 관리효율적인 자원 접근 : 운영체제는 ..
2025.01.24 -
5. [최적화2] Nginx 및 WebSocket 서버 설정 최적화
1. 최적화가 필요한 이유기본 설정의 한계: Nginx나 WebSocket 서버는 기본적으로 낮은 연결 제한과 짧은 타임아웃 값을 가짐동시 연결 수가 많아질 경우 병목 현상 초래 가능테스트 결과 분석WebSocket 에러 증가: 연결 타임아웃 또는 불완전한 메시지 전송이 원인일 수 있음응답 시간 편차: 높은 P95/P99 응답 시간은 서버 자원의 과부하를 나타냄2. 최적화 조치(1) Nginx 연결 제한 및 이벤트 핸들링 최적화Nginx가 동시에 처리할 수 있는 연결 수와 CPU 코어 활용도 설정# Nginx 설정 파일 (예: /etc/nginx/nginx.conf)worker_processes auto; # 사용 가능한 CPU 코어 수만큼 워커 생성 (t2.micro는 1개)worke..
2025.01.24 -
4. [최적화 1] Node.js 프로세스 최적화
현재 상태 분석htop 및 메트릭 분석문제점dist/main.js 프로세스가 CPU의 약 8.6%를 점유하며, 다중 프로세스 실행 시 높은 리소스 소비를 유발Node.js의 메모리 사용량은 가상 메모리(Virtual Memory) 10.7GB와 실제 메모리(Resident Memory) 13MB로 제한된 RAM(1GB)에 압박을 가함분석 목표CPU와 메모리의 효율적인 사용을 통해 Node.js 프로세스의 병목을 제거현재 환경Nginx: Reverse Proxy로 사용 중NestJS Docker Container: 애플리케이션 실행PostgreSQL: 데이터베이스TypeORM: 데이터베이스와의 ORMEC2 t2.microvCPU: 1개의 가상 CPU메모리: 1GB RAM디스크 용량: 약 8GB해결방법1. ..
2025.01.24 -
3. AWS EC2 t2.micro 환경에서 WebSocket 타임아웃 문제
IntroAWS EC2 t2.micro 환경에서 Socket.IO 기반 채팅 서비스를 테스트하는 과정에서 발생한 Socket connection timeout 문제와 해결방안이번 포스트에서는 다음 내용을 다룹니다문제 원인 분석 과정t2.micro의 리소스 제약을 극복하기 위한 최적화 단계문제 상황테스트 Phase phases: - name: "Warm up" # 기존 단계 duration: 30 arrivalRate: 1 rampTo: 2 - name: "Normal load" # 해당 단계부터 추가 단계 duration: 60 arrivalRate: 2 rampTo: 5 - name: "Peak load" # 문제 발생 단계 ..
2025.01.16 -
2. Artillery를 활용한 Socket.IO 기반 채팅 서비스 부하 테스트: Local vs EC2 환경 성능 비교 및 분석
Intro실시간 시스템, 특히 채팅 서비스에서 부하 테스트는 매우 중요 Socket.IO는 실시간 통신을 쉽게 구현할 수 있는 라이브러리로, WebSocket을 기반으로 동작하며 자동 폴백 메커니즘을 제공이 글에서는 Artillery를 사용해 Socket.IO 기반 채팅 서비스를 테스트하는 초기 단계 테스트 시나리오를 다룬다. 또한, 로컬 환경과 EC2 환경에서의 테스트 결과를 비교하고, 이러한 테스트가 시스템에 미치는 영향 분석채팅 서비스 개요1. 주요 기능유저 인증: 이메일과 비밀번호를 사용한 로그인친구 관리: 친구 목록 가져오기 및 친구 선택실시간 채팅: 채팅방 생성 및 메시지 전송2. 시스템 아키텍처Backend: Node.js 서버(NestJS)Database: PostgreSQL(+ TypeO..
2025.01.14