책 내용을 그대로 적기 보다는 제가 이해한대로 주요한 내용 위주로 재구성하였습니다. 원본 내용을 원하시면 책을 꼭 읽어보세요!쿼리를 입력했을 때 어떤식으로 동작할지 해당 동작 방식이 어떤 성능을 가질지 이해하기 위해서는 Mysql 아키텍처에 대해서 꼭 이해해야합니다.쿼
0. 작성 배경 이전 포스트에서 읽기 부하를 분산시키기 위해 Redis Cache를 활용하였습니다. 이때, TTL을 5초로 두게 되었는데 캐싱과 관련된 내용들에 대해서 더 학습하게 되면서 Hot key에서 발생할 수 있는 여러 문제점들에 대해서 알게 되었습니다. Hot
round-trip time (RTT)이란 클라이언트가 서버로 요청하고 응답을 받기까지 걸리는 시간을 의미합니다.Redis Server와 서버와 통신할때에도 당연히 RTT를 가지게 될텐데 이를 줄일 수 있는 방법들에 대해서 알아보려고 합니다.Redis Pipelinin
Redis를 사용하면서 동시성 문제가 발생할 수 있음을 알게 되었고 왜 Single Thread임에도 동시성 문제가 발생할 수 있는지, 해당 문제를 어떻게 해결할 수 있는지 등을 정리해보려고 합니다.Redis는 Single Thread입니다. Single Thread이
분산 시스템에서 Event Queue르 사용할 때 Exactly Once를 만족시켜야 하는 요구사항이 발생했습니다. 이를 나름대로 잘 처리했다고 생각했지만 추가적인 처리가 더 필요하다는 것을 알게 되어 정리하게 되었습니다.결과적으로 알게 된 내용을 정리하면 kafka자
JAVA7까지 사용된 메모리 개념으로 주로 다음 내용이 저장된다.Class, static 정보등의 정적 정보String Constant Pool Heap 내부에 위치한다.\-XX:PermSize=N --> PermGen Default Size 설정\-XX:Ma
시리즈 이전 포스트에서 1\. GenerationType.AUTO2\. Mysql3\. Thread pool size > DBCP size조건에서 발생하는 DBCP데드락을 분석하고 해결하였다.DBCP 데드락임을 알아챈 근거는 다음과 같다.JMeter로 데이터를 세팅하기
1. 문제 상황 및 원인 서버 튜닝이후 자원들을 적절하게 사용하게 되어 4배가량 TPS를 올릴 수 있었지만 MYSQL에 병목이 발생하였음. 2. 해결 방법 캐시를 통해 조회 부하를 분산하여 해결하기로 결정하였음. 이 과정에서 캐시 전략및 트레이드오프를 고려하여 적절
캐쉬란 데이터 요청 주체와 메모리 저장공간 사이에 위치하면서 메모리 저장공간에 대한 조회 요청을 앞에서 먼저 대신 처리해주는 저장장치이다.데이터 요청자는 먼저 cache에서 원하는 데이터가 존재하는지 찾아보고 있는 경우 cache의 데이터를 가져가고 없는 경우 원본 데
0. 이전 포스트 이전 포스트 이전 포스트에서 테스트 시나리오, 테스트 장애지점, 테스트 병목원인에 대해서 분석하여습니다. 이번 포스트에서는 해당 병목을 해결하기 위해서 Thread pool, DBCP적정 값을 설정해보려고 합니다. 1. Thread pool 1-1
Tomcat Thread Pool max size, DBCP maximumPoolSize를 조정하여 JMeter를 통해 테스트를 해보던 중 다음과 같은 예외가 발생하며 요청이 정상적으로 처리되지 못하는 문제가 발생했다.해당 사항과 같은 문제를 찾아보면서 우아한 형제들의
42Seoul에서 진행하는 Webserv라는 과제이며 Nginx와 같은 I/O Multiplexing 정적 서버를 c++로 구현하는 프로젝트 입니다.아래 링크를 들어가시면 자세한 내용을 확인하실 수 있습니다.https://github.com/WebservKim
Load TestingLoad Testing은 부하가 임계치(Threshold Value)에 도달할 때까지 시스템의 부하를 지속적으로 증가시키면서 시스템을 확인하는, Performance Testing의 한 유형입니다. 여기서 부하를 증가시킨다는 것은, 동시단말사용자(
AWS로 Spring Boot Web Application Server를 배포하고 이를 운영하던 중 해당 WAS가 원인 모르게 종료되거나 하는 일이 종종 발생했습니다. Auto Scaling Group을 적용 했었기에 자동적으로 복구 되었지만 어떤 원인으로 해당 문제가
JPA로 개발 과정에서 N+1문제를 만나면서 해맸던 부분들과 실제 프로덕션에서 이를 제대로 처리하지 못하면 성능적인 저하뿐만 아니라 장애로 이어질 수 있다는 부분을 깨닫고 정리 해보고자 합니다.N+1 문제는 ORM 기술에서 특정 객체를 대상으로 수행한 쿼리가 해당 객체
0. 배경 서로 다른 API요청이 거의 동시에 들어올 경우 동시성 문제가 발생할 수 있는 기능이 있어서 이를 해결하기 위한 부분을 고민하게 되었습니다. 0-1. 기능 설명 해당 프로젝트는 사람들을 모집하는 기능을 제공하는 프로젝트입니다. 그 방식중 하나로 글을 작
하나의 트랜잭션이 정의 되면 그 트랜잭션 전체가 모두 반영(commit)되거나 모두 미반영(rollback)트랜잭션을 사용하는 이유라고 할 수 있다. Atomicity가 없다면 트랜잭션 도중 문제가 생길 경우 application level에서 실행 도중 생긴 문제를
데이터 중심 설계를 책임 주도 설계로 변경하여 객체가 같은 메시지에 대해서 각자가 다르게 책임지는 방식으로 코드를 구성하면 변경에 유리한 코드를 작성할 수 있다.하지만, 실제에서 개발할 때에는 완벽하게 처음부터 객체지향적인 설계를 하는 것은 현실적으로 쉽지 않고 때로는
1. 개요 이전 시리즈 포스팅에서 kafka의 핵심적인 개념과 spring boot연동및 설정방법에 대해서 실습을 해보았습니다. 개인 프로젝트에서 이를 적용해서 사용하던 중 몇가지 문제가 발생하여 검색을 해서 해결책들을 찾아보다 보니 몰랐던 내용들을 알게 되어서 정리
작성한 코드에서 얼마만큼 테스트 코드를 통해서 실행돼었는지를 의미하는 지표이다.테스트 커버리지를 통해 전반적으로 테스트가 부족한지 여부를 알 수 있다.테스트 커버리지는 일정 기준 이하(대략 60%정도로 판단한다고 함)이면 문제가 된다고 판단할 수 있따.하지만 테스트 커