목록전체 글 (518)
개발놀이터
기존 프로젝트에서 동시성 문제가 발생하였고 이를 JPA의 비관적 락으로 해결하였습니다. 하지만 비관적락이 RDBMS로 하여금 락킹 매커니즘을 관리하기위해 커넥션을 생성하고 이때문에 RDBMS에 부하가 발생한다는 문제가 발생했습니다. 해결방법으로 Redis의 라이브러리인 Redisson을 이용해 분산 락을 구현했습니다. 기존에 사용하던 Lettuce는 스핀락의 개념으로 Redis에 lock을 지속적으로 확인해야 하기 때문에 RDBMS의 부하가 그대로 Redis로 몰린다는 단점이 있었습니다. 때문에 Redisson을 사용하게 되었습니다. wrk2로 부하 테스트를 진행하였고 docker로 컨테이너를 모니터링 하여 테스트를 진행했습니다. 특징RDBMS는 MySQL을 사용하였습니다. 스레드는 8개, 동시 커..
사이드 프로젝트인 온라인 쇼핑몰에 Redis를 이용해 Client Side Caching을 적용했습니다. Redis 6에 추가된 RESP3 프로토콜을 사용했고 Redis Client인 Spring Boot에서 CacheFront 를 이용해 클라이언트 사이드 캐싱을 구현할 수 있었습니다. wrk2를 이용해 API 테스트를 진행했습니다. 스레드 개수 : 8개동시 연결 : 50개지속 시간 : 60초초당 요청 수 : 1000개 성능 개선동일한 기준에서 테스트를 진행했을 때 Redis를 순수하게 이용했을 때와 local caching을 이용했고, 이로인해 Latency는 평균 80% 최대 130% 개선하였고, throughput은 평균 4% 최대 250% 개선하였습니다. 이로 인해 얻은 것기존 프로젝트에서..
일단 포스팅은 아래의 링크를 참고하였습니다. https://helloworld.kurly.com/blog/distributed-redisson-lock/ 풀필먼트 입고 서비스팀에서 분산락을 사용하는 방법 - Spring Redisson어노테이션 기반으로 분산락을 사용하는 방법에 대해 소개합니다.helloworld.kurly.com 컬리에서 다양한 동시성 문제를 앓았다고 합니다. 1. 동시에 요청하는 사용자2. Kafka에서 동시에 보내는 메세지등등 이런 상황에서 다양한 동시성 문제가 있었고 이를 처음엔 RDBMS의 분산락으로 해결했다고 하더군요. 하지만 락킹 매커니즘을 RDBMS가 담당해야 하기 때문에 데이터베이스에 부하가 심하게 걸린다는 사실을 알아내셨습니다. 때문에 Redis의 분산락을 이용하기..
클라우드는 지난 10년동안 개발자들의 삶에 깊숙히 녹아들었습니다. 이번 포스팅에선 클라우드로 개발되지 않은 환경을 찾는게 힘들게 될 정도로 깊숙히 자리잡은 배경에 대해서 공부한 내용을 공유해보고자합니다. 클라우드의 특징클라우드의 특징은 크게 성능, 확장성, 가용성, 같은 클라우드 서비스간 통합 이렇게 네가지 키워드로 정리해볼 수 있을 것 같습니다. 하나씩 살펴볼까요? 성능클라우드가 성능을 논하는게 이상하다고 느끼실 수도 있을 것 같습니다. 보통 클라우드를 떠올리면 확장성과 가용성을 먼저 떠올리곤 하니까요. 하지만 클라우드를 이용함으로써 일반적으로 따로 구성하는 것 보다 더 높은 성능을 끌어올릴 수 있습니다. 1. 하드웨어 최적화클라우드는 하드웨어를 관리해주다보니 해당 서비스에 최적화된 하드웨어를 ..
전 포스팅에 이어 바로 실습으로 들어가보겠습니다. 전 내용이 궁금하시면 아래의 링크를 참고해주세요! https://coding-review.tistory.com/524 Redis for Client Side Caching (이론)이번 포스팅은 Redis 6부터 제공해주는 신기능 (무려 4년전 기술인 따끈따끈한 신기술입니다.) Redis for Client Side Caching에 대해서 공부해봤습니다. Client Side Caching사실 이 내용을 공부하게 된 계기coding-review.tistory.com @Configuration@EnableRedisHttpSession@EnableRedisRepositories@Slf4jpublic class RedisConfig { @Value("${..
이번 포스팅은 Redis 6부터 제공해주는 신기능 (무려 4년전 기술인 따끈따끈한 신기술입니다.) Redis for Client Side Caching에 대해서 공부해봤습니다. Client Side Caching사실 이 내용을 공부하게 된 계기가 Client Side Caching을 공부하려고 했다가 영어로 구글링한 탓일까요... 제일 상단에 뜬 Redis 공식문서를 보고 공부하게 되었습니다. 원래 우리가 흔히 말하는 Client Side Caching은 HTTP header인 Cache-Control과 ETag를 말합니다. 즉, 브라우저에 캐싱하는 것을 Client Side Caching이라고 하는 것입니다. 이번 포스팅은 그 내용은 아니기때문에 다루지는 않겠습니다. 브라우저에서 캐싱하는 것은 어..
요즘 이 사이트를 보면서 공부하고있는데 정말 좋은 것 같습니다. https://roadmap.sh/backend Backend Developer Roadmap: What is Backend Development?Learn what backend development is, what backend developers do and how to become one using our community-driven roadmap.roadmap.sh 제가 공부했던 내용도 있고 처음 보는 내용도 있는데 처음 본 내용 중에 요즘 공부하고있는 데이터베이스와 관련된 내용으로 골라서 공부해봤습니다. 데이터베이스 Failure Mode저도 처음엔 Failure Mode..? 이게 뭐지? 하고 공부했었는데요. 별건 아니더라..
이번 포스팅은 PostgreSQL을 공부하다가 나온 Streaming Replication이 흥미로워서 이참에 다른 RDBMS의 레플리케이션 전략에 대해서 공부해보고 정리해보려고합니다. 이 전략들을 공부하기 전엔 단순히 "RDBMS가 레플리케이션이라는 고가용성 전략이 있고 이걸 이용하면 데이터베이스 서버를 여러대 두면서 부하를 분산시킬 수 있다." 정도만 알고 있었습니다. 이번 기회에 RDBMS의 다양한 전략들을 보면서 조금 더 깊이있는 공부를 한 것 같아서 조금 뿌듯합니다. 한번 정리해보도록 하겠습니다. Replication이란?레플리케이션 (혹자는 리플리케이션이라고도 읽는 것 같습니다) 은 클러스터링에 비해 안정적으로 가용성을 높이면서 데이터베이스 한대로는 감당할 수 없었던 부하까지 분산시킬 수..
요즘 여러 회사들의 장애대응 회고를 보면서 드는 생각은 '요즘 PostgreSQL많이쓰네...' 였습니다. 어떤 회사들은 AWS RDS를 PostgreSQL로 한 회사도 있더라구요. 그걸 보면서 어떤 점이 다른 RDBMS를 대체할만큼 매력적이었을까 의문이 들어서 PostgreSQL에 대해서 간단한 개요수준으로 공부해봤습니다. 이번 포스팅에선 PostgreSQL이 다른 RDBMS와 차별점을 가지는 점에 대해서 포스팅을 할 생각입니다. PostgreSQL이 기존 RDBMS와 뭐가 다를까?제가 아는 PostgreSQL은 Postgres라는 프로젝트에서 시작해 QUEL ('큐엘'이라고 발음하는 것 같습니다) 이라는 언어를 지원한다는 의미에서 PostgreSQL이 되었다고 알고 있습니다. 때문에 발음이 포..
이번 포스팅은 가상 스레드에 대해서 알아보도록 하겠습니다. 공부 주제를 선정한 것은 우아한 기술블로그에서 가상 스레드에 대한 포스팅을 보고 나서 결정하게 되었습니다. 글을 되게 재밌게 잘 쓰셨더군요. 글을 보고 흥미가 생겨서 공식 문서를 정독하면서 공부해봤습니다. 거두절미하고 바로 시작해보죠! 가상 스레드기존 자바에서의 스레드는 OS에서 제공해주는 네이티브 스레드를 그대로 사용했습니다. OS와 JVM사이에 JNI라는 인터페이스를 통해 네이티브 스레드를 사용하였죠. 자바 진영에서 이 네이티브 스레드는 플랫폼 스레드라고 부릅니다. 가상 스레드는 가상 메모리와 닮아있는데요. 가상 메모리에선 프로세스가 일을 처리할 때 실제 메모리 주소를 바라보게 하지 않고 가상 주소를 바라보게 함으로써 프로세스 더 나아가..