[Dev.] Connection Reset by Peer 에 대하여.
2026. 3. 2. 23:26
Dev.
https://www.notion.so/kjhoon0330/Connection-Reset-by-Peer-2026-03-04-31885d43246d80ef9948f163a5a480d8 Connection Reset by Peer에 대하여. [2026.03.04] | Notion1. Connection Reset By Peer가 뭐지?kjhoon0330.notion.site
[Redis] HyperLogLog 알아보기.
2026. 2. 6. 04:38
Dev.
HyperLogLog가 뭐냐집합의 고유 원소 개수(cardinality)를 추정하는 확률적 자료구조이다.핵심은 정확한 값이 아니라 근사값을 매우 적은 메모리로 구한다는 점이다.왜 필요한가?예를 들어 오늘 우리 사이트에 방문한 고유 사용자 수를 세고싶다고 가정해보자.가장 간단한 방법SET 을 사용해 모든 사용자 ID를 저장하면 정확함. → 사용자가 수천만명이면? 메모리가 엄청 든다.HyperLogLog를 사용하면 항상 최대 12KB만 사용하면서 표준 오차 0.81% 이내의 근사값을 준다.Redis HyperLogLog 기본 명령어 사용 예시PFADD - 원소 추가 → O(1)PFADD visitors "user:1" "user:2" "user:3"PFCOUNT - 고유 원소 수 카운트 → O(1)PFCOU..
[Dev.] 서명, 해싱, 암호화에 대하여
2026. 1. 25. 16:19
Dev.
1. 여러 해킹 사건 이후, 암호화에 대해 다시보기최근 여러 기업에서 정보 유출 사건이 연이어 발생하면서, 보안이나 암호화에 대한 주제가 뉴스가 아니라 사내에서도 실제 이슈로 다뤄지기 시작했다. 우리 회사 역시 예외는 아니었고, 서버 개발자로서 직접 확인하고 정리해야 할 부분들이 하나둘씩 보이기 시작했다. 막연히 “중요하다”는 이야기를 넘어, 지금 우리 서비스는 어떤 상태인고 어떻게 개선할 수 있는가를 설명할 수 있어야 하는 상황이었다.이참에 암호화와 관련된 기본적인 개념들을 다시 정리해보자는 생각이 들었고, 그 과정을 기록으로 남기기로 했다. 이 글의 목적은 암호 알고리즘을 나열하거나, 각 알고리즘의 수학적 안전성을 설명하는 것이 아니다. 대신 다음 질문에 답하는 것을 목표로 한다.서버 개발자로서 “이..
ELK(Elaticsearch, Logstash, Kibana)를 구성해보자
2026. 1. 11. 13:47
Dev.
노션링크 1. ELK란?ELK는 Elasticsearch, Logstash, Kibana의 약자로, 대규모 로그 데이터를 수집, 저장, 검색, 시각화하는 오픈소스 도구들의 집합이다.[Elasticsearch]Apache Lucene 기반의 분산 검색 엔진이다.로그 데이터를 저장하고 검색한다.JSON 문서 기반의 NoSQL 데이터베이스실시간 검색 및 분석 지원수평 확장 가능한 분산 아키텍처RESTful API 제공[Logstash]데이터 수집 파이프라인 도구이다.다양한 소스에서 데이터를 수집하고 변환하여 Elasticsearch에 전송한다.Input : 다양한 소스에서 데이터 수집 (파일, TCP/UDP, Beats 등)Filter : 데이터 변환, 파싱, 필터링Output :Elasticsearch, 파..
[Spring] 템플릿 메소드 패턴과 전략 패턴에 대한 정리 With Spring
2025. 12. 13. 23:11
Spring
1. 들어가며이번 글에서는 스프링 내부 구현에서 템플릿 메서드 패턴과 전략 패턴이 어떻게 사용되고 있는지 살펴보고, 각각이 선택된 이유를 내 뇌피셜과 함께 정리해보려 한다. 이를 통해 실제 코드를 작성할 때 “템플릿 메서드를 쓸까”, “전략 패턴을 쓸까” 와 같은 고민의 지점을 구조화하고, 결과적으로 유지보수성이 더 높은 방향으로 설계할 수 있는 기준을 세우는 것이 목적이다. 2. 템플릿 메서드 패턴과 전략 패턴 간단 요약스프링 내부 구현을 보기 전에 템플릿 메서드 패턴과 전략 패턴이 무엇인지에 대해 간단히 요약하고 들어가겠다.2.1 템플릿 메서드 패턴 (Template Method Pattern)템플릿 메서드 패턴은 상위 클래스가 전체 흐름(알고리즘 골격)을 정의하고, 하위 클래스는 그 중 변하는 부분..
[Spring] @RequestBody 동작 방식 구경하기
2025. 11. 8. 18:35
Spring
들어가며스프링을 사용하다보면 Controller에 @RequestBody 어노테이션을 붙여 Request Dto를 만들어 쓰곤하는데 이게 어떻게 동작하는지 궁금해서 찾아보고 정리한 글이다. @RequestBody는 어떻게 동작하는거지?일단 스프링은 HTTP 요청이 오면 간단하게는 아래와 같이 동작한다.HTTP 요청Filter ChainDispatcher ServletController 로직 실행거꾸로 나가면서 HTTP 응답이 때 @RequestBody는 Controller 쪽에 붙이는 어노테이션이므로 Controller의 존재에 대해 알고있으면서, HTTP 요청으로 온 Request 정보도 알고 있는 DispatcherServelet 에서 처리하겠구나 정도를 예상할 수 있다. DispatcherServl..
NUMA와 JVM과 k8s
2025. 10. 31. 20:14
Java & Kotlin
1. NUMA란 무엇인가CPU가 빠르게 발전하던 시기, 컴퓨터는 코어를 점점 더 많이 탑재하기 시작했다. 이때 문제는 메모리였다. 모든 CPU가 동일한 메모리 버스 하나에 매달리는 구조 (UMA, Uniform Memory Access)에서는 CPU 수가 늘어날수록 메모리 접근 대역폭이 병목이 되었다. UMA는 단순하고 일관된 접근 속도를 제공하지만 확장성 면에서 구조적인 한계가 존재했다. 이 시점에서 하드웨어 엔지니어들은 “CPU마다 자기 전용 메모리를 붙여주면 어떨까”라는 발상을 하였다. 이 발상이 바로 NUMA(Non-Uniform Memory Access)의 시작이다.NUMA의 핵심 아이디어는 간단하다. CPU가 많은 시스템에서, 모든 CPU가 하나의 메모리 풀을 공유하기보다는 각 CPU(소켓)에..
[Java] Java 프로세스 메모리 - Reserved, Committed, RSS 이해하기
2025. 10. 19. 18:54
Java & Kotlin
1. 들어가며서버를 운영하다보면 힙 설정을 하였는데 k8s pod OOM kill이 나기도 하고, jcmd로 본 JVM 메모리 사용량과 top으로 본 Java 프로세스의 메모리가 차이가 나기도 한다. Java 프로세스가 사용하는 메모리는 단순히 -Xmx로 정한 힙 크기로 끝나지 않는다. JVM은 메모리를 예약(Reserved)하고, 그 중 일부를 커밋(Committed) 해서 논리적으로 확보한 뒤, 필요할 때마다 OS가 실제 물리 메모리(RAM)를 할당하는 과정을 거친다. 즉, JVM과 OS는 다른 기준으로 메모리를 바라본다. JVM은 “쓸 수 있는 공간”을 기준으로, OS는 “이미 매핑된 페이지”를 기준으로 계산하는 것이다. 이 글에서는 JVM의 메모리 관리 단계를 Reserved → Committed..
[Java/Spring] JAR의 변천사를 알아보자.
2025. 10. 13. 01:14
Spring
0. 들어가며 JAR, WAR, Fat JAR, Executable JAR 같은 용어들을 자주 접하는데 제대로 알고 있는 것 같지 않아서 이에 대해 정리해보려한다. 1. JAR가 무엇인가JAR(Java Archive)는 ZIP 포맷 기반의 압축 파일이다. JAR는 클래스 파일(.class), 리소스 파일, 메타데이터를 하나로 묶은 ZIP 압축 파일이라고 보면 된다.JAR 파일을 열어보면 내부 구조는 다음과 같이 구성되어있다.hello.jar ├── META-INF/ │ └── MANIFEST.MF └── com/ └── example/ └── Hello.class여기서 핵심은 META-INF/MANIFEST.MF 파일이다. 이 파일은 JAR의 메타데이터, 즉 “이 JAR가 어떻게..
[Java] TypeReference는 어떻게 동작하는거지?
2025. 10. 8. 22:40
Java & Kotlin
0. 들어가며ObjectMapper 관련 코드를 쓰다보면 아래와 같이 TypeReference를 사용하곤한다.ObjectMapper objectMapper = jacksonObjectMapper();objectMapper.readValue(json, new TypeReference>() {});자바의 제네릭은 컴파일 이후 타입소거가 이루어지는데 위와 같은 코드는 어떻게 동작할 수 있는거지 싶어 해당 내용에 대해 찾아본 내용을 정리한다. 1. 타입 소거 간단 요약자바는 제네릭을 도입할 때 하위 호환성을 위해 타입 소거라는 메커니즘을 도입했다. 컴파일 이후 제네릭에 bound가 있었다면 해당 타입으로, 그렇지 않다면 Object 타입으로 치환되며, 이로 인해 바이트 코드 상에서는 제네릭 정보가 사라진다. 이..