[바미] 새로 쓴, 대용량 데이터 베이스 솔루션 Vol.1 - 2부 - 1장 부분범위처리
·
프로그래밍(Web)/공부일기
새롭게 안 사실들 부분 범위 처리처음 이 개념을 접했을 때, 오라클의 부분범위 처리가 MariaDB에서 사용하는 페이징 처리와 같은 역할을 하는 것으로 이해했다. 실제로 두 방식 모두 전체 데이터 중 일부만 가져오거나, 사용자에게 빠른 응답을 제공하며, 처리량을 줄여 성능을 개선하는 목적은 공통적이였기 때문이다. 이런 측면에서 보면 MariaDB의 페이징 처리도 일종의 부분 범위 추출로 볼 수 있다. 그러나 오라클에서 말하는 부분범위 처리는 SQL 실행 계획 차원에서의 근본적인 DB 엔진 레벨 최적화 방식이라는 점에서 차이가 있었다. 오라클은 WHERE 절 조건을 만족하는 전체 데이터를 한 번에 읽지 않고, 설정된 Array Size만큼만 먼저 처리한 뒤, 사용자로부터 Fetch 요청이 들어올 때까지 다..
[바미] BTL 테크니컬 리더를 읽고
·
이것저것/책 후기
이 책은 올해 내가 리드 개발자로 처음 역할을 수행하면서 마주한 여러 도전 과제에 큰 도움이 되었다. 특히 이 책에서 강조하는 '기술적 역량 이상의 리더십 역량'이 필요하다는 부분이 가장 크게 공감되었는데 프로젝트를 진행하며 기술적인 문제 해결 능력만이 아니라 팀원들과 효과적으로 소통하고, 동기를 부여하며, 그들의 성장을 이끌어내는 것이 얼마나 중요한지 몸소 느꼈기 때문이다. 특히, 책에서 제시한 '문제를 직면하고 인정하는 용기'에 관한 부분은 매우 인상적이었는데 프로젝트 리딩 과정에서 나 자신이 문제를 인정하고 직시하지 않고 회피하거나 축소하는 경우가 있었다는 점을 깨달았다. 앞으로 리더로서 성장하기 위해서는 문제가 생겼을 때 이를 과감히 마주하고 팀원들과 투명하게 소통하며 해결책을 모색하는 용기가 필..
[바미] 공공 API 대량 호출을 어떻게 최적화했을까? (p-limit 적용기)
·
프로그래밍(Web)/Javascript(TS,Node)
들어가기전에..안녕하세요. 저는 프론트엔드와 백엔드를 포함해, 개발을 처음 시작하는 분들부터 현업에서 근무 중인 개발자까지 다양한 분들을 대상으로 개인 과외를 진행하고 있습니다.요번에 쓰는 글은 한 프론트엔드 개발자가 자신의 개인 프로젝트 중 문의가 생겨 저에게 도움을 요청했던 내용입니다.문의사항//.envVITE_APP_TRAIN_STATION_URL='https://apis.data.go.kr/1613000/TrainInfoService/getCtyAcctoTrainSttnList'먼저 코드는 아래와 같아. 프론트 쪽 코드야// train.ts const response = await Promise.all( AreaCode.map(async (area) => { return..
[바미] 새로 쓴, 대용량 데이터 베이스 솔루션 Vol.1 - 4장 인덱스 수립 전략
·
프로그래밍(Web)/공부일기
새롭게 안 사실들 인덱스의 선정 기준들실제 사용하는 조인 쿼리를 분석해서 필요 인덱스만 생성했었는데 각 테이블 마다 그 기준점이 명확하게 있다는 점을 처음 알게 되었다.공부한 내용들4장 인덱스 수립 전략 아무리 뛰어난 전략이라 해도, 이를 실행할 수 있는 무기가 제공되지 않는다면 제 능력을 발휘할 수 없다. 하지만 능력을 갖춘 사람에게 최적의 도구가 주어진다면 그 잠재력을 극대화할 수 있다. 실행계획에서의 최적화란 바로 주어진 요소들로부터 가장 이상적인 실행 경로를 찾는 과정이며, 논리적으로 불가능한 것을 가능하게 만들 수도 있다. 우리는 옵티마이저가 최적의 경로를 선택할 수 있도록 그에 필요한 경로들을 제시해야 하며, 이미 제외된 대상에서는 선택이 불가능하다는 점을 이해해야 한다. 어떤 실행계획이 좋은..
[바미] 새로 쓴, 대용량 데이터 베이스 솔루션 Vol.1 - 3장 SQL의 실행계획 - 2
·
프로그래밍(Web)/공부일기
새롭게 안 사실들 실행 계획의 유형들..실행 계획에 대한 내용이 이렇게 다양하게 많이 있을 줄 몰랐다.엑세스, 스캔에 대한 내용들처음 들어 보는 조인세미 조인(Semi Join), 카티젼 조인Cartesian Join), 내포 조인(Nested loop Join), 정렬 병합 조인(Sort Merge Join), 해쉬 조인(Hash Join), 등등처음 접하는 쿼리문법MERGE, CREATE OR, 등등힌트에 대한 내용들공부한 내용들3.2 실행계획의 유형실행계획은 데이터베이스 테이블에서 데이터를 추출하여 원하는 결과를 생성하기 위한 처리 경로를 의미한다. 가장 기본적인 실행계획은 실제 데이터가 저장된 물리적인 데이터를 액세스하는 것으로, 이를 스캔(Scan)이라고 부른다. 또한, 여러 테이블에서 스캔을 ..
[바미] 새로 쓴, 대용량 데이터 베이스 솔루션 Vol.1 - 3장 SQL의 실행계획 - 1
·
프로그래밍(Web)/공부일기
새롭게 안 사실들 옵티마이저옵티마이저를 처음 이 책을 공부할 땐 머리속에 남지 않았는데 옵티마이져 관련 이슈를 경험하고 나서 눈에 제대로 들어오기 시작했다.아우트라인엑세스, 스캔에 대한 내용들처음 들어 보는 조인세미 조인(Semi Join), 카티젼 조인Cartesian Join), 내포 조인(Nested loop Join), 정렬 병합 조인(Sort Merge Join), 해쉬 조인(Hash Join), 등등공부한 내용들제 3장 SQL의 실행계획SQL의 실행 계획은 데이터베이스 엑세스 효율에 가장 큰 영향을 미치는 요소로, SQL의 수행 방식을 미리 계획하여 성능 최적화를 도모하는 데 핵심적인 역할을 한다. 실행 계획은 사용 중인 SQL의 형태, 데이터 및 인덱스 구조, DBMS 버전, 통계 정보 등을..
[바미] 옵티마이저(Optimizer)란 무엇인가?
·
프로그래밍(Web)/공부일기
옵티마이저(Optimizer)란?옵티마이저는 데이터 베이스가 SQL 쿼리를 '어떻게' 실행할지를 결정(최적화)하는 엔진입니다. 개발자가 작성한 쿼리를 보고 어떤 순서로 테이블에 접근할 지, 어떤 인덱스를 사용할 지, 어떤 조인 방식을 쓸 지, 등등을 가장 빠르고 적은 자원을 사용하는 방법으로 결정해주죠. 데이터베비스 내부에서 쿼리가 실제로 실행되기 전에 '이 쿼리를 어떤 플랜(Plan)으로 실행하면 가장 비용(Cost)이 적을까?'를 계산하고, 이것에 따른 실행 계획(Execution Plan)을 생성해주는데 이 과정을 수행하는 것이 오늘 알아 볼 옵티마이저(Optimizer)입니다.옵티마이저(Optimizer)가 SQL을 실행하는 과정 옵티마이저(Optimizer)는 크게 SQL 작성 -> 구문 분석(..
[바미] 인덱스가 불러 일으킨 커다란 해프닝
·
프로그래밍(Web)/업무관련
시작안녕하세요. 때는 저 저번주에 있었던 일입니다.  기존에 온프라미스 환경에서 서비스중인 프로젝트의 버전을 구 버전에서 신 버전으로 업데이트 해야하는 일이 있었습니다. 당연히 신버전은 DB 테이블도 달랐기 때문에 항상 최신 DB를 유지하고 있는 개발서버의 DB스키마를 덤프떠서 작업하려 했습니다.에러 발생...코드 최신화 후 덤프 띄운 DB도 적용시킨 뒤에 프로젝트를 재시작 시켰는데...기존에 5분마다 돌고 있던 로직부분에서 Lock wait timeout exceeded; try restarting transaction 에러 문제가 발생하게 되었습니다. 처음에는 '또 DB 커넥션 풀에서 문제가 발생했구나'라고 생각했습니다. 왜냐하면 이전에도 비슷한 형태로 발생한 일이 있었는데 그 때는 커넥션 풀에서 발..
[바미] 도커 내부의 PM2로 실행한 프로젝트가 DB connection이 실패할 때
·
DevOps
결론vim /etc/hosts에서 127.0.0.1 localhost# ::1 localhost ip6-localhost ip6-loopback부분을 주석하니 해결 되었습니다. 그 다음 부분은 제가 DB 연결을 위해 시도해 본 부분들입니다. 그 외 시도한 부분들.env 값을 제대로 가져오는 지 확인require('dotenv').config();logger.info('🔹 PM2 실행 환경에서 RDB_HOST:', process.env.RDB_HOST)이 부분에서 제대로 가져오지 않아  pm2 --name backend --interpreter nodemon --update-env --env production이런 식으로 pm2가 실행 되었을 때 환경변수가 강제로 적용되도록 ..
Bami
기록하며 성장하기