Joe Brothers

We are an indie development team

logstash

Logstash file input inode 재사용 문제 및 해결방법

Logstash의 File input plugin을 사용해 프로듀싱할 때, 이미 프로듀싱된 로그가 다시 프로듀싱되는 문제가 종종 발생했다. 아카이빙용으로 프로듀싱하는 경우, 같은 로그가 두번 프로듀싱 되더라도 큰 문제가 없다. 하지만, 긴밀하게 연결된 파이프라인에 멱등성이 보장되지 않는 액션이 다시 프로듀싱 된다면 문제가 발생할 것이다. 이 글에서는 해당 현상의 원인과 해결 방법을 알아보자. Logstash file
6 min read
docker

도커 크립토재킹 방지하기

로컬에서 테스트한다고 도커로 Redis 컨테이너를 띄워놨는데, 이상한 키가 들어있길래 monitor를 켜서 확인해보니, 실제로 외부에서 이런식으로 FLUSHALL + SET이 되었다. 보안팀에서 내 PC에서 의심스러운 IP와 통신이 발생한 이력이 있다고 연락이 왔는데, public IP가 부여된 PC에 패스워드 없이, 모든 호스트 대상으로 레디스 컨테이너가 떠 있는게 화근이었다. New Kiss-a-dog Cryptojacking Campaign Targets Docker and
2 min read
PyPI 패키징 및 배포 가이드
Python Featured

PyPI 패키징 및 배포 가이드

파이썬 패키지를 다른 개발자가 pip를 사용해 받아갈 수 있도록 pypi에 업로드 하는 과정을 패키징 및 배포라고 한다. 파이썬 패키지를 빌드하고 pypi에 배포하는 방법을 알아보자. 준비사항 * pypi.org에 가입하기 로컬 파이썬 패키징 Packaging Python Projects - Python Packaging User GuidePython Packaging User Guide 이번 글에서는 최대한 간단한 pure python 패키지를 빌드하는
6 min read
ghost 블로그에 giscus 댓글 추가하는 법
ghost

ghost 블로그에 giscus 댓글 추가하는 법

