전체보기 (180) 썸네일형 리스트형 redis 1.0 분석 - 공유 메모리 풀 업데이트 내역 2023.12.16 현재도 공유 메모리 기술을 쓰는지에 대한 글 추가 들어가기 전에 Redis beta 1 버전을 기준으로 작성한 글입니다. 해당 버전의 코드는 다음 링크에서 확인하실 수 있습니다. http://redisgate.kr/redis/introduction/redis_release1.php Redis Release Notes 1 redisgate.kr 해당 기술고 관련된 포스트입니다. https://groups.google.com/g/redis-db/c/cHTu12jRr78/m/h-L0-EOn9WgJ Object sharing is fun! Hello, some hour ago I implemented a new feature in Redis, object sharing, in .. 초기 Redis 분석 - 이벤트 루프 들어가기 전에 Redis beta 1 버전을 기준으로 작성한 글입니다. 해당 버전의 코드는 다음 링크에서 확인하실 수 있습니다. http://redisgate.kr/redis/introduction/redis_release1.php Redis Release Notes 1 redisgate.kr 이벤트 종류 파일 이벤트: 클라이언트 생성, 커맨드 수행과 DB 백업 과정에서 발생하는 응답에 대한 이벤트 타임 이벤트: redis 내부에서 주기적으로 돌아가는 cron 작업. 초기에는 최소 사이즈를 만족하지 못하는 해시 테이블을 축소하는 작업만 한다. 작동방식 이벤트 루프를 통해 지속적으로 파일, 타임 이벤트를 확인하고 처리한다. 하나의 while 문으로 돌아가기 때문에 redis는 싱글 스레드로 처리된다. 다만.. 초기 Redis 분석 - 자료구조 업데이트 내역 2023.12.10 해시 생성 알고리즘, 해시 마스킹 설명 추가 2023.12.12 해시 테이블 resize 과정 추가 들어가기 전에 Redis beta 1 버전을 기준으로 작성한 글입니다. 해당 버전의 코드는 다음 링크에서 확인하실 수 있습니다. http://redisgate.kr/redis/introduction/redis_release1.php Redis Release Notes 1 redisgate.kr 데이터 관리 redis는 데이터를 문자열 형태로 관리한다. 하지만, 문자열 그대로 관리하지 않고, SDS(Simple Dynamic String) 란 객체에 문자열과 메타 데이터를 같이 관리한다. 여기서 len은 문자열의 길이, free는 현재 할당된 메모리에서 남은 공간을 의미한다.. 이펙티브 소프트웨어 테스팅 테스팅 책을 읽은 이유 프로젝트를 진행하는 과정에서 테스트 코드의 필요성을 절실히 느꼈다. 코드를 봐줄 상급자가 없거나, 같이 리뷰할 팀원들이 부족하다면 에러가 안 나도록 기도 메타로 가야 했다. 그러다 보니 프런트 개발자와 API를 맞추는 과정에서 에러가 자주 발생했고, 그때마다 새로 배포를 하는 불편함이 있었다. 이를 해결하기 위해 단위 테스트 등을 통해 개발한 기능에 대한 테스트를 작성해 발생할 수 있는 위험성을 줄이고자 했다. 하지만, 통합 테스트같이 복잡한 테스팅이 필요한 경우를 만나니 테스트 코드 작성도 막막해져 책의 도움을 받고자 했다. 이 책을 선정한 이유 난이도가 적당했다. 아직 현업 경험이 없는 학생이다 보니, 전문 테스팅 책을 보는데 이해하기가 무척 어려웠다. 시간을 두고 읽으면 이해.. SSAFY 2학기 특화 프로젝트 회고 공통 프로젝트에 이어 특화 프로젝트가 끝났다. 추천이란 스택을 가지고 주제를 선정해야 했기에, 어떤 것에 대한 추천을 할지 많이 고민을 했다. 그러다 팀원들 모두 맥주를 좋아하고 같은 문제를 겪는다는 것을 알고 맥주 추천 서비스 개발을 시작했다. 추석 연휴 및 전후로 하반기 공채가 겹치다 보니 프로젝트에 집중하기 힘들었던 점이 있었지만, 목표로 정한 기능들은 모두 구현했다. 팀원 모두가 좋아하는 소재를 가지고 공통된 문제점을 해결한다는 것은 무척 의미 있는 경험이었다. 모두가 맥주를 좋아했고, 새로운 맥주에 도전해 보고 싶은데 뭘 마실지 막막한 문제가 있었다. 아이디어 기획도 잘 풀렸고, 토론 과정에서 맥주 고르는 기준에 대한 새로운 관점도 알게 됐다. 왜 주제를 이걸로? 생각보다 단순했다. 나: 오늘 .. SSAFY 2학기 공통 프로젝트 회고 7주간의 공통 프로젝트 기간이 끝났다. 부족한 실력이지만 팀의 백엔드 리드가 돼서 공수 기간에 맞춰 MVP를 정한 뒤, 각 팀원이 하나의 기능을 전담할 수 있도록 초기 문서화를 진행했다.또한, 인프라를 관리하고 merge conflict 시 상황별 해결책들을 제시해 주면서 통해 팀원들이 목표로 했던 spring 스택의 숙련도 향상, 깃을 통한 협업 능력 향상을 할 수 있도록 했다. 결과는 꽤 성공적이었다. 예상했던 것보다 MVP 구현이 2일 빠르게 끝났고, 시연도 매끄럽게 진행됐다. 특히 초반부 브랜치 병합 등에 대해 어려움을 겪었던 팀원들이 후반부에선 내 도움 없이 매끄럽게 진행했다. 물론, 병합 과정에 자신이 붙은 나머지 잘못된 코드들이 병합되던 문제도 있었지만, 그런 문제를 해결하는 것이 리더로서 .. 레드 블랙 트리(red black tree) 레드 블랙 트리란 AVL와 비슷하게 자가 균형 이진 탐색 트리지만 다른 점이 있다. AVL에선 삽입, 삭제가 발생할 때마다 균형을 조정해야 하는 문제가 있다. 아무리 $\log(N)$의 시간 복잡도를 보장한다 해도 수천만의 쓰기 작업이 발생하면 $N\log(N) $ 시간 복잡도로 문제가 복잡해진다. 이런 문제를 해결하기 위해 레드 블랙 트리에선 삽입, 삭제 작업에서 발생하는 균형 조정을 느슨하게 대처한다. 하지만 이로 인해 탐색에선 AVL보다 균일한 시간 복잡도를 제공하진 않는다. 레드 블랙 트리의 성질 루트 노드는 언제나 블랙 노드다. Nil Node 우리가 생각하는 말단 노드의 하위 노드에 암묵적으로 Nil Node가 생긴다고 보면 된다. Nil Node는 실제 데이터가 아니기 때문에 트리의 높이 계.. 이진 힙(binary heap) 이진 힙이란? 완전 이진트리(Complete Binary Tree)의 한 형태로 힙 정렬, 또는 우선순위 큐에 사용된다. 이진 힙은 다음 2가지 특성을 가지고 있다. 완전 이진 트리와 동일하게 모든 레벨이 완전히 채워져 있다. 마지막 레벨은 왼쪽부터 순서대로 채워진다. 모든 부모 노드는 자식 노드보다 큰 값을 가진다. 이 경우, 최대 힙(Max Heap) 이라고 한다. 반대로 부모 노드가 자식 노드보다 작은 값을 가지면 최소 힙(Min Heap)이라고 한다. 이 글에선 최소 힙을 기준으로 설명한다. 힙 선언 class Heap { private int[] heapArray; private int tail = 0; private int capacity; public Heap(int capacity) { t.. 이전 1 2 3 4 5 6 7 ··· 23 다음