목록분류 전체보기 (213)
hmk run dev

안녕하세요! 지난 포스팅에서 도커를 이용한 n8n 셀프호스팅 설정 방법에 대해 알아보았는데요. 이번에는 Cloudflare 터널(Cloudflare Tunnel)을 이용하여 더 안전하고 간편하게 n8n에 접근하는 방법을 알아보겠습니다.목차Cloudflare 터널이란?Cloudflare 터널의 장점사전 준비 사항Cloudflare 터널 설정 단계도커 자동 실행 설정문제 해결 및 팁마치며 Cloudflare 터널이란?Cloudflare 터널은 공개 IP 주소 없이도 로컬 서버를 인터넷에 안전하게 노출시킬 수 있는 서비스입니다. 기존 방식에서는 방화벽 포트 개방, IP 화이트리스팅, 복잡한 VPN 설정 등이 필요했지만, Cloudflare 터널을 사용하면 이러한 설정 없이도 외부에서 로컬 서버에 접근할 수 있..

최근 n8n을 셀프호스팅으로 구축하면서 겪은 경험을 공유하고자 합니다. 이 글에서는 도커를 이용한 n8n 설치부터 웹훅 설정, 그리고 가비아에서 구매한 도메인을 Cloudflare에 연결하는 과정까지 상세하게 설명하겠습니다.목차n8n이란?도커를 이용한 n8n 셀프호스팅 구축웹훅 설정을 위한 도메인 연결가비아 도메인을 Cloudflare로 연결하기마치며n8n이란? n8n(노드이트노드)은 워크플로우 자동화 도구로, Zapier나 IFTTT와 같은 서비스와 유사하지만 오픈소스이며 셀프호스팅이 가능합니다. API 연동, 데이터 처리, 자동화 작업 등을 노드 기반 인터페이스를 통해 쉽게 구현할 수 있습니다.주요 특징:직관적인 노드 기반 워크플로우 에디터200개 이상의 서비스와 연동 가능셀프호스팅 지원으로 데이터 ..

모노레포에서 린트 작업의 처리 속도를 크게 향상시키기 위해, 동기 방식에서 비동기 방식으로 전환한 경험을 공유합니다. Node.js의 이벤트 루프와 비동기 처리의 원리를 이해하면 빌드 파이프라인의 효율성을 대폭 개선할 수 있습니다. 왜 린트 시간을 개선해야 했는가? 모노레포 프로젝트가 커질수록 린트 작업은 점점 더 많은 시간을 소요합니다. 특히 CI/CD 파이프라인에서 모든 패키지를 일일이 검사하는 과정은 개발 생산성을 저하시키는 주요 요인이 됩니다. 기존에는 변경된 패키지마다 린트 작업을 순차적으로(동기적으로) 실행했으나, 이 방식은 패키지 수가 늘어날수록 선형적으로 시간이 증가하는 문제가 있었습니다.해결 접근법: 비동기 병렬 처리코드를 분석해보면, 기존에는 execSync를 사용해 패키지별 린트 작업..

오늘은 프로그래밍에서 매우 중요한 개념인 블록(Block)과 논블록(Non-block), 그리고 동기(Synchronous)와 비동기(Asynchronous) 처리에 대해 자세히 알아보겠습니다. 이 개념들은 종종 혼동되기 쉽지만, 효율적인 프로그래밍을 위해 반드시 이해해야 하는 핵심 요소입니다.개념 정의와 차이점블록 vs 논블록 블록(Block) 처리란:특정 작업이 완료될 때까지 다음 작업으로 진행하지 않고 대기하는 방식프로그램이 해당 작업에 "차단(blocked)"되어 있는 상태작업이 끝날 때까지 제어권을 돌려받지 못함논블록(Non-block) 처리란:작업 완료 여부와 상관없이 다음 작업으로 즉시 진행하는 방식프로그램이 "차단되지 않고(non-blocked)" 계속 실행됨작업을 요청한 후 즉시 제어권을..

