본문 바로가기

728x90
반응형

문제 해결, 기술 비교

(36)
RabbitMQ와 Kafka 비교하기 RabbitMq와 Kakfa 모두 메세지 큐를 이용해 시스템의 부하를 줄이고 성능을 높이기 위한 용도로 사용됩니다. 각 기술의 특징과 차이점을 알아보도록 합니다. 해당 글은 여러 글들을 비교, 정리한 것으로 잘못되거나 비약적인 내용이 있을 수도 있습니다. 각 차이점을 알기 전에 비동기 메세징 방식을 이해하면 좋습니다. Message Queue와 Pub-Sub의 개념에 간단히 정리했습니다. * RabbitMQ와 Message Broker는 무엇인가? *RabbitMQ RabbitMQ는 Message Broker의 구현체입니다. 기본적으로 전통적인 Message Queue 방식을 지원합니다. 또한, message exchange를 사용하여 pub/sub 방식도 구현합니다. 발행자(Publisher)가 mee..
In-memory Redis vs Memcached 비교하기 개요 최근 캐시로 Redis를 많이 사용합니다. 많은 자료들과 우수한 성능, Spring에서 풍부한 기능 제공 등 다양한 이유가 있습니다. 이번 시간에는 Redis 이외에도 캐시로 유명한 Memcached를 알아보고 비교해보도록 하겠습니다. Memcached와 Redis 공통점 1. in-memory cache이다. 2. key-value 저장소이다. (redis는 데이터 구조저장소 성격에 가까움) 3. 데이터관리를 위해 NoSQL을 사용한다 4. RAM에 데이터를 보관한다 In-memory database 란? In-memory 데이터베이스는 데이터 저장을 메모리에 의존하는 특수 제작된 데이터베이스입니다. 디스크, SSD에 저장하는 데이터베이스와는 다릅니다. In-memory 데이터 저장소는 디스크에 ..
cache란? Redis를 cache로 조회 성능 개선하기 cache란? 캐시란, 나중에 요청될 결과를 미리 저장해두었다가 빠르게 서비스를 해주는 것을 의미합니다. 예를 들어 Factorial의 Dynamic programming이 있습니다. 미리 계산을 해두면 나중에 계산을 또 하지 않아도 됩니다. 4! = 4 * 3!입니다. 3!은 3! = 3 * 2!입니다. 이렇게 3!을 미리 저장해두고 4!에 이용하면 빠르게 계산 할 수 있습니다. 캐싱 전략(Caching Strategy) 캐싱전략은 크게 Look aside Cache와 Write Back 2가지 방식이 있습니다. 또한 Write에는 Cache 데이터 저장 여부에 따라 Write-Around, Write-Through 2가지가 있습니다. 1. Look aside Cache(Lazy Loading) 이 구..
Redis를 로그인 Session Storage로 이용하기 외부 Session Storage 사용 이유 다수의 서버에서 세션을 관리하는 방법은 여러가지가 있는데, 최종적으로 외부 Session Storage를 사용하도록 결정했습니다. 외부에서 로그인 정보를 따로 관리한다면, 다음과 같은 장점이 있습니다. 톰캣 서버에 문제가 있더라도 영향을 받지 않을 수 있다. 배포하는 과정에서 생기는 세션 관리에도 전혀 영향을 받지 않는다 여러 서버 세션 정보의 정합성을 유지할 수 있다 세션을 다루는 부분을 Redis에서 관리하도록 개선할 예정입니다. Redis는 In-memory 저장소로, key-value 방식을 이용해 고속 쓰기 및 읽기 처리가 가능합니다. 세션 자체가 복잡한 연산과 계산을 필요로 하지 않으므로 적절합니다. Redis 코드에 추가하기 gradle에 의존성 ..
분산 서버에서 Session 관리하기 분산서버에서 로그인 관련 Session을 어떻게 관리할지 생각해봅니다. 일단 Load Balancer를 통해, 여러명의 사용자가 여러대의 서버에 요청을 보낸다고 가정합니다. 가장 기초의 Load Balancer Load Balancer를 사용한 일반적인 서버 관리의 경우 다음처럼 round-robin(기본설정) 알고리즘으로 서버에 요청이 갑니다. User1과 User2의 요청이 Load Balancer를 거치면, Server1, Server2에 다양하게 라우팅 됩니다. 하지만, 이렇게 다양한 SERVER로 로드 밸런싱이 된다면 다음과 같은 문제에 직면합니다. 1. User1이 Server1에 요청을 보내어 로그인을 합니다. 2. User1이 Server1에서 웹 사이트를 이용합니다. 3. 잠시 후 ser..
Jenkins로 CI/CD 구축하기 개요 회사에서 maven을 이용해 war 기반으로 프로젝트를 운영하고 있었습니다. 기존에 원격 서버에 filezilla를 이용해서 손수 배포하고 있기 때문에 불편했습니다. 따라서, jenkins를 이용해서 간단한 클릭만으로 배포하도록 개선했습니다. 수분이 걸리고, 이력관리가 힘들었던 기존의 환경에서 단 몇 초 만에 배포가 되도록 개선하였습니다. Jenkins 를 선택한 이유 (Jenkins 선택 이유는 아래 글을 참고해주세요) CI 어떤 도구를 사용할까?(GitLab CI vs Jenkins vs Travis CI) Jenkins 셋팅하기 이 글은 온프레미스 환경의 윈도우 서버 Jenkins 설치를 다룹니다. 세팅은 다음과 같습니다. Jenkins에 기존에 사용했던 버전과 똑같은 jdk, maven을 설..
sentry.io로 에러 로그 관리하기 개요 다양한 로그 수집을 알아보다가 최근에 많이 사용하는 sentry을 알게되었습니다. sentry가 무엇이고 어떻게 사용하는지 코드로 함께 알아보겠습니다. Sentry란? Sentry란 Application 에러 트래킹, 성능 모니터링을 제공해주는 서비스입니다. 에러가 발생하면 알림을 받을 수 있고 에러에 대한 상세 정보를 트래킹 해줍니다. 특히 에러 상황을 자세히 알려주기 때문에 디버깅에 유용합니다. 또한 성능 모니터링을 이용해 각 지표들을 쉽게 확인할 수 있습니다. 다양한 플랫폼 지원 아무래도 하나의 기업은 몇 가지 기술이 아닌 수십 가지 기술을 사용할 확률이 높습니다. sentry는 방대한 플랫폼을 지원하기 때문에 어떠한 기술을 사용하여도 모두 호환이 가능합니다. 상세한 디버깅 기능 제공 전통적인..
Elastic Search 연동 및 테스트하기 Elastic search란? Elasticsearch는 분산 검색과 분석 도구입니다. Elasticsearch로 정형화, 비정형화, 숫자 데이터, 지역 데이터 등 다양한 데이터를 빠르게 검색할 수 있습니다. 이를 인덱싱(indexing)이라고 합니다. 단순한 데이터 검색과 데이터에서 패턴을 발견하기 위해 정보를 수집할 수 있습니다. 데이터와 쿼리의 크기가 증가하면서, Elasticsearch의 분산 환경은 배포가 그에따라 원활하게 확장하도록 합니다. indexing : 원본 데이터를 변환하여 저장하는 과정으로 데이터가 효율적으로 검색 될 수 있는 구조로 변경됩니다. indices, index : indexing 과정을 통해 생성된 결과물이자 저장소입니다. 역색인(Inverted Index) 아래는 일반..

728x90
반응형