본문 바로가기

잡다한 지식40

[SQL] mediumtext 가 준 교훈.. 한 테이블에서 필드 타입을 text 가 아닌 mediumtext를 사용하고 있었습니다. 처음에는 괜찮았는데 어느 순간 테이블에 데이터가 쌓이면서 단순 select 쿼리도 속도가 너무 느리다는걸 느꼈습니다. 예) 초반 0.5초 -> 현재 1분 44초... 그래서 여러가지를 분석해봤습니다. 단순 raw query 에 대한 문제인지 아닌지 부터 시작해봤죠... 기본적으로 vscode에서 다루는 orm 은 sequelize 이용하고 있어서 이걸로, sequelize 쿼리 / raw 쿼리 둘다 진행 해봤는데 속도는 매우 빠르게 나왔습니다. 그러나, DB에서 raw 쿼리를 진행하면 1분 넘도록 실행하더군요...  왜 orm은 빠른데 DB 프로그램은 느리냐!!! 라는 걸 봤는데 sequelize-auto를 써서 db.. 2025. 3. 21.
[SPF] SPF 레코드 네이버 웍스에서 이메일 전송을 하다가 스팸으로 빠진 현상이 발견 되었습니다. 알아보니 SPF 레코드에 문제가 있어서 그런거라고 하더라구요. SPF(Sender Policy Framework)란? 일종의 메일 발송 서버 등록 제도로 해당 도메인을 통해 이메일을 보낼 수 있도록 ip주소를 지정해서 허용시키는 것입니다. 즉, 해당 ip를 허용 안시켜주면 정당한 메일로 못봐서 스팸으로 빠지는 형식인거 같습니다. SPF를 설정하게되면 제3자가 해당 도메인의 메일 주소를 사칭하여 스팸이나 피싱 메일을 보내는 것을 방지할 수 있습니다. 설정을 하기 위해서 자기 도메인의 DNS에 설정을 해야합니다. (SPF레코드는 메일 서버 IP를 회사 도메인 DNS의 TXT 레코드를 사용하며 도메인 소유자가 직접 설정해야합니다.) .. 2024. 11. 12.
[SEQUELIZE] create와 bulkCreate 현재 코드 여러곳에서 create / bulkCreate를 사용하고 있었습니다. 많은코드가 얽혀있는 상태에서 항상 특정 부분에서 문제가 생기는데 이때까지는 생각 못했지만... bulkCreate를 트랜잭션까지 연결해서 진행하다보니 시간이 계속 걸림에 따라 트랜잭션 오류가 발생했습니다. 생각을 해보니 많은 양의 데이터를 다루게 될때const arr = [];const transaction = await db.seqeulize.transaction();for(let i = 0 ; i  이런 식으로 보게되면 create는 하나하나 진행하기때문에 개별적으로 transaction을 잡고 순서대로 처리하기에 타임아웃에 덜 민감하지만, bulkCreate는 대량의 데이터를 한번에 묶어서 진행하기때문에 더 민감할 수 .. 2024. 11. 4.
[JS] 문제 있는 url 주소 찾기 토큰 검사를 하는 미드웨어를 사용하고 있는데 어는 부분에서는 정상적으로 작동하고, 다른 부분에서는 문제가 생기는 경우가 생기고 있었습니다. 너무 많은 api를 다루고 있다보니 도대체 어느 미드웨어에서 오류가 생기는지 파악이 안되고 있어서 확인이 힘들었는데 프론트에 연결하자니 시간이 걸릴꺼 같아 백단에서 처리하는 방법을 찾았습니다. 간단하지만, 전혀 신경을 안쓰고 있었는데.... 토큰이 아예 없는 경우로 넘어오는 경우 해당 valid 에 다음과 같은 값을 넣습니다. console.log(`check method: ${req.method}`);console.log(`check url: ${req.url}`); 이러면 해당 주소를 제대로 체크해서 어느 부분에서 문제 일어났는지 파악이 가능합니다. 2024. 10. 22.
[SQL] tinyint 타입에 대한 인덱싱 작업 인덱싱 작업이란? 보통 사전 처럼 정리가 필요한 걸 나중에 찾기 위해 미리 준비하는 작업이라고 보는데 tinyint 값인 경우 boolean이라 0 혹은 1 으로만 보통 이루어져 있어서 인덱싱 작업이 필요없다고 생각했습니다. 근데 데이터가 많아지고 확인할 부분이 많아지면서, 인덱싱 작업을 한번 해봤는데 속도 차이가 확실히 보였습니다. 확인해보니 자주 조회가 되는 필드면 tinyint여도 인덱싱 작업이 필요하다고 합니다. 해당 필드로 where 절 / join / order 절 등 엄청나게 많이 사용되는 경우라면 인덱싱 작업을 통해서 속도를 좀 더 개선 할 수 있습니다. 대신, 값의 분포가 적거나 필드 업데이트가 많다면 피하는게 맞다고 봅니다. 2024. 9. 26.
[SQL] WITH 쿼리 DB 데이터에서 중복된 값들 을 group by 시켜서 가져와 그 중 desc를 쓰고 싶었으나... group by 를 하게되면 항상 asc 형태를 가져와 원하는 값을 못사용 하는 경우가 있었습니다. 그래서 방법을 찾아보니 WITH 함수가 있다고 하더라구여!! WITH 문법은 SQL에서 공통 테이블 표현식(CTE, Common Table Expression)을 정의하는데 사용됩니다. 이를 통해 복잡한 쿼리나 서브쿼리를 보다 간단하게 작성하고, 반복적으로 사용해야 하는 쿼리 부분을 재사용할 수 있습니다.WITH new_data AS ( SELECT column1, column2 FROM table WHERE conditions)SELECT column1, column2FROM new_dat.. 2024. 9. 9.