728x90

분류 전체보기 181

K집안 기술 탐구 - Kafka, Kubernetes, Kinesis

K로 시작한다는 점 외에는 공통점이 없는 세 기술.KafkaKubernetesKinesis직접 사용해본 적이 없고, K로 시작하는 이름때문에 자꾸 헷갈려서각 기술들의 정의, 운영 주체, 등장 배경, 역할, 사용 사례, 유사 경쟁 기술을 정리해보려고 한다.Apache Kafka정의Kafka는 분산 이벤트 스트리밍 플랫폼이다.대량의 이벤트를 순서대로, 오래, 안전하게 저장하고 전달하는 로그 시스템이다. Kafka의 핵심 아이디어는 "시스템에서 일어난 모든 일을 로그로 남기자." 이 로그를 여러 소비자가 각자 필요에 맞게 읽는다. 운영 주체오픈 소스 프로젝트로, Apache Software Foundation이 관리한다.Confluent 등 다수의 기업이 상용 배포와 운영 지원을 하고 있다. 등장 배경Kafk..

카테고리 없음 2026.01.04

IP주소로 알 수 있는 정보

IP 주소는 인터넷 세계의 “발신 흔적”이다.하지만 흔적이라고 해서 지문처럼 정확하다고 생각하면 곤란하다.어뷰징 방지 관점에서 IP는 강력한 단서이면서도 단독 증거로는 항상 부족한 신호다.IP 주소로 무엇을 알 수 있고, 무엇은 알 수 없는지를 정리해보자.IP주소로 알수 있는 정보와 알 수 없는 정보IP 주소로 확실히 알 수 있는 것국가·대륙 단위의 위치IP 주소는 대체로 국가 수준의 위치 정보를 제공한다. MaxMind, IP2Location 같은 상용 DB 기준으로 보면 국가 정확도는 꽤 높은 편이다.다만 “서울/부산” 같은 도시 단위는 통계적 추정일 뿐이며, 모바일 환경에서는 오차가 급격히 커진다. 어뷰징 방지에서는 이 정보를 이렇게 쓴다.서비스 허용 국가 / 차단 국가 판단비정상 트래픽 국가 급증..

어뷰징 방지 2025.12.21

빅쿼리 알아보기

빅쿼리(BigQuery)는 어떤 DB인가? 서비스가 성장할수록 데이터는 폭발적으로 늘어난다.트랜잭션 처리(DB에 기록하는 것)는 MySQL·PostgreSQL 같은 RDB로 충분하지만,데이터 분석(대량 데이터 집계·리포팅)을 같은 DB에서 처리하기 시작하면 금방 한계가 보인다. 이 지점에서 등장하는 대표적인 선택지가 Google BigQuery다.SQL 문법을 사용하지만, 내부 구조와 목적은 우리가 익숙한 RDBMS와 다르다. BigQuery는 트랜잭션 DB가 아니다 가장 먼저 짚어야 하는 사실:BigQuery는 MySQL/PostgreSQL 같은 트랜잭션 DB(OLTP)가 아니다. BigQuery는 대규모 데이터 분석을 위해 설계된 컬럼 기반 데이터 웨어하우스(OLAP)다.목적 자체가 다르다. 목적도구..

DataBase 2025.12.07

구글 Play Integrity API로 안드로이드 악성 사용자 차단하기

배경모바일 리워드 앱은 사용자 보상 구조상 “정상 사용자 vs 자동화/매크로/다계정 유저 등의 어뷰저” 간의 싸움이 항상 존재한다.특히 글로벌 시장(예: 미국, 캐나다 등)에서는한국과 달리 본인 인증 수단이 약하기 때문에 디바이스 단위의 보안 중요하다. 구글 Play Integrity API는 구글에서 제공하는 안드로이드 보안 도구로, 앱과 디바이스의 무결성을 확인해 악성 사용자(루팅 디바이스, 클론 앱 사용자 등)를 식별하고 차단하는 데 활용할 수 있다.서비스에 이 API를 어떻게 활용해 어뷰저를 차단하고, 어떤 값들을 어떤 방식으로 활용할 수 있는지 알아보자.Play Integrity API란?Play Integrity API는 사용자의 디바이스와 앱이 정상적인 환경에서 실행되고 있는지 확인할 수 있..

어뷰징 방지 2025.10.12

Promise.all() VS Promise.allSettled() 비동기 작업 실행하기

배경배치 작업에 작업 실패 시 경보를 추가하는 작업을 진행했다.그런데 Promise.allSettled() 메서드를 실행하면서 이 구문을 try catch로 묶어 처리하는 코드를 발견했다.Promise.allSettled()는 병렬 작업 중 에러가 발생하더라도 호출부에서 에러가 throw 되지 않는다.비동기 작업 처리를 위해 흔히 사용되는 Promise.all()과 Promise.allSettled()에 대해 알아보자. Promise.all()Promsie.all()은 일반적으로 다음 코드를 실행하기 전에, 서로 연관된 비동기 작업 여러 개가 모두 실행되어야 할 때 사용된다. 결과값으로 실행된 프로미스들의 결과값을 담은 배열을 반환한다.결과값의 순서는 매개변수로 전달된 프로미스 순서와 동일하다.// 비동..

Node.js/JavaScript 2025.09.14

HTTP ETag 응답 헤더 (+ If-Match, If-None-Match 요청 헤더)

ETag란?Etag는 http 응답 헤더의 일종으로,특정 버전의 리소스를 식별하는 식별자이다. ETag는 리소스의 지문과 같은 역할로,만약 특정 URL 의 리소스가 변경된다면, 새로운 ETag 가 생성된다.ETag를 비교하면 리소스가 동일한지 빠르게 판단할 수 있다. 리소스가 변동 없고 ETag가 동일하다면 서버는 새로운 응답을 보낼 필요가 없기 때문에캐쉬를 더 효율적으로 사용할 수 있고, 대역폭 사용량을 줄일 수 있다. 만약 리소스가 변경되었다면,"mid-air collisions"라는 리소스 간의 동시 다발적 수정 및 덮어쓰기 현상을 막는데 유용하다.문법ETag: W/""ETag: "" Weak ETag(W/) 는 리소스가 실질적으로 같은 의미를 가진다면 동일하다고 간주하는 방식이다.비트 단위로는 달..

Prisma 컬럼 삭제 에러 & Select문 동작 방식

이슈 발생NestJS, Prisma, MySQL 환경의 프로젝트에서 MySQL 테이블의 컬럼을 삭제하는 작업을 진행했다.(이하에서는 해당 컬럼을 "컬럼a"라고 칭하겠다.)애플리케이션 코드에서도 컬럼a를 참조하는 모든 코드를 확인하고,컬럼a를 사용하지 않도록 수정했다.수정된 코드가 포함된 API들은 배치 작업 용이었어서,배포 도중 실시간 트래픽이 없어DB 스키마 변경과 애플리케이션 코드 배포 사이 시간 동안의 이슈는 고려하지 않았다. 그런데 컬럼a를 전혀 참조하지 않는 실시간 트래픽이 많은 API에서해당 시간 동안 에러가 발생했다. 원인처음엔 컬럼a를 명시적으로 사용하는 곳이 없는 API라 에러가 발생한 이유를 이해할 수 없었다.그런데 Prisma가 생성하는 쿼리를 확인해보니,원인을 알 수 있었다. 이슈의..

Node.js 2025.08.17
728x90