분류 전체보기
-
[MySQL] 쿼리성능 개선하며 알게된 것 기록 📝데이터베이스/MySQL 2022. 8. 20. 20:38
사내 운영툴 메인 페이지의 로딩 속도가 너무 느린 이슈가 있었고 호출되는 API의 응답속도가 거의 2초 이상 소요되는 것을 발견했다. 현재 서비스를 사용하고 있는 브랜드와 매장 및 각 매장의 상태 값과 포스 신호 수신 여부 등에 대한 데이터를 한 번에 가져오는 API이기는 하나, 몇십만 건의 데이터도 아닌데 이 정도로 속도가 느린 건 문제 있다고 판단했다. 해당 API에서 사용하는 프로시저는 2개였고 각각 약 1.2초, 0.6초 이상 걸리는 슬로우 쿼리였다. (보통 1초 이상 걸리는 경우를 슬로우 쿼리라고 판단하나, 데이터 양이 많지 않은데 0.6초나 걸리면 이 역시 슬로우 쿼리다.) 가져오는 데이터 양을 줄이는 방법도 속도 개선을 하는 방법 중 하나이지만, 그전에 근본적인 원인부터 고치는 게 맞다고 생..
-
[Javascript] Codility Lesson10 - CountFactors알고리즘, 자료구조/Codility 2022. 8. 20. 19:45
문제: https://app.codility.com/programmers/lessons/10-prime_and_composite_numbers/count_factors/ 문제 요약 N = D * N 이 성립하면 D는 N의 인수다. N이 주어졌을 때 N의 인수 개수를 구하여라 N의 범위는 1 ~ 2,147,483,647이며, N과 D는 자연수이다. 풀이 function solution(N) { let result = 0; const M = Math.sqrt(N); let sqrtInt = Math.floor(M); while (sqrtInt > 0) { let remain = N % sqrtInt; result = remain === 0 ? result + 1 : result; sqrtInt--; }; ..
-
[Javascript] Codility Lesson6 - Triangle알고리즘, 자료구조/Codility 2022. 8. 15. 14:32
문제: https://app.codility.com/programmers/lessons/6-sorting/triangle/ 문제 요약 길이가 N인 배열 A가 주어진다. (P,Q,R)이 0 A[R], A[Q] + A[R] > A[P], A[R] + A[P] > A[Q] 을 충족하면 삼각관계(triangular)라고 한다. 배열 A에서 삼각관계를 충족하는 값들이 있으면 1, 없으면 0을 반환한다. N의 범위는 0 ~ 100,000 이다. 배열 A의 요소 범위는 −2,147,483,648 ~ 2,147,483,647 이다. 풀이 function solution(A) { let result = 0; // 내림차순 정렬 A.sort((a, b) => b - a); for (let i = 0; i < A.lengt..
-
[MySQL] Timestamp 타입과 Datetime 타입의 차이 🕰데이터베이스/MySQL 2022. 8. 14. 21:03
이 포스팅을 하게 된 이유는 업무 중 우연히 어떤 에러를 발견했기 때문이었다. 당시 데이터 만료 기간을 설정하는 중이었고 특정 조건에서는 만료 기간을 과거 날짜로 세팅하여 데이터 제공을 중단하기로 했다. 그런데 이 과정에서 Timestamp 타입에 알맞지 않은 값이라는 에러가 발생했고 이에 대해 MySQL 날짜 타입인 Timestamp와 Datetime의 차이가 궁금해졌다. INSERT INTO mydb.tb_test(date_datetime, date_timestamp) VALUES('1970-01-01', '1970-01-01'); 차이점 1 Timestamp 타입은 1970-01-01 00:00:01 ~ 2038-01-19 08:44:07까지의 데이터만 지원하고, Datetime 타입은 1000-0..
-
[Javascript] Codility Lesson1 - BinaryGap알고리즘, 자료구조/Codility 2022. 7. 19. 02:22
문제: https://app.codility.com/programmers/lessons/1-iterations/binary_gap/ 문제 요약 양의 정수인 N을 이진수로 나타냈을 때, 양 끝이 1로 이루어진 연속되는 0을 BinaryGap이라 한다. 가장 긴 BinaryGap의 길이를 구하되, BinaryGap이 없으면 0을 리턴한다. 10001001의 가장 긴 BinaryGap은 3이며, 100000인 경우 BinaryGap이 없기 때문에 0을 반환한다. 정수 N의 범위는 1 ~ 2,147,483,647이다. 풀이 function solution(N) { // 정수 N을 이진수로 변환한다 let binaryBit = (N).toString(2); let result = 0; let index = [];..
-
윈도우 프로세스 확인 및 강제 종료 명령어기타 2022. 7. 13. 00:26
간혹 가다 한 번씩 마주치는 상황인데 자꾸 명령어를 까먹어서 이참에 메모해본다📝 로컬 환경에서 node.js 서버를 실행할 때, 어디선가 포트 번호를 점유하고 있어 실행이 실패하는 경우가 있다. 거의 대부분이 이전에 동작하던 node.js 서버가 정상 종료되지 않은 경우이며, 이럴 때는 강제로 프로세스를 종료해야 한다. 프로세스명으로 찾기 TASKLIST /M node.exe 포트번호로 찾기 netstat -ano |findstr 3010 프로세스 강제 종료 taskkill /F /PID [프로세스 id] 윈도우와 맥북을 번갈아 쓰다보니 0개국어가 되어버린 느낌^_ㅠ...
-
[Javascript] Codility Lesson9 - MaxDoubleSliceSum알고리즘, 자료구조/Codility 2022. 7. 11. 22:21
문제: https://app.codility.com/programmers/lessons/9-maximum_slice_problem/max_double_slice_sum/ 문제 요약 길이가 N인 배열 A가 주어지며 N의 범위는 3 ~ 100,000이다. 트리플렛 (X, Y, Z)가 주어지며 (0 ≤ X < Y < Z < N) 이는 A[X + 1] + A[X + 2] + ... + A[Y − 1] + A[Y + 1] + A[Y + 2] + ... + A[Z − 1]를 의미한다. 모든 경우에서 최대합을 구하여라 풀이 function solution(A) { let forward = new Array(A.length).fill(0); let backward = new Array(A.length).fill(0);..
-
[MySQL] 숫자가 포함된 문자열 정렬데이터베이스/MySQL 2022. 7. 6. 21:27
📝 오늘 업무 하면서 알게 된 것 기록! 업무중에 다수의 지점을 이름 기준으로 정렬해야 했는데 지점명에 한글, 영문뿐만 아니라 숫자도 포함이 된 상황이었다. 처음에는 단순히 아래처럼 쿼리를 작성했다. (회사에서 실제로 사용했던 쿼리를 여기다가 그대로 적을 수는 없으니 ORDER BY 부분만 참고) SELECT tb_a.area_name FROM group.tb_area AS tb_a ORDER BY tb_a.area_name; 숫자와 문자알아서 구분되어 정렬될 거라고 생각했으나 사진과 같이 숫자 부분이 예상과 다르게 정렬되었다. 결론부터 이야기하자면 MySQL에서 텍스트 타입의 숫자는 문자로 인식된다.(당연한 얘기긴 하지만...) 그렇기 때문에 숫자는 숫자대로 문자는 문자대로 기준에 맞게 정렬하기 위해..