GraphQL Subscriptions는 실시간 데이터를 전송하기 위한 기능을 제공하는 GraphQL의 일부입니다. 이를 사용하여 실시간 채팅, 알림, 주식 시세 업데이트 등 다양한 실시간 애플리케이션을 구축할 수 있습니다. 그러나 실시간 데이터를 전송하는 동안 인증과 권한 부여를 적용하는 것은 매우 중요합니다. 이번 글에서는 자바스크립트를 활용하여 GraphQL Subscriptions를 위한 인증과 권한 부여 방법에 대해 알아보겠습니다.
인증(Authentication)
GraphQL Subscriptions에서 인증을 설정하는 방법은 여러 가지가 있지만, 가장 일반적인 방법은 WebSocket 연결을 설정할 때 인증 토큰을 전달하는 것입니다. 사용자는 인증 토큰을 보내고 서버는 해당 토큰을 검증하여 사용자를 인증합니다. 추후 WebSocket 연결을 통해 실시간 데이터를 주고받을 때 인증된 사용자만 데이터를 수신할 수 있습니다.
const wsLink = new WebSocketLink({
uri: 'wss://your-graphql-server/graphql',
options: {
connectionParams: {
authToken: 'your-auth-token',
},
},
});
const apolloClient = new ApolloClient({
link: wsLink,
// ...
});
위의 예시에서는 connectionParams
를 통해 인증 토큰을 전달하고 있습니다. 이렇게 하면 GraphQL Subscriptions에 대한 인증이 설정됩니다.
권한 부여(Authorization)
인증된 사용자에게는 개인적인 데이터에 대한 접근 권한을 허용해야 합니다. 이를 위해 GraphQL 서버는 사용자의 권한을 확인하고 요청된 데이터에 접근할 수 있는지 검사해야 합니다. 대부분의 경우, GraphQL 스키마의 각 필드마다 권한 부여 로직을 작성하여 사용자의 역할에 따라 데이터 접근 권한을 제어할 수 있습니다.
예를 들어, 다음은 GraphQL 서버에서 특정 필드에 대한 권한을 검사하는 예시입니다.
const resolvers = {
Query: {
user: (parent, args, context) => {
if (!context.user.isAdmin) {
throw new Error('Unauthorized');
}
// ...
},
},
};
위의 예시에서는 user
필드에 대한 접근 권한을 검사하고, 관리자가 아닌 사용자가 접근하려고 하면 Unauthorized
에러를 발생시킵니다. 이렇게 필요한 모든 필드에 대해서 권한 검사 로직을 작성하면 사용자의 권한을 효과적으로 제어할 수 있습니다.
GraphQL Subscriptions를 활용하여 실시간 데이터를 전송하는 애플리케이션을 개발할 때, 인증과 권한 부여는 보안과 데이터 접근 제어를 위해 반드시 고려해야 하는 요소입니다. 위에서 소개한 방법들을 활용하여 GraphQL Subscriptions을 안전하고 신뢰성 높은 서비스로 구현해보세요.
참고 자료:
- Apollo Client Documentation
- GraphQL Subscriptions Documentation
- GraphQL Authorization and Authentication