gRPC 를 사용하면서 흔하게 볼 수 있었던 에러
rpc error: cdoe = unsupported data type
위 에러는 타입을 잘못 기입할때 발생한다

예를들어 위의 에러는 user 테이블에서 struct 구조가 아닌 형태로 Find() 혹은 First 함수를 사용하여 데이터를 얻으려고 할 때 발생했었다.
해결하기 위해선 알맞은 타입을 넣어주어야 한다.
rpc error: cdoe = Internal desc = conversation is not fount
위 에러는 notFound 관련 에러로 db에 해당 데이터가 없을때 발생한다.

rpc error: code = Unavailable desc = last resolver error: produced zero addresses
위 에러는 정말 자주 볼 수 있는 에러이다.
여러 상황에서 발생하는 에러인데 본 에러를 정리할때 이 에러가 발생한 상황은 다음과 같다.
필자는 sql 쿼리문을 GORM 을 통해 작성하고 있었다.
쿼리문이 예를들어 SELECT * FROM USER WHERE id NOT IN ('123', '456'); 이런 구문이 있다고 쳐보자.
그런데 IN 내에 값이 비어있을땐 어떻게 될까?
필자는 빈 배열이 NOT IN 에 들어가면 그대로 처리가 될 것이라 생각했었는데 해당 에러가 발생하고 DEBUG 를 해보니 해당 위치에 넣을 값이 비어있을 경우 NOT IN () 이렇게 처리가 되는게 아니라 그냥 저 자리에 FALSE 가 들어간다.
따라서 SELECT * FROM USER WHERE id FALSE;
이렇게 이상한 쿼리문이 들어가니 위의 에러가 발생한 것이었다.
하지만 본 에러의 원인은 다양한 것 같다. 저 에러를 하도 여러번 보다가 정리하게 된 것인데 이후 다른 원인에 의해 이 에러를 관측하게 되면 추가로 정리할 예정이다.

이 에러도 정말 자주 보았던 에러이다. 말 그대로 포인터 사용에 있어서 무언가 잘못했을때 해당 에러가 발생하는데 예를들어 포인터를 사용한다고 해두고 주소공간도 할당하지 않았을때 이 에러가 발생할때도 있었다. 보통 저 panic: runtime error 가 뜨고 가장 위에 표시된 코드라인으로 찾아가면 포인터를 사용한 코드가 있을텐데 해당 부분에서 포인터를 사용할때 주소공간을 할당해주면 에럴르 해결할 수 있다.
원인을 정리하자면 포인터나 슬라이스에 접근할때 빈값에 접근하면 panic 이 발생하게 되는 것이다.
이 에러는 map 관련 에러이지만 슬라이스를 사용할때도 이와 비슷한 에러를 볼 수 있다.
에러의 원인은 map 을 초기화하지 않은 상태에서 값을 할당하려 했기에 해당 panic 이 발생하게 된 것이다.
var m map[string]int
m = map[string]int{}
이렇게 해주거나 아니면 make 함수를 사용해서
m := make(map[stirng]int, 0)
이렇게 값이 없을때 nil 이 아니라 빈 map 을 반환하도록 하면 이후에 값을 할당할 수 있다.