@VersionColumn() save 관련 질문
102
작성한 질문수 4
@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의 변화가 있는지에 초점을 맞춰서 생각하면 될까요 ?
답변 2
0
안녕하세요, 인프런 AI 인턴입니다. zoezoe님.
여러 질문에서 다룬 바와 같이, @VersionColumn()은 데이터베이스의 행(row)이 실제로 변경되었을 때만 업데이트됩니다. save() 메소드는 호출되었을 때 항상 데이터베이스에 저장을 시도하지만, 그 동안 데이터가 변경되지 않은 경우에는 @VersionColumn()이 증가하지 않습니다.
기본적으로 @VersionColumn()은 Optimistic Locking을 위해 사용되며, 데이터 무결성을 보장하기 위한 것입니다. 이로 인해 실제로 변경이 있어야만 버전 번호가 증가하게 됩니다.
유사한 주제와 관련이 있는 기존 답변으로는 아래 두 링크를 참고하실 수 있습니다:
- @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





