본문 바로가기

React Native

React Native와 GraphQL 통합하기

반응형

React Native와 GraphQL을 Apollo 클라이언트를 통해 통합하는 방법을 설명합니다. GraphQL의 기본 개념부터 Apollo 클라이언트를 이용한 React Native 프로젝트 설정, GraphQL 쿼리 및 뮤테이션 작성까지 자세한 살펴보겠습니다.

 

GraphQL이란 무엇인가?

GraphQL은 Facebook에서 개발한 데이터 쿼리 언어로, 클라이언트가 정확히 필요한 데이터만 요청하고 받을 수 있도록 도와줍니다. 기존의 REST API가 여러 엔드포인트를 통해 데이터를 가져와야 하는 반면, GraphQL은 단일 엔드포인트에서 필요한 모든 데이터를 가져올 수 있다는 점에서 차별화됩니다. 개발자들이 보다 효율적으로 네트워크 요청을 관리할 수 있도록 해 주며, 데이터 전송을 최적화하여 성능 개선에도 도움을 줍니다.

GraphQL의 개념과 특징

GraphQL은 클라이언트가 원하는 데이터 구조를 명확히 정의하고, 서버는 그 구조에 맞게 데이터를 반환합니다. 이를 통해 과도한 데이터 요청을 줄이고, 필요한 정보만을 정확하게 받을 수 있게 합니다. 예를 들어, 기존 REST API에서는 필요한 정보를 여러 번의 요청을 통해 모아야 했다면, GraphQL은 한 번의 요청으로 해결할 수 있습니다. 이러한 특징은 데이터 전송 효율성을 극대화합니다.

REST API와의 차이점

REST API는 각 리소스마다 고유의 엔드포인트를 가지며, 정해진 구조로 데이터를 반환합니다. 예를 들어, 사용자의 정보를 가져오는 REST API 호출은 다음과 같습니다.

GET /api/users/1

 

이 호출은 특정 사용자의 정보를 가져오지만, 만약 해당 사용자의 게시물도 필요하다면 추가적인 요청이 필요합니다.

GET /api/users/1/posts

 

이와 같은 방식으로, 필요한 정보를 얻기 위해 여러 번의 네트워크 요청이 필요하게 되며, 이는 네트워크 트래픽과 성능에 영향을 미칩니다. 특히 모바일 환경에서는 이런 방식이 데이터 전송량을 증가시키고 사용자 경험을 저하시키는 요인이 될 수 있습니다.

 

반면, GraphQL은 단일 엔드포인트를 사용하여 클라이언트가 필요한 데이터를 명확히 정의할 수 있습니다. 예를 들어, 사용자의 정보와 게시물을 동시에 가져오려면 다음과 같이 한 번의 요청으로 처리할 수 있습니다.

{
	user(id: "1") {
		id
		name
		posts {
			id
			title
		}
	}
}

 

이렇게 한 번의 요청으로 필요한 모든 데이터를 받을 수 있기 때문에 불필요한 데이터 전송을 줄일 수 있으며, 특히 모바일 환경에서는 데이터 트래픽을 줄이고 성능을 높이는 데 큰 장점이 됩니다. GraphQL은 REST API의 여러 엔드포인트 호출로 인한 과도한 네트워크 요청 문제를 해결할 수 있는 대안이 될 수 있습니다.

 

Apollo 클라이언트 소개

Apollo 클라이언트의 역할과 장점

Apollo 클라이언트는 GraphQL API와 통신하기 위해 널리 사용되는 클라이언트 라이브러리입니다. 이를 통해 클라이언트와 서버 간의 데이터 요청과 상태 관리를 간편하게 처리할 수 있습니다. Apollo는 캐싱, 에러 처리, 상태 관리 등 다양한 기능을 기본 제공하여 개발자가 더 쉽게 GraphQL을 활용할 수 있도록 도와줍니다.

React Native와의 통합 이유

React Native에서 Apollo 클라이언트를 사용하는 이유는 효율적인 데이터 관리와 간편한 통합에 있습니다. Apollo는 GraphQL의 쿼리와 뮤테이션을 쉽게 작성하고, 클라이언트 측에서 발생하는 복잡한 상태를 간단하게 관리할 수 있도록 해줍니다. 이를 통해 모바일 애플리케이션 개발 시 더 나은 사용자 경험을 제공할 수 있습니다.

 

React Native 프로젝트에 Apollo 클라이언트 설정하기

프로젝트 환경 준비

GraphQL을 통합하려면 먼저 React Native 프로젝트를 준비해야 합니다. React Native CLI 또는 Expo를 이용해 새로운 프로젝트를 생성하거나 기존 프로젝트에 통합할 수 있습니다. React Native CLI를 사용해서 프로젝트를 만들어 보겠습니다.

