Skip to content
Migrating from NextAuth.js v4? Read our migration guide.

DynamoDB Adapter

리소스

설정

설치

npm install @auth/dynamodb-adapter @aws-sdk/lib-dynamodb @aws-sdk/client-dynamodb

환경 변수

AUTH_DYNAMODB_ID=accessKey
AUTH_DYNAMODB_SECRET=secretKey
AUTH_DYNAMODB_REGION=eu-west-1

설정

모듈형 aws-sdk v3에서 DynamoDBDocument 클라이언트를 어댑터에 전달해야 합니다. 기본 테이블 이름은 next-auth이지만, 어댑터의 두 번째 매개변수로 { tableName: 'your-table-name' }을 전달하여 커스터마이즈할 수 있습니다.

./auth.ts
import NextAuth from "next-auth"
import { DynamoDB, DynamoDBClientConfig } from "@aws-sdk/client-dynamodb"
import { DynamoDBDocument } from "@aws-sdk/lib-dynamodb"
import { DynamoDBAdapter } from "@auth/dynamodb-adapter"
 
const config: DynamoDBClientConfig = {
  credentials: {
    accessKeyId: process.env.AUTH_DYNAMODB_ID,
    secretAccessKey: process.env.AUTH_DYNAMODB_SECRET,
  },
  region: process.env.AUTH_DYNAMODB_REGION,
}
 
const client = DynamoDBDocument.from(new DynamoDB(config), {
  marshallOptions: {
    convertEmptyValues: true,
    removeUndefinedValues: true,
    convertClassInstanceToMap: true,
  },
})
 
export const { handlers, auth, signIn, signOut } = NextAuth({
  providers: []
  adapter: DynamoDBAdapter(client),
})

AWS Credentials

AWS 서비스/리소스에 접근 권한을 부여할 때는 항상 최소 권한 원칙을 따르세요. 특정 작업을 수행하는 데 필요한 최소한의 작업만 허용해야 합니다.

  1. AWS 콘솔을 열고 “IAM”으로 이동한 후 “Users”를 선택하세요.
  2. 새로운 사용자를 생성하세요. 이 사용자의 목적은 DynamoDB에 프로그래밍 방식으로 접근할 수 있도록 하는 것입니다.
  3. 액세스 키를 생성한 후 Key ID와 Secret을 .env/.env.local 파일에 복사하세요.
  4. “Add Permission”을 선택하고 “Create Inline Policy”를 선택하세요.
  5. 아래 JSON을 JSON 입력란에 복사하고 region, account_id, table_name을 여러분의 값으로 대체하세요.
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DynamoDBAccess",
      "Effect": "Allow",
      "Action": [
        "dynamodb:BatchGetItem",
        "dynamodb:BatchWriteItem",
        "dynamodb:Describe*",
        "dynamodb:List*",
        "dynamodb:PutItem",
        "dynamodb:DeleteItem",
        "dynamodb:GetItem",
        "dynamodb:Scan",
        "dynamodb:Query",
        "dynamodb:UpdateItem"
      ],
      "Resource": [
        "arn:aws:dynamodb:{region}:{account_id}:table/{table_name}",
        "arn:aws:dynamodb:{region}:{account_id}:table/{table_name}/index/GSI1"
      ]
    }
  ]
}

Advanced usage

IaC 템플릿

아래는 DynamoDB를 빠르게 구축할 수 있도록 도와주는 인기 프로바이더들의 인프라스트럭처 코드(IaC) 템플릿입니다.

기본 스키마

이 테이블은 단일 테이블 디자인 패턴을 따릅니다. 이 패턴은 여러 장점을 가지고 있습니다:

  • 관리, 모니터링, 프로비저닝할 테이블이 하나뿐입니다.
  • 다중 테이블 스키마보다 관계를 조회하는 속도가 빠릅니다 (예: 사용자의 모든 세션을 가져오는 경우).
  • 다중 리전으로 확장하려면 하나의 테이블만 복제하면 됩니다.

DynamoDB Table

기본적으로, 어댑터는 pk를 파티션 키로, sk를 정렬 키로 가지는 테이블과 GSI1PK를 파티션 키로, GSI1SK를 정렬 키로 가지는 GSI1이라는 글로벌 보조 인덱스를 기대합니다. DynamoDB TTL을 사용하여 세션과 검증 요청이 만료된 후 자동으로 삭제되도록 하려면, expires 속성 이름으로 TTL을 활성화해야 합니다. 테이블 이름과 청구 방식을 원하는 대로 설정할 수 있습니다. 아래 테이블 구조 섹션에서 전체 스키마를 확인할 수 있습니다.

커스텀 스키마 사용하기

options 키를 어댑터 생성자에 전달하여 커스텀 테이블 스키마를 설정할 수 있습니다:

./auth.js
const adapter = DynamoDBAdapter(client, {
  tableName: "custom-table-name",
  partitionKey: "custom-pk",
  sortKey: "custom-sk",
  indexName: "custom-index-name",
  indexPartitionKey: "custom-index-pk",
  indexSortKey: "custom-index-sk",
})
Auth.js © Balázs Orbán and Team - 2025