분류 전체보기(222)
-
[이슈] Upsert 옵션 사용시 주의점 - E11000 duplicate key error
1. Upsert 동작 원리 및 문제 발생 상황 upsert는 filter에 정의된 Document를 확인한 후, filter에 해당하는 document가 존재하는 경우 update, 존재하지 않는 경우 insert를 수행하게 하는 옵션이다 Upsert의 수행과정을 나눠보면 조건확인 -> 쿼리실행의 순서로 진행된다. 이렇게 Step을 나누는 이유는 upsert가 모든 절차에 대해 Atomic하지 않고, 각 step마다 atomic하기 때문이다. 따라서 Upsert 옵션이 true인 여러개의 쿼리를 순차적으로 실행하는 경우, 1번 원소의 쿼리실행이 끝나지 않았음에도 2번 원소에 대한 쿼리가 실행될 수 있다. 예시 코드는 itemList에 대한 find를 수행한 후, 조건에 따라 itemList의 value..
2021.02.05 -
[이슈] nested한 Input을 useQuery/useMutation으로 전달하기
nested한 형태의 input을 서버로 쏘는데, 아폴로 클라이언트가 계속 인식을 못하는 이슈가 있었다. 해결 내용 정리해봄 gql 스키마에 이렇게 복잡한 input이 정의되어있다. makeQuantity라는 mutation에 전달되는 형태는 이렇다 이 경우 클라이언트에서 쿼리를 정의할 때 item, zoneList,equation값을 일일이 정의하면 안된다. mutation의 input인 projectId와 indirectInput만 정의해주면, nested하게 정의된 자료형은 전부 알아서 정의가 된다. 실제로 useMutation의 변수를 이렇게 담는다. indirectInput이 배열객체이므로 map을 통해 배열을 리턴해주고, 그 내부에는 필요한 형태의 자료들을 정의하여 담는다.
2021.02.05 -
[파이썬 머신러닝] 3. 사이킷런 (1)
실습1) 붓꽃 품종 예측하기 - 지도학습: 레이블 데이터로 학습한 뒤, 별도의 테스트 데이터 세트에서 레이블 예측 - 데이터 분류: 학습데이터와 테스트데이터로 분류 - Feature : 데이터 수집 후 learning전, feature selection을 통해 feature를 뽑는다. 이를 통해 Label을 찾아낸다. Step1- 사전 세팅 sklearn의 datasets 모듈은 데이터 세트, tree 모듈은 트리 기반 ML 알고리즘들의 모음, model_selection은 학습,검증,예측 데이터를 구분하는 도구들의 모음이다 각각의 모듈에서 from절로 필요한 함수 및 데이터를 import 한다. 예시의 경우 DecisionTreeClassifier라는 함수를 알고리즘으로, train_test_split..
2021.02.03 -
[이슈] state 배열 수정하기
kendo 컴포넌트 쓰다가 state의 배열을 수정할 일이 생겼다 역시나 마찬가지로 배열을 깊은 복사 처리한 후 조건에 따라 리턴하는 방식이었다. zoneList라는 배열을 변경하고 싶었다 zoneList는 여러가지 key를 가진 객체들의 배열이다. 나는 이벤트로 넘어온 id와 같은 id를 가진 원소들만 골라서, 원소들의 selected라는 key를 기존 값과 반대로 만들어주고 싶었다. 삭제에 filter를, 추가에 concat이나 spread operator를 이용한것처럼, 수정에도 map을 이용한다. 각 key에 대해 조건을 달아주고, 조건을 충족하면 기존 key는 spread operator형태로, 변경을 원하는 key의 key(원소의 key)는 수정 후 리턴해준다. 단 조건에 해당하지 않으면 ke..
2021.02.03 -
[이슈] usestate의 배열 속 원소 찾아서 제거하기
앞서 말했듯 리액트가 추구하는 불변성탓에 push나 splice등의 메소드를 사용할 수 없다 따라서 매번 새로운 배열을 만들어 조작해야 정상적인 객체간 비교가 가능하다 얕은 복사를 통해 조작하면, 배열같은 객체들의 State가 변경되었다고 감지할 수 없기 때문이다. (primitive type의 자료가 아닌이상 참조가 항상 유지된다) 따라서 새로운 배열을 만들어 조작해야, 버츄얼DOM과 실제 DOM의 변화가 인지되며 리렌더링이 된다. 배열 속 원소의 삭제도 마찬가지다. 예시코드이다. 해당 코드는 Grid에서 특정 원소를 한번 눌렀을때 selectedZone 배열에 추가되고, 한번 더 누르면 제거되는 로직이다. findIndex함수를 이용하여 배열 속 name이 event에서 넘어온 name과 같은 것들을..
2021.02.03 -
[이슈] state에 항목 추가하기
리액트의 불변성 유지 문제로 push를 이용하여 state에 새로운 항목을 추가할 수 없다 따라서 concat을 사용한다. 예시 코드처럼 selectedZone이라는 state가 있을때, 특정 이벤트마다 항목을 추가하려면 setState를 하되 기존의 selectedZone에 concat을 사용하여 배열을 추가하는 방식으로 한다. concat은 기존 배열을 수정하지 않고 새로운 배열을 만들어주기 때문에 불변성이 유지된다. + spread 연산자도 동일하게 사용 가능하다
2021.02.03