n8n이란?n8n은 오픈 소스 기반의 워크플로우 자동화(Workflow Automation) 도구로, 다양한 API 및 서비스 간의 데이터 흐름을 자동화할 수 있도록 도와주는 노코드(No-Code) / 로우코드(Low-Code) 플랫폼입니다.🔹 주요 특징오픈 소스 & 셀프 호스팅 가능n8n은 오픈 소스이므로 무료로 사용할 수 있으며, 직접 서버에 배포하여 사용할 수도 있습니다.SaaS(클라우드) 버전도 제공됨.직관적인 노드 기반 UI플로우 차트처럼 노드를 연결하여 워크플로우를 구성할 수 있음.개발자가 아니더라도 쉽게 자동화할 수 있음.150개 이상의 서비스 통합 지원Slack, GitHub, Notion, Google Sheets, Trello, PostgreSQL, MySQL, Stripe 등 다양한..
전체 글
개 발 자 로 살 아 남 기Git에서 Rebase와 Merge는 브랜치를 병합하는 두 가지 방식인데, 각각 장단점이 있어요. 실무에서는 코드 히스토리를 관리하는 전략에 따라 다르게 사용됩니다.1️⃣ Merge (git merge)✅ 기본적인 브랜치 병합 방식✅ 새로운 Merge Commit이 생성됨사용법git checkout maingit merge feature-branch예시A---B---C (main) \ D---E---F (feature-branch) ➡ git merge feature-branch 실행 후:A---B---C---M (main) \ / D---E---F (feature-branch) ✅ M(Merge Commit)이 생성됨.✅ 과거 히스토리를 그대로 유지하며, 브랜치..
🔹 행렬 곱셈(Matrix Multiplication)이란?행렬 곱셈은 두 개의 2차원 배열(행렬)을 곱하는 연산입니다.행렬 곱셈은 단순한 원소별 곱셈이 아니라 행과 열을 이용한 연산으로 이루어집니다.✅ 1. 행렬 곱셈의 조건A(행렬)이 m × n 크기이고, B(행렬)이 n × p 크기라면,A의 열 개수(n)과 B의 행 개수(n)가 같아야 곱할 수 있음결과 행렬 C는 m × p 크기의 행렬이 됨🔹 즉, A(m × n) * B(n × p) = C(m × p)✅ 2. 행렬 곱셈 과정행렬 A와 B가 주어졌을 때, A의 각 행(row)과 B의 각 열(column)을 곱해서 더한 값이 결과 행렬 C의 원소가 됩니다.예제A (2 × 3 행렬)| 1 2 3 || 4 5 6 | B (3 × 2 행렬)| 7 ..
모듈로 연산을 사용하여 일관된 인덱싱 처리🔹 비교배열이 기준배열보다 긴 경우✅ 모듈로 연산(i % pattern.length)은 항상 0 이상 pattern.length - 1 이하의 값을 반환✅ 즉, 패턴이 길어도 i가 그 범위를 초과하지 않으면 처음 몇 개 값만 사용됨const answers = [1, 3, 2]; // 정답 3문제const pattern = [1, 2, 3, 4, 5, 6, 7, 8]; // 8개짜리 패턴 (더 김)for (let i = 0; i → 패턴이 길더라도 처음 answers.length만큼만 비교되므로, i % pattern.length는 그냥 i와 동일한 효과. 💡 즉, pattern.length >= answers.length일 때 i % pattern.lengt..
🔹 Number.EPSILON 이란?Number.EPSILON은 JavaScript에서 부동소수점 연산의 오차를 처리하기 위해 사용되는 상수입니다.이 값은 1과 가장 가까운 부동소수점 숫자 사이의 차이를 나타내며, 2^(-52) (약 2.220446049250313e-16)의 값을 가집니다.console.log(Number.EPSILON); // 2.220446049250313e-16🔹 왜 필요한가?JavaScript에서 숫자는 IEEE 754 부동소수점 방식으로 저장됩니다.이 때문에 정확한 실수 연산이 어려워 미세한 오차가 발생할 수 있습니다.❌ 부동소수점 오차 예시console.log(0.1 + 0.2); // 0.30000000000000004console.log(0.3 === (0.1 + 0...
키워드상황스택- 쌍이 맞는지- 최근- 무언가를 저장하고 반대로 처리해야 할 때- 데이터의 조합이 균형을 이루어야 할 때- 알고리즘이 재귀 특성을 가질 때- 최근 상태 추적큐- 순서대로- ~대로 동작하는 경우- 스케줄링- 최소 시간- 특정 조건에 따라 시뮬레이션 할 때- 시작 지점부터 목표 지점까지 최단 거리깊이 우선 탐색- 모든 경로- 메모리 사용량이 제한적일 때의 탐색- 백트래킹 문제를 풀 때너비 우선 탐색- 최적- 레벨 순회- 최소 단계- 네트워크 전파- 시작 지점 부터 최단 경로나 최수 횟수를 찾아야 할 때백트래킹- 조합- 순열- 부분 집합- 조합 및 순열 문제- 특정 조건을 만족하는 부분 집합최단 경로- 최단 경로- 최소 시간- 최소 비용- 트래픽- 음의 순환- 단일 출발점 경로- 다익스트라: 특..
JavaScript는 1995년 넷스케이프(Netscape) 사에서 브랜든 아이크(Brendan Eich) 가 단 10일 만에 개발한 것으로 유명합니다.이렇게 짧은 시간 안에 만들어진 이유는, 당시 브라우저에서 경량의 스크립트 언어가 필요했기 때문입니다.초기에는 “Mocha”라는 이름으로 개발되었으며, 이후 “LiveScript”를 거쳐 JavaScript라는 이름으로 변경되었습니다. 1996년, 마이크로소프트는 넷스케이프의 JavaScript를 리버스 엔지니어링하여 JScript를 개발했고,이를 자사 브라우저인 Internet Explorer(IE) 에 탑재하면서 브라우저 간의 표준 차이로 인해 비호환성 문제가 발생하게 되었습니다. 이에 따라 1997년 ECMA(European Computer Manu..
XSS와 SQL Injection: 왜 실행될까?💡 핵심 질문:"유저 입력에 JavaScript 코드나 SQL 문을 넣는다고 해서, 이게 클라이언트나 서버에서 실행될 수 있는가?"✅ 답변: 실행될 수 있음.XSS는 클라이언트(브라우저)에서 실행되는 문제SQL Injection은 서버(DB)에서 실행되는 문제둘 다 입력값을 제대로 처리하지 않으면 악성 코드가 실행될 수 있음.1️⃣ XSS (Cross-Site Scripting) → 클라이언트에서 실행됨XSS가 발생하는 이유:브라우저는 HTML을 렌더링할 때, 스크립트(이 값이 그대로 데이터베이스에 저장됨이후, 다른 사용자가 이 페이지를 방문할 때 저장된 악성 스크립트가 브라우저에서 실행됨📌 왜 실행될까?서버가 입력값을 필터링 없이 그대로 HTML로 반..
자바스크립트의 덕 타이핑(Duck Typing) 개념덕 타이핑(Duck Typing)은 객체의 실제 타입이 아니라, "어떤 속성과 메서드를 가지고 있는지"에 따라 타입을 결정하는 개념입니다. 📌 철학:"오리처럼 걷고, 오리처럼 꽥꽥거린다면, 그것은 오리다." 🦆즉, 객체의 타입을 확인할 때 클래스나 명시적인 타입 정보가 아니라, 객체가 특정 속성이나 메서드를 가지고 있는지를 기준으로 판단합니다.자바와 자바스크립트의 차이자바 (명시적 타입 시스템)객체가 특정 클래스에서 상속받거나 인터페이스를 구현해야 해당 타입으로 간주됨클래스 이름이 다르면, 같은 속성을 가지고 있어도 다른 타입으로 인식됨자바스크립트 (덕 타이핑 기반의 동적 타입 시스템)특정 클래스에서 파생되지 않아도 속성과 메서드만 맞으면 해당 타입..
1. XSS(Cross-Site Scripting) 방어💡 문제:사용자가 입력한 HTML 태그를 그대로 렌더링하는 취약점 발견 (Stored XSS)URL 파라미터에서 자바스크립트 실행이 가능한 이슈 발견 (Reflected XSS)✅ 해결 방법:React에서 기본적으로 dangerouslySetInnerHTML을 사용하지 않도록 하고, DOMPurify를 적용해 안전한 HTML만 허용서버에서 Content-Security-Policy (CSP) 헤더를 추가하여 악성 스크립트 실행 방지escape()를 적용해 HTML 인코딩 처리📌 예제 코드 (DOMPurify 적용)import DOMPurify from "dompurify";const sanitizedHTML = DOMPurify.sanitize(..