본문 바로가기

전체 글

(89)
Development/기타 새로운 취미, npm 패키지 배포 과정 정리 들어가며 요즘 또 새로운 취미가 생겼다. 그건 바로, 정리. 여태 진행해왔던 여러 프로젝트의 코드를 주욱 살펴보면서 반복되는 코드를 어떻게 정리할까를 고민해왔다. 처음에는 GitHub Submodule로 관리해오다가(예전에 이와 관련한 글을 올린 적이 있음), 매번 프로젝트를 생성할 때마다 Submodule을 설정하려니 매우 귀찮음을 느꼈다. 그 귀찮음과 더불어 서브모듈의 코드를 수정해야하는 상황이 빈번하게 발생하니, 결국에는 서브모듈을 사용하지 않게 되었다. 이런 삽질을 계속 해오면서 다음과 같은 생각이 문득 들었다. 아, 그냥 나만의 BoilerPlate를 만들자. 여러 서브모듈을 하나의 프로젝트에 녹이기는 꽤나 머리 아픈 작업이었다. 처음에는 NestJS Monorepo로 BoilerPlate를 만..
Development/기타 NestJS ExecutionContext와 ArgumentsHost 들어가며 Docker로 ElasticSearch, Logstash, Kibana를 이것저것 설정하면서 놀다가 실제 로그를 쌓아줄 서버가 필요해서 바로 NestJS 프로젝트를 생성했다. GitHub/choewy/nestjs-logger-boilerplate 이것저것 설정을 변경해보며 구글링하면서 놀던 중에 StackOverflow에서 재미있는 질문을 보았다. NestJS의 Filter에서 host(ArgumentsHost)를 통해 핸들러 정보를 가져오는 방법에 대해 알려주세요. 약 1년 전, 필자가 실제로 겪었던 상황이었기에 자세한 내용을 안 보고도 질문자가 무엇을 원하고 있는지 충분히 짐작할 수 있었다. 해당 질문에 대한 답은 NestJS 공식 문서에 명확하게 기재되어 있었으며, 주말에 따로 시간내서 공..
Development/기타 MySQL 인덱스(Index) 개인 스터디 실습 및 정리 들어가며 요즘 백엔드 개발자의 필수 역량이자 꽃이라 불리우는 대용량 트래픽 처리에 관련한 공부를 하고 있다. 그 중 데이터베이스 인덱스에 관련한 내용을 공부하였고 직접 테스트해보며 정리한 내용을 작성하였다. 1. 인덱스란? 인덱스는 탐색 범위를 최소화할 수 있는 정렬된 자료구조이다. 먼저, 아래 주어진 숫자들 중에서 8을 찾아보자. [2, 5, 3, 1, 4, 7, 6] [1, 2, 3, 4, 5, 6, 7] 사실 위의 두 배열 중에서 8은 없다. 위의 두 배열 중에서 어느 배열이 8이 없다는 사실을 알기까지 더 짧은 시간이 걸리던가? 조금 더 자세한 예시를 살펴보자. 아래 학생들 중에서 수학 점수가 가장 낮은 학생의 이름를 찾아보자(현재 ID에만 인덱스가 적용되어 있다). ID 이름 국어 수학 영어 1..
Development/기타 MacOS(M1, M2) Docker를 활용한 팔월드(PalWorld) 서버 구축 방법 들어가며 지난 글에 이어 MacOS(M2)에서 Docker로 PalWorld 서버를 구축하는 내용을 정리해보았다. M1, M2 MacOS 뿐만 아니라 ARM Linux도 적용 가능할 것이라 생각한다. 만약, 본인의 Mac이 Intel Chip인 경우 본 글을 볼 필요가 없다. 누군가 벌써 Docker Hub에 Image를 올려놓았고, 해당 이미지를 그대로 활용하였다. DockerHub - nitrog0d/palworld-arm64 1. 사전 준비 Docker로 서버를 실행할 것이기에 당연히 Docker가 설치되어 있어야한다. 아래 링크에서 Docker Desktop for Mac with Apple silicon 버튼을 클릭하여 Docker Desktop을 설치한다. 팔월드의 최소 사양은 아래와 같으며,..
Development/기타 MacBook(M2)으로 팔월드 서버 구축하다가 작성한 CPU 종류와 아키텍처 들어가며 요즘 Steam에 Early Access로 출시된 팔월드(또는 팰월드, Palworld)가 핫한 게임인 듯하다. 디아블로4 출시 당시 game-porting-toolkit을 통해 MacBook(M2)에서 플레이한 기억을 떠올려 팔월드 또한 맥북에서 실행할 수 있지 않을까?라는 생각으로 여러 시도를 하였으나, 전부 수포가 되었다. 결국 오랫동안 잠자고 있던 다른 노트북을 꺼내 Windows 11로 업그레이드 하고 팔월드를 설치 후 플레이하였다. 주변에도 팔월드 플레이어가 하나둘씩 늘어가기 시작했고, 멀티 플레이를 하기 위해 팔월드 서버를 구축하고자 하였다. 맥북에서는 팔월드를 플레이할 수 없으니 맥북으로 팔월드 서버를 구축하고자 Docker Ubuntu22.04 이미지를 활용하여 다양한 시도를 하..
Development/Web R U Dead Yet? - RUDY Attack에 관한 궁금증을 풀어내다. 들어가며 오늘은 지난 글에서 언급했던 RUDY(R U Dead Yet?) 공격에 대해서 공부하고, 직접 실습해보면서 얻게된 정보를 정리하고자 한다. 1. DoS RUDY 공격 또한 DoS 공격 중 하나이므로 DoS에 대한 간단한 내용부터 알아보겠다. DoS는 Denial of Service의 약자로, 서비스 거부 공격이라는 의미이다. 이는 공격 대상 시스템 또는 서버에 과도한 부하를 발생시켜 다른 이들이 서비스를 이용하지 못하도록 방해하는 공격 기법이다. DoS 공격에는 여러 공격 기법이 있으며, 알아본 내용에 따르면 크게 두 가지 성격으로 분류할 수 있다. 1.1. DDoS 가장 잘 알려진 DDoS(Distributed Denial of Service, 분산 서비스 거부 공격)가 있다. 이는 서비스 중..
Development/기타 Tistory 본문 글 목차 자동 생성 기능 구현 들어가며 예전부터 해야지... 해야지... 했던 Tistory 목차 생성 기능을 구현했다. 기능 구현 난이도는 매우 쉬움이었으나, 귀차니즘 + 외주 프로젝트 개발로 인해 계속 미루어두고 있었다. 외주 프로젝트 개발이 잘 마무리되어 후기를 작성하다가 목차 생성 기능 구현이 번뜩 떠올라 구현 후 글을 작성하였다. 1. 개요 목차 생성 기능은 매우 간단하다. 해당 제목이 포함된 글 본문 태그를 찾아서 모든 제목 태그를 파싱한 후 새로운 목차 태그를 생성해서 넣어주기만 하면 되기 때문이다. Tistory를 포함한 대부분의 웹 페이지 본문 글에는 제목이 있으며, 이 제목은 주로 ~ 태그로 구성되어 있다. 이를 확인하려면 제목처럼 보이는 텍스트에 마우스를 올려놓고 우클릭하여 검사를 누르면 브라우저 개발자 도구에 해..
Development/기타 MySQL 8.0 Replication (2) - NestJS + TypeORM Multi Connection 들어가며 지난글에 이어서 이번에는 MySQL Replication을 통해 NestJS TypeORM에서 Multi Connection으로 관리하는 방법에 대해서 정리해보겠다. 1. 개요 실습 주제는 간단한 게시판 API 서버이며, 모듈 구조는 다음과 같다. classDiagram AppModule
Development/기타 Tistory에서 Markdown 작성 시 Mermaid 적용 시키는 방법 들어가며 필자는 주로 Markdown으로 글을 작성한다. 그러던 중 몇개월 전에 Mermaid라는 것을 알게 되었는데, 이를 티스토리에도 적용시키고자 한다. 1. 개요 Mermaid는 코드로 차트를 그릴 수 있도록 해주는 오픈소스이다. 공식 문서가 매우 친절하게 작성되어 있기에 Mermaid에 대해서 자세히 설명하진 않겠다. 관심 있다면 Mermaid 링크를 클릭해서 보시라. Markdown으로 코드를 작성할 때, 다음과 같이 mermaid라는 언어로 지정하면 차트를 그릴 수 있다. Markdown에서 작성한 mermaid 코드 ```mermaid pie title Pets adopted by volunteers "Dogs" : 386 "Cats" : 85 "Rats" : 15 ``` 위의 코드로 나타난..
Development/기타 MySQL 8.0 Replication (1) - Docker를 활용한 DBMS 서버 구축 들어가며 현재 회사에서는 Replication을 사용하지 않고, 단일 커넥션 풀로 관리하고 있다. 그러다보니, 동시 많은 요청이 들어오면(실제로 그리 많지도 않고, 약 100건 정도의 동시 요청이다) 데이터 조회 API 요청 시 응답 속도가 느려지는 이슈가 발생한다. 이를 해결하기 위해 DB 분산 처리에 대한 내용을 검색해 보던 중 MySQL Replication을 알게되었다. 이에 대해 공부하고 NestJS에 적용시켜 본 내용을 정리하여 작성하였다. 1. 개요 Replication은 복제를 의미하며, DBMS를 2대 이상으로 나누어 데이터를 저장하는 방식을 뜻한다. 이를 통해 실시간 Data 백업과 여러 대의 DB 분산 처리를 할 수 있다. 자세히 설명하기 전에 구조 먼저 알아보자. 1.1. 기본 구성..