이직 후 6개월이 넘는 시간 동안, 저는 통신 도메인 회사의 PMF(Product Market Fit)를 찾는 팀에 소속되어 있습니다. 아직 큰 성과를 내지 못했지만, 30조 시장에서 아무도 도전하지 않았던 통신 시장의 문제를 해결한다는 설렘을 가지고 계속해서 목표를 향해 나아가고 있습니다. 100% 확신을 갖기는 어렵지만, 언젠가 모요가 통신시장의 문제를 해결하고 PMF를 찾을 것이라는 믿음을 가지고 일하는 중 입니다~!이 확신은 제가 직접 경험한 불편함, 필드리서치, 사용자 테스트, 그리고 주변 사람들이 겪고 있는 명확한 문제들에 기반합니다. 특히 이러한 불편함을 해결하고자 하는 플레이어가 저희가 유일하다는 점(물론 비판적 시각에서 지금까지 이 문제가 해결되지 않은 이유가 있을 수도 있다는 생각도 합..

웹 애플리케이션 개발 중 예상치 못한 에러를 마주칠 때가 있습니다. 그중에서도 특히 외부 API와 연동할 때 발생하는 문제는 디버깅이 어려울 수 있습니다. 최근 저희 팀은 카카오 로그인 구현 과정에서 긴 URL로 인해 발생하는 404 에러와 Nginx 오류 화면을 마주쳤습니다. 이 글에서는 그 원인과 해결 방안, 그리고 이와 관련된 개발 시 고려해야 할 사항들을 공유하고자 합니다.문제 상황카카오 로그인 구현 시 kauth.kakao.com/oauth/authorize로 로그인 요청을 보내는 과정에서 URL이 너무 길 경우 404 에러 및 Nginx 오류 화면이 나타나는 문제가 발생했습니다. 특히 UTM 파라미터(마케팅 추적 코드)와 같은 추가 매개변수가 포함된 경우에 이런 현상이 두드러졌습니다.문제의 예..

Next.js 14의 App Router 환경에서는 서버 사이드 렌더링(SSR), 클라이언트 사이드 렌더링(CSR), 정적 생성(SSG), ISR 등 다양한 렌더링 방식을 상황에 맞게 조합할 수 있다. 특히 App Router는 서버 컴포넌트와 클라이언트 컴포넌트를 구분하고, 내장 fetch의 캐시 전략과 메타데이터 설정이 유연해지면서 SEO 대응 방식도 훨씬 정교해졌다. 그중 하나가 searchParams 기반 SSR이다. 기존의 다이나믹 라우트 방식과 달리, URL의 query string을 기반으로 서버에서 데이터를 받아 페이지를 렌더링하는 방식이다. 이 방식은 필터형 상품 페이지나 SKU 조합 페이지에서 매우 유용하다. 하지만 SEO 관점에서 보면 몇 가지 주의할 점이 있다. 렌더링 방식별 SEO..

Next.js는 다양한 렌더링 방식을 제공합니다. 정적 생성(SSG), 서버 사이드 렌더링(SSR), 클라이언트 사이드 렌더링(CSR), 그리고 점진적 정적 생성(ISR)까지 다양한 전략이 가능하죠. 버전이 14에 도달하면서 App Router가 정식화되었고, fetch() 내장, cache, revalidate, searchParams, server/client component 분리 등 보다 유연한 방식으로 구성할 수 있게 되었습니다.하지만 기능이 다양해진 만큼 "어떤 상황에서 어떤 렌더링 방식을 선택해야 하는지"는 더욱 고민되는 지점입니다. 특히 실무에서 많이 마주치는 SKU 기반 조합 페이지나, 필터형 검색 결과 페이지 등에서는 의사결정이 쉽지 않습니다.이번 글에서는 실제 사례를 중심으로, 어떤 ..
Next.js 프로젝트에서 백엔드 API와 통신할 때, 우리는 종종 브라우저 또는 서버(SSR/API 라우트 등)에서 외부 서버로 HTTP 요청을 보냅니다. 이때 성능 최적화를 고려한다면 "keep-alive" 설정을 살펴볼 필요가 있습니다. 브라우저에서 keep-alive는 어떻게 작동할까?서버 → 서버 요청에서는 왜 명시적으로 설정이 필요할까?실제로 어떻게 적용할 수 있을까? HTTP keep-alive란?기본적으로 HTTP 요청은 다음 흐름을 따릅니다:연결 열기 → 요청 보내기 → 응답 받기 → 연결 닫기이런 구조는 요청마다 새로운 TCP 연결을 만들고 끊는 비효율을 초래합니다. 특히, 서버 → 서버 간에 수백~수천 개의 API 호출이 일어난다면 이 비용은 무시할 수 없습니다.keep-alive는 ..
프로그래밍에서의 BufferBuffer(버퍼)는 데이터를 임시로 저장하는 메모리 공간을 의미합니다. 일반적으로 다음과 같은 목적으로 사용됩니다:속도 차이 해결CPU, 메모리, 디스크, 네트워크 등의 장치는 서로 다른 속도로 데이터를 처리합니다. 버퍼를 사용하면 빠른 장치가 느린 장치를 기다리지 않고 계속 작업을 수행할 수 있습니다.예: 키보드 입력 버퍼, 그래픽 렌더링 버퍼, 스트리밍 버퍼데이터 변환 및 가공데이터를 일정한 크기로 나누거나, 변환할 때 중간 저장소 역할을 합니다.예: 동영상 인코딩, 오디오 프로세싱I/O 성능 최적화디스크나 네트워크와 같은 느린 장치에서 데이터 입출력을 할 때, 여러 번의 작은 작업을 모아 한 번에 처리하면 성능이 향상됩니다.예: 파일 시스템의 디스크 캐시(Buffer C..