network 해시 양극화 (Hash Polarization) 해시 양극화, 또는 해시 불균형(Hash Imbalance) 현상은 로드밸런서에서 해시 알고리즘이 두번 이상 적용되어 트래픽이 고르게 분산되지 않는 경우를 말한다. 이 경우 해시 설정을 조정해야 한다 Reference * https://support.huawei.com/enterprise/en/doc/EDOC1100086965
SVCB SVCB, HTTPS RR에 대해 SVCB(Service Binding, 서비스 바인딩), HTTPS RR(Resource Record, 리소스 레코드)에 대해 간략히 알아보자. Prerequisite: Service(SRV) record SVCB가 왜 나왔는지 알려면 SRV(Service, 서비스) 레코드를 먼저 알아야 한다. * RFC 2782: A DNS RR for specifying the location of services (DNS SRV) * https://www.cloudflare.com/learning/dns/dns-records/
TOTP 구글 인증기(Google Authenticator)에서 다른 인증기로 마이그레이션하기 구글 인증기(Google Authenticator)는 OTP(One-Time Passcode, 일회용 인증코드) 앱 중 하나로, 먼 옛날부터 널리 사용된 앱이다. 먼 옛날엔.. 구글 인증기에 있는 OTP들을 옮길 수 없었다. 그래서 핸드폰을 바꾸면 모든 OTP를 다시 등록해야 하는 번거로움이 있었다. 그나마 최근에는 내보내기도 추가되고, 구글 계정에 백업도 된다. 구글 계정에 락인되는게 싫다거나, ente
ECH ECH 지원 상태 확인하기 사용중인 브라우저 등 HTTP 클라이언트가 ECH(Encrypted Client Hello)를 지원하는지 확인해보자 참고로 ECH의 이전 버전은 ESNI(Encrypted SNI) 였다. Chromium(크로미움) 117부터 ECH가 기본 활성화 되어있다. Cloudflare Cloudflare Browser CheckSecure DNS Transport using DoH (DNS over HTTPS) or DoT (DNS over TLS) and SNI with ECHCloudflare Cloudflare(클라우드플레어)에서
RFC Happy Eyeballs Happy Eyeballs(해피 아이볼스, 행복한 눈알..?)는 듀얼스택 호스트에 더 빠른 커넥션을 선택하는 클라이언트 알고리즘이다. 요즘 대부분의 호스트는 듀얼스택(IPv4, IPv6)을 지원하는데, 웹 클라이언트 입장에서는 어떻게든 더 빠른 커넥션을 사용하고 싶을 것이다. 또한 네트워크 상태나 클라이언트에 따라 IPv4 또는 IPv6 하나만 사용 가능할 수도 있을 것이다. 그래서 IPv4, IPv6
curl macOS curl http3 설치 $ curl --version curl 8.8.0 (aarch64-apple-darwin23.4.0) libcurl/8.8.0 (SecureTransport) OpenSSL/3.3.1 zlib/1.2.12 brotli/1.1.0 zstd/1.5.6 libidn2/2.3.7 libssh2/1.11.0 nghttp2/1.61.0 librtmp/2.3 OpenLDAP/2.6.8 Release-Date:
라프텔 라프텔 댓글 숨기기 (ViolentMonkey) 애니 보는데 댓글이 자꾸 거슬려서 댓글을 숨기는 방법을 좀 찾아봤는데, 댓글 숨기기/끄기 기능은 앱에서만 지원된다고 한다. 그래서 그냥 유저스크립트(UserScript)를 짰다. 설치 방법 1) ViolentMonkey 설치 브라우저에서 UserScript를 돌릴 수 있도록 해주는 확장 프로그램을 설치해야 한다. 나는 ViolentMonkey(바이올런트 몽키)를 사용한다. TamperMonkey도 (아마도) 동작할거라 생각한다 아래는 브라우저별
renovate Renovate를 이용한 의존성 자동 업데이트 1) 의존성 자동 업데이트가 왜 필요한가 요즘은 소프트웨어 개발할 때 라이브러리를 편리하게 많이 사용한다. 예를 들어 내가 만든 크롬 확장(sh-cho/open-via-menlo)의 의존성을 보면 아래와 같은데, 작은 앱도 이렇게 많은 패키지 의존성을 가지고 있다. { "devDependencies": { "@ant-design/icons": "^5.2.6", "@babel/cli&
ruby macOS ruby 3.x 설치 오류 해결방법 macOS m1에서 ruby 3.3을 설치할 때 아래와 같은 오류가 발생했다. 참고로 나는 mise 라는 개발환경 관리 툴을 쓰고 있다. (asdf와 비슷) $ mise use -g ruby@3.3 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 21.0M 100 21.0M 0
tree-sitter Tree-sitter(트리시터)를 이용한 파서 제작법 Tree-sitter|IntroductionGitHub repository Tree-sitter is a parser generator tool and an incremental parsing library. It can build a concrete syntax tree for a source file and efficiently update the syntax tree as the source file is edited. Tree-sitter(트리시터)는 파서 생성 툴이다. 자바스크립트 문법으로 쉽게 파서를 만들 수 있다.
javascript tinyld: 언어 탐지 라이브러리(js) GitHub - komodojp/tinyld: Simple and Performant Language detection library for NodeJSSimple and Performant Language detection library for NodeJS - komodojp/tinyldGitHubkomodojp 일본 게임 유통사 코모도(Komodo)에서 만든 언어 탐지 오픈소스 라이브러리, tinyLD(Tiny Language Detector) import { detect, detectAll } from 'tinyld' // Detect detect('これは日本語です.') // ja
logstash Logstash file input inode 재사용 문제 및 해결방법 Logstash의 File input plugin을 사용해 프로듀싱할 때, 이미 프로듀싱된 로그가 다시 프로듀싱되는 문제가 종종 발생했다. 아카이빙용으로 프로듀싱하는 경우, 같은 로그가 두번 프로듀싱 되더라도 큰 문제가 없다. 하지만, 긴밀하게 연결된 파이프라인에 멱등성이 보장되지 않는 액션이 다시 프로듀싱 된다면 문제가 발생할 것이다. 이 글에서는 해당 현상의 원인과 해결 방법을 알아보자. Logstash file
docker 도커 크립토재킹 방지하기 로컬에서 테스트한다고 도커로 Redis 컨테이너를 띄워놨는데, 이상한 키가 들어있길래 monitor를 켜서 확인해보니, 실제로 외부에서 이런식으로 FLUSHALL + SET이 되었다. 보안팀에서 내 PC에서 의심스러운 IP와 통신이 발생한 이력이 있다고 연락이 왔는데, public IP가 부여된 PC에 패스워드 없이, 모든 호스트 대상으로 레디스 컨테이너가 떠 있는게 화근이었다. New Kiss-a-dog Cryptojacking Campaign Targets Docker and
Python Featured PyPI 패키징 및 배포 가이드 파이썬 패키지를 다른 개발자가 pip를 사용해 받아갈 수 있도록 pypi에 업로드 하는 과정을 패키징 및 배포라고 한다. 파이썬 패키지를 빌드하고 pypi에 배포하는 방법을 알아보자. 준비사항 * pypi.org에 가입하기 로컬 파이썬 패키징 Packaging Python Projects - Python Packaging User GuidePython Packaging User Guide 이번 글에서는 최대한 간단한 pure python 패키지를 빌드하는
gradle gradle-git-properties "Unknown DIRC version 4" 오류 해결 방법 Unknown DIRC version 4 gradle 프로젝트에서 gradle-git-properties 플러그인을 쓸 때, 위와 같은 오류가 나오는 경우, 거두절미 하고 gradle-git-properties 플러그인 버전을 최신 버전(오늘 기준 2.4.1)으로 올리면 된다 plugins { id "com.gorylenko.gradle-git-properties" version "2.4.1" } 내 경우 기존에 사용중인 플러그인 버전은 2.
ghost ghost 블로그에 giscus 댓글 추가하는 법 ghost는 기본적으로 멤버 전용 댓글 시스템만 있다. 그래서 disqus, giscus, utterrances 등 다른 댓글 서비스를 이용해야 ghost 멤버 시스템과 별개로 댓글을 달도록 할 수 있다. ghost 호스팅 서비스를 사용할 때 giscus를 이용해 템플릿 파일(post.hbs 등)을 수정하지 않고 댓글을 추가해보는 방법을 알아보자. giscus 소개 giscus는 깃허브 리파지토리의 디스커션(
palworld Featured 팰월드 데디케이티드 서버 설치 방법 (오라클 클라우드) 오라클 클라우드에서 상시 무료 프리티어로 4코어 + 24GB ARM 서버를 제공해서 게임 서버를 무난하게 돌릴 수 있다 이번 글에서는 오라클 클라우드에서 팰월드(Palworld) 데디케이티드(dedicated, 전용) 멀티 서버를 여는 법을 알아본다 ✔️데디케이트 서버라고 부르는 사람이 많은데, 정확한 명칭은 데디케이티드(dedicated) 서버이다. 게임 이름도 팰월드로 불러주자 (팔월드 아님) 유의사항 리눅스, 도커 기초
git CHANGELOG 자동으로 생성하기 (git-cliff) changelog는 프로젝트의 버전별 변경사항을 정리한 것이다. 이게 없다면 라이브러리나 프로그램 버전을 올릴 때 git diff를 직접 봐야 하는데 매우 불편하기 때문에 changelog를 잘 만들어놔야 한다. 직접 changelog를 작성하는 것은 번거로운데, git-cliff 등의 changelog 생성기를 이용해 자동으로 만들 수 있다. 이 글에서는 git-cliff를 이용해 changelog를 자동으로 만드는 방법을 알아보자 git-cliff * docs:
C++ [C++] 구조적 바인딩 (Structured Bindings) Structured Bindings란? Structured bindings는 C++17에 도입된 기능이다. 이걸 한글로 바꾸면 ‘구조적 바인딩’ 정도가 될 것 같다. 비슷한 말로는 destructuring, unpack, decomposition 등이 있을 것 같다. 나는 언팩이란 단어가 제일 짧아 자주 사용한다. Binds the specified names to subobjects or elements of the initializer. – Structured binding declaration - cppreference structured
linux 리눅스 마운트 된 디스크 ssd인지 hdd인지 확인 방법 리눅스 서버에 마운트 된 디스크가 ssd인지, hdd인지 확인해보자 kernel 2.6.29 이상인 경우 cat /sys/block/sda/queue/rotational 추가 패키지 설치 없이 확인할 수 있다. 1이면 하드디스크, 0이면 SSD다 디스크가 하드웨어에 의해 에뮬레이션 된 논리 장치인 경우(ex. RAID 컨트롤러) 작동하지 않을 수 있다고 한다. lsblk 사용 $ lsblk
[VSCode] Copilot GitHub 계정 로그아웃 방법 GitHub Copilot(깃허브 코파일럿)을 사용하려면 깃헙 계정이 코파일럿 구독을 하고 있는 상태여야 한다 최근 회사계정으로 코파일럿 구독이 되어 개인 계정 구독을 끊었는데, 계정을 변경하려고 extension 설정을 찾아봤는데 없었다 찾아보니 왼쪽 아래 사람 모양 아이콘을 눌러 로그아웃을 해야 했다. 코파일럿 extension만 계정을 변경하는 기능은 현재는 없는 것 같다 Setting sync
yaml [Yaml] 앵커(anchor) yaml에서 반복되는 부분을 줄일 수 있는 기능이 있는데, 바로 앵커(anchor)다. &로 정의하고, *로 사용할 수 있다. 사용 예시 단순 value anchored_content: &anchor_name TEST_STRING other_anchor: *anchor_name 위처럼 단순한 value를 정의하면, 아래 json과 동일하다 { "anchored_content": "TEST_STRING", "
unity [Unity] Runtime Fee 도입 2023년 9월 13일부터, 유니티가 게임당 설치 수에 따른 요금이 적용되는 런타임 요금(Runtime Fee)을 공개했다. 2024년 1월 1일부터 적용된다. 적용대상 * Unity Personal, Unity Plus * 지난 12개월간 게임당 20만 달러 이상의 매출 및 20만 건 이상의 누적 설치횟수를 기록한 게임 * Unity Pro, Unity Enterprise * 지난 12개월간 게임당 100만 달러 이상의
linux 리눅스 Screen 사용법 GNU screen은 스크린 매니저로, 가상의 터미널을 생성하고 프로세스를 실행시킬 수 있다. 오래 걸리는 태스크를 원격 서버에서 실행할 때 중간에 커넥션이 끊기면 태스크도 종료되는데, screen을 사용하면 연결이 끊기더라도 원격 서버에서는 태스크가 계속 실행되고, 나중에 다시 연결할 수도 있다. screen 설치 대부분 리눅스 배포판에선 screen이 설치되어 있다. 맥에도 설치되어 있다. $ screen --version
C [C/C++] func(void)와 func()의 차이 int func(void); int func(); C, C++에서 위처럼 함수 파라미터에 void 또는 비어 있게 할 수 있는데, C, C++ 각각 의미가 다르다. 요약하면, C/C++ 모두 동일하게 함수에서 파라미터를 받지 않길 원한다면 func(void)를 사용하는게 좋다. C T foo( void ); // 선언, foo는 아무 파라미터도 사용하지 않는다 T bar(