npx react-native init GraphQLDemo

 

프로젝트가 생성되면, 필요한 Apollo 클라이언트 라이브러리를 설치합니다.

Apollo 클라이언트 설치 및 기본 설정

다음 명령어를 사용해 Apollo 클라이언트와 GraphQL을 설치합니다.

npm install @apollo/client graphql

 

설치가 완료되면 Apollo 클라이언트를 설정합니다. 이를 위해 ApolloProvider를 사용하여 애플리케이션의 루트 컴포넌트를 감싸야 합니다.

import React from 'react';
import { ApolloClient, InMemoryCache, ApolloProvider } from '@apollo/client';
import App from './App';

const client = new ApolloClient({
	uri: 'https://your-graphql-endpoint.com/graphql',
	cache: new InMemoryCache(),
});

const Main = () => (
	<ApolloProvider client={client}>
		<App />
	</ApolloProvider>
);

export default Main;

 

위 코드에서는 ApolloClient를 생성하고, GraphQL 엔드포인트를 지정했습니다. 그런 다음, ApolloProvider를 사용하여 전체 앱에서 GraphQL 클라이언트를 사용할 수 있도록 설정했습니다.

 

ApolloProvider로 GraphQL 통합하기

ApolloProvider 컴포넌트 사용법

ApolloProvider는 애플리케이션에서 Apollo 클라이언트를 사용할 수 있도록 하는 역할을 합니다. 이를 통해 하위 컴포넌트들이 클라이언트 인스턴스를 이용해 GraphQL 요청을 수행할 수 있습니다. 애플리케이션의 루트 컴포넌트를 ApolloProvider로 감싸면, 앱 전반에서 GraphQL 요청을 쉽게 처리할 수 있습니다.

GraphQL 쿼리와 뮤테이션 작성하기

GraphQL의 주요 기능은 쿼리와 뮤테이션입니다. 쿼리는 데이터를 읽기 위한 요청이며, 뮤테이션은 데이터를 수정하기 위한 요청입니다. 다음은 React Native에서 Apollo 클라이언트를 사용해 GraphQL 쿼리를 작성하는 간단한 예시입니다.

import { gql, useQuery } from '@apollo/client';
import { View, Text } from 'react-native';

const GET_USERS = gql`
	query GetUsers {
		users {
			id
			name
			email
		}
	}
`;

const Users = () => {
	const { loading, error, data } = useQuery(GET_USERS);

	if (loading) return <Text>Loading...</Text>;
	if (error) return <Text>Error: {error.message}</Text>;
    
	return (
		<View>
			{data.users.map((user) => (
				<Text key={user.id}>{user.name} - {user.email}</Text>
			))}
		</View>
	);
};

export default Users;

 

이 예제에서는 useQuery 훅을 사용해 데이터를 가져왔습니다. GraphQL 쿼리를 작성하고, 이를 통해 사용자 목록을 불러와 화면에 출력합니다.

 

데이터를 업데이트하기 위해서는 뮤테이션을 사용합니다. 아래는 사용자의 이름을 업데이트하는 예시입니다.

import { gql, useMutation } from '@apollo/client';
import { Button } from 'react-native';

const UPDATE_USER_NAME = gql`
	mutation UpdateUserName($id: ID!, $name: String!) {
		updateUser(id: $id, name: $name) {
			id
			name
		}
	}
`;

const UpdateUserNameButton = ({ userId }) => {
	const [updateUserName] = useMutation(UPDATE_USER_NAME);
    
	const handleUpdate = () => {
		updateUserName({ variables: { id: userId, name: 'New Name' } });
	};

	return <Button title="Update Name" onPress={handleUpdate} />;
};

export default UpdateUserNameButton;

 

useMutation 훅을 사용하여 사용자 이름을 업데이트하는 뮤테이션을 호출합니다. 이와 같은 방법으로 사용자의 데이터를 쉽게 수정할 수 있습니다.

 

마무리하며

React Native에서 GraphQL을 통합하는 것은 데이터 관리와 네트워크 요청의 효율성을 높이는 데 큰 도움이 됩니다. Apollo 클라이언트를 사용하여 GraphQL과 쉽게 통합하고, 쿼리와 뮤테이션을 통해 데이터의 읽기와 쓰기를 간편하게 처리할 수 있습니다. 이를 통해 더욱 효율적이고 직관적인 모바일 애플리케이션을 개발할 수 있습니다. GraphQL의 강력한 기능과 Apollo 클라이언트의 간편함을 활용해 React Native 프로젝트를 한 단계 업그레이드해보면 좋을 것 같습니다.

반응형