- nGrinder nGrinder로 성능 테스트 과정에서 발견한 Redis Session 병목 애플리케이션 서버를 개발하고 '나의 서버는 어느 정도의 트래픽을 처리할 수 있을까?'라는 고민을 할 수 있습니다. 하지만 여러 개의 브라우저를 띄워 동시에 요청을 보내는 방법은 한계가 있어 성능 테스트 도구를 이용하는 것이 좋습니다. 그래서 저는 네이버의 nGrinder를 통해 클라우드 환경에 구축해놓은 서버가 얼마만큼의 트래픽을 받을 수 있는지 성능 테스트를 진행했습니다. nGrinder 성능 테스트 스크립트 작성 먼저 nGrinder를 통해 테스트를 하기 위해서는 테스트 시나리오를 짜고 시나리오에 맞는 스크립트 코드를 작성해야 합니다. 저는 사용자의 아이디와 비밀번호를 입력하여 로그인하는 기능을 테스트하고 싶어 다음과 같이 작성하였습니다. ... class TestRunner { public stat..
- MySQL MySQL 실행 계획 분석으로 성능 개선한 이야기 MySQL을 DB로 사용하여 개발할 때 내가 작성한 쿼리가 실제 어떻게 수행이 되고 성능은 어느 정도인지 확인이 필요할 때가 있습니다. 성능이 느리다면 쿼리를 개선하거나 구조를 다시 짜는 리팩터링을 통해 성능을 끌어올릴 수도 있구요. 제가 프로젝트를 진행하면서 만든 쿼리의 실행 계획을 분석하고 성능 개선을 한 사례를 말씀드리겠습니다. 간단한 사례 제가 진행한 프로젝트에는 캠핑용품 유형 데이터가 존재합니다. 캠핑용품 유형이란? 캠핑용품에는 텐트, 코펠, 버너, 테이블, 의자와 같이 여러 가지 유형이 존재하는 데 그 유형을 나타내는 데이터입니다. 그래서 실제 테이블은 id와 name 칼럼으로 구성되어 있고 id를 통해 유형 데이터의 유일함을 표현할 수 있도록 Primary Key 제약 조건을 걸고 사용 중이..
- Redis Scale out 확장 구조에서 Session 불일치 문제와 해결 방법 저번 글에서 서버의 확장은 어떤 것들이 있는지 알아봤습니다. 서버의 확장? Scale up과 Scale out이란? 웹 서버 애플리케이션을 개발하고 운영하다 보면 여러 가지 상황을 마주하게 됩니다. 그중 하나는 서버의 처리 능력보다 많은 양의 트래픽이 들어오는 상황 서버를 배포하고 운영 중인데 서버 liasn.tistory.com Scale out 확장을 선택하면 데이터 정합성 문제를 반드시 해결해야 합니다. 그렇다면 실제 프로젝트에선 어떤 식으로 발생할까요? 저의 웹 서버 애플리케이션은 로그인에 대한 인증 기능을 세션 기반으로 구현했습니다. 이때, Scale out을 통해 여러 대의 서버로 요청을 처리하도록 분산 서버 환경을 만들면 각 서버 별로 로그인 세션 정보가 다른 세션 불일치 문제가 발생합니다...
- Architecture 서버의 확장? Scale up과 Scale out이란? 웹 서버 애플리케이션을 개발하고 운영하다 보면 여러 가지 상황을 마주하게 됩니다. 그중 하나는 서버의 처리 능력보다 많은 양의 트래픽이 들어오는 상황입니다. 우리 서비스를 이용하고 싶어도 처리 능력의 한계 때문에 이용이 불편해지거나 심각하면 서버의 장애가 발생해 서비스 중단을 초래하고 회사의 매출, 수익 악화로 직결됩니다. 이럴 때는 서버의 처리 능력을 향상시키는 것이 좋습니다. 그럼 처리 능력은 어떻게 향상시키나요? Scale up과 Scale out 두 가지 방법이 있습니다. Scale up 한 대의 서버를 구성하는 부품(CPU, RAM, DISK etc.)을 추가하거나 업그레이드해서 서버 자체의 처리 능력을 향상시키는 방법입니다. 한 대의 서버를 업그레이드하는 방식이라 관리 포인트가 추가적으로 늘어..