성능 최적화

이 가이드에서는 Better Auth 앱의 성능을 향상시킬 수 있는 몇 가지 방법을 살펴봅니다.

캐싱

캐싱은 데이터베이스 쿼리 수를 줄이고 응답 시간을 단축하여 Better Auth 애플리케이션의 성능을 크게 향상시킬 수 있는 강력한 기술입니다.

쿠키 캐시

useSession 또는 getSession이 호출될 때마다 데이터베이스를 호출하는 것은 이상적이지 않습니다. 특히 세션이 자주 변경되지 않는 경우 더욱 그렇습니다. 쿠키 캐싱은 리프레시 토큰과 함께 JWT 액세스 토큰이 사용되는 방식과 유사하게 세션 데이터를 단기 서명된 쿠키에 저장하여 이를 처리합니다.

쿠키 캐싱을 활성화하려면 인증 설정에서 session.cookieCache를 설정하기만 하면 됩니다:

auth.ts
import { betterAuth } from "better-auth";

export const auth = betterAuth({
  session: {
    cookieCache: {
      enabled: true,
      maxAge: 5 * 60, // 캐시 기간(초)
    },
  },
});

쿠키 캐싱에 대해 자세히 알아보세요.

프레임워크 캐싱

다음은 다양한 프레임워크 및 환경에서 캐싱을 수행하는 방법의 예입니다:

Next v15부터 "use cache" 지시문을 사용하여 서버 함수의 응답을 캐시할 수 있습니다.

export async function getUsers() {
    'use cache'
    const { users } = await auth.api.listUsers();
    return users
}

NextJS use cache 지시문에 대해 여기에서 자세히 알아보세요.

Remix에서는 loader 함수의 cache 옵션을 사용하여 서버에서 응답을 캐시할 수 있습니다. 다음은 예제입니다:

import { json } from '@remix-run/node';

export const loader = async () => {
const { users } = await auth.api.listUsers();
return json(users, {
    headers: {
    'Cache-Control': 'max-age=3600', // 1시간 동안 캐시
    },
});
};

Remix의 Loader vs Route Cache Headers에 대한 좋은 가이드를 여기에서 읽을 수 있습니다.

SolidStart에서는 query 함수를 사용하여 데이터를 캐시할 수 있습니다. 다음은 예제입니다:

const getUsers = query(
    async () => (await auth.api.listUsers()).users,
    "getUsers"
);

SolidStart query 함수에 대해 여기에서 자세히 알아보세요.

React Query를 사용하면 useQuery 훅을 사용하여 데이터를 캐시할 수 있습니다. 다음은 예제입니다:

import { useQuery } from '@tanstack/react-query';

const fetchUsers = async () => {
    const { users } = await auth.api.listUsers();
    return users;
};

export default function Users() {
    const { data: users, isLoading } = useQuery('users', fetchUsers, {
        staleTime: 1000 * 60 * 15, // 15분 동안 캐시
    });

    if (isLoading) return <div>로딩 중...</div>;

    return (
        <ul>
            {users.map(user => (
                <li key={user.id}>{user.name}</li>
            ))}
        </ul>
    );
}

React Query use cache 지시문에 대해 여기에서 자세히 알아보세요.

SSR 최적화

서버 측 렌더링을 지원하는 프레임워크를 사용하는 경우 일반적으로 서버에서 사용자 세션을 미리 가져와 클라이언트에서 폴백으로 사용하는 것이 가장 좋습니다.

const session = await auth.api.getSession({
  headers: await headers(),
});
// 그런 다음 세션을 클라이언트에 전달

데이터베이스 최적화

Better Auth를 최대한 활용하려면 데이터베이스 성능 최적화가 필수적입니다.

인덱싱을 권장하는 필드

테이블필드플러그인
usersemail
accountsuserId
sessionsuserId, token
verificationsidentifier
invitationsemail, organizationIdorganization
membersuserId, organizationIdorganization
organizationsslugorganization
passkeyuserIdpasskey
twoFactorsecrettwoFactor

향후 스키마 생성 도구에 인덱싱 지원을 추가할 예정입니다.

On this page