본문 바로가기

728x90
반응형

문제 해결, 기술 비교/개인프로젝트(북클럽)

(25)
DataSourceBuilder, yml의 원리 및 @ConfigurationProperties 적용 개요 일반적으로 mysql DB 접속 정보를 application.yml에 설정했는데, master-slave를 구성하면서 DB 정보들을 java 설정 쪽으로 가져와야 했습니다. 1. 해당 정보를 어떻게 가져올 수 있는지 고민하던 중, DataSource로 받아오며, 손쉽게 DataSourceBuilder를 이용할 수 있다는 것을 알고 정리합니다. 2. @ConfigurationProperties을 통해서 application.yml에서 원하는 정보를 가져올 수 있습니다. DataSourceBuilder란? DataSourceBuilder는 공통 구현과 설정으로 DataSource를 편리하게 만들 수 있는 클래스입니다. 이 빌더에 의해서 구현할 수 있는 pooling Datasource에는 Hikari,..
redis 저장소를 cache, session 전용으로 분리하기 개요 현재 저의 개인 프로젝트에서는 redis에 캐시, 세션(+rememberme token)을 모두 하나의 redis에 저장하고 있습니다. 최근에 redis의 replica, mysql의 replica를 공부하면서 장애를 대비하는 분산 환경을 잘 구비해야겠다는 사실을 깨닫고 있었던 찰나에, redis에 모든 정보를 관리하고 있다는 것을 발견했습니다. 따라서, 이번에는 너무 하나의 redis에 데이터가 몰리지 않도록 다중 redis 설정을 해보겠습니다. 기존에는 어떻게 redis가 작업을 처리하고 있을까? 현재 하나의 redis에 캐시용, 세션용 데이터가 모두 들어오고 있습니다. 많은 데이터들이 한번에 redis에 저장, 조회되면 대용량의 경우에는 성능에 이슈가 생길 수가 있습니다. 따라서 캐시용과 세션..
Redis eviction 정책은 무엇을 사용해야 할까? 개요 Redis를 통해 캐시하는 작업을 공부했습니다. 그렇다면 자연스럽게 드는 생각은, Redis의 메모리가 다 차면 이후에 어떻게 삭제(eviction)해야할까? 입니다. 삭제에는 다양한 정책이 있으며 이는 Redis의 장점이기도 합니다. 이번 시간에는 다양한 redis의 삭제 전략을 알아보고 최적의 선택을 해보겠습니다. maxmemory 설정하기 maxmemory 설정은 Redis가 사용할 메모리 양의 최대치를 정하는 것입니다. Redis가 캐시로 사용될 때 새로운 데이터가 추가되면 오래된 데이터는 자동으로 삭제되도록 하는 설정이 일반적입니다. (memcached도 이런 방식을 사용합니다.) Redis의 경우에는 다양한 정책을 가질 수 있으므로 종류와 설정법을 알아보겠습니다. maxmemory는 re..
페이징에서 JPA N +1 문제 해결하기 개요 JPA는 간편하게 쿼리문을 사용할 수 있는 장점이 있지만 일대다 관계 혹은 EAGER, LAZY 조회 전략에 따라서 N + 1 문제가 발생합니다. 도메인을 그냥 조회하는 법, DTO로 변환해서 조회하는 법 등 다양한 방법들이 있는데, 이번에는 QueryDsl에서 페이징을 할 때 N + 1 문제를 방지하면서 쿼리문을 최소한으로 유지하기 위한 전략을 알아보겠습니다. 문제 상황 페이징을 이용해서 스터디를 100개씩 조회하도록 합니다. 기존에는 Study M : N Account 관계를 가지고 있으므로, 중간 테이블로 StudyLikes 엔티티를 가지며 Study 1 : N StudyLikes의 관계를 가집니다. 스터디를 조회하고 나면, 각 스터디의 스터디 좋아요(StudyLikes)를 순회하며, 내가 좋..
Mysql Replication 구성하기 개요 이번 시간은 Mysql Replication 개념을 정리하고 읽기와 쓰기 작업에 Replication 구성 및 적용 과정을 알아보겠습니다. 복제(Replication) 복제(Replication)는 1개 이상의 레플리카(replica) 저장소가 소스 저장소와 동기화를 자동으로 유지하는 과정입니다. (기존의 일반적으로 사용하였던 master-slave라는 용어를 source-replica로 대체하는 추세입니다. 하지만 일부 문서를 하면서 전자 용어를 사용하는 부분도 있습니다.) 아래는 1개의 Master 저장소와 복제한 Slave 저장소가 있습니다. 기본적으로 복제는 비동기 방식입니다. 설정에 따라서 전체가 아닌 부분 데이터를 복제할 수 있습니다. 복제의 장점 1. 스케일 아웃 성능을 향상하기 위해 ..
Redis Persistence AOF vs RDB 개요 Redis는 In-memory 데이터 저장소이므로 서버를 재시작하면 모든 데이터를 유실합니다. 또한 복제 기능을 사용해도 잘못된 코드나, 사람의 실수가 발생하면 복제본도 똑같이 데이터가 삭제됩니다. 또한 복원을 할 수 없습니다. 따라서, Redis를 캐시 이외에도 용도로 사용한다면 적절한 데이터 백업이 필요합니다. Redis Persistence 종류 Persistence란 SSD같은 저장소에 데이터를 저장하는 것입니다. Redis는 영속성을 위해 여러가지 옵션을 제공합니다. 대표적으로 RDB, AOF 2가지 방식이 있습니다. RDB(Redis Database) RDB 영속화는 일정한 가격으로 특정 시점 스냅샷을 수행합니다. RDB 장점 1. RDB는 단일 파일이며, 특정 시점의 메모리에 있는 데이..
Message Queues vs Pub/Sub Asynchronous Messaging Pattern 비동기 메세징은 확장성과 안정성, 성능 향상을 목적으로 발행자(producer)의 메세지 생성이 구독자(consumer)의 작업과 분리되는 방식입니다. 메세징 시스템을 다룰 때, 일반적으로 Message Queue와 Publish/Subscribe 2가지로 나뉩니다. Message Queues Message Queue는, 메세지를 만드는 발행자(publisher)와 메세지를 보관하고 있는 큐(Queue), 큐에서 메세지를 소비하는 여러개의 소비자(consumer)로 이루어져 있습니다. 이 통신 방식은 publisher가 consumer에게 명령을 내리는 방식으로 작동합니다. publishing 서비스는 메세지를 큐 혹은 exchange에 넣고, 1개..
RabbitMQ와 Kafka 비교하기 RabbitMq와 Kakfa 모두 메세지 큐를 이용해 시스템의 부하를 줄이고 성능을 높이기 위한 용도로 사용됩니다. 각 기술의 특징과 차이점을 알아보도록 합니다. 해당 글은 여러 글들을 비교, 정리한 것으로 잘못되거나 비약적인 내용이 있을 수도 있습니다. 각 차이점을 알기 전에 비동기 메세징 방식을 이해하면 좋습니다. Message Queue와 Pub-Sub의 개념에 간단히 정리했습니다. * RabbitMQ와 Message Broker는 무엇인가? *RabbitMQ RabbitMQ는 Message Broker의 구현체입니다. 기본적으로 전통적인 Message Queue 방식을 지원합니다. 또한, message exchange를 사용하여 pub/sub 방식도 구현합니다. 발행자(Publisher)가 mee..

728x90
반응형