1. 실수 패턴 1: 비효율적인 맵 초기화로 인한 성능 저하 📉대부분의 Go 개발자는 맵을 사용할 때 다음과 같이 초기화합니다.m := make(map[string]int) // 크기 힌트 없음이 코드는 당장은 문제가 없어 보이지만, 맵에 대량의 데이터를 채워 넣을 때 성능 문제를 일으킬 수 있습니다.맵의 내부 구조: 동적 확장과 RehashGo 맵은 내부적으로 해시 테이블(Hash Table)로 구현되어 있으며, 데이터를 저장하기 위해 버킷(Bucket)이라는 메모리 공간을 사용합니다.초기 상태: 크기 힌트 없이 맵을 생성하면, 런타임은 최소한의 버킷만 할당하여 시작합니다.항목 추가 및 로드 팩터 초과: 키-값 쌍이 계속 추가되어 맵의 로드 팩터(Load Factor), 즉 (총 항목수 / 총 버킷수..
1. ConcurrentHashMap이란?ConcurrentHashMap은 멀티스레드 환경에서 동시에 여러 스레드가 안전하고 빠르게 데이터를 읽고 쓸 수 있도록 설계된 해시맵입니다.기존의 HashMap은 스레드에 안전하지 않아 동시 접근 시 데이터 손상이나 무한 루프 같은 심각한 문제가 발생하지만, ConcurrentHashMap은 이를 해결했습니다.2. ConcurrentHashMap 동작 원리2-1. 세분화된 락 (Lock Striping)자바 7 이전에는 ConcurrentHashMap이 내부적으로 데이터를 여러 세그먼트(segment)로 나누고, 각 세그먼트별로 락을 걸어 동시 접근을 허용했습니다.이 덕분에 전체 맵이 아닌 해당 세그먼트에만 락이 걸려, 동시성 성능이 크게 향상됐죠.2-2. 자바 ..
Java에서 Map을 쓸 때 키/값에서 null을 허용하는지 여부에 대해서 알아보고자 합니다.한눈에 보기 컬렉션null 키null 값메모HashMap✅ (정확히 1개)✅ (여러 개 가능)get(k)가 null이면 “키 없음” 또는 “값이 null”일 수 있음 → containsKey(k)로 구분 필요Hashtable❌❌put/get에 null 사용 시 NullPointerExceptionConcurrentHashMap❌❌동시성·원자적 연산 일관성을 위해 null 금지 (compute/merge의 null 반환은 제거/미삽입 신호) 왜 규칙이 다를까?1) HashMap — 편의성 + 현대적 APIcontainsKey가 있어 get 결과가 null이어도 존재 여부를 구분 가능그래서 키 1개 null + 여..
SRV 레코드는 서비스 레코드(Service Record) 의 줄임말로, DNS(Domain Name System)에서 특정 서비스를 제공하는 서버의 위치를 정의하는 데 사용됩니다. 일반적인 A 레코드와 달리 SRV 레코드는 서비스 이름, 프로토콜, 포트 및 우선순위 등을 포함하는 구조를 가지고 있어, 특정 서비스의 위치를 동적으로 찾을 수 있게 해줍니다.SRV 레코드의 구조SRV 레코드는 DNS에서 특정 서비스가 제공되는 서버의 호스트 이름과 포트 번호를 나타냅니다. SRV 레코드는 다음과 같은 형식을 가집니다:_서비스명._프로토콜.도메인. TTL 클래스 SRV 우선순위 가중치 포트 대상1. 각 항목의 의미:_서비스명: 제공하는 서비스의 이름입니다. 예를 들어, MongoDB, SIP, XMPP, HT..