일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 가상면접 사례로 배우는 대규모 시스템 설계
- partitioning
- k-Nearest Neighbors
- Retry
- 샤딩
- 통계학개론
- Sharding
- redis
- 데이터베이스 인덱스
- 쿼리 실행계획
- 인덱스 추가
- 인덱스 순서
- LRU
- 복합인덱스
- knn분류기
- 상자그림
- 글또
- System Design
- 데이터베이스 파티셔닝
- 머신러닝
- 다섯수치요약
- 오버라이딩
- 데이터베이스
- axis interceptor
- R Studio
- 레디스
- DB 파티셔닝
- f45
- 파티셔닝
- axios
- Today
- Total
목록전체 글 (28)
haileyjpark
서문 데이터 양, 데이터 복잡성, 데이터가 변하는 속도 등, 데이터가 주요 도전 과제인 애플리케이션을 데이터 중심적(data-intensive)이라고 말한다. 반대로 CPU 사이클이 병목인 경우 계산 중심적(compute-intensive)이라고 한다. 1장 신뢰할 수 있고 확장 가능하며 유지보수하기 쉬운 애플리케이션 데이터 시스템 데이터베이스, 큐, 캐시 등을 데이터 시스템이라는 포괄적 용어로 묶는 이유 최근에 만들어진 새로운 도구들은 다양한 use case에 최적화됐기 때문에 더이상 전통적인 분류에 딱 들어맞지 않고 분류가 흐려지고 있다. 예를 들어, 메시지 큐로 사용하는 datastore인 Redis가 있고, 데이터베이스처럼 지속성(durability)을 보장하는 메시지 큐인 아파치 카프카(Apac..

최근 Redis의 SCAN 명령어에 대해 알아보고 scanStream을 적용해보았는데, 새롭게 알게 된 것이라 정리해보고자 한다. * 글에 사용된 예시 코드는 TypeScript, NestJS로 작성되었다. 배경 유저가 로그인을 특정 횟수(여기서는 10번이라고 하겠다.)만큼 실패할 경우, 유저의 상태를 블락시키고 유저가 로그인을 할 수 없도록 제한하는 기능을 구현했었다. 이 과정에서 유저 로그인 시에 토큰과 sessionId가 발급되고, Redis와 cacheManager를 사용하여 의 형태로 저장했다. 이 sessionId를 서버와 클라이언트가 주고받다가 로그아웃 또는 유저 블락 시에 해당 sessionId를 redis에서 제거하는 방식이 사용되었다. 이 서비스에서는 동시접속을 허용하고 있었는데, 브라..

Guard guard는 @Injectable() 데코레이터가 달린, CanActivate 인터페이스를 구현하는 클래스입니다. 가드가 가진 하나의 역할은, 실행 시점에 존재하는 권한, 역할, ACL(Access Control List, 접근 제어 목록) 등의 조건에 따라 현재 요청을 라우트 핸들러가 처리할 지 여부를 결정합니다. 이를 일반적으로 권한 부여(Authorization)라고 하는데, 권한 부여와 관련한 인증(Authentication)과 함께 대부분의 애플리케이션에서는 미들웨어가 처리합니다. 하지만 미들웨어는 next() 함수를 호출한 후 어떤 핸들러가 실행될 지 알지 못합니다. 반면에 가드는 ExecutionContext 인스턴스에 액세스할 수 있으며, 따라서 다음에 실행될 것이 정확히 무엇인..

axios를 사용해 서버 간 통신을 하는 모듈에서 socket hang up 에러가 발생하는 경우가 종종 있었습니다. 기존의 동일 프로덕트 내 다른 서비스에서 동료 개발자 분이 개발해두신 재시도 로직과 여러 블로그들을 참고하여 socket hang up 에러로 인해 요청이 실패했을 때 재시도하는 방법을 알아보았습니다. axios란? axios는 JavaScript로 작성된 HTTP 클라이언트 라이브러리입니다. 브라우저와 Node.js 환경에서 모두 사용할 수 있으며, Promise를 사용하여 비동기적으로 HTTP 요청을 처리합니다. axios의 특징 Promise 기반: 비동기적으로 데이터를 요청하고 응답을 받아 처리할 수 있습니다. 요청과 응답의 중간에 interceptor를 사용하여 요청/응답의 전처..

2021년 11월 ~ 2022년 1월 (3개월) 부트캠프 python, Django 기반 백엔드 웹개발 과정 이수, 1월 말 수료2022년 2월 ~ 2022년 3월 (2개월) 취업 준비 및 부족한 기본 개념 채우기2022년 4월 ~ 2022년 10월 (6개월) 백엔드 웹 개발자 인턴 과정2022년 10월 ~ 현재 (4개월) 정규직 전환 후 주니어 개발자!개발 공부를 처음 시작한 이후의 굵직한 타임라인을 정리해보았다.인턴 과정 교육 커리큘럼은 3개월 간 진행되었고 7월에 팀 배치가 되었으니, 팀에 배치가 되어 실무를 접한 지는 대략 반년 정도가 흘렀다.실무를 반년 정도 경험했음에도 아직 공부해야할 코어 지식들은 산더미같고, 뭔가를 알면 알수록 모르는 게 많아지는 기분이다.아직 우매함의 봉우리에는 가본 적도..
팀에 배치되기 전 교육과정 커리큘럼을 진행하면서 아래와 같은 피드백을 받았었고, 피드백을 받았던 부분을 중심으로 에러와 로그 처리 방식에 대해 간단하게 알아보았다. try-catch로 모든 레이어에서 처리해주는 것이 적절할지? 로그는 어떻게 남기면 좋을지? 어느 시점에서 에러/예외처리를 할 것인가? 모든 레이어에서 try-catch문을 쓰지 않더라도, 에러가 발생하는 코드 다음에 있던 코드들은 실행되지 않고, 발생한 에러는 Promise.reject 처리되어 상위 컨텍스트에서 비동기 에러로 처리된다. → 서비스 레이어에서 상위 컨텍스트로 에러를 전파하기 위해 async 함수의 내부를 try-catch로 묶는 것은 불필요한 코드이다. 하지만, controller 레이어는 에러가 발생하거나 성공을 하는 것에..

javascript의 역사와 변화된 과정에 대하여 이해하고 javascript에서 자주 사용하는 라이브러리나 기술, 용어들의 개념에 대해서 정리해 보았습니다. 1. JavaScript의 탄생: 🌟 동적인 웹 페이지의 필요성 1994년 출시된 Netscape는 페이지와 페이지에 링크를 걸어서 페이지 이동만 가능한 정적인 웹사이트만 가능했습니다. 그래서 넷스케이프의 설립자 Marc는 계속 “어떻게 하면 동적인 웹사이트를 만들 수 있을까?”를 고민했고, 이미 사용자에게 보여지는 웹사이트 안에서 DOM 요소들을 조작하면서 다이나믹한 요소들을 만들기 위해 새로운 Scripting 언어를 추가하기로 했습니다. 그 때 한창 뜨고 있던 JAVA언어는 웹사이트를 주로 개발하던 개발자들이 쓰기엔 무거웠고, 그래서 기존에 ..
🌳 파티셔닝이란? Oracle V8.0에서 도입. 논리적인 데이터 element들을 다수의 entity로 쪼개는 행위를 뜻하는 일반적인 용어. 즉, 큰 table이나 index를, 관리하기 쉬운 partition이라는 작은 단위로 물리적으로 분할하는 것을 의미한다. 물리적인 데이터 분할이 있더라도, DB에 접근하는 application의 입장에서는 이를 인식하지 못한다. 🌳 등장 배경 서비스의 크기가 점점 커지고 DB에 저장하는 데이터의 규모 또한 대용량화 되면서, 기존에 사용하는 DB 시스템의 용량(storage)의 한계와 성능(performance)의 저하를 가져오게 되었다. 즉, VLDB(Very Large DBMS)와 같이 하나의 DBMS에 너무 큰 table이 들어가면서 용량과 성능 측면에서 많..