본문 바로가기

전체 글17

HashMap 내부는 충돌시 언제 트리 구조로 변경될까? 해시 맵 내부는 충돌 시 언제 트리 구조로 변경될까? 내가 알고 있는 지식이나 네이버 D2 블로그나 여러 블로그에서 확인한 내용은 내부에 버킷이 갖고 있는 노드의 개수가 8개 이상일 때 트리로 변경된다는 내용이었다. 여기서 내가 궁금한 건 정말 한 버킷에 노드의 개수가 8개 이상일 때 바로 연결 리스트에서 트리로 바로 바뀌는 것일까? 한번 내부를 확인해보자!!!!! 내부 탐색을 위한 예제 코드는 다음과 같다. (jdk 1.8 기준) HashMap에 더미 객체를 계속 생성해서 put 하는 간단한 예제 코드이다. 눈여겨볼 것은 해시 코드 재정의 시 1로 한 것이다. 해시 코드를 1로 재정의 한 이유는 같은 버킷 인덱스에 여러 노드를 쌓아 8개 일 때 트리로 변경되는지 확인하기 위함이다. 이제 본격적으로 내부.. 2021. 2. 2.
4장. 데이터베이스와 아키텍쳐 구성 - (2) 리플리케이션 이번 포스팅에서는 리플리케이션에 대해 알아본다. 리플리케이션 리플리케이션이 나오게된 배경은 다음과 같다. '저장된 데이터가 손실되면 어떻게 하지?' 이전 포스팅에서 설명한 Active - Active, Active - Stand by 클러스터 구성에서 서버 부분은 다중화할 수 있어도 저장소는 다중화할 수 없어서 데이터를 다중화할 수 없는 단점이 존재한다. 즉, 저장소가 날아가면 데이터를 잃게 된다. 이런 상황에 대응하기 위해 '실제 데이터가 저장되는 저장소도 복제하자!' 가 해결 방안이였으며 이에 대한 클러스터 구성을 리플리케이션 한다. * 리플리케이션이란? Replication, 즉 복제를 뜻한다. DB 서버와 저장소 세트를 복제하여 복수로 준비하는 것을 뜻한다. 리플리케이션은 서버와 저장소가 동시에 .. 2021. 2. 1.
4장. 데이터베이스와 아키텍쳐 구성 - (1) 클러스터링 우리가 알고자 하는 데이터베이스의 아키택쳐는 다음과 같다. 이번 챕터에서는 데이터베이스의 클러스터링에 대해서 알아보며, 이번 포스팅에서는 Active - Active, Active - Stand by와 Shared Disk, Shared Nothing을 알아보도록 하자. 장애가 발생할 때마다 정지를 한다면 인프라로써 역할을 다하지 못할 것이다. 견고한 시스템을 구축하기 위해서는 다중화를 고려해야 하고 다중화를 하기 위해선 가용성을 고려해야 한다. 가용성을 높이기 위한 방법은 2가지가 있다. 1. 심장 전략 2. 신장 전략 이 전략들을 쉽게 예로 표현해보면 신장은 한쪽에 문제 생겨도 다른 한쪽이 문제없다면 일상생활에 지장이 없다. (이식도 가능) 그러나 심장은 10초라도 정지한다면 목숨이 위태로울 정도로 .. 2021. 1. 31.
3장. 얽힌 돈 이야기 돈을 아는 엔지니어가 되자 이번 챕터는 데이터베이스의 '비용'에 초점을 두고 있다. 엔지니어일지라도 비용에 무관심한다면 고객에게 가치 있는 일을 할 수 없다. 만약 우리가 시스템 엔지니어라고 가정했을 때, '왜 시스템을 만들고 있습니까?'라고 질문을 받는다면 뭐라고 할 것인가? 고객으로부터 해달라는 데로 요청을 받아서요 '시스템을 만드는 목적은 편리한 기능을 제공함으로써 서비스를 제공하고 이익을 취하기 위해서' 혹은 '사회 전체의 이익을 높이기 위해 시스템이 존재하기 때문입니다.'라고 대답할 것 같다. 결국은 시스템을 개발과 유지하는 것은 궁극적으로 이익을 추구하려는 것이다. 자신이 하는 일이 고객이나 회사에서 어떤 가치가 있는지를 생각할 수 없는 엔지니어가 만든 시스템은 자기만족으로 끝나게 된다. 엔지.. 2021. 1. 26.
compareTo()를 재정의 시 equals()를 왜 함께 재정의 해야할까? 해당 글을 작성하게 된 이유는 NEXT STEP에서 클린 코드 과정 리뷰어로 활동하면서 가끔 중복으로 드리는 내용 중 하나이며 compareTo를 재정의 시 equals()를 왜 함께 재정의 하는걸 권장하는지 포스팅하면 좋을 것 같아 작성하게 되었다. 주로 작성하는 피드백 내용은 다음과 같다. 위의 리뷰 내용을 확인해보면 compareTo 메서드를 재정의 시 equals() 메서드를 재정의하는 것을 강하게 권장하는 내용이다. 강하게 권장하는 이유를 우선순위 큐를 예로 들어 설명하고자 포스팅을 작성하게 되었다. 예로 버전 별 우선순위 큐의 remove() 메서드에서 내부 차이가 존재한다. (HashSet, TreeSet과 같은 컬렉션은 대표적인 예이기에 생략하고 우선순위 큐만 포스팅 하였다.) 실제로 버전.. 2021. 1. 25.
2장. 관계형 데이터베이스란 DBMS 란? 데이터베이스의 기능을 제공하는 소프트웨어를 DBMS (DataBase Management System)라고 한다. 흔히 우리가 말하는 Oracle, SQL Server, MySQL, PostgreSQL, Firebird를 DBMS라고 한다. 관계형 데이터베이스란? RDB에서 말하는 관계형이란 말은 어떤 의미일까? 우리가 흔히 말하는 'Relation'에서 파생된 단어로써 보통 인간관계에 사용하는 '관계'란 용어와는 의미가 다르다. 보통 테이블과 테이블 간의 관계를 맺고 연결되어 관리할 수 있는 데이터베이스라고 생각하기 쉽다. (물론 맞는 말이다.) 여기서 말하는 Relation은 2차원 표를 표기할 때 사용하는 단어이다. 단적으로 관계형을 표현하면 데이터를 2차원 표를 사용해 관리하는 데이.. 2021. 1. 25.
1장. 데이터베이스란 최근 이직을 위해 여러 곳에 면접을 진행한 결과, 데이터베이스 관련 질문을 많이 받았다. 아주 기초적인 지식부터 시작해서 튜닝, 성능 등의 질문을 많이 받았고 쉬운 내용도 정리가 안되다 보니 당황하며 장황하게 대답을 하게 되고 부족한 데이터베이스 지식으로 인해 떨어진 곳도 존재하여 데이터베이스 지식을 다시 정립하고자, 그리고 아주 기초적인 내용이라도 쉽게 비유적으로 표현하여 생각을 정리하고자 데이터베이스 책을 읽기 시작하게 되었고 LINE을 다니시는 멘토 개발자분과 개발자의 생과사를 함께 같이하기로한(?) 분의 추천으로 해당 책을 내 첫 블로그 개설과 동시에 포스팅하기로 다짐을 하였다. Chapter 1. 데이터베이스란 누군가 데이터베이스가 무엇인지 혹은 어떤 특징이 있는지 물어본다면 "주소록"이라고 대.. 2021. 1. 25.