본문 바로가기

전체 글

(42)
HashMap & Hash Collision HashMap HashMap은 key-value를 쌍으로 저장하는 비선형 자료구조입니다. 일정한 크기의 배열을 생성한 후에 Key 값을 Hash 함수를 통해 index로 변환하여 해당 index에 Key와 Value를 저장합니다. 시간복잡도 i 번째 데이터에 접근 : O(N) x 라는 데이터(Key)가 있는지 탐색 : O(1) x 라는 데이터(Key)에 접근 : O(1) x 라는 데이터의 삽입 / 삭제 : O(1) HashMap은 무한에 가까운 Key 값을 유한한 메모리에 저장해야 하기 때문에 아무리 뛰어난 성능의 Hash 로직을 사용하더라도, Hash Collision(해시 충돌)이 발생합니다. Hash Collision (해시 충돌) 해시 충돌이란 서로 다른 Key 값에 대해서 Hash 함수의 반환 ..
Array vs Dynamic Array Array 배열은 메모리 상에서 데이터가 연속적으로 연결되어 있는 선형 자료구조 이처럼 크기는 고정되어 있으며 변경될 수 없습니다. Dynamic Array Dynamic Array는 메모리 상에서 데이터가 연속적으로 연결되어 있는 선형 자료구조 입니다. 크기가 동적으로 변경될 수 있으나, 근본적으로 Array 기반으로 구현되어 있습니다. 여유 공간이 없으면 사이즈를 2배(Java) 혹은 50%씩 늘립니다. Java의 경우 사이즈를 2배씩 늘리도록 구현되어 있어, 데이터를 20억개 넣기 까지 30번만 resizing 하면 되기 때문에 큰 부하가 오지 않습니다. Resizing에 걸리는 시간을 알아보도록 하겠습니다. 초기 사이즈 지정 X public class Resizing { private static..
캐시를 통한 성능 최적화 이 포스팅은 제가 작성한 UPbrella 프로젝트의 기술 블로그에 작성한 캐시를 통한 성능 최적화 포스팅을 옮겨온 것입니다. 1. 문제 정의 업브렐라 서비스의 특성 상 협업지점의 CUD는 자주 일어나지 않지만, 조회 API는 자주 호출되고 있습니다. 협업지점 조회 API는 여러 테이블이 조인을 하고, 자주 호출되는데 이것이 매번 호출되면 DB의 부하 증가로 이어지게 됩니다. 이를 개선하기 위한 방법으로, Read Replica 와 Redis 중 고민을 하였는데, 서비스의 규모가 작고, 데이터가 적다는 점을 고려하여 Redis를 이용하여 DB 데이터를 캐싱하기로 결정하였습니다. 2. Redis 2 - 1. Redis 설치 아래의 명령어를 통해 redis를 설치해줍니다. sudo apt install red..