Resolvers
Resolvers
์ผ๋ฐ์ ์ผ๋ก ๋ฆฌ์กธ๋ฒ ๋งต์ ์๋์ผ๋ก ์์ฑํด์ผ ํฉ๋๋ค. ๋ฐ๋ฉด, @nestjs/graphql
ํจํค์ง๋ ๋ฐ์ฝ๋ ์ดํฐ๊ฐ ์ ๊ณตํ๋ ๋ฉํ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ์กธ๋ฒ ๋งต์ ์๋์ผ๋ก ์์ฑํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ธฐ๋ณธ ์ฌํญ์ ๋ฐฐ์ฐ๊ธฐ ์ํด ๊ฐ๋จํ ์์ฑ์ API๋ฅผ ์์ฑํฉ๋๋ค.
Schema first
์ด์ ์ฑํฐ์์ ์ธ๊ธํ๋ฏ์ด, ์คํค๋ง ์ฒซ๋ฒ์งธ ์ ๊ทผ ๋ฐฉ์์์๋ SDL์์ ์ ํ์ ์๋์ผ๋ก ์ ์ํด์ผํฉ๋๋ค (์ฌ๊ธฐ).
GraphQL ์คํค๋ง์๋ author(id: Int!): Author
๋ผ๋ ๋จ์ผ ์ฟผ๋ฆฌ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ์ด์ AuthorResolver
๋ฅผ ๋ง๋ค์ด ๋ณด์.
info ํํธ
@Resolver()
๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ํด๋์ค๋ฅผ@Injectable()
์ผ๋ก ํ์ํ ํ์๊ฐ ์์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ํ์ํฉ๋๋ค.
@Resolver()
๋ฐ์ฝ๋ ์ดํฐ๋ ์ฟผ๋ฆฌ์ ๋์ฐ๋ณ์ด (@Query()
์ @Mutation()
๋ฐ์ฝ๋ ์ดํฐ ๋ชจ๋)์ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค. ์ด ํน์ ํด๋์ค ๋ด๋ถ์ ๊ฐ @ResolveProperty()
์๋ ๋ถ๋ชจ (์ด ๊ฒฝ์ฐ์๋ Author
์ ํ) (Author.posts
๊ด๊ณ)๊ฐ ์์์ Nest์๊ฒ๋ง ์๋ ค์ค๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ํด๋์ค ์๋จ์@Resolver()
๋ฅผ ์ค์ ํ๋ ๋์ ๋ฉ์๋์ ๊ฐ๊น๊ฒ ์ํํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ํ๋์ ํด๋์ค ์์ ์ฌ๋ฌ ๊ฐ์ @ResolveProperty()
๊ฐ ์๋ค๋ฉด, ๋ฐ๋์ @Resolver()
๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ฆฌ๋ ๋ฉ์๋ ์ด๋ฆ์ผ๋ก getAuthor()
๋๋ getPosts()
์ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํฉ๋๋ค. ๋ฐ์ฝ๋ ์ดํฐ์ ๊ดํธ ์ฌ์ด์์ ์ค์ ์ด๋ฆ์ ์ด๋ํ๋ฉด ์ฝ๊ฒ ํ ์ ์์ต๋๋ค.
info ํํธ
@Resolver()
๋ฐ์ฝ๋ ์ดํฐ๋ ๋ฉ์๋ ์์ค์์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Typings
์ด์ ์ฑํฐ์์ ํ์ดํ ์์ฑ ๊ธฐ๋ฅ (outputAs: 'class'
ํฌํจ)์ ํ์ฑํ ํ๋ค๊ณ ๊ฐ์ ํ๋ฉด ์์ฉ ํ๋ก๊ทธ๋จ์ ์คํํ๋ฉด ๋ค์ ํ์ผ์ด ์์ฑ๋ฉ๋๋ค.
ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ ํจ์ฑ ๊ฒ์ฌ ๋ชฉ์ ์์ ๋งค์ฐ ์ ์ฉํฉ๋๋ค (์ฌ๊ธฐ ์ฐธ์กฐ). ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
warning ์๋ฆผ ์ ๋ ฅ ๋ฐ ํ๋ผ๋ฏธํฐ์ ์๋ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ํ์ฑํํ๋ ค๋ฉด
ValidationPipe
๋ฅผ ์ฌ์ฉํด์ผํฉ๋๋ค. ์ ํจ์ฑ ๊ฒ์ฌ ์ฌ๊ธฐ ๋๋ ํ์ดํ ์ฌ๊ธฐ์ ๋ํด ์์ธํ ์์๋ณด์ญ์์ค.
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์๋์ผ๋ก ์์ฑ๋ ํ์ผ์ ์ง์ ์ถ๊ฐํ๋ฉด ์ฐ์๋ ๊ฐ ๋ณ๊ฒฝ์ ๋ฐ๋ผ ์ ๊ฑฐ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ณ๋์ ํ์ผ์ ์์ฑํ๊ณ ์์ฑ๋ ํด๋์ค๋ฅผ ๊ฐ๋จํ ํ์ฅํด์ผํฉ๋๋ค.
Code first
์ฝ๋ ์ฐ์ ์ ๊ทผ ๋ฐฉ์์์๋ SDL์ ์ง์ ์์ฑํ ํ์๊ฐ ์์ต๋๋ค. ๋์ ๋ฐ์ฝ๋ ์ดํฐ ๋ง ์ฌ์ฉํฉ๋๋ค.
Author
๋ชจ๋ธ์ด ์์ฑ๋์์ต๋๋ค. ์ด์ ๋๋ฝ๋ Post
ํด๋์ค๋ฅผ ๋ง๋ค์ด ๋ด
์๋ค.
๋ชจ๋ธ์ด ์ค๋น๋์์ผ๋ฏ๋ก ๋ฆฌ์กธ๋ฒ ํด๋์ค๋ก ์ด๋ํ ์ ์์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ฆฌ๋ ๋ฉ์๋ ์ด๋ฆ์ผ๋ก getAuthor()
๋๋ getPosts()
์ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํฉ๋๋ค. ์ค๋ช
์ ๋ฐ์ฝ๋ ์ดํฐ๋ก ์ฎ๊ฒจ์ ์ฝ๊ฒ ํ ์ ์์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ด๋ฌํ ๊ฐ์ฒด๋ฅผ @Args()
๋ฐ์ฝ๋ ์ดํฐ๋ก ์ ๋ฌํ ํ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์๋ณ์ ์ ํ์ด ๋ฌธ์์ด์ด๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์ฑํ๋ฉด๋ฉ๋๋ค.
๊ทธ๋ฌ๋ ์ซ์
์ ํ์ ์์๋๋ GraphQL ํํ (Int
๋ Float
)์ ๋ํ ์ถฉ๋ถํ ์ ๋ณด๋ฅผ type-graphql
์ ์ ๊ณตํ์ง ์์ผ๋ฏ๋ก ํ์ ๋ ํผ๋ฐ์ค๋ฅผ ๋ช
์์ ์ผ๋ก ์ ๋ฌํด์ผ ํฉ๋๋ค.
๋ํ ์ ์ฉ AuthorArgs
ํด๋์ค๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
๋ค์ ๋ณธ๋ฌธ์ผ๋ก:
info ํํธ
@Field()
์@ArgsType()
๋ฐ์ฝ๋ ์ดํฐ๋ ๋ชจ๋ type-graphql ํจํค์ง์์ ๊ฐ์ ธ์ค๊ณ ,@Min()
์ ํด๋์ค ์ ํจ์ฑ ๊ฒ์ฌ๊ธฐ์์ ๊ฐ์ ธ์ต๋๋ค.
๋ํ ์ด๋ฌํ ํด๋์ค๋ ValidationPipe
(์ฌ๊ธฐ ์ฝ๊ธฐ)์์ ๋งค์ฐ ์ ์๋ํฉ๋๋ค.
Decorators
์ ์ฉ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์๊ณผ ๊ฐ์ ์ฃผ์ฅ์ ์ธ๊ธํ ์ ์์ต๋๋ค. ์๋๋ ์ ๊ณต๋ ๋ฐ์ฝ๋ ์ดํฐ์ ์ด๋ค์ด ๋ํ๋ด๋ ์ผ๋ฐ ์ํด๋ก ํ๋ผ๋ฏธํฐ๋ฅผ ๋น๊ตํ ๊ฒ์ ๋๋ค.
@Root()
and @Parent()
root
/parent
@Context(param?: string)
context
/ context[param]
@Info(param?: string)
info
/ info[param]
@Args(param?: string)
args
/ args[param]
Module
์ฌ๊ธฐ์์ ์๋ฃ๋๋ฉด, ์๋ฅผ ๋ค์ด ์๋ก ์์ฑ๋ AuthorsModule
๋ด๋ถ์ AuthorResolver
๋ฅผ ๋ฑ๋กํด์ผ ํฉ๋๋ค.
GraphQLModule
์ ๋ฉํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ํ๊ณ ํด๋์ค๋ฅผ ์ฌ๋ฐ๋ฅธ ๋ฆฌ์กธ๋ฒ ๋งต์ผ๋ก ์๋ ๋ณํํฉ๋๋ค. ์์์ผ ํ ์ ์ผํ ๊ฒ์ ์ด ๋ชจ๋์ ์ด๋๊ฐ์ ๊ฐ์ ธ์์ผ ํ๋ค๋ ๊ฒ์
๋๋ค. ๋ฐ๋ผ์ Nest๋ AuthorsModule
์ด ์ค์ ๋ก ์กด์ฌํจ์ ์๊ฒ๋ฉ๋๋ค.
info ํํธ GraphQL ์ฟผ๋ฆฌ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
Last updated
Was this helpful?