https://facebook.com/groups/graphql-kr logo
#질문
Title
# 질문
u

한유리

03/02/2021, 2:22 AM
안녕하세요! python Graphene을 이용해서 GraphQL 백엔드를 만들고 있는데요, 원자성과 관련하여 궁금한 것이 있어 질문드립니다. • 기능 A ◦ product 생성 및 user 업데이트 • 기능 B ◦ product 생성 및 receipt 업데이트 요구사항이 이런 식으로 주어졌을 때, product 생성하는 로직이 중복되어서 아래와 같이 mutation을 쪼개서 만들었는데요! (이름은 예시입니다!) 이런식으로 한꺼번에 여러 mutation을 요청할 때, 여러 mutation이 원자성을 유지할 수 있도록 하는 방법이 없을까요?
Copy code
# 기능 A
mutation {
        createProduct(...) {...}
		updateuser(...) {...}
}

# 기능 B
mutation {
		createProduct(...) {...}
		updateReceipt(...) {...}
}
예를 들면, A에서 Product 생성을 성공했으나 User 업데이트에 실패한 경우 product 생성 역시 되지 않도록 하는 것을 하고 싶습니다! 트랜잭션을 하나로 관리하고 싶다면 분리하지 않는 것이 맞을까요? 혹시 이런 상황에서 중복되는 로직을 줄이려면 어떤식으로 해결하는게 좋을까요?
h

Hyeseong Kim

03/02/2021, 2:27 AM
설명해주신 그대로 기능 A, 기능 B가 각각 독립적인 뮤테이션이 되어야 할 걸로 보이네요. 뮤테이션 명도 CRUD식 작명 대신 "기능A", "기능B"로 변경하면 훨씬 자연스러울 것 같습니다.
👌 1
👍 1
u

한유리

03/02/2021, 2:30 AM
아하.. 그렇군요.. 그럼 중복되는 코드에 대해서는 함수로 분리하고 기능으로 나뉘어진 뮤테이션에서 해당 함수를 호출하는 식이 되겠군요! 빠른 답변 정말 감사합니다 🙏
t

Tony Won

03/02/2021, 2:49 AM
저도 혜성님 의견에 +1 합니다 ㅎㅎ 뮤테이션에 CRUD적인 작명은 피하는게 맞는거같더라구요. create, delete는 쓸수밖에 없는거같고 ㅎㅎ update는 비즈니스에 맞는 이름으로 각각 바꾸시면 더 좋을거같아요!
🙇 1
h

Hyeseong Kim

03/02/2021, 2:50 AM
u

한유리

03/02/2021, 2:55 AM
지금까지 설계를 잘못해왔던 것 같네요.. 코드가 복잡해져서 어떻게 하는게 좋을지 고민했었는데 많은 도움 얻어갑니다! graphql-rules 문서라는게 있는지 몰랐는데 이 문서도 도움이 많이 될 것 같아요!! 👏
t

Tony Won

03/02/2021, 2:56 AM
아니에요 ㅋㅋㅋ 다 각자 이유가 있는거죠~~ 시간되실때 #스키마리뷰 에 한번 공유해주시면 좋을거같아요! ㅋㅋ
u

박준혁

03/02/2021, 3:02 AM
저도 혜성님 의견에 +1합니당. 기능 A와 기능 B는 각각 독립된 비즈니스 로직으로 보여서 해당 비즈니스 로직에 맞는 뮤테이션명을 지어주는게 더 좋지 않나 싶어용~
🙇‍♀️ 1
t

Tony Won

03/02/2021, 3:03 AM
아 추가로 저는 Production-ready GraphQL 구매하셔서 거기 포함된 Schema Design cheat-sheet 보시는거 추천드립니다 ㅎㅎ
u

박준혁

03/02/2021, 3:04 AM
그런데 저도 서버에서는 A, B, C 뮤테이션을 각각 만들어놓고 클라이언트 사이드에서 (A, B), (A, C) 이렇게 조합해서 뮤테이션을 날렸을 때, 서버사이드에서 트랜잭션 처리가 되면 차암 좋겠다... 라는 생각을 했었습니당 🙂
h

Hyeseong Kim

03/02/2021, 3:05 AM
되면 안되죠 ㅋㅋㅋㅋ.....;;;;
u

박준혁

03/02/2021, 3:06 AM
넵넵 ㅋㅋㅋㅋ 되면 안되는건데 한때 저렇게 생각했었읍니당 ㅎㅎㅎㅎ
t

Tony Won

03/02/2021, 3:07 AM
뭔가 DataLoader 같은 느낌으로 묶을수있지 않을까요..?
h

Hyeseong Kim

03/02/2021, 3:07 AM
참고로 필드 리졸버에서 다른 필드 리졸버를 재사용하는건 뭐 자유로우니까요 트랜잭션 걸고 그대로 쓰셔도 되긴함
t

Tony Won

03/02/2021, 3:07 AM
TransactionLoader
🚀 1
h

Hyeseong Kim

03/02/2021, 3:07 AM
리졸버에서 리졸버 뜯어서 콜 하는건 종종 씁니다
code-first framework에선 이렇게 쓰기가 어려운데
schema-first 로 개발하면 매우 편해요
데이터로더는 좀 다를 수 있는게
뮤테이션은 스펙상 애초에 동시적으로 처리되는 녀석이 아니에요
하나실행하고 하나실행하고 이런게 스펙이라
👌 2
t

Tony Won

03/02/2021, 3:09 AM
아 맞네요;;
h

Hyeseong Kim

03/02/2021, 3:09 AM
쿼리만 동시적으로 처리됨
PRG cheat sheet 내용이 graphql rules 랑 대략 비슷할거에요
graphql rules 를 poor man's PRG 라고 보시면 ㅋㅋㅋ...
PRG 비쌈
😭 1
회사에 사달라고 하는게 현명합니다
u

한유리

03/02/2021, 5:10 AM
헉 모두 조언 감사합니다 회사에 Production-ready GraphQL 사달라고 해야겠네요!!
👍 2
zzzz 2
t

Tony Won

03/02/2021, 5:45 AM
그나저나 Graphene 쓰시는군요 ㅎㅎ 다음에 발표 한번 부탁드리러 가겠습니당 ㅋㅋㅋ
👀 1
u

한유리

03/02/2021, 6:10 AM
오 넵 기회 주시면 좋죠! ㅎㅎ 🙏