Skip to content
Migrating from NextAuth.js v4? Read our migration guide.
컨셉Database models

데이터베이스 모델

Auth.js는 어떤 데이터베이스와도 사용할 수 있습니다. 모델은 Auth.js가 데이터베이스에서 기대하는 구조를 알려줍니다. 사용하는 어댑터에 따라 모델이 약간 다를 수 있지만, 일반적으로 아래 그래프와 유사한 구조를 가집니다. 각 모델은 추가 필드로 확장할 수 있습니다.

Auth.js는 데이터베이스 행에 camelCase를 사용하지만, OAuth 관련 값에는 관례적인 snake_case 형식을 존중합니다. 혼합된 대소문자가 문제가 된다면, 대부분의 어댑터에는 특정 대소문자 규칙을 강제하는 방법에 대한 전용 문서 섹션이 있습니다.


User

User 모델은 사용자의 이름과 이메일 주소와 같은 정보를 담고 있습니다. 이메일 주소는 선택 사항이지만, User에 이메일 주소가 지정된 경우에는 반드시 고유해야 합니다.

💡

데이터베이스에서 사용자 생성은 자동으로 이루어지며, 사용자가 처음으로 인증 프로바이더(OAuth, 매직 링크 또는 일반 자격 증명)를 통해 로그인할 때 발생합니다.

OAuth 로그인

첫 로그인이 OAuth 프로바이더를 통해 이루어진 경우, 기본적으로 저장되는 데이터는 id, name, email, image입니다. 추가 프로필 데이터를 저장하려면 OAuth 프로바이더profile() 콜백에서 추가 필드를 반환하면 됩니다.

매직 링크 로그인

첫 로그인이 이메일 프로바이더를 통해 이루어진 경우, 저장되는 사용자 정보는 id, email, emailVerified이며, emailVerified는 사용자가 생성된 시간의 타임스탬프입니다.

Account

Account 모델은 User와 연결된 계정 정보를 담고 있습니다. 하나의 User는 여러 개의 Account를 가질 수 있지만, 각 Account는 하나의 User만 가질 수 있습니다.

💡

데이터베이스에서 Account 생성은 자동으로 이루어지며, 사용자가 처음으로 인증 프로바이더(OAuth, 매직 링크 또는 일반 자격 증명)를 통해 로그인하거나 Adapter.linkAccount 메서드가 호출될 때 발생합니다.

기본적으로 저장되는 데이터는 access_token, expires_at, refresh_token, id_token, token_type, scope, session_state입니다. 다른 필드를 저장하거나 필요 없는 필드를 제거하려면 OAuth 프로바이더account() 콜백에서 반환하면 됩니다.

AccountUser에 연결하는 작업은 자동으로 이루어지며, 동일한 이메일 주소를 가지고 있고 사용자가 현재 로그인한 상태일 때만 가능합니다. 이 요구 사항에 대한 자세한 내용은 FAQ를 참고하세요.

어댑터가 unlinkAccount 메서드를 구현한다면 수동으로 계정 연결을 해제할 수 있습니다. 데이터 손실을 방지하기 위해 필요한 모든 보안 조치를 취해야 합니다.

세션

데이터베이스를 사용하더라도 빠른 접근을 위해 JWT를 세션 처리에 사용할 수 있습니다. 이 경우, 데이터베이스에서 이 모델을 선택적으로 사용하지 않을 수 있습니다.

세션 모델은 데이터베이스 세션에 사용되며, 활성 사용자 세션에 대한 임의의 데이터를 저장할 수 있습니다. 하나의 User는 여러 개의 Session을 가질 수 있지만, 각 Session은 하나의 User만 가질 수 있습니다.

세션을 읽을 때, expires 필드를 확인하여 세션이 아직 유효한지 확인합니다. 만료된 경우, 데이터베이스에서 세션을 삭제합니다. 또한, 활성 세션 조회 중에 데이터베이스에 대한 추가 삭제 호출을 피하기 위해 주기적으로 백그라운드에서 이 정리 작업을 수행할 수 있습니다. 이는 약간의 성능 향상을 가져올 수 있습니다.

VerificationToken

VerificationToken 모델은 이메일 기반 매직 링크 로그인을 위한 토큰을 저장하는 데 사용됩니다.

한 명의 User는 여러 개의 활성화된 VerificationToken을 가질 수 있습니다 (예: 다른 기기로 로그인하는 경우).

💡

사용자가 로그인 절차를 잊어버리거나 실패하는 경우, 데이터베이스에 불필요한 행이 쌓일 수 있습니다. 이러한 데이터를 주기적으로 정리하여 데이터베이스가 불필요한 정보로 가득 차는 것을 방지하는 것이 좋습니다.

이 모델은 향후 다른 검증 목적 (예: 2FA / 매직 코드 등)으로 확장할 수 있도록 설계되었습니다.

Auth.js는 모든 토큰이 한 번만 사용 가능하도록 보장하며, 기본적으로 짧은 수명 (1일, maxAge로 설정 가능)을 가집니다. 사용자가 로그인 절차를 시간 내에 완료하지 못한 경우, 다시 로그인 절차를 시작해야 합니다.

Auth.js © Balázs Orbán and Team - 2025