분류 전체보기 174

어떤 메시지 큐를 선택할까? (Kafka · RabbitMQ · Redis)

최근에 비동기 처리를 추가할 일이 생겼는데, 막상 시작하려니“그래서 나는 어떤 큐를 써야 하지?”라는 고민이 제일 먼저 들었습니다. Kafka도 흔히 큐처럼 사용되고, RabbitMQ는 이름부터 Message Queue이고, Redis로도 큐를 만들어 쓸 수 있다 보니 더 헷갈리더라고요.정리해 보니 결국 중요한 건 이름이 아니라, 내가 원하는 동작이었습니다.메시지를 다시 처리해야 하는지, 작업을 어떻게 나눌 건지, 유실을 어디까지 허용할 수 있는지, 운영 복잡도는 감당 가능한지 같은 부분이 중요했습니다.그래서 이 글에서는 먼저 선택해 보고(선택표) → 기준을 세운 뒤(질문) → 각 큐를 이해하는(설명) 순서로 정리해보려 합니다. 먼저 선택표부터상황/요구추천이벤트 로그, CDC, 재처리·재생 가능해야 ..

Architecture 2025.12.17

애매한 HTTP Method, PATCH 메서드

REST API를 설계하다 보면 잠깐 멈칫하게 되는 메서드가 있는 것 같습니다.바로 PATCH인데요.👀GET/POST/PUT/DELETE와 달리 “부분 수정”이라는 설명만으로는 실제 사용 기준이 모호하고, 여러 표준이 공존해 선택지가 많습니다.이 글에서는 PATCH가 왜 애매하게 느껴지는지, PUT과 무엇이 다른지, 그리고 실무에서 어떤 방식으로 선택해 사용했는지까지 정리해 보려고 합니다. PATCH가 애매한 이유PATCH는 HTTP/1.1(RFC 5789)에 정의된 부분 수정(partial update) 용 메서드입니다.“부분 수정”이라는 말이 열려 있어 다음과 같은 질문이 생깁니다.어떤 필드까지 수정 가능해야 하는가?없는 필드가 오면 어떻게 처리해야 하는가? null은 변경인가 삭제인가?PUT과의..

Web/HTTP 2025.12.12

프록시 DB란? 읽기·쓰기 분리

대규모 서비스를 운영하다 보면, 트래픽이 늘어날수록 DB 부하가 병목이 되는 순간이 찾아옵니다.트래픽 스파이크나 정기 리포트 배치처럼 단순 조회성 쿼리가 몰리면 “운영 데이터베이스의 안정성”이 흔들리기 시작하죠.이럴 때 자주 등장하는 해결책 중 하나가 바로 프록시 DB(Proxy DB) 입니다.단순히 DB 앞단에 장비를 하나 더 세우는 것이 아니라, 읽기/쓰기 특성을 분리하고 운영 전략을 명시적으로 가져가겠다는 선언에 가깝습니다.이번 글에서는 프록시 DB의 기본 개념부터, 운영 중 겪는 실전 이슈, 그리고 개발자 입장에서의 사용 패턴까지 정리해보려 합니다. 📖 프록시 DB란 무엇일까?말 그대로 본 DB(Primary) 앞단에 서서 요청을 중계하는 “중간 계층”입니다. 애플리케이션은 Proxy 하나만..

Data/DataBase 2025.11.19

nGrinder로 시작하는 부하 테스트 가이드

JMeter는 다양한 부하 테스트를 수행할 수 있는 강력한 도구지만, 팀 단위 운영이나 리포트 공유 측면에서는 한계가 있습니다.이런 불편함을 해소하기 위해 등장한 도구가 바로 nGrinder입니다. nGrinder는 분산 부하 테스트, 웹 기반 시나리오 관리, 자동 리포트 생성 등 팀 단위 테스트 환경에 필요한 기능을 기본으로 제공합니다.특히 JMeter에서 직접 설정해야 했던 분산 실행이나 리포팅 작업을 nGrinder에서는 웹 UI에서 클릭 몇 번으로 간단히 처리할 수 있죠. 🤔이번 글에서는 JMeter에서는 다소 번거로웠던 부분들을 nGrinder에서는 어떻게 더 쉽게 해결할 수 있는지 함께 살펴보겠습니다. nGrinder란?nGrinder는 네이버에서 진행한 오픈 소스 프로젝트로 서버의 부하 테..

개발끄적 2025.10.20

Apache JMeter: 설치부터 부하 테스트까지

안정적이고 확장 가능한 서비스를 운영하기 위해서는 기능 구현뿐 아니라 성능 및 부하 테스트가 필수적입니다.특히 API가 동시에 많은 요청을 받을 때 잘 버텨주는지 확인하지 않으면, 실제 운영 환경에서 큰 장애로 이어질 수 있죠.대표적인 오픈소스 부하 테스트 도구로는 Apache JMeter와 nGrinder가 있으며, 본 글에서는 상대적으로 단순하고 접근성이 높은 JMeter를 먼저 살펴보고 간단한 실습을 진행하겠습니다. 🔍 JMeter란?Apache JMeter는 아파치 소프트웨어 재단에서 개발한 오픈소스 부하·성능 테스트 툴입니다.웹 애플리케이션뿐 아니라 다양한 네트워크 서비스의 응답 성능, 처리량, 안정성을 점검할 수 있도록 설계되어 있어요.원래는 웹 애플리케이션 테스트용으로 시작했지만, 지금..

