분류 전체보기

썸네일하고 본 글의 주제는 관련이 없습니다. '◡'✿ 나는 현업에 애플리케이션 구조를 설계할 때 가장 흔하면서 단순한 레이어드 아키텍처 Layerd Architecture를 많이 사용해 왔다.최근에 MSA Microservice Architecture를 공부하면서 접한 헥사고날 아키텍처 Hexagonal Architecture 패턴을 실무에 적용해 보면서 꽤나 긍정적인 경험을 했다. 이번 글에서는 헥사고날 아키텍처를 간단히 소개하면서 작고 소중한 내 작품에 실제로 적용하고 느낀 레이어드 아키텍처와의 차이점, 그리고 장점을 적어보려고 한다.  1. 헥사고날 아키텍처란 Hexagonal Architecture 헥사고날 아키텍처는 Alistair Cockburn(애자일 방법론을 제시한 인물 중 1인)이 제한한..
Node.js 환경에서 개발을 진행할 때, 비동기 작업을 동시에 진행하고 싶다면 먼저 떠올리는 것이 "Promise.all()" 일 것이다.Promise.all()은 Node.js 환경에서 다수의 비동기 작업을 병렬로 처리하고자 할 때 가장 자주 사용되는 도구 중 하나이다. 실제 서비스 코드에서도 외부 API 호출, 데이터베이스 조회, 파일 시스템 접근 등을 병렬로 처리하기 위해 Promise.all()이 널리 사용되니다. Promise에 대해서는 자세하게 다루지 않겠습니다. 하지만 아래와 같은 의문을 가져본 적 있을 것 같다. "Promise.all()" 이니까 비동기 작업이 진짜로 병렬로 실행되는 건가? Node.js 는 싱글 스레드로 동작을 하는데, 어떻게 "병렬"이 존재할까? 나도 Promise에..
기본적으로 검색 쿼리를 작성할 때, 기본적을 와일드카드를 사용하여 LIKE 검색을 이용하는 것을 떠올릴 것이다. 이 방법은 가장 기본적이며 사용하기 쉬워 어렵지 않게 적용을 할 수 있으나, 데이터가 많아지면 무조건 성능 이슈를 맞이하게 된다. LIKE를 사용할 때 크게 고려해야 할 부분은 Index 설정에 대한 고려와 와일드카드의 쓰임 그리고 풀스켄에 대한 고려 등이 있을 것 같다. 이에 대한 대안이 될 수 있는 기능으로 MySQL의 Full-Text Search 기능이 있으며, 이 기능에 대한 간단한 배경, 검색 메커니즘, 활용법 등에 대한 내용을 다루려고 한다.# Full-Text Search란?Full-Text Search는 데이터베이스에서 텍스트 데이터를 검색하기 위한 기술로, 특정 키워드나 문장..
이전 글 [Node.js] Node.js의 가비지 컬렉션 (Garbage Collection, GC) 1 _ V8 엔진의 메모리 구조 (Stack과 Heep)사내 서비스 개선 보고서 중 Node.js 기반으로 구동하고 있는 애플리케이션의 안정화에 대한 내용을 보게 되었다. 해당 서비스는 끊김 현상이 지속적으로 있었고 이는 곧 연결 재시도 폭주로 인jangbageum.tistory.com  이전 글에서는 V8 엔진과 V8 엔진의 메모리 구조에 대해 간단하게 알아보았다.이러한 메모리 구조에서 동적인 데이터를 어떻게 관리하는지 가비지 컬렉션을 통해 알아보려고 한다. # 가지비 컬렉션이란가비지 컬렉션 (Garbage Collection, GC)은 자동 메모리 관리의 한 형태이다. 이는 Heap 영역에서 동적으로..
사내 서비스 개선 보고서 중 Node.js 기반으로 구동하고 있는 애플리케이션의 안정화에 대한 내용을 보게 되었다. 해당 서비스는 끊김 현상이 지속적으로 있었고 이는 곧 연결 재시도 폭주로 인해 장애 전파, 트래픽 유실 등의 문제를 야기하였다. 이 방법을  해결하기 위해서 스케일업, 스케일아웃을 진행하였으나 고질적인 프로세스 중단 문제는 해결되지 않았고 민감도를 낮추지 못했다.이 보고서에서는 Node.js 런타임 상의 메모리 사용에 대한 내용을 다루어 해결하려는 시도가 있었으며 이 과정에서 "--max-old-space-size 옵션"에 대한 내용이 등장한다. 단순히 "old space가 뭘까? 그럼 new space도 있나? 껄껄 (진짜 있었다.)" 하는 궁금증과 Node.js를 주로 다루고 있는 나로..
얼마 전에 관리하는 애플리케이션에서 RabbitMQ와 Connection을 유지하고 관리하는 로직이 잘못되어 MQ의 Connection Port를 과도하게 점유하는 이슈와 부딪히게 되었다. 이러한 현상은 의도한 것이 아니었고 Connection 관리는 RabbitMQ 동작 흐름과는 큰 관계가 있는 것은 아니었지만 기본적인 해상도를 높이기 위해 복습 차원에서 RabbitMQ에 대한 기본 지식을 정리하려고 한다.  오늘의 주제는 RabbitMQ에서 메시지를 라우팅 하기 위한 논리적인 개념인 Exchange이다. 이전에 RabbitMQ에 대한 소개를 간단하게 짚고 가려고 한다.  RabbitMQ란? RabbitMQ는 메시지 브로커으로, 애플리케이션 간에 비동기 메시지를 전달해 주는 역할을 한다. 오픈 소스이며..