목록전체 글 (531)
개발놀이터
2024년 2월에 작은 서비스기업에 취업하게 되면서 제2의 삶이 시작되고 있습니다. 아직 서비스가 고객들에게 배포되진 않아서 다양한 문제상황을 만날 기회는 없지만 서비스를 개발한다는 것 자체만으로도 첫회사치고는 잘 들어갔다 싶은 생각이 듭니다. 벌써 개발 공부한지 만으로 3년이 다되었고 지난 만2년 기념 회고를 작성했던 것과 동일하게 한번 회고를 진행해볼까합니다. 2023년 8월 9일 온라인 쇼핑몰 ver.4를 시작하다7월에 ver.3가 마무리되면서 얼마 지나지않아 ver.4를 기획하게 되었습니다. 실제 ver.3까지 개발된 온라인 쇼핑몰을 AWS환경에 배포하는 과정을 거쳤습니다. 이때 실제로 많이 사용되는 EC2, S3, ALB, VPC등을 경험하면서 이때 했던 경험을 살려 현재 회사에서도 클라우..
백엔드에서 가장 난이도 있기로 소문난 특정 지점에 트래픽이 몰리는 상황을 대비하여 Redis를 이용해 대기열을 만들었습니다. https://coding-review.tistory.com/530 Redis로 대기열 구현하기이번 포스팅에선 Redis로 대기열을 구현한 것을 공유하려고 컴퓨터 앞에 앉았습니다. 이번에 주요한 기능은 WebSocket과 Redis의 Sorted Set 자료구조입니다. Sorted Set은 정렬 알고리즘의 시간 복잡도coding-review.tistory.com 제 프로젝트는 온라인 쇼핑몰인만큼 블랙프라이데이나 콜라보 이벤트를 하는 경우 트래픽이 몰리는 것을 대비하여 대기열을 만들었습니다. 이번 대기열을 이용해 애플리케이션 서버 부하와 RDBMS의 부하를 획기적으로 줄일 수..
이번 포스팅에선 Redis로 대기열을 구현한 것을 공유하려고 컴퓨터 앞에 앉았습니다. 이번에 주요한 기능은 WebSocket과 Redis의 Sorted Set 자료구조입니다. Sorted Set은 정렬 알고리즘의 시간 복잡도가 O(log n)이라 굉장히 빠르고 중복을 허용하지 않는 Set 자료구조에다 정렬이 되어있어 선착순으로 사용자를 지워줄 수 있다는 장점이 있습니다. Redis의 다양한 자료구조들은 기능을 구현할 때 유용하게 쓰이는 것 같네요. 이번 포스팅은 다음과 같은 흐름을 가집니다. 상황)온라인 쇼핑몰에서 블랙 프라이데이를 기념하여 50퍼센트 할인 쿠폰을 100명에게 쏩니다. 서버는 이를 감당할 수 있는 대기열을 구현해야합니다. 흐름)사용자가 이벤트 페이지를 조회합니다. 조회함과 동시에..
기존 프로젝트에서 동시성 문제가 발생하였고 이를 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..? 이게 뭐지? 하고 공부했었는데요. 별건 아니더라..