분류 전체보기126 위상 정렬 알아보기 위상 정렬(Topological Sorting)이란?방향 그래프의 정점들을 방향을 거스르지 않도록 나열하는 것.각 정점에 순서를 매기고, 그 순서를 거스르지 않도록 정점들을 정렬하는 것을 의미한다. ex) 선수 과목 구조(과목마다 먼저 들어야 하는 과목의 순서가 정해져 있음)여기서 순서란, 그래프의 정점 순서를 가리킴.ex) 정점 v1과 v2이 v1 → v2 방향으로 연결되어 있으면, v1이 선행된다고 본다.위상 정렬에 사용될 그래프는 순환이 없어야 함(비순환 방향 그래프여야 함). 알고리즘Kahn 알고리즘자신을 향하는 간선(즉, 자신으로 들어오는 간선)이 없는 정점을 찾는다.이러한 정점이 여러 개라면, 그 중 아무거나 한 개를 고른다.해당 정점을 그래프에서 제거한다.남은 그래프에서 정점이 더 이상 존재.. 2024. 8. 31. 최소 스패닝 트리(Minimum Spanning Tree) 알아보기 +) 그 전에 스패닝 트리란?※ 그래프 내 모든 정점을 포함하는 부분 그래프. 최소 스패닝 트리란? (Minimum spanning tree)혹은 Minimum Weight Spanning tree (최소 가중치 스패닝 트리)라고도 불림.가중 + 무방향 그래프의 모든 정점을 연결하면서 사이클을 이루지 않음 + 그래프를 이루는 모든 가중치의 합이 최소인 트리를 말함. 특징그래프 내 N개의 정점이 있다고 할 때, 각 스패닝 트리는 N-1개의 간선을 가진다.한 그래프 내에는 여러 개의 최소 스패닝 트리가 존재할 수 있다.만약 그래프 내 모든 간선의 가중치가 같다면, 모든 스패닝 트리는 항상 최소의 가중치 합을 가진다. 알고리즘프림 알고리즘주어진 그래프에서 한 정점을 선택하여 트리를 만듦.그래프의 모든 간선이 .. 2024. 8. 4. [Vite] Vite 알아보기 근래에 Vite에 대해 이런저런 추천을 받기도 했고, 실제로 Vite로 된 프로젝트를 경험해본고로 상당한 인상을 받았기에... Vite에 대해 알아보고자 한다.Vite란?※ 발음은 '비트'다! 공식 사이트에서 친절하게 발음 예시도 제공해준다. 빠른 개발 환경을 위한 프론트엔드 툴 기존에 오랜 시간 사용되던 Webpack 등의 번들러의 문제점은 무겁고 느리다는 것이다.특히 프로젝트의 규모가 커질수록 이런 문제가 더더욱 두드러진다.이는 곧 개발상의 불편함을 야기한다.번들러 (Bundler): 웹의 이런저런 소스들(JS 코드, CSS 같은 asset들)을 브라우저가 사용할 수 있는 정적인 파일들로 만들어주는 도구. 위의 문제를 해결하기 위해, 브라우저가 지원하는 ES Modules + 네이티브 언어로 된 도.. 2024. 7. 14. [Electron] Electron에서 코드 변경사항 빠르게 적용하기 (feat. electron-reload) Electron을 사용하며 불편했던 것 중 하나는, 웹 개발을 하던 때와 달리 자동으로 변경사항이 적용되지 않는다는 것이었다. 때문에 코드를 고치고, 이미 열려있는 Electron 창을 닫고, 커맨드 창에서 다시 Electron을 실행하는 불편함이 있었다.이를 개선하기 위한 방법을 알아보고, 실제 적용해본 내용을 공유한다.electron-reload 적용하기 Electron에 자동 리로드를 추가할 때 자주 거론되는 방법. 공식 문서에서 설명하는 사용방법도 비교적 간단하다. 간단하다면 간단한데, 나는 프로젝트에서 타입스크립트를 사용하고 있어서 이런 저런 추가 설정을 더했고, 만족스럽지 못한 부분이 있다. // 설치npm install electron-reload npm 등으로 라이브러리를 설치하면 e.. 2024. 6. 30. [React] Windowing으로 렌더링 성능 최적화하기 최근 렌더링 이슈를 경험했었다. 수 천개쯤 되는 다수의 데이터를 한 번에 렌더링했기에 발생하는 이슈였다. 이 이슈를 통해 알게 된 Windowing 기법과, 이를 구현할 수 있게 해주는 라이브러리에 대해 기록한다.Windowing 기법이란? React 공식 페이지에서도 소개하고 있는 Windowing 기법이란, 간단히 말해 전체 목록의 일부만 렌더링하는 기법이다. 수백, 혹은 수천개의 항목을 한 번에 렌더링 하는 건 큰 부하를 일으킬 뿐더러, 페이지에 보이지 않는 요소까지 렌더링하는 경우가 많기 때문에 비효율적이다. 따라서 Windowing 기법은 화면에 보이지 않는 요소들을 렌더링에서 제외하고 일부만 렌더링함으로써 성능을 최적화할 수 있게 해준다. 사실 이 개념은 아주 어렴풋하게 알고 있었는데.. 2024. 6. 2. Next.js SSRF 취약성 이슈 GitHub 보안 알림 이메일이 오다 어느 날 갑자기 깃허브가 이메일을 보냈다. 뭔가 하고 살펴봤더니, 블로그 레포지터리에 보안 관련 이슈로 온 이메일이었다. 이메일로 보내진 링크를 확인해보니, 아래와 같이 깃허브 Security 탭에 새로운 항목이 생겨있었다. 사실 한 번도 Security 탭을 사용해본 적이 없어서 뭔가 했는데, 내용을 읽어보니 대강 아래와 같았다.Next.js에서 Server-Side Request Forgery(SSRF)에 대한 취약점이 제기되었다.아래의 조건을 만족할 시 Next.js 어플리케이션이 보낸 것처럼 보이는 요청이 공격자에 의해 만들어질 수 있다.14.1.1 버전 미만의 Next.js를 사용하고 있다.Next.js 어플리케이션이 Server Actions 기능을.. 2024. 5. 12. 이전 1 ··· 3 4 5 6 7 8 9 ··· 21 다음