console.log(undefined === null) // falseconsole.log(undefined == null) // trueundefind: 변수만 선언하고, 값을 할당하지 않은 상태.null: 변수를 선언하고, 빈 값을 할당한 상태. - 두 차이는 무엇일까 ?아래 코드블럭을 보자.let x;console.log(x); // undefinedlet y = null;console.log(y); // object x와 y의 타입이 서로 다른 것을 볼 수 있다. javascript에서는 return ; 이나, 몇몇 내장 메소드에서는 반환할 값이 없을 때 undefined를 반환한다. 얕은 비교(Shallow compare), 깊은 비교 시 차이가 있다.console.log(undefi..
1. 서론아침에 회사 DB가 두 번이나 터졌다. 종종 발생하던 문제임을 감안했을 때, 데이터를 인위적으로 서비스 도중에 밀어넣을 때 발생했다는 생각이 들었다. 서버에서는 비즈니스 로직 수행을 위해 DB에 Query, Mutation 요청을 한다. 이 경우 DB에서는 비즈니스 로직에서 필요로 하는 테이블로부터 요청한 데이터를 찾기 위한 동작을 진행한다. 내 상황의 경우 서비스 되고 있던 서버이기 때문에 비즈니스 로직 상 다량의 조회가 발생하는 테이블에 값을 밀어넣었을 때 문제가 생겼다고 생각했다. 여기서 한가지 의문이 생겼다. 시스템이 서비스 중인 상황을 감안하여 사용이 덜 될 것 같은 데이터를 입력했는데, 그럼에도 불구하고 DB부하가 걸리는 이유가 궁금했다. 이에 찾던 중 얻은 실마리가 Explain ..
1. 상황(or 요구사항)엑셀 데이터를 배치 처리하여 DB에 업로드하는 과정에서, 엑셀 파일 내에 이미 DB에 있는 데이터가 있을 경우, 중복해서 데이터를 입력하지 않기 위한 방법이 필요했다. 시도해 본 방법 중 주어진 상황에 가장 효율적으로 보이는 것이 Upsert 기법이었다. 이제부터 소개해보도록 하자.2. 접근법1) DB 제약사항 설정첫번째 방법은 필요한 데이터베이스에 Unique 제약사항을 추가하는 것이다.(Upsert에서도 필요한 기법이라고 생각한다.)장점DB 정합성이 보장된다.단점여러 데이터를 한번에 올리는 쿼리를 수행할 수 없다.(데이터 중 중복값이 있을 경우 예외를 던지기 때문에)2) 서버 체크 - 레코드 단위첫번째 방법은 서버에 예외를 던지기 때문에 Row Data를 개별 업로드를 해서..
https://school.programmers.co.kr/learn/courses/30/lessons/431051. 문제 정의삼각형의 꼭대기에서 바닥까지 이동할 때, 거쳐간 위치의 숫자 합이 가장 큰 값을 찾아라. 2. 제한 사항1 0 3. 풀이1) 공간 복잡도 = O(n)Array: 삼각형 각 위치의 개수를 n개로 놓을 때, n개의 원소로 구성된 배열 1개. (힙 구조로도 풀 수 있다.)2) 시간 복잡도 = O(n) 3) 알고리즘위에서 아래로 내려가면서 층수가 올라간다고 가정했을 때, 2층에서부터 시작한다.위의 층(2층 기준 1층)의 자신 왼쪽 또는 오른쪽 노드를 확인하여 큰 값과 자신을 더한다. (노드가 한 개일 경우 그 값을 더 한다.)바닥에 계산된 결과 중 최대값을 찾는다.4. 예제 코드f..
https://school.programmers.co.kr/learn/courses/30/lessons/1545401. 문제 정의섬마다 놓인 식량이 있다. 각 섬에 있는 식량의 총량을 오름차순의 배열에 나타내고, 없다면 -1을 담아 리턴하라. 2. 제한 사항1) 격자의 크기는 3이상, 100이하이다.2) 각 값은 X 또는 1~9 사이의 자연수이다. 3. 풀이1) 공간 복잡도 = O(N^2)2-D Array: 하나의 섬 여부를 나타낼 입력 크기와 같은 2차원 배열 1개.2) 시간 복잡도 = O(N^2) 3) 알고리즘같은 섬을 찾는다.섬 별 식량의 총합을 구한다.섬별 식량 총량을 오름차순으로 정렬한다. 여기에서, 1. 같은 섬을 찾는다의 경우, 추상화를 많이 해둬, 좀 더 상세히 설명하자면 Recursion..
상황랩탑을 바꾸면서 기존 맥북에서 사용하던 환경변수, 서비스들을 마이그레이션 하는 과정에서, 파이썬 서버를 설치하다 위와 같은 문제를 마주쳤다.(MacOS에서 지원하는 migration이 너무 느려가지고.. 안했던 것도 이유가 될 지도.)그래서, externally-managed-environment 가 뭔데?파이썬 pep-0668 표준에 의해 OS 패키지 관리자와 파이썬 패키지 관리 도구의 충돌을 막기 위해 외부 환경(OS 패키지 관리자)이 파이썬 패키지를 관리하게 하는 일종의 마커이다. 파이썬 설치 시에 EXTERNALLY-MANAGED라는 마커 파일을 생성하여 OS 패키지 관리자에 의해 관리되고 있음을 나타낸다. 이를 통해 pip가 전역으로 패키지를 설치, 수정, 삭제할 수 없게 하는 경고문이다. ..
1. 문제 상황일일 통계자료를 입력하는 화면을 만들고 있었다. 일일 통계자료에 Input이 몇 개 있었는데, 기본 값을 0으로 설정했더니 저장 버튼을 눌러도 Input Value가 없다는 결과가 떴다.(물론 내가 Empty를 방지해서 그렇다.) 그래서 원인을 분석해봤다. 2. 원인Truly, Falsy에 대해 어렴풋이 알고 있었기 때문이었다. Javascript의 큰 특징 중에는 Type Inference(타입 추론)가 있다. Runtime 시점에 필요한 타입을 정한다. 그렇기 때문에 어떤 타입이던 올 수 있다. 그렇다면? 특정 변수가 선언이 되어 있는지, 특정 타입의 유효한 값인지 확인하려면 정말 많은 조건처리를 해줘야 할 것이다. isNaN이나, undefined, null 등 비유효한 값이 들어올 ..
1. 동기 + 사전지식 useCallback은 useMemo의 함수 버전으로 알고 있다. 두 Hooks는 함수, 변수를 Memoization해서 재사용성을 높이고, 성능을 향상시킨다고 하는데, 실제 개발에서는 DOM 트리의 복잡도와 설계 복잡도가 높아짐에 따라 원하는 대로 작동하지 않았다. 예상 시나리오와 실제 결과를 테스트 하면서 몸소 익히고, 관련 개발문서 및 레퍼런스로 참고한 자료들을 적어둘까 한다. 2. 초기 코드 useCallback 테스트를 위해 예제 코드를 만들어보자. import { useState } from "react"; export const UseCallbackExample: React.FC = () => { const [todos, setTodos] = useState([]); ..