Category: server

0

Foreign Key에도 index가 걸릴까?

RDS를 쓰면 일대다 관계를 정의해서 사용하는 경우가 잦을 것이다. 테이블 간 일대다 관계를 정의하면 테이블 상으로는 PK, FK를 통해 서로 관계를 매핑시킬 것인데 그러면 FK에는 index가 걸려있을까? 아래와 같이 단순한 유저, 게시물의 경우를 생각해보자. users id (PK) username nickname 1 devson seoul

0

validation -> insert V.S. insert -> catch

최근 다른 팀원이 기능을 구현한 코드를 보면서 기존에 내가 하던 방식과 차이가 있어,팀원들과 이에 대해 같이 얘기를 나누면서 알아본 것들과 나의 생각을 정리해본다. 상황다음과 같은 사용자 Entity가 있고사용자의 화면에 보이는 이름(displayName)과 계좌(account)는 다른 사용자와 중복되지 않는 unique한 값이어야한다라는 도메인 규칙이

0

Over-fetching과 Under-fetching

GraphQL을 처음 쓰고 알아가면서 왜 GraphQL을 사용하냐고 했을 때알아야한다고 생각되는 개념이 Over-fetching과 Under-fetching 인 것 같다. Over-fetchingOver-fetcing은 API를 호출 시 필요보다 많은 데이터(사용하지 않을)를 가져오는 것이다. 예를 들어 클라이언트에게 페이스북 친구 목록을 보여주기 위해 필

0

Redis) 이것이 레디스다 16 - 레디스 튜닝 1 (기본)

레디스를 안정적으로 운영하려면 레디스 환경 설정과 운영체제 간의 관계를 이해해야 한다.운영 환경에 따라서 적절한 설정값을 지정해야 하기 때문이다. 레디스 설정파일설정파일은 레디스를 시작할 때 사용하는 redis 명령행의 인자로 지정된다.그렇기 때문에 설정파일을 수정하고 반영하려면 레디스를 재기동 해야한다.재기동 없이 설정을 변경하고 싶다면 config se

0

Redis) 이것이 레디스다 15 - 기타 고려사항

앞서 살펴본 임계점과 메모리 설정외에 다른 고려사항을 알아보자. 스냅샷 AWS와 같은 가상환경에서 레디스를 사용한다면 스냅샷 파일의 위치는 반드시 로컬 파일 시스템을 사용하자.레디스의 스냅샷 이벤트가 발생하면 매우 짧은 시간에 매우 많은 디스크 입출력이 발생하는데,EBS 같은 외부 저장장치는 로컬 디스크에 비해 스냅샷 파일을 기록하는데 많은 시간이 소요된다

0

Redis) 이것이 레디스다 14 - 메모리 설정

fork 함수는 부모의 프로세스와 동일한 크기의 메모리를 사용하는 프로세스를 생성한다.부모 프로세스 만큼의 메모리가 남아있지 않으면 fork 함수가 실패한다.레디스의 AOF이나 스냅샷을 위해 호출한 fork 함수가 실패한 이후 레디스의 모든 쓰기 연산은 실패를 응답한다. 레디스의 fork 함수에 의해 생성된 자식 프로세스는 쓰기 연산이 발생하지 않으면 부모

0

Redis) 이것이 레디스다 13 - 임계점

논리적으로 스케일 아웃의 한계는 없지만 현실적으로는 네트워크 대역폭 등의 한계가 있는데 이를 임계점이라 한다. 여러개의 인스턴스를 하나의 서버에서 올릴 때 레디스는 하나의 코어(단일 쓰레드)를 사용하기 때문에 코어의 수보다 코어 하나의 성능이 레디스의 성능에 영향을 준다. 그렇다면 멀티코어 시스템에서 성능을 높이기 위해서 인스턴스 여러 개를 실행하는 방

0

Redis) 이것이 레디스다 12 - 샤딩 기법

샤딩은 다른 용어로 파티셔닝(Partioning)으로 부른다.파티셔닝은 각 데이터를 특정 조건에 따라서 서버에 분산 저장하는 기법이다.샤딩은 동일한 갯수의 하드웨어를 사용할 때 복제에 비해서 더 많은 데이터를 저장할 수 있다. 복제의 경우 마스터 노드에 쓰기 연산이 발생하면 슬레이브 노드에도 쓰기 연산이 발생해야 동기화가 유지된다. 그렇기 때문에 복제를 통

0

Redis) 이것이 레디스다 11 - 복제 기법

레디스는 단일 스레드로 동작하기 때문에 하나의 레디스 인스턴스가 사용할 수 있는 최대 CPU의 갯수는 하나이다.따라서 성능을 높이기 위해 CPU를 추가하는 것은 성능 향상에 큰 도움은 되지 않는다. ※ 4.0 버전 부터는 AOF 작업 등을 위해 4개의 쓰레드로 동작한다.(참고: http://redisgate.kr/redis/configuration/redi

0

Redis) 이것이 레디스다 10 - 레디스 내부 구조 2

문자열 데이터레디스는 문자열 데이터에 대한 빠른 연산을 위해서 특별한 구조체를 사용한다. 12345struct sdshdr { int len; // 문자열의 길이가 저장되는 필드 int free; // 할당된 버퍼의 남은 길이가 저장되는 필드, 문자열 값이 추가될때 새로운 메모리 할당 여부를 결정한다. char buf[]; // 문