[바미] 옵티마이저(Optimizer)란 무엇인가?
·
프로그래밍(Web)/공부일기
옵티마이저(Optimizer)란?옵티마이저는 데이터 베이스가 SQL 쿼리를 '어떻게' 실행할지를 결정(최적화)하는 엔진입니다. 개발자가 작성한 쿼리를 보고 어떤 순서로 테이블에 접근할 지, 어떤 인덱스를 사용할 지, 어떤 조인 방식을 쓸 지, 등등을 가장 빠르고 적은 자원을 사용하는 방법으로 결정해주죠. 데이터베비스 내부에서 쿼리가 실제로 실행되기 전에 '이 쿼리를 어떤 플랜(Plan)으로 실행하면 가장 비용(Cost)이 적을까?'를 계산하고, 이것에 따른 실행 계획(Execution Plan)을 생성해주는데 이 과정을 수행하는 것이 오늘 알아 볼 옵티마이저(Optimizer)입니다.옵티마이저(Optimizer)가 SQL을 실행하는 과정 옵티마이저(Optimizer)는 크게 SQL 작성 -> 구문 분석(..
[바미] 새로 쓴, 대용량 데이터 베이스 솔루션 Vol.1 - 2장 인덱스 유형과 특징
·
프로그래밍(Web)/공부일기
새롭게 안 사실들B-Tree 인덱스 구조를 가진 테이블의 엑세스 속도100 건의 로우를 가진 테이블에서나 100만건의 로우를 가진 테이블에서나 한 건을 엑세스 하는 속도는 거의 같다는 점을 새롭게 알았다.B-Tree의 B가 Binary외에 Balanced도 있다는 의미는 이미 알았지만 엑세스 하는 속도도 균형 잡았을 줄은 몰랐다.인덱스의 종류들B-Tree 인덱스의 구조 - 루트, 브랜치, 리프 블록함수기반 인덱스에 대하여NULL 값에 대하여나는 단순히 NULL = 없음, 값은 값이지만 존재하지 않는 값으로 생각하고 있었다.하지만 이 책에서는 NULL을 '미확정 값'이라고도 표현하고 있어 개념을 재확립 하였다.공부한 내용들제 2장 인덱스의 유형과 특징인덱스의 개념인덱스는 데이터베이스 내에서 특정 데이터를 ..
[바미] 새로 쓴, 대용량 데이터 베이스 솔루션 Vol.1 - 1장 데이터 저장구조와 특징
·
프로그래밍(Web)/공부일기
들어가기 전에..해당 글은 새로 쓴 대용량 데이터 베이스 솔루션 책을 공부한 내용을 정리하였습니다.새롭게 안 사실들PK와 FK의 개념 재적립PK는 각 테이블의 고유한 식별자 역할을 하는 컬럼FK는 테이블 간의 관계를 정의하기 위해 사용되는 컬럼DB도 임의의 위치에 저장된다.프로그래밍 언어의 변수만 임의의 위치에 저장되는 줄 알았는데 분리형 테이블에서 데이터가 저장될 때 '임의의 위치'에 저장된다는 것을 새롭게 알게 되었다. 분리형 테이블에 사용되는 주요 개념들데이터 블록데이터를 저장하는 가장 기본 단위로, Block은 논리적이지만 디스크에 물리적으로 매핑되며 데이터 삽입 시 빈 공간(Free Space)이 있는 블록을 찾아 데이터를 저장하게 된다.프리 리스트(Free List)블록이 새 데이터를 저장할 ..
[바미] 해시 충돌 처리 방법
·
프로그래밍(Web)/공부일기
들어가기전에..해시 테이블에서 해시 충돌이 발생하면, 두 개 이상의 서로 다른 키가 같은 해시 값을 가질 수 있습니다. 이를 해결하기 위해 충돌을 처리하는 다양한 방식들이 존재하는데 그 중에서 체이닝(Chaining), 개방 주소법(Open Addressing), 이중 해싱(Double Hashing)이 대표적인 방법입니다. 오늘은 이 세가지 방법에 대해 알아보겠습니다.체이닝(Chaining)해시 충돌을 처리하는 가장 보편적인 방법 중 하나인데 해시 테이블의 각 버킷(Bucket)을 연결 리스트나 배열과 같은 자료 구조로 만들어서 충돌이 발생한 여러 데이터를 그 안에 함께 저장하는 방식입니다.동작 방식각 버킷에는 하나의 데이터가 저장되는 것이 아니라, 여러 데이터가 연결 리스트로 연결됩니다.같은 해시 값..
[바미] Obejct와 Map의 시간복잡도는 항상 O(1)일까? (feat. JS & Node)
·
프로그래밍(Web)/공부일기
들어가기전에..회사에서 진행하고 있는 프로젝트 내에서 Front 또는 클라이언트로 부터 query 또는 body로부터 파라미터를 받아오게 되는데 이에 따라 Validation 검사 처리를 개발하고 있던 중이였습니다. 그 파라미터를 체크하는 로직은 아래와 같은데const locations = ['body', 'query'];const params = req[location];Object.keys(params).forEach(key => { const rule = validation[key];...}validation이라는 Object안에 Validation체크를 할 수 있도록 만들고,  Validation 체크 조건에 걸리면 router단에서 API를 종료시키는 구조로 구현했는데 이 중에서 const ..
[바미] 알고리즘 시간 복잡도 용어 정리
·
프로그래밍(Web)/공부일기
들어가기전에..안녕하세요. 요즘 매일 매일 제가 백준 알고리즘을 푼 것을 '하루 알고리즘'이라는 컨텐츠로 포스팅 하고 있습니다. '하루 알고리즘(JS)' 카테고리의 글 목록안녕하세요. 4년차 백엔드 개발자로 활동하고 있습니다. 코딩과 무관한 것들과 유관한 부분들 모두 공유 합니다. 오타나, 틀린 부분이 있다면 언제든지 지적 환영 입니다.codesk.tistory.com여기서 시간 복잡도 관련 용어들을 정리해보면 좋을 것 같아 이번 글을 포스팅하게 되었습니다. 빅오 표기법?빅오 표기법은 알고리즘의 효율성을 표현하기 위해 사용되는 표기법입니다. 알고리즘의 단계 수는 입력 크기에 따라 달라지기 때문에 '배열에 N개의 원소가 있을 때 N단계가 필요하다'와 같이 표현하는 것이 더 효과적이죠. 컴퓨터 과학자들은 자..
[바미] 트리거는 왜 사용할까?
·
프로그래밍(Web)/공부일기
회사의 Node프로젝트 중 트리거를 사용하는 프로젝트가 있었습니다. 그 트리거들은 특정 작업 전에 동작하거나 특정 작업 후에 처리되는 것들이였기 때문에 그 트리거들을 보면서 미들웨어라는 좋은 게 있는데 왜 트리거를 사용했을까? 라는 생각을 하게 되었습니다. 그러니까 아래와 같이 구성하면 되지 않나? 싶었죠. app.use(async (req, res, next) => { try { const result = await someAsyncTask(); req.customData = result; // 비동기 작업 결과를 요청 객체에 저장 next(); // 다음 미들웨어 함수 호출 } catch (error) { next(error); // 오류 처리를 위해 다음 미들웨어 함수 호출 } }); 그러다 GPT..
TypeORM vs Sequelize
·
프로그래밍(Web)/공부일기
안녕하세요. 자바스크립트 계열의 언어를 사용하다시는 분들이라면 한 번쯤은 접해봤을 ORM 라이브러리라고 생각합니다. 오늘은 이 둘에 대해 간단하게 비교해보도록 하겠습니다. 차이점 TypeORM TypeScript와의 통합 TypeORM은 TypeScript와의 완벽한 통합을 제공하며, 타입 안정성과 코드의 가독성을 높일 수 있습니다. Active Record 및 Data Mapper 패턴 지원 두 가지 패턴을 지원하여 사용자가 선호하는 방식으로 데이터 모델을 다룰 수 있습니다. 데이터베이스 독립성 다양한 데이터베이스를 지원하며, 데이터베이스 간의 전환을 비교적 쉽게 할 수 있습니다. Migrations 및 Schema 관리 쉬운 마이그레이션 관리 도구를 제공하여 데이터베이스 스키마를 관리하기 쉽습니다. ..
sequelize 사용기
·
프로그래밍(Web)/공부일기
Intro혼자서 프론트부터 백엔드까지 북치고 장구쳤던 프로젝트가 있었다. 그 코드 구조가 프론트에서 ajax로 통신 -> ajax route처리하는 부분에서 호출 url에 맞는 API 함수 호출 -> DB 실행 -> 데이터 return 형태로하나의 파일에서 호출URL에 맞는 함수 호출 부분이 전부 담겨있고, 다른 하나의 파일에선 API 호출하는 함수들을 선언하는 부분들이 담당하는 구조였는데 이 부분을 개선하여  조금 더 REST API 형태에 비슷하게 하도록 sequelize를 사용하여 구조를 변경해 보았다.  각 호출에 필요한 Model을 만들었고, API 호출 구조와 동일하게 디렉토리 안에 index파일을 만들어 API 개발할 때 직관적으로 개발 할 수 있도록 만들어보았다.어떻게 사용했는가?예를 들어..
Bami
'프로그래밍(Web)/공부일기' 카테고리의 글 목록