티스토리 뷰

기획 멘토링 때 피드백받았던 내용 중 동시성 제어에 관심을 가지라는 말씀

일단 영상과 같이 realtime DB를 통해 같은 input과 value를 공유하는 기능까지 완성.

대체 동시성제어가 뭐지? 왜 관심을 가져야 한다는 걸까?

저번에 팀원과 노션에서 API를 구성하면서 동시에 같은 내용을 수정한 경험이 있다.

근데 내가 수정한 내용도 아니고 팀원분이 수정한 내용도 아니고, 그냥 일부분이 사라져 버린 경험을 했었다.

뭐지? 에러가 난건가?

그런 게 바로 동시성이 아닐까?

영상에서는 나 혼자 input을 수정하니까 괜찮지만 만약 내가 보는 브라우저에서도 input이 focus 되어있는 상태고

상대방이 보는 브라우저에서도 Input이 focus 되어있다면 무슨 일이 일어날까?

그때 나의 realtime database에서는 무슨일이 일어날까? 무슨 모양으로 바뀔까?

 

이런 게 동시성이 아닐까 한다. 구글에 동시성 제어를 검색하니 트랜잭션이라는 단어가 등장한다.

다행이다. 구글 문서에서 본 적이 있다.

https://firebase.google.com/docs/database/web/read-and-write?hl=ko 

 

웹에서 데이터 읽기 및 쓰기  |  Firebase Documentation

Join Firebase at Google I/O online May 11-12, 2022. Register now 의견 보내기 웹에서 데이터 읽기 및 쓰기 (선택사항) Firebase 로컬 에뮬레이터 도구 모음으로 프로토타입 제작 및 테스트 앱에서 실시간 데이터베

firebase.google.com

"증가 카운터와 같이 동시 수정으로 인해 손상될 수 있는 데이터를 다루는 경우 트랜잭션 작업을 사용할 수 있습니다. 이 작업에 업데이트 함수 및 선택적 완료 콜백을 지정할 수 있습니다. 업데이트 함수는 데이터의 현재 상태를 인수로 취하고 이 데이터에 새로 쓰려는 상태를 반환합니다. 새 값이 쓰이기 전에 다른 클라이언트에서 해당 위치에 쓰기 작업을 수행하면 새로운 현재 값으로 업데이트 함수가 다시 호출되고 쓰기가 다시 시도됩니다"

라고 쓰여있다. 이게 바로 내가 찾는 기능이 아닐까?

 

업데이트 함수가 현재 값을 인수로 취하고 새로 쓰려는 상태를 반환한다? 근데 새 값이 쓰이기 전에 다른 클라이언트에서 쓰기를 시작하면 새로운 현재 값으로 업데이트 함수가 다시 호출된다? 

그 순간의 데이터가 지금처럼 약간 노출된 채로 막 실시간으로 바뀌는 게 아니라, 어떤 함수에 그 순간의 값을 집어넣고 작업이 끝났을 때 반환하기 때문에 동시성을 제어할 수 있다는 말처럼 들린다. 

 

추가

파이어베이스에서 제공하는 runTransaction을 사용해서 현재상태를 인수로 받아서 새로운 값을 반환하는 함수를 만들었다.

테스트결과 내가 글을 쓰는 중간에 누군가 끼어들더라도 결국 나중에 편집을 끝내는 사람의 데이터로 항상 최신화 되는 모습을 볼 수 있었다.

👍

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함