목록분류 전체보기 (73)

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를 자주 날려줘야 하는 단점이 있다. 데이터 삭제부..

카프카? 그게 뭔데!카프카는 실시간으로 스트리밍 데이터를 처리하는데 최적화된 분산 데이터 스토어입니다.즉, 연속적으로 생성되는 수 많은 데이터(스트리밍 데이터) 를 효과적으로 처리하는데 특화되어 있습니다. 스트리밍 데이터? 그거 API로 계속 쏘면 되는거 아니야? 라고 생각할 수 있겠지만, 현실은 그렇지 않습니다.대규모 서비스에서는 매초마다 수천, 수만건의 이벤트가 발생하며, 이런 데이터를 안정적으로 처리하려면 이것을 위해 설계된 특별한 아키텍처가 필요합니다. 일반적인 API 통신으로는 아래와 같은 문제를 해결하기 어렵습니다.고가용성 - 서버가 다운된다면? 서버 다운을 모르고 쏜 데이터들은 유실될 것이고, DB에 들어가지 못한 데이터들은 손실될 것입니다. 처리 지연 - API 수신 서버의 처리 능력을 초..

커뮤니티 사이트를 만들던 중, 프론트 페이지 로딩 속도가 너무 느린 문제가 발생했습니다.홈 화면은 아래 처럼 이미지들이 많이 필요한데, 모든 이미지는 S3에 원본 사이즈 (1280p) png로 저장되어있습니다. AWS CloudFront를 적용하여 이미지 캐싱을 추가 하였지만, 여전히 속도 개선이 이루어지지 않았습니다. 프론트는 next를 사용하여 Next/Image를 사용하고 있고, Sharp를 통해 최적화를 하고 있습니다. 하지만, 원본 이미지가 너무 크기에, 한번에 많은 사진을 프론트 서버에서 리사이징 하기에 부담이 크고, 이로 인해 속도가 느리다는 판단을 하였습니다. 프론트 서버에서 리사이징에 대한 부담을 적게 하기 위해, 뒷단에서 미리 필요한 사이즈의 사진을 주려면 어떻게 해야 할까요? 원본 ..
실무를 하면서 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://leetcode.com/problems/spiral-matrix-ii/description/?envType=problem-list-v2&envId=simulation 제한된 2차원 배열 공간 안에서 뱅글뱅글 도는 규칙이 있을 경우, 벽이 있다고 생각하면 쉽다.row의 start와 end, column의 start와 end를 기준으로 벽이 있다고 생각하고, 한 줄 (가로든, 세로든) 을 채울때 마다 벽이 한칸씩 조여지는 느낌으로 생각하면 까먹지 않을 것 같다. class Solution { public int[][] generateMatrix(int n) { int[][] res = new int[n][n]; int counter = 1; int c..

Kotlin은 표준 스코프 함수를 제공한다.특정 객체의 컨텍스트 내에서 정해진 동작을 수행하기 위해 기본적으로 제공되는 함수이다.일반적으로 람다 함수로서 많이 사용하게 되는데, 람다가 적용되는 객체에 임시로 스코프를 형성하여 바로 핸들링하는 편리함을 제공한다. 가끔 사용하다가 헷갈릴 때 가 있어서 한번 정리를 해두려고 한다. 종류 : apply, run, with, alse, let apply적용되는 객체를 참고하여 새로운 인스턴스를 만들 수 있다. 이때, 초기화 작업과 특정 동작을 수행하여 인스턴스를 생성하고 반환한다.fun main(args: Array) { val youngJuni = Human("juni", 19) val oldJuni = youngJuni.apply { n..

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