ghost는 기본적으로 멤버 전용 댓글 시스템만 있다. 그래서 disqus, giscus, utterrances 등 다른 댓글 서비스를 이용해야 ghost 멤버 시스템과 별개로 댓글을 달도록 할 수 있다. ghost 호스팅 서비스를 사용할 때 giscus를 이용해 템플릿 파일(post.hbs 등)을 수정하지 않고 댓글을 추가해보는 방법을 알아보자. giscus 소개 giscus는 깃허브 리파지토리의 디스커션(
3 min read
팰월드 데디케이티드 서버 오라클 클라우드 인스턴스 설치 방법
palworld Featured

팰월드 데디케이티드 서버 설치 방법 (오라클 클라우드)

오라클 클라우드에서 상시 무료 프리티어로 4코어 + 24GB ARM 서버를 제공해서 게임 서버를 무난하게 돌릴 수 있다 이번 글에서는 오라클 클라우드에서 팰월드(Palworld) 데디케이티드(dedicated, 전용) 멀티 서버를 여는 법을 알아본다 ✔️데디케이트 서버라고 부르는 사람이 많은데, 정확한 명칭은 데디케이티드(dedicated) 서버이다. 게임 이름도 팰월드로 불러주자 (팔월드 아님) 유의사항 리눅스, 도커 기초
9 min read
git

CHANGELOG 자동으로 생성하기 (git-cliff)

changelog는 프로젝트의 버전별 변경사항을 정리한 것이다. 이게 없다면 라이브러리나 프로그램 버전을 올릴 때 git diff를 직접 봐야 하는데 매우 불편하기 때문에 changelog를 잘 만들어놔야 한다. 직접 changelog를 작성하는 것은 번거로운데, git-cliff 등의 changelog 생성기를 이용해 자동으로 만들 수 있다. 이 글에서는 git-cliff를 이용해 changelog를 자동으로 만드는 방법을 알아보자 git-cliff * docs:
6 min read
여러대의 컴퓨터와 주변기기 그림
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
4 min read
하드디스크와 SSD 그림
linux

리눅스 마운트 된 디스크 ssd인지 hdd인지 확인 방법

리눅스 서버에 마운트 된 디스크가 ssd인지, hdd인지 확인해보자 kernel 2.6.29 이상인 경우 cat /sys/block/sda/queue/rotational 추가 패키지 설치 없이 확인할 수 있다. 1이면 하드디스크, 0이면 SSD다 디스크가 하드웨어에 의해 에뮬레이션 된 논리 장치인 경우(ex. RAID 컨트롤러) 작동하지 않을 수 있다고 한다. lsblk 사용 $ lsblk
1 min read

[VSCode] Copilot GitHub 계정 로그아웃 방법

GitHub Copilot(깃허브 코파일럿)을 사용하려면 깃헙 계정이 코파일럿 구독을 하고 있는 상태여야 한다 최근 회사계정으로 코파일럿 구독이 되어 개인 계정 구독을 끊었는데, 계정을 변경하려고 extension 설정을 찾아봤는데 없었다 찾아보니 왼쪽 아래 사람 모양 아이콘을 눌러 로그아웃을 해야 했다. 코파일럿 extension만 계정을 변경하는 기능은 현재는 없는 것 같다 Setting sync
1 min read
여러개의 모니터 앞에 앉아 있는 프로그래머의 뒷모습
linux

리눅스 Screen 사용법

GNU screen은 스크린 매니저로, 가상의 터미널을 생성하고 프로세스를 실행시킬 수 있다. 오래 걸리는 태스크를 원격 서버에서 실행할 때 중간에 커넥션이 끊기면 태스크도 종료되는데, screen을 사용하면 연결이 끊기더라도 원격 서버에서는 태스크가 계속 실행되고, 나중에 다시 연결할 수도 있다. screen 설치 대부분 리눅스 배포판에선 screen이 설치되어 있다. 맥에도 설치되어 있다. $ screen --version
3 min read
[Unity, C#] Collision, Trigger 일어나는 조건
unity

[Unity, C#] Collision, Trigger 일어나는 조건

유니티에서 Collision(콜리전, 충돌)과 Trigger(트리거)는 물리적 충돌 처리와 관련된 두 가지 주요 이벤트 타입이다. 각각의 특징과 사용 방법은 다음과 같다. 1. Collision (충돌) 1. 두 개의 collider(콜라이더)가 서로 물리적으로 충돌하는 상태를 의미한다. 2. 충돌 이벤트가 발생할 때, 물리적 힘이 작용하고 물체들은 서로 밀려난다. 3. 적과
2 min read
Prometheus Operator, Memcached
prometheus

Prometheus operator를 이용한 Memcached 지표 수집 예제

이번 글에서는 prometheus에 대해 가볍게 소개하고, Prometheus operator를 이용해 memcached의 지표를 수집하는 예제를 만들어보겠다. Prometheus 소개 프로메테우스(Prometheus)는 모니터링 시스템으로, 메트릭 정보를 주기적으로 수집해 시계열 DB(TSDB, TimeSeries DB)에 저장하고, PromQL(Query Language)을 이용한 시각화 및 추출을 지원한다. 기본 구성은 이렇게 생겼고, 기본적으로는 메트릭을 긁어가는(scraping) 방식으로
7 min read
이삭을 줍는 사람들
unity

[Unity, C#] 제일 가까운 아이템 줍기

유니티에서 아이템 줍기 기능을 구현하려면, 1) 플레이어가 아이템을 인식할 조건을 추가하고 2) 해당 조건을 만족할 때 아이템을 줍는 기능을 구현하면 된다. 1. 플레이어의 자식으로 빈 GameObject를 추가한다. 2. 추가한 GameObject의 컴포넌트로 Circle Collider(콜라이더)를 추가해준다. 해당 Collider의 Is Trigger를 체크해준다. 3. 추가한 GameObject의 컴포넌트로 스크립트를 추가해준다. (OnTriggerEnter) 💡 Trigger? GameObject끼리
2 min read
jenkins

[Jenkins] ws-cleanup_{timestamp} 폴더 지우기

Jenkins(젠킨스) slave worker 용량이 부족해 Offline 상태가 되었는데, 확인해보니 ws-cleanup_{timestamp} 형식의 폴더가 계속 쌓여서 용량이 가득 찬 것이었다 Workspace Cleanup 이라는 플러그인을 쓰고 있는데, 과거 버전에 삭제가 제대로 안되는 버그가 있다고 한다 (비슷한 현상이 나타나는 유저의 질문글: https://stackoverflow.com/q/44364044/4295499) 일단 아래처럼 crontab을 추가하는 식으로
1 min read
담장과 고양이 그림
unity

[Unity, C#] Raycast를 사용해 벽 통과 방지하기

유니티로 게임 개발을 하다 보면, 플레이어와 벽에 모두 collider(콜라이더)를 넣었음에도 불구하고 플레이어를 벽으로 계속 돌진시키면 플레이어가 벽을 통과하는 현상이 발생한다. 이는 Transform.Translate가 이동 전 위치와 이동 후 위치만을 고려하고, 그 사이에 collider가 있는지는 고려하지 않기 때문이다. 아래 그림처럼 A가 플레이어의 이동 전 위치, B가 플레이어의 이동 후
3 min read
종이비행기 날리는 로봇
telegram

텔레그램으로 공탐지수 봇 만들기

BotFather(https://t.me/botfather)를 이용해 텔레그램 봇을 쉽게 만들 수 있다. 공탐지수를 매일 메시지로 보내주는 봇을 만들어보자 BotFather 친구추가 및 봇 추가 만드는건 쉬우니 넘어간다. HTTP API 토큰은 유출되면 안되니 조심하자. bot api는 https://core.telegram.org/bots/api 여기서 확인할 수 있고, 이중에서 sendMessage를 이용해보자 # 기본 형식
4 min read
순찰하는 경찰 그림
unity

[Unity, C#] 몹을 랜덤한 경로로 순찰(patrol)시키기

토이 프로젝트로 좀비 TPS 게임을 만들고 있다. 순찰(patrol)이란 몹이 일정한 지점들을 돌아다니는 것을 이야기한다. 좀비 게임을 생각해보면, 좀비가 가만히 있기만(idle) 하면 난이도가 너무 쉬울 것이다. 좀비가 idle/patrol 상태에 있다가 플레이어를 발견하면 추적(chase) 모드로 전환되어 플레이어를 쫓아간다. 이때 빠르게 도망가지 못하고 좀비와의 거리가 일정 값 이하가
3 min read