inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core

Column Annotation들 탐구하기

@VersionColumn() save 관련 질문

102

zoezoe

작성한 질문수 4

0

@VersionColumn() 관련하여

'save()함수가 몇번 불렸는지 기억한다' 라고 하셔서

save함수가 불린 횟수에 따라 1씩 증가하는 것으로 처음에 이해를 했었는데,

 

강의 영상과 조금 다르게 service & controller 나눠 작성하는 연습을 하다가 아래와 같이

title을 동일한 값으로 수정하는 코드를 작성했었습니다

async PatchUsers(id: string) {
  const user = await this.userRepository.findOne({
    where: {
      id,
    },
  });

  if (!user) {
    throw new NotFoundException();
  }
  console.log('Before save - Version:', user.version);

  if (user) {
    user.title = '수정하기';
  }

  const newUser = await this.userRepository.save(user);
  console.log('After save - Version:', user.version);

  return newUser;
}

이때 title이 이전과 동일하면 실제로 save함수는 실행이 되지만 DB상에 변화가 없기 때문에 @VersionColumn() 으로 정의한 version에는 변화가 없는 것 같은데

 

save함수의 실행횟수보다 db의 변화가 있는지에 초점을 맞춰서 생각하면 될까요 ?

 

javascript typescript rest-api nestjs backend

답변 2

0

코드팩토리

안녕하세요!

제가 설명을 잘 못한 것 같군요.

말씀하신게 맞습니다.

실제 변경이 이뤄져야 됩니다.

감사합니다!

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. zoezoe님.

여러 질문에서 다룬 바와 같이, @VersionColumn()은 데이터베이스의 행(row)이 실제로 변경되었을 때만 업데이트됩니다. save() 메소드는 호출되었을 때 항상 데이터베이스에 저장을 시도하지만, 그 동안 데이터가 변경되지 않은 경우에는 @VersionColumn()이 증가하지 않습니다.

기본적으로 @VersionColumn()은 Optimistic Locking을 위해 사용되며, 데이터 무결성을 보장하기 위한 것입니다. 이로 인해 실제로 변경이 있어야만 버전 번호가 증가하게 됩니다.

유사한 주제와 관련이 있는 기존 답변으로는 아래 두 링크를 참고하실 수 있습니다:

  1. @VersionColumn() 질문
    • 이 질문에서는 히스토리 관리와 관련된 설명이 포함되어 있습니다. @VersionColumn() 자체는 변경된 칼럼의 내용을 추적하지 않으며, 그 역할은 데이터베이스 버전 관리와 관련되어 있습니다.

이처럼 각종 데이터 잔재와 무효한 갱신을 막는 데 @VersionColumn()이 사용되고 있으며, 다른 이유로 인해 변경되지 않은 데이터에 대해서는 버전이 증가하지 않음을 이해하실 수 있을 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

cascade 질문

0

39

1

@types/bcrypt 설치과정이 누락된것같습니다.

0

46

1

process.env port key 에러

0

46

1

추상화

0

49

1

[공유] DTO optional 필드가 undefined로 잡혀 TypeORM 조건이 깨지는 현상

0

94

2

where 키워드가 들어가는 메서드와 아닌 메서드

0

56

1

BearerTokenGuard에서 db를 조회해서 유저 정보를 불러오는 이유?

0

69

1

app.controller app.service 는 지워도되나요?

0

69

1

@JoinColumn을 쓰는 경우와 안쓰는 경우의 차이

0

78

1

포트 3000에서 listen하는 곳까지 넘어가지 않습니다.

0

66

1

PickType 사용 시 `as const`를 꼭 사용해야 하나요?

0

102

2

socket connect 오류

0

96

2

강의를 들으면서 궁금한 점

0

97

2

DELETE 요청의 반환값은 어떤 기준으로 결정하는 게 좋을까요?

0

60

2

커리큘럼 질문

0

98

2

put 요청은 언제

0

90

3

typeorm VS prisma

0

347

2

142 강의 > 4:00 > 포스트멘 활용 관련 질문 드립니다.

0

76

2

User 데코레이터 버그 수정 전달드립니다.

0

67

1

git 주소 부탁드립니다.

0

112

2

nest g resource 명령어 에러

0

99

2

로그인 엔드포인트 관련 질문

0

84

2

yarn으로 express 다운 후 node 2_server.js 실행 안되는 경우

0

146

3

"흔히 사용되는 메서드" 강의 관련 질문입니다~

0

95

2