사전 지식 관계형 데이터베이스: 테이블과 열로 구성된 데이터 모델을 사용하여 데이터를 저장하고 관리합니다. ORM(Object Relational Mapping): OOP에서는 데이터를 객체로 표현하고 객체들 간의 관계를 맺고 메서드를 통해 상호작용한다. ORM은 객체와 관계형 데이터베이스 간의 불일치를 해결하기 위해 개발되었습니다. 관계형 데이터베이스를 조작하기 위한 인터페이스를 제공하여 쿼리를 직접 작성하지 않고도 데이터베이스 작업을 수행할 수 있습니다. Prisma란? Prisma는 기존 ORM과는 근본적으로 다른 새로운 종류 ORM이며 기존 ORM들과 관련된 문제들로 고통받지 않습니다.결론은 ORM이다. 설치 npm install prisma --save-dev npm install @prisma..
Next.js를 공부하기에 앞서 Next.js가 무엇이고 사람들은 왜 Next.js를 사용하며, 어떠한 이점이 있는지 알아보자. What is Next.js? Next.js is a framework for building web applications. With Next.js, you can build user interfaces using React components. Then, Next.js provides additional structure, features, and optimizations for your application. Under the hood, Next.js also abstracts and automatically configures tooling for you, like bu..
자바스크립트는 명령형(imperative), 함수형(functional), 프로토타입 기반(prototype-based) 객체지향 프로그래핑(OOP: Object Oriented Programming)을 지원하는 멀티 패러다임 프로그래밍 언어다. 1. 명령형(Imperative) 명령형 프로그래밍은 컴퓨터에게 실행해야 할 명령문들의 목록을 명시적으로 작성하여 원하는 결과를 얻기 위해 프로그램의 흐름을 직접 제어하는 방식이다. JS는 변수, 조건문, 반복문 등을 사용하여 명령형 프로그래밍을 지원한다. 아래는 예 let numbers = [1, 2, 3, 4, 5]; let sum = 0; for (let i = 0; i < numbers.length; i++) { sum += numbers[i]; } co..
✅ 그래프(Graphs)란? 객체 간의 관계를 표현하는 데 사용됩니다. 그래프는 노드(node)들과 이들을 연결하는 간선(edge)들의 집합으로 구성된다. 노드는 그래프 안에 있는 개별 요소를 나타내며, 종종 정점(vertex)이라고도 부른다. 노드는 어떤 유형의 데이터나 객체를 담을 수 있으며, 각 노드는 고유한 식별자로 구분된다. 간선(edge)은 노드 사이의 관계를 나타내는 연결선이다. 간선은 노드 간의 관계를 나타내는 데 사용되며, 방향성이 있는 경우도 있고 없는 경우도 있다. 방향성이 없는 그래프에서는 간선이 양방향으로 표현되며, 방향성이 있는 그래프에서는 한 방향으로의 연결만을 나타낸다. 연결 리스트의 경우 노드들이 직선으로 연결되어 있었고, 트리(트리는 그래프의 일종) 같은 경우 한 개의 루..
프로젝트 중 무한 스크롤을 구현하게 되었다. useRef를 사용하여 컨테이너 요소의 scrollTop, scrollHeight, clientHeight 값을 받아서 구현했다. 브라우저 호환성 문제, 요소의 높이를 부적절하게 구하는 등에 의해서 무한 스크롤이 멈추거나 작동하지 않는 경우가 있었고 단시간에 수백번 호출이 되며 동기적으로 실행되었다. 또한, 각 엘리먼트 마다 이벤트가 등록되어 있는 경우, 사용자가 스크롤할 때마다 이벤트가 끊임없이 호출되기 때문에 몇배로 성능 문제가 발생한다는 것을 알 수 있었다. 일단 기존에 작성한 코드를 한번 살펴보자. useEffect(() => { setItems([...places]); }, [places]); const handleScroll = () => { if ..
✅ 해시 테이블(Hash Tables)이란? 데이터를 저장하고 검색하는 데 사용되는 자료구조 중 하나입니다. 해시 테이블은 키(Key)와 값(Value)으로 이루어진 항목(Item)을 저장합니다. 해시 테이블은 배열(Array)과 유사한 구조를 가지고 있지만 배열과는 달리 인덱스(Index)가 정수가 아니라 키(Key)로 구성됩니다. 즉, 순서를 가지지 않습니다. 키(Key)는 해시 함수(Hash function)를 사용하여 배열의 인덱스로 변환됩니다. 해시 함수는 키(Key)를 해시값(Hash value)으로 매핑하는 함수입니다. 해시 함수는 입력이 동일하면 항상 동일한 해시값(Hash value)을 반환해야 합니다. 해시값(Hash value)은 배열의 인덱스와 같이 정수값이어야 합니다. 해시 테이블..
✅ 힙(Heap)이란? 힙(Heap)은 자료 구조 중 하나로, 일반적으로 우선순위 큐(Priority Queue)를 구현하는 데 사용된다. 힙은 완전 이진트리(Complete Binary Tree) 구조를 가지며, 부모 노드와 자식 노드 간에 우선순위 관계를 가진다. * 완전 이진트리 - 모든 노드가 왼쪽 자식과 오른쪽 자식을 가진 이진트리로서, 마지막 레벨을 제외한 모든 레벨이 꽉 차 있는 이진트리를 말한다. 마지막 레벨은 왼쪽에서부터 오른쪽으로 채워지는 형태이다. 🟢이진 힙(Binary Heap) 힙의 한 종류로, 모든 노드는 최대 두 개의 자식 노드를 가지며, 주로 배열을 사용하여 구현된다. 🟡 이진 힙의 두 종류 최대 힙(Max Heap): 부모 노드는 자식 노드보다 항상 크거나 같은 값을 가짐...
✅ 깊이 우선 탐색(DFS, Depth-First Search) 트리 또는 그래프를 탐색하는 알고리즘으로, 시작점에서 출발하여 가능한 한 깊숙이 탐색해 나가는 방법이다. 이러한 방식으로 트리를 순회할 때, 전위 순회(Pre-Order)는 DFS 중에서도 가장 일반적인 방법 중 하나이며, 전위 순회 외에도 중위 순회(In-Order)나 후위 순회(Post-Order) 등도 DFS의 한 종류이다. 🤔 깊이 우선 탐색의 특징 스택이나 재귀 함수를 이용해서 구현 가능하다. 탐색 경로를 기억하지 않아, 특정한 경로를 찾는 문제에는 너비 우선 탐색(BFS)이 더 적합하다. 구현이 쉽고 속도가 빠르다. 한번 방문한 노드를 다시 방문하지 않는 것이 아니기에 무한 그래프에 빠질 위험이 있다. 이를 방지하기 위해 탐색 깊..