본문 바로가기

소프트웨어-이야기

[Redis]메모리 관리 방식 조사 배경TTL이 만기된 캐시키들이 삭제(evicted)되지 않는 현상을 발견하면서, 레디스에서 메모리를 관리하는 방법이 궁금해졌다 알게된 것* 레디스는 아래의 세가지 상황 때, 메모리를 정리한다. A. 만료된 키를 가져올 때 B. 샘플링한 데이터 중에 만료된 키가 있는 경우 C. 메모리 관리 정책을 설정했을 때, 논리적인 데이터 사용량이 maxmemory를 초과한 경우 => 실제 사용량으로 잡히는 rss를 기준으로 메모리를 정리하지 않는다. * 레디스는 jemalloc을 쓴다. * 용량이 큰 데이터를 자주 썼다가, 지우면 파편화가 발생하기 쉽다. 그리고 데이터의 크기 편차가 크면, 파편화가 생기기 쉽다. 실제 사용량보다 rss가 높게 나온다는 거다. 이 경우를 해결하려면, 장비를 이전하는게 낫다. 데뷰..
(읽을거리)엘라스틱 서치 쿼리 성능 최적화 읽을 거리 Optimizing Elasticsearch Searches https://www.elastic.co/blog/found-optimizing-elasticsearch-searches
[MariaDB]RDB 속에서 NOSQL 사용하기 배경티셔츠의 속성을 저장하는 테이블이 있다고 생각해보자티셔츠의 팔 길이, 색상 등은 항상 저장되어야하는 속성이니 이러한 데이터는 고정 스키마를 사용하면 된다. 그런데 이 중 몇개의 티셔츠는 한정판 티셔츠이거나, 누군가 기증한 티셔츠여서 일반 티셔츠에서는 없는 속성을 갖고 있는 경우가 있다. 이러한 정보들을 RDB에 저장해야한다면, 어떻게 하는게 좋을까? 누가 기증한 티셔츠인지 저장해야하는 경우, 기증자를 의미하는 새로운 필드를 저장하는게 맞을까?전체 데이터 로우 중 5%만 이 필드가 필요한 경우, 새로운 필드를 사용하는게 맞을까? 이러한 경우 필요한 속성만 동적으로 저장할 수 있어야한다. 그러려면 고정된 스키마에 동적 스키마를 적용할 수 있어야한다. 즉 RDB 개념에 NOSQL 개념을 접목시킬 수 있어야..
(넷플릭스) 넷플릭스의 카오스 엔지니어링 백그라운드페이스북을 하다가, AWS 사용자 모임에서 카오스 엔지니어링 관련 밋업을 한다는 글을 발견했다.마이크로서비스 아키텍처, 카오스라는 단어 때문에 카오스 엔지니어링이라는 것에 관심을 갖게 되었다.카오스 엔지니어링이란 어떤 개념인지 찾아보고, 정리해보고자 한다. 카오스 엔지니어링 탄생 배경규모있는 시스템을 빠르게 나눠서 개발하고, 관리를 편하게 하기 위하여 마이크로서비스 아키텍처 같은 분산 시스템 아키텍처가 등장했다.그러나 서비스별 로직을 개별 서버로 분리해냈어도, 각 시스템들은 서로 상호작용하고 있다.그래서 한 군데에서 장애가 발생하면, 이 장애가 여기저기 퍼지게 된다. 게다가 문제들이 여러 시스템에서 얽히고 설켜서, 디버깅하기도 어려운 상황이 발생되기도 한다. 이러한 영향은 아래와 같은 문제들을 ..
[CURL]같은 파라미터 키로 여러개의 파일을 전송하는 방법 같은 파라미터키로 여러개의 파일을 CURL으로 보낼 때, 보내는 방법은 아래와 같다$ curl -F 'files[]=@/path/to/fileX' -F 'files[]=@/path/to/fileY' ... http://localhost/upload 파라미터명에 []를 붙여주는거다. 샘플$ curl -X POST 'http://localhost:80/movie/create?moview%5Bname%5D=movie_name'; -H 'cache-control: no-cache' -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' -F 'files[]=@/Users/hong/Downloads/movie.mp..
(Phusion Passenger) 웹서버 - 패신저를 구성하는 방식 ( Mode ) 패신저에서 지원하는 3가지 패신저 & 웹서버 조합패신저에서 지원하는 패신저 & 웹서버 조합은 위처럼 세가지가 있다. StrandardAlone 모드 패신저안에 Nginx 엔진이 내장되어 있는 구조이다.그래서 따로 이것저것 Nginx나 Apache를 설치하지 않아도 된다.그래서 패신저 문서에서는 개발 환경 때 StrandAlone을 쓰는게 편하니, 이걸 사용하라고 권장한다.그리고 만약 한 서버에서 하나의 애플리케이션만 띄우는 방식으로 서버를 운영한다면, 프로덕션 모드에서도 StandardAlone 모드를 사용해도 괜찮다. Apache / Nginx Integration 모드 Apache나 Nginx 모듈을 사용해서, 패신저를 운영하는 방식을 의미한다. 이 모드는 개발 환경에서는 사용되지 않고, 프로덕션 환..
[인프라]방화벽 열려있는지 확인하기 1. 텔넷이 설치되어있는 경우, 텔넷으로 통신가능 여부를 확인할 수 있다. telnet naver.com 80 2. 그렇지 않은 경우, 아래의 명령문을 치면 통신 가능 여부를 확인할 수 있다. nc -z -v naver.com 80 만약, 방화벽 문제 등으로 서버에 붙을 수 없다면, Connection이라는 결과가 뜨지 않는다
[AWS] 애플리케이션 서버에서는 200을 내려줬는데, LB 단에서는 왜 5XX 응답 코드가 내려올까? 이번주는 트러블 슈팅을 많이 했던 한 주였다.그러면서 배웠던 내용을 정리하고자 한다. 호기심의 발단이번주에 메인 어플리케이션에서 통신하는 서버에서 장애가 발생하여, 에러가 발생했던 적이 있다. 그래서 AWS Cloud Watch로 당시의 응답코드를 확인해봤다. 확인해보니, 애플리케이션 서버 단에서는 항상 200을 리턴해줬었다. 반면 ELB에서는 5xx대의 HTTP 응답코드를 내려준 적이 있다는 이력이 남아 있었다.애플리케이션 단에서는 항상 200을 내려줬는데, ELB 단에서는 5XX대의 응답코드를 받았다고 하기에, 이상했다. 이 차이는 어디서 발생한걸까? 원인알고보니, 로드밸런서 단에서 알아서 5XX대의 응답코드를 내려주는 케이스가 있다는걸 알게되었다.(나와 비슷한 문제를 경험한 사람이 스택오버플로우에 ..