목록ETC (9)

File에 권한 체계를 적용하는데 사용한 closure table을 소개하고, 적용한 사례를 소개합니다. 파일 구조를 만들면서 가장 걱정되었던 부분은 어떻게 authority를 적용시키느냐 였습니다. 파일 구조는 태생적으로 계층구조를 띄게 되고, 상위 파일의 권한에 영향을 받을 수 밖에 없으니까요.RDB는 이런 계층 구조를 나타내기에 적합하지 않기도 해서 다양한 방법들을 고민했습니다.RDBMS에서 tree structure 다루기여기서 parent-child 기법을 사용해서 파일 시스템을 구성했는데… 문제는 다음과 같았습니다.폴더 아래에 파일이 있습니다. 사용자는 폴더에 대해 update 권한을, 파일에 대해 read 권한을 가지고 있습니다.이런 경우 사용자는 파일에 대해서도 update를 할 수 있어야..

Graph DB를 사용하는 방법 도 있지만, RDBMS가 일반적으로 사용되기 때문에 여러 가지 이론들이 나와있습니다.크게 3가지에 대해 다루어 봅니다.Parent-ChildNested SetsMaterialized PathPatenet-Child (Adjacency list)가장 직관적으로 생각 할 수 있는 구조로, 자식이 부모의 기본키를 가지도록 하는 전략이다.적용, 활용이 가장 쉽지만, 성능면에서 가장 비효율적인 방법이다. 데이터 삽입/편집자식엔티티가 부모 엔티티의 PK를 들고 있으면 되기에 가장 쉽다. 데이터 selection특정 데이터를 검색하기 매우 어렵다. 계층이 내려갈 때마다 쿼리를 계속 날려야 하기 때문이다.따라서 데이터 검색을 위해 SQL를 자주 날려줘야 하는 단점이 있다. 데이터 삭제부..
실무를 하면서 data로서의 string을 다룰일은 많지만, string을 요래조래 조합하거나 할 일은 많이 없다...그럼애도 불구하고, 알뜰신잡 느낌으로 String을 다룰수 있는 String builder를 정리하려한다. 1. String으로 충분하지 않나요? 왜 StringBuilder죠?String str1 = "Hi ";String str2 = "World";str1 += str2; // str1 : "Hi World"2개의 String은 단순히 + 연산을 통해 새로운 string을 만들 수 있다.String은 불변 객체이므로, + 연산을 하면 새로운 string이 생성된다. 그리고 이전에 있던 문자열은 GC 에서 처리한다.즉, 메모리 할당과 메모리 해제가 수반되는 연산이라는 뜻이다.2. Str..

https://www.cursor.com/ CursorThe AI Code Editorwww.cursor.comCursor AI를 사용하는 유튜브를 보게 되었다.정말 AI가 개발자를 대체할 수 있을지 테스트해보고 싶었다.목표기존에 있는 프로젝트를 잘 이해하고, 기획상 요구되는 사항을 반영하기 쉬운지 확인한다.기존 프로젝트의 언어를 모르는 사람도 이해할 수 있게 설명을 해주고, 매우 간단한 수정과 클릭으로만 원하는 기능이 구현되는지 확인한다.개발 환경macbook pro m1cursor AI IDE (메인)프로젝트 언어JS마크다운html기존 프로젝트 세팅동아리 영수증 취합을 편하게 하기 위한 간단한 프로젝트를 타겟으로 한다.프론트 페이지를 통해 사용자가 영수증 사진과 이름, 해달 월을 post 하면, OC..

MST 즉 최소신장트리 (최소 스패닝 트리)는 간선에 weight가 있는 그래프를 tree로 만들어 문제를 해결할때 유용하게 사용할 수 있다. 그래프를 최소 비용 간선을 가진 tree로 만드는 방법을 MST 라고 한다. MST를 만들 조건은 1. 그래프 간선에 weight가 있을 경우 2. Cycle이 없어야 할 경우 라고 할 수 있다. MST는 kruskal 알고리즘을 사용하여 tree를 구성하는데, 아래와 같이 동작한다. 1. 가장 weight가 적은 간선을 선택 2. 선택된 간선에 연결된 두 노드가 같은 tree인지 확인한다. 3-1. 두 노드가 서로 다른 tree인 경우 같은 tree로 만들고 1로 돌아간다. 3-1. 두 노드가 같은 tree인 경우 1로 돌아간다. 이것을 반복할 경우, weigh..

다익스트라 알고리즘은 O(NlongN) 안에 한 노드에서 다른 모든 노드에 대한 최단 거리를 찾을 수 있다. 벨만-포드 알고리즘의 경우 O(N^2)으로 최단 거리를 찾는다. 벨만-포드 알고리즘이 존재하는 이유는 "음수"값을 가지는 간선이 존재할때 최단 거리를 찾기 위함이다. 음수 간선이 존재할 경우 circuit이 생길 수도 있는데, circuit을 돌 수록 음수 간선에 의해 최단 거리가 계속 줄어들 수도 있다. 하지만, 상식적으로 생각해 본다면, 같은 길을 반복해서 지나가는건 최단 거리가 아니다. 벨만-포드는 이 두가지 경우를 상정할 때 최단 거리를 구할 수 있는 알고리즘이다. 벨만-포드의 특징은 - 음수간선이 존재 - Cycle을 돌면 안됨 -> cycle을 돌 경우 탐색 중지 라고 할 수 있다. 다..

다익스트라 알고리즘은 최단거리 (shortest path) 탐색 알고리즘의 일종으로, DP에 기반한 알고리즘이다. 한 node에서 다른 모든 node 까지의 최단거리를 탐색할 수 있다. 각 노드간 간선이 존재하고, 각 간선의 거리가 주어질 때 최단 거리를 구할 수 있다. 다음과 같은 그래프가 있다고 가정한다. Node 1에서 각 노드까지의 거리를 표로 정리하면 다음과 같다. 노드 1 2 3 4 5 6 거리 0 2 5 1 INF INF 노드 1에서 5,6까지는 바로 갈 수 없으므로 무한으로 가정한다. 이때 1에서 가장 가까운 노드는 4이다. 따라서 node 4를 거칠 경우 1에 대한 최단 거리를 먼저 구한다. 4를 거쳐 갈 수 있는 노드는 3,5 인데, 1-4-3으로 3까지 갈 경우 거리는 1+3 = 4이..

Outlook에서 학생들의 정보를 추출했으니, 엑셀 파일에 해당 학생의 퀴즈 제출 여부에 체크를 하면 된다. 먼저, 엑셀을 사용하기 위해서는 openpyxl 이라는 라이브러리를 사용해야한다. from openyxl import load_workbook 을 사용하여 엑셀의 한 시트에 접근하여 작업을 할 수 있다. 1 2 3 4 5 from openpyxl import load_workbook # Exel API wb = load_workbook(filename="test.xlsx") # 엑셀파일 오픈 sheet = wb.worksheets[0] # 맨 앞에 시트 꺼내기 sheet['C4'] = 'o' # 시트에 작성 wb.save("test.xlsx") cs 위와 같이 엑셀 파일을 열고, 시트 인덱스에 따..