error-repoting.txt 3.12 KB
* 개발 중 발생한 각종 오류에 관한 해결책을 담은 파일

- 1. Prisma 2 migration error ("There are more migrations in the database than locally ~")

https://stackoverflow.com/questions/60691027/prisma2-migrate-error-there-are-more-migrations-in-the-database-than-locally

원인
: DB 의 migration 과 prisma 의 migration 이 서로 불일치 할 때 나타나는 현상

위 원인이 발생하는 상황은 다음의 루트를 따랐기 때문에 발생한다고 볼 수 있다.

1. create migration
: prisma2 migrate save --name "init" --experimental
(Migration 생성)

2. execute migration
prisma2 migrate up --experimental
(migration 실행)

3. delete migration file in prisma/migrations 
(prisma 내부 migrations 폴더내의 migration 관련 파일 삭제)

4. try to run below command
prisma2 migrate save --name "new-migration" --experimental


이 프로젝트의 경우엔
처음에 도커 컨테이너를 생성하고 나서, 
prisma migrate 로 migration 을 생성해서 이미 관련된 로그 기록이 존재함
DB 의 migration 과 Backend 의 migration 이 서로 일치하지 않아서 생기는 문제 같은데
도커 컨테이너를 지우고 다시 실행하는게 가장 빠른 해결책
(근데 어떨때는 또 migration 이 서로 맞을 때도 있음)


- 2. Resolver Mapping 문제

https://stackoverflow.com/questions/62014031/graphql-always-return-null

원인
: merge-graphql-schemas 모듈을 활용하여 mergeResolvers 함수를 수행할때, 
Resolver 형태의 파일이 아닌 다른 형태의 파일이 끼어서, Mapping 이 정상적으로 작동하지 않는 경우

merge 를 할 대상에 속하는 모든 관련 파일들은 전부 Resolver 의 형태를 갖추고 있어야만함.
다른 종류의 파일이 오게 되면, mergeResolver 함수의 리턴 결과가 객체가 아닌 함수로 반환되기 때문에

GraphQL Playground 에서 쿼리문을 실행할때 항상 null 값으로 반환됨

그러므로, 반드시 api 폴더내에는 항상 형식에 맞는 파일만 와야함.


- 3. React Hook 의 종속성

React Hook "useQuery" is called in function "onSubmit" which is neither a React function component or a custom React Hook function

이런 오류가 뜰 경우,
react Hook 을 리액트 함수 컴포넌트나 리액트 훅이 아닌 다른 함수 내에서 사용하게 될때
발생하는 오류이다.
리액트 훅은 반드시 리액트로 만든 함수 컴포넌트 내부나 혹은 개발자가 직접 제작한 리액트 훅 내부에서만 사용가능하다.

- 4. React Hook 의 랜더링 순서

Rendered more hooks than during the previous render

이런 오류가 뜨는 경우, 리액트 훅이 랜더링 되는 시기에 undefined 혹은 null 인 데이터가 랜더링 되었기 때문에 발생한다.
React Hook 을 사용할 때는 몇가지 규칙이 있다.
(참고 : https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level)

가장 기본적으로 hook 은 어떤 조건문 이나, 반복문 등 에서 사용되선 안된다.
어떤 함수 내부적으로 소속된 형식에서 hook 을 쓰는 것이 아닌 hook 은 항상 top-level 에 존재해야한다.