Skip to content

Commit d497a44

Browse files
committed
feat: red lock 추가
1 parent 46d7dcb commit d497a44

File tree

5 files changed

+37
-2
lines changed

5 files changed

+37
-2
lines changed

apps/backend/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,16 @@
3939
"@types/multer": "^1.4.12",
4040
"class-transformer": "^0.5.1",
4141
"class-validator": "^0.14.1",
42-
"ioredis": "^5.4.1",
4342
"cookie-parser": "^1.4.7",
43+
"ioredis": "^5.4.1",
4444
"lib0": "^0.2.98",
4545
"passport": "^0.7.0",
4646
"passport-kakao": "^1.0.1",
4747
"passport-naver": "^1.0.6",
4848
"path": "^0.12.7",
4949
"pg": "^8.13.1",
5050
"prosemirror-view": "^1.37.0",
51+
"redlock": "^5.0.0-beta.2",
5152
"reflect-metadata": "^0.1.13",
5253
"rxjs": "^7.8.1",
5354
"socket.io": "^4.8.1",

apps/backend/src/app.module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import { WorkspaceModule } from './workspace/workspace.module';
2222
import { RoleModule } from './role/role.module';
2323
import { TasksModule } from './tasks/tasks.module';
2424
import { ScheduleModule } from '@nestjs/schedule';
25+
import { RedLockModule } from './red-lock/red-lock.module';
2526

2627
@Module({
2728
imports: [
@@ -60,6 +61,7 @@ import { ScheduleModule } from '@nestjs/schedule';
6061
WorkspaceModule,
6162
RoleModule,
6263
TasksModule,
64+
RedLockModule,
6365
],
6466
controllers: [AppController],
6567
providers: [AppService],

apps/backend/src/page/page.module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,14 @@ import { Page } from './page.entity';
66
import { PageRepository } from './page.repository';
77
import { NodeModule } from '../node/node.module';
88
import { WorkspaceModule } from '../workspace/workspace.module';
9+
import { RedLockModule } from '../red-lock/red-lock.module';
910

1011
@Module({
1112
imports: [
1213
TypeOrmModule.forFeature([Page]),
1314
forwardRef(() => NodeModule),
1415
WorkspaceModule,
16+
RedLockModule,
1517
],
1618
controllers: [PageController],
1719
providers: [PageService, PageRepository],

apps/backend/src/page/page.service.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Injectable } from '@nestjs/common';
1+
import { Injectable, Inject } from '@nestjs/common';
22
import { NodeRepository } from '../node/node.repository';
33
import { WorkspaceRepository } from '../workspace/workspace.repository';
44
import { PageRepository } from './page.repository';
@@ -8,13 +8,16 @@ import { UpdatePageDto } from './dtos/updatePage.dto';
88
import { UpdatePartialPageDto } from './dtos/updatePartialPage.dto';
99
import { PageNotFoundException } from '../exception/page.exception';
1010
import { WorkspaceNotFoundException } from '../exception/workspace.exception';
11+
import Redlock from 'redlock';
1112

13+
const RED_LOCK_TOKEN = 'RED_LOCK';
1214
@Injectable()
1315
export class PageService {
1416
constructor(
1517
private readonly pageRepository: PageRepository,
1618
private readonly nodeRepository: NodeRepository,
1719
private readonly workspaceRepository: WorkspaceRepository,
20+
@Inject(RED_LOCK_TOKEN) private readonly redisLock: Redlock,
1821
) {}
1922

2023
async createPage(dto: CreatePageDto): Promise<Page> {
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { Module } from '@nestjs/common';
2+
import Redis from 'ioredis';
3+
import Redlock from 'redlock';
4+
import { RedisModule } from '../redis/redis.module';
5+
const RED_LOCK_TOKEN = 'RED_LOCK';
6+
const REDIS_CLIENT_TOKEN = 'REDIS_CLIENT';
7+
8+
@Module({
9+
imports: [RedisModule],
10+
providers: [
11+
{
12+
provide: RED_LOCK_TOKEN,
13+
useFactory: (redisClient: Redis) => {
14+
return new Redlock([redisClient], {
15+
driftFactor: 0.01,
16+
retryCount: 10,
17+
retryDelay: 200,
18+
retryJitter: 200,
19+
automaticExtensionThreshold: 500,
20+
});
21+
},
22+
inject: [REDIS_CLIENT_TOKEN],
23+
},
24+
],
25+
exports: [RED_LOCK_TOKEN],
26+
})
27+
export class RedLockModule {}

0 commit comments

Comments
 (0)