인프런 커뮤니티 질문&답변

장주윤님의 프로필 이미지

작성한 질문수

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

playground 오류 10-06-one-to-one

해결된 질문

작성

·

239

0

다음과 같이 playground에서 mutation한 결과 "Cannot return null for non-nullable field Product.productSalesLocation." 오류 메시지가 뜹니다. mutation안의 반환값으로 product의 column만 받을 때는 오류 없이 작동되었는데 productSalesLocation의 column을 반환하려 하면 다음과 같이 오류가 뜹니다.

위 사진을 보시면 DBeaver에 product와 saleslocation에 생성한 값이 잘 입력되었지만

product table에서 productSalesLocationID가 NULL값으로 되어있습니다.

이 부분에 연관된 코드가 여러 파일로 나뉘어져있어 코드 어느 부분을 확인해야 하는지 알려주시면 해당 코드 캡처본을 보내드리겠습니다.

답변 2

1

안녕하세요, 인프런 AI 인턴입니다.

장주윤님, 문의하신 “Cannot return null for non-nullable field Product.productSalesLocation.” 오류 관련하여 다음 단계를 확인해보시면 도움이 될 것 같습니다.

  1. GraphQL 스키마 정의에 Product 타입에 대한 productSalesLocation 필드가 Non-nullable로 정의되어 있는지 확인해주세요. 만약 Non-nullable 필드로 지정되어 있다면, Product를 생성할 때 반드시 productSalesLocation 값을 제공해야 합니다.

  2. Playground에서 실행한 Mutation 쿼리가 productSalesLocation에 대한 입력 값을 올바르게 포함하고 있는지 확인해보시기 바랍니다. 입력 값이 누락되었거나 잘못된 형식으로 작성되었다면 오류가 발생할 수 있습니다.

  3. 백엔드에서 productSalesLocation을 처리하는 로직이 올바르게 작동하고 있는지 확인해 보세요. 예를 들어, 데이터베이스에 productSalesLocation 데이터를 저장하는 로직이 정상적으로 작동해야 오류가 발생하지 않습니다.

  4. 아래에 제시된 데이터베이스 스키마 기반으로 productSalesLocationID 컬럼이 NULL 값을 가지고 있지 않도록 해야 합니다. 그 과정에서 DBeaver에서 캡처한 productSalesLocation 테이블에 데이터가 존재하는 것으로 보이니, 해당 값이 올바르게 Product 엔티티와 연관되어 있는지 확인이 필요합니다.

이 문제를 해결하기 위해 백엔드에서 GraphQL 리졸버를 다루는 부분, 데이터베이스와 연동하여 실제 데이터를 처리하는 서비스 계층 코드, 그리고 데이터베이스 엔티티 설계에 관련된 코드를 주요 확인 대상으로 삼으면 좋을 것 같습니다. 필요한 부분을 체계적으로 점검하시면 해당 문제의 원인을 파악하고 해결할 수 있을 겁니다.

장주윤님의 프로필 이미지
장주윤
질문자

말씀하신대로 점검 해본결과

1번 productSalesLocation 필드를 확인해보았을 때 non-nullable로 정의되어있지 않았습니다. (아래에 코드사진 첨부했어요)

2번

imagemutation쿼리에 productSaleslocation입력값 중 하나인 meetingTime을 했을 때의 오류입니다. 다른값을 입력해도 모두 동일한 오류를 보입니다.

  1. 로직을 강의를 다시보며 코드를 쳐보아도 같은 결과가 나왔습니다ㅜ..

  2. 아래 코드사진으로 보시면 product.entity부분과 productSaleslocation.entity 부분이 오류없이 연결된것을 확인할 수 있습니다.

 

코드는 핵심 로직만 추려서 캡처했습니다! 코드에 문제가 있는지 확인 한번 부탁드립니다ㅜㅜ

 

product.entity

image

productSaleslocation.entity

image

products.resolver

image

create-product.input

image

product-Saleslocation.input

image

product.service

image

productSaleslocations.service

image

 

 

0

노원두님의 프로필 이미지
노원두
지식공유자

안녕하세요! 주윤님!

스크린샷을 확인해 보니, 문제의 핵심은 아래와 같습니다!
1. product, productionSaleslocation 등록을 했다.
2. product가 DB에 등록되었다.
3. productSaleslocation이 DB에 등록되었다.
4. 하지만, DB를 보면 product 에서 연결되는 productSaleslocationId 부분이 비어있다(연결되지 않았다.)
5. 따라서, 조회를하니 product만 조회가 되고, productSaleslocation을 연결해서 가져오지는 못한다.

여기서 핵심은 4번에 product 테이블에 왜 productSaleslocationId가 비어있냐가 되겠죠!
왜 비어있는지를 확인하기 위해서 아래의 사진을 봐주세요!
아래는 product를 등록하는 사진입니다!
result 부분이 productSaleslocation을 먼저 저장하는 부분이고,
result2부분이 product를 저장하는 부분이 되겠네요!(result를 productSaleslocation에 연결도 하고 있네요!)
image

 

아래 사진에서 product와 productSaleslocation 각각은 잘 저장이 되었으나,
product에서 productSaleslocation을 연결하는 부분에서 실패했어요!

image

 

그 이유는, 아래의 product 테이블에 productSaleslocation 컬럼이 대문자 Location으로 잘못 적혀져 있는 것이 원인인 것 같네요!^^
해당 부분을 수정하여 다시 한 번 시도해 주세요!
image

장주윤님의 프로필 이미지
장주윤
질문자

철자하나 오류였네요..ㅜ

바로 해결됐습니다.! 앞으론 더 꼼꼼히 살펴야겠어요. 몇날며칠을 해결해보려해도 해결이 안 됐었는데... 감사합니다!!