내가 쓰는 책을 중국어로 출판하고 싶어서 중국어 번역가를 고용했다. 이 번역가는 실력이 상당해서 한국어에서 중국어로, 그 반대로도 매번 똑같은 내용으로 번역해준다. 내가 가지고 있던 한국어 책이 불타도 중국어로 번역된 내용을 이 번역가에게 맡기면 똑같은 한국어 책이 나온다는 얘기다.
안녕하세요 -> 번역가 -> 您好
您好 -> 번역가 -> 안녕하세요
나와 번역가는 한 페이지 단위로 번역을 요청하도록 일의 단위를 정했다.
다행히도 중국어로 번역된 페이지가 있다. 이 페이지의 쪽수가 5번째라고 치자. 번역가에게 5 페이지를 잃어버려 한국어로 번역해달라고 했다. 번역가는 궁시렁 대면서 한국어로 번역을 해줬다.
헉, 얼마안가 이번에는 내가 5 페이지를 불태워버렸다. 미안하지만 번역가에게 다시 문서를 달라고 요청했다. 번역가는 이 놈이 또 잃어버릴 것을 대비해 복사본을 준비했었다. 번역가는 별 일이 아니라는 듯 복사본을 넘겨줬다.
이렇게 복사본을 만들어두니 번역가는 또 번역을 안해도 된다. 이를 캐싱(Caching)이라고 한다.
나는 새로운 페이지를 쓸 때마다 번역가에게 번역해달라고 요청한다.
혹시 내가 쓴글을 잃어버릴까봐(불탈까봐).
MZ한 번역가라 그런지 왜 이렇게 짤짤이로 주냐고 한꺼번에 몰아서 하는게 집중 잘된다고 짜증을 내더라.
그래서 내가 글 쓰는게 끝나면 알려줄테니깐 그때 한꺼번에 하라고 정했다.
이렇게 내가 글 쓰기 시작하고 끝나는 일의 단위를 트랜잭션(Transaction)이라고 한다. 그리고 이 일이 끝날 때 한꺼번에 번역해주는 행위를 쓰기지연이라고 한다.
참 이 번역가도 극한직업이다. 내가 수정한 페이지를 줄 때 뭐가 바뀐지 안알려준다. 그래도 번역가는 알아서 복사해둔(캐싱한) 페이지를 보고 일일이 비교해 뭐가 바뀐지 알아채내 중국어 문서에 그대로 반영한다. 번역가가 이래도 괜찮긴 한데, 일의 시작과 끝에 포함해달라고 하더라.
이렇게 기존과 뭐가 바뀌었는지 파악하는 과정을 더티체킹(dirty-checking)이라고 한다.
책을 쓰다보니 이 페이지는 쓸모 없는 것 같더라. 그래서 번역가에게 없애달라고 얘기했다. 번역가가 그 페이지를 그대로 없애준다. 대신, 마찬가지로 일의 시작과 끝에 이 요청을 포함해달라고 한다.
나는 애플리케이션, 내가 쓰는 한국어 책은 엔티티, 그리고 번역된 중국어 책은 데이터베이스라고 볼 수 있다. 애플리케이션이 쓰는 언어(Java, C#...)와 데이터베이스가 쓰는 언어(SQL)는 다를 수 밖에 없다. 그래서 번역가(엔티티 매니저)가 필요할 수 밖에 없다.
번역가가 쓰는 사무실을 영속성 컨텍스트라고 할 수 있다. 사무실에 앞으로 번역해야하는 새로운 페이지, 변경해야하는 페이지, 삭제해야하는 페이지, 페이지 복사본 등등을 모아 둘 것이다. 즉, 한국어 페이지들을 모아둔 공간이다.
사실 이 공간은 어디든 될 수 있을 것이다. 카페에 이 내용을 두어도 되고, 천재 번역가라면 그냥 머릿속에 다 넣을 수도 있을 것이다. 이처럼 영속성 컨텍스트는 일종의 개념이다. 사무실이, 카페가, 머릿속이 영속성 컨텍스트가 될 수 있는 것이다.
용어를 정리해보자면, 이와 같다.
컴퓨터 용어 | 예제 용어 |
---|---|
애플리케이션 | 나 |
엔티티 | 한국어 페이지 |
데이터베이스 | 중국어 페이지 |
엔티티 매니저 | 번역가 |
영속성 컨텍스트 | 번역가 사무실, 머릿속 등 페이지를 보관하는 장소 |
트랜잭션 | 글을 작성하는 일의 시작과 끝. 즉, 글쓰기 작업의 모음 |
영속성 컨텍스트가 있어서 좋은 점
완전 비전공자는 아니고 연관된 학과에 다니는 친구다.