본문 바로가기

전체 글124

[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.
[String/Number] 문자열/숫자 변환 보통 문자열을 변화하게 되면 toString()이라는 메서드를 많이 사용하게 되는데 사용하면 다음과 같습니다. const a = 123;console.log(a.toString()) // '123' 근데 이것보다 더 간단한 방법이 있더군요.. 그건 바로... const a = String 입니다...  이게 뭔소리인가 싶어서 chatGPT에 물어봤는데 메서드 방식은 다음과 같다고 합니다. const a = String;console.log(a(123)); // '123' toString() 메서드와 동일하게 움직이기는 방식인데, 저렇게 String 이라고 선언하고 사용할 수 있다는게 신기했습니다. 반대로, Number도 마찬가지로 하면 숫자인척 하는 문자열을 숫자로 바꿔줍니다. 물론! 숫자가 아닌건 다른.. 2025. 1. 15.
[Repeat] 반복적으로 사용할때 보통 이런경우는 드물긴 하나.. 같은 값을 특정 횟수로 여러번 반복적으로 호출하는 경우에는 다음과 같은 방식으로 했었습니다.const str = 'nice';const num = 3;let result = '';for(let i = 0 ; i  근데, 내장되어 있는 함수중 repeat 메서드가 존재한다고 합니다.. 전혀 몰랐었네여... 그래서 repeat 메서드를 이용하면 다음과 같습니다. const str = 'nice';const num = 3;console.log(str.repeat(num)); 물론 같은 값을 반복할때만 사용가능한 메서드 이지만 이렇게 확연하게 코드가 줄어드네여.. 2025. 1. 15.
[JS] Promise 종류 많은 양을 처리하다보니 Promise를 자주 쓰게 되는데 Promise 메서드도 여러 종류가 있어서  한번 정리를 해야겠다 싶어서 주요 메서드만 정리를 해봅니다. 메서드설명사용 이유Promise.resolvePromise 를 즉시 fulfilled 상태로 생성1. 이미 값을 알고 있는 경우 Promise 객체로 변환2. 비동기 코드에서 값을 통일된 방식으로 처리Promise.rejectPromise 를 즉시 rejected 상태로 생성에러를 즉시 반환하고 싶을 때 사용Promise.all주어진 Promise 객체들의 배열(iterable)을 병렬로 실행하며, 모든 fulFilled 상태가 될 때까지 대기 (하나라도 reject뜨면 rejected 형태가 됨)여러 비동기 작업을 병렬로 실행하고, 모든 작업.. 2024. 11. 20.
[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.