인프런 커뮤니티 질문&답변

랄프로님의 프로필 이미지

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part6: 웹 서버

EF 업데이트 관련 질문.

해결된 질문

작성

·

199

0

안녕하세요. 

EF 관련해서 질문이 있어 글을 적습니다.

우선 DB관련 강의는 구매 해놓고 아직 보지 않은 상태에서 본 강의의 EF 내용을 기준으로 여쭤보는 부분 죄송합니당.

ORM의 경우 코드에서 객체의 값을 바꾸고 Save함으로써 그 내용이 DB에 적용되기 때문에 작업자가 매우  편리하게 사용할 수 있는 것으로 이해하였는데요.

그런데 저 Save의 경우 실제 DB의 모든 값을 바꾸게 되는것일까요? 아니면 변경된 부분만을 EF가 알아서 판단하여 Update해 주는 방식인 것일까요?

전자의 경우 바뀐 값은 하나인데 모든 데이터를 통째로 갈아 치운다면, Update하는 것보다 상대적으로 DB 트래픽 낭비 또한 심하게 될것 같은데 제 생각이 맞는 것일까요?

답변 부탁 드리겠습니다!

답변 4

1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

아 그렇군요.
그 부분도 마찬가지로 '바뀐 부분'을 인지해서 Update를 실행해줍니다.
EF Core (Part8)에서 나오지만
미리 말씀드리자면 EF Core에서 상태 추적의 개념이 있어서,
딱 원하는 데이터만 수정하도록 쿼리가 만들어집니다.
그리고 EF Core를 사용하더라도 직접 SQL을 호출 못하는 것은 아니라서
정말 최적화가 필요한 상황에선 우리가 손수 만든 SQL을 호출할 수도 있습니다.


1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

모든 DB의 값을 바꾸는 것은 아니고,
딱 변경된 부분만 (Primary Key)를 이용해서 빠르게 찾고 수정합니다.

0

랄프로님의 프로필 이미지
랄프로
질문자

그렇군요! 속 시원한 답변 감사합니다!

Part8 빨리 봐야겠습니다!

0

랄프로님의 프로필 이미지
랄프로
질문자

아 제가 조금 오해하실 수 있게 설명 드린것 같네요.

예를 들면 Players Table에서 Primary Key를 이용해서 찾아낸 1개의 Player 정보(Row)의 다양한 값(Column) 중에서

Hp값만을 업데이트 하고 싶은 상황인데, 이 때 만들어 주신 예제에서 처럼 EF를 통해 얻어온 Player 객체의 값 중 Hp 값을 변경하고 Save할 경우

Player의 Hp를 제외한 Mp, Level, Gold 같은 다른 정보들도 같이 업데이트되는 것인지 아니면 EF가 Hp 값만 바뀌었다는것을 판단해서 Hp 값만 업데이트 하는것인지 궁금하여 드린 질문이었습니다. (물론 Mp, Level, Gold 값은 변경된 내용이 없으니 기존과 같은 값으로 써지겠지요.)

단순히 생각해보면 1개의 Player 객체 정보를 통으로 변경하게 되면 Hp값 하나만 변경하는 것보다 더 큰 트래픽을 발생 시키지 않을까 하는 의문이 들어서 여쭤보게 된 네트워크 트래픽 관련 질문이었습니다. (관련 지식이 너무 부족합니다 ㅠ)

영세하게 서버를 운영해야 한다면 저런 트래픽이 왠지 이슈가 되지 않을까 하여 여쭤보게 되었습니다!

바쁘고 번거로우시겠지만 다시 한번 답변 부탁드리겠습니다!