덕토피아

· Redis
Redis는 가볍고 빠른 인메모리 데이터 구조 서버로, 커스텀 기능 추가가 비교적 직관적입니다. 이번 포스팅에서는 Redis의 기본 명령어 중 하나인 ECHO와 동일한 동작을 수행하는 새로운 명령어를 추가하는 과정을 다룹니다. ✅ 목표- ECHO 명령어처럼 문자열을 그대로 반환하는 ECHO_DUCK 명령어 추가- Redis 서버에 새로운 명령어를 등록하는 과정 이해- Redis 내부 명령어 등록 시스템을 실습 기반으로 학습 🔧 사전 준비실습은 오픈소스 valkey 저장소를 clone해서 사용합니다. GitHub - valkey-io/valkey: A flexible distributed key-value database that is optimized for caching and other real..
· DevOps
Git 명령어 몇 줄 치면 끝나긴 하는데, 이게 내부적으로는 어떤 객체가 만들어지고 어떤 포인터가 움직이는 걸까요? 이번 포스팅에서는 Git이 데이터를 어떻게 저장하는지, 커밋은 어떤 구조로 이루어져 있는지, 그리고 효율적인 협업을 위한 브랜치 전략까지 Git 활용법을 다룹니다. 🧱 Git은 데이터를 어떻게 저장할까?Git은 단순히 파일 스냅샷을 저장하는 도구가 아닙니다. 내부적으로는 SHA-1 해시 기반의 객체 저장소를 구성하며, 모든 커밋, 파일, 폴더는 특정한 객체 타입으로 관리됩니다. [Git의 세 가지 객체]- Blob: 실제 파일의 내용- Tree: 디렉토리 구조 및 파일 목록 (즉, 스냅샷)- Commit: 하나의 버전 스냅샷을 나타내는 객체로, 부모 커밋과 트리 객체, 메타 데이터를 포함..
Java에서 병렬 처리나 비동기 작업을 구현할 때 Thread를 직접 생성해 사용하는 방식은 더 이상 일반적이지 않습니다. 요즘 Java에서는 ExecutorService를 사용하여 스레드 풀(Thread Pool)을 효율적으로 관리하는 것이 표준입니다. 특히 Executors 클래스에서 제공하는 팩토리 메서드들을 활용하면 다양한 유형의 스레드 풀을 간편하게 생성할 수 있습니다.이번 글에서는 Executors가 제공하는 대표적인 스레드 풀 4종류를 살펴보고, 각각의 사용 시나리오와 주의할 점을 예제 중심으로 정리해보겠습니다. newFixedThreadPool(int nThreads)이 메서드는 정해진 개수만큼의 스레드를 미리 생성하고, 그 스레드들이 재사용되며 작업을 처리합니다. 더 많은 작업이 들어오면..
· Kafka
Apache Kafka는 고성능의 분산 스트리밍 플랫폼으로, 프로듀서(Producer)와 컨슈머(Consumer) 간의 효율적인 데이터 전송을 지원합니다. 그러나 Kafka 자체는 데이터의 구조나 형식에 대한 검증을 수행하지 않으므로, 데이터 스키마의 관리와 호환성 유지에 어려움이 발생할 수 있습니다. 이러한 문제를 해결하기 위해 Schema Registry가 도입되었습니다.​ Schema Registry란 무엇인가?Schema Registry는 Kafka와 별도로 동작하는 독립적인 애플리케이션으로, Kafka에서 주고받는 메시지의 스키마를 중앙에서 관리하고 저장하는 역할을 합니다. 이를 통해 프로듀서와 컨슈머 간의 데이터 구조에 대한 명확한 정의를 공유하며, 데이터의 일관성과 호환성을 보장합니다. 왜 ..
· React
React를 처음 접하는 개발자라면, 함수형 컴포넌트와 클래스형 컴포넌트의 차이, 그리고 상태 관리 방식에 대한 고민이 많을 것입니다.과거에는 React에서 상태(state)를 관리하려면 클래스형 컴포넌트를 사용해야 했습니다. 하지만 코드가 길어지고, 재사용성이 떨어지는 문제가 있었습니다. 이를 해결하기 위해 React Hook이 등장하였으며, 함수형 컴포넌트에서도 상태 관리와 생명주기 메서드의 역할을 수행할 수 있도록 도와줍니다. React Hook이 필요한 이유더 간결한 코드: 클래스형 컴포넌트보다 코드가 직관적이고 짧아짐가독성과 유지보수성 향상: 관심사 분리가 쉬워지고, 재사용성이 증가부수 효과 관리가 용이: useEffect를 활용하여 사이드 이펙트 관리를 쉽게 수행 가능백엔드 개발자의 입장에서 ..
· 레퍼런스
엔지니어링 매니저로서 팀원들의 승진을 돕고, 처음으로 개발자로 입사할 기회를 제공하는 것은 큰 보람입니다. 물론, 끝없는 회의가 그 보상인 것은 아니지만요. 반면, 팀에서 누군가를 내보내야 하는 불편한 순간도 경험했습니다. 어렵게 첫 개발자 직무를 얻었지만, 얼마 지나지 않아 해고된 주니어 개발자들과 이야기를 나눈 적도 있습니다. 이번 글에서는 사람들이 해고되는 가장 흔한 두 가지 이유와 이를 피하는 방법에 대해 살펴보겠습니다. 대부분의 경우, 당신의 잘못이 아닙니다아무리 좋은 코드를 작성하고 기대치를 충족하더라도 해고될 수 있습니다. 안정적인 직장은 존재하지 않습니다.구조조정, 무능한 관리자, 회사 합병, 심지어 사무실을 파괴하는 소행성(?) 같은 변수도 있습니다. 이러한 상황을 완전히 피할 수는 없지..
· React
React로 단일 페이지 애플리케이션(SPA)을 개발하고 Spring Boot를 통해 배포하는 과정에서, 사용자들이 특정 페이지로 이동한 후 새로고침을 하면 404 오류가 발생하는 경우가 있습니다. 이는 React와 Spring Boot가 라우팅을 처리하는 방식의 차이에서 비롯된 문제로, 많은 개발자가 마주하는 흔한 이슈입니다. 이번 포스팅에서는 문제의 원인을 분석하고, 이를 효과적으로 해결하는 방법을 상세히 설명하겠습니다. 문제 상황: 새로고침 시 404 오류 발생  React 애플리케이션에서 BrowserRouter를 사용하여 클라이언트 사이드 라우팅(Client-Side Routing)을 처리할 때, 새로고침 시 다음과 같은 404 오류가 발생할 수 있습니다.GET https://example.co..
· 레퍼런스
지연 시간 (Latency)지연 시간은 클라이언트에서 서버로 요청이 전달되고 다시 돌아오기까지(혹은 하나의 작업 단위가 완료되기까지) 걸리는 시간을 말합니다. 보통 밀리초(ms) 단위로 측정됩니다.웹페이지 로드: 만약 서버가 브라우저로 페이지 데이터를 보내는 데 200ms가 걸린다면, 지연 시간은 200ms입니다.간단히 말해, 웹사이트가 빠르게 로드되면 낮은 지연 시간(low latency)을 가진 것이고, 느리게 로드되면 높은 지연 시간(high latency)을 가진 겁니다.왕복 시간(Round Trip Time, RTT): 요청이 서버로 가고 응답이 다시 돌아오는 데 걸리는 전체 시간을 말합니다. 때로는 RTT가 지연 시간의 대체 용어로 사용되기도 합니다. 처리량 (Throughput)처리량은 시스..
· Kafka
Kafka Streams는 실시간 데이터 처리를 위한 강력한 도구로, KStream과 KTable이라는 두 가지 데이터 구조를 제공합니다. 이번 글에서는 이 두 데이터 구조의 개념과 차이를 살펴보고, 실제 KStream-KStream, KStream-KTable, KTable-KTable 조인의 예제를 설명하겠습니다. KStreams - KStreams 조인[개념] KStream-KStream 조인은 두 개의 실시간 데이터 스트림을 결합합니다.이 조인은 타임 윈도우를 기준으로 이루어지며, 설정된 기간 내에 동일한 키를 가진 데이터를 결합합니다. [조인의 특징]타임 윈도우가 필수적입니다.데이터가 실시간으로 들어오므로, 시간이 지나면 윈도우가 닫히고 더 이상 데이터를 결합할 수 없습니다.[사용 사례]두 개의..
· Kafka
Kafka Streams는 Apache Kafka에서 제공하는 분산 스트리밍 처리 애플리케이션 라이브러리입니다. 이 라이브러리는 대규모 데이터 스트림을 실시간으로 처리하며 데이터 분석, 변환, 집계 같은 작업을 손쉽게 구현할 수 있도록 설계되었습니다. 이번 글에서는 Kafka Streams의 핵심 개념과 작동 방식을 초보자도 이해할 수 있도록 간단히 설명하겠습니다. Kafka Streams란 무엇인가?Kafka Streams는 실시간 스트리밍 데이터 처리를 위한 Apache Kafka의 클라이언트 라이브러리입니다.복잡한 분산 시스템의 세부사항을 개발자가 직접 관리하지 않아도, 간단한 코드를 통해 실시간 데이터를 처리하고 분석할 수 있게 돕습니다. Kafka Streams는 데이터의 필터링, 변환, 집계 ..
둘기덕
'분류 전체보기' 카테고리의 글 목록