개발끄적 2025.10.04

공식 문서 기반으로 이해하는 n8n 핵심 개념

🐙 n8n이란?n8n은 다양한 서비스와 시스템을 서로 연결해 주는 워크플로우 자동화 툴입니다.쉽게 말해, “특정 이벤트가 발생하면 정해둔 작업들을 순서대로 실행해 주는 자동화 엔진”이에요.대표적인 SaaS 자동화 툴로는 Zapier가 있지만, n8n은 몇 가지 큰 차별점을 가지고 있습니다.👉 개발자 친화적인 노코드/로우코드 자동화 플랫폼 🔑 n8n의 특징오픈소스 & 셀프호스팅Zapier, Make 같은 툴은 클라우드 서비스 기반이라 사용량이 늘어나면 요금이 빠르게 올라갑니다.n8n은 완전히 오픈소스이고, 직접 서버(Docker, Kubernetes 등)에 설치해서 운영할 수 있어 비용과 보안 측면에서 자유도가 높습니다.Node.js 기반 아키텍처n8n은 Node.js 위에서 돌아가며, JavaScr..

AI/N8N 2025.08.30

PostgreSQL 시작하기: Docker 설치부터 DBeaver로 데이터 다루기

🐘 PostgreSQL이란?PostgreSQL은 데이터를 안전하게 저장하고 꺼내 쓰게 해주는 데이터베이스(DB)입니다.하지만 단순히 데이터를 넣고 빼는 수준을 넘어, 복잡한 데이터까지 똑똑하게 다룰 수 있는 고급 데이터베이스라고 볼 수 있습니다.즉, PostgreSQL은 일반적인 관계형 데이터베이스(RDBMS) 가 가진 기능을 모두 제공하면서도,그 이상으로 더 다양한 기능과 확장성을 지원합니다. ✅ PostgreSQL의 특징1. 더 다양한 데이터 타입 지원일반적인 RDBMS(MySQL 등)는 INT, VARCHAR, DATE 같은 기본 타입 위주로 데이터를 저장합니다.반면 PostgreSQL은 훨씬 다양한 타입을 기본으로 지원합니다.JSON / JSONB → JSON 데이터를 효율적으로 저장하고 검색A..

Data/PostgreSQL 2025.08.24

방화벽 인바운드(Inbound), 아웃바운드(Outbound) 이해하기

👀 방화벽이란?서비스를 운영하다 보면 항상 고민하게 되는 질문이 하나 있습니다. "우리 서버는 외부 공격으로부터 안전할까?"이 질문에 가장 기본적이면서도 강력한 답을 주는 것이 바로 방화벽(Firewall)입니다.방화벽은 네트워크의 문지기 역할을 하며, 외부에서 들어오는 트래픽과 내부에서 나가는 트래픽을 감시하고 필터링합니다.쉽게 말해, 방화벽은 “네트워크의 문지기”입니다.어떤 손님(트래픽)을 들이고, 어떤 손님은 돌려보낼지를 규칙(Rule)에 따라 결정됩니다!😀 인바운드(Inbound) vs 아웃바운드(Outbound)두 방화벽 규칙은 트래픽이 오가는 방향을 기준으로 두 가지로 나뉩니다.구분방향예시비유인바운드외부 → 내부사용자가 서버 웹페이지 접속, SSH 접속 요청집 문을 두드리는 손님아웃바운..

Infra 2025.08.17

MapStruct와 ObjectMapper, 언제 어떤 걸 써야 할까?

DTO ↔ Entity 변환, 여러분은 어떻게 처리하고 계신가요?🤔 많은 개발자들이 처음에는 직접 생성자나 Builder를 사용해서 매핑합니다.필드가 몇 개 없을 때는 괜찮지만, 점점 DTO/Entity 구조가 복잡해지고, 중복 코드가 많아지면서 유지보수가 어려워지는 것 같습니다.이럴 때 보통 두 가지 대안이 있습니다.ObjectMapper: 빠르고 간편하게 쓸 수 있는 JSON 매핑 도구MapStruct: 컴파일 타임에 타입 안전하게 매핑 코드를 생성해 주는 프레임워크이번 글에서는 두 방식의 차이점과 실무에서 어떤 상황에 어떤 방식을 선택하는 것이 좋은지 정리해 보겠습니다. ObjectMapper란?ObjectMapper는 Jackson 라이브러리에서 제공하는 객체-JSON 변환 도구입니다.(사실 ..

Backend/Java 2025.07.23

[Java] Collectors.toList() vs Stream.toList()

Java에서 Stream API를 사용할 때 Collectors.toList()는 오랫동안 익숙하게 사용해온 방식이었습니다.그런데 최근 IntelliJ에서 Stream.toList() 사용을 권장하는 안내 메시지를 보고 궁금증이 생겼습니다. 🤔이번 글에서는 두 방식의 차이점과 언제 어떤 걸 선택해야 하는지 명확히 정리해보겠습니다. Collectors.toList() → 변경 가능한 리스트 (mutable)List list = Stream.of("A", "B", "C").collect(Collectors.toList());list.add("D"); // 가능! 리스트에 값 추가됨Collectors.toList()는 내부적으로 new ArrayList()를 사용해 리스트를 생성합니다.그래서 리스트에 값..

Backend/Java 2025.07.09