{"componentChunkName":"component---src-templates-blog-post-js","path":"/database/200524-Transaction/","result":{"data":{"site":{"siteMetadata":{"title":"Junbyeol Blog","author":"Junsung Yoon","siteUrl":"https://junbyeol.github.io","comment":{"disqusShortName":"","utterances":"junbyeol/junbyeol.github.io"},"sponsor":{"buyMeACoffeeId":"junbyeol"}}},"markdownRemark":{"id":"4ea706ee-73d2-5b16-a7a9-267f848db540","excerpt":"…","html":"<blockquote>\n<p>이 글은 윤준성의 개발꼬맹이 시절, 혼자 노션에 공부하며 정리해둔 것 중 괜찮은 것을 추려올린 글입니다.\n기술블로그 글 기고 목적으로 작성되지 않아, 가독성이 좋지 않거나 알 수 없는 워딩이 있을 수 있습니다.</p>\n</blockquote>\n<h1 id=\"트랜잭션-스케쥴\" style=\"position:relative;\"><a href=\"#%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EC%8A%A4%EC%BC%80%EC%A5%B4\" aria-label=\"트랜잭션 스케쥴 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>트랜잭션 스케쥴</h1>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 581px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 35%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAAAsSAAALEgHS3X78AAABd0lEQVQoz22QS2/TUBCF/W8Rv4gFQgixYMVjA1S0NG3q1K5DU4qgTfxKXBeUNnZt52XHTvwxvkpRFox0dGfOzDmaOxoSdV2z+2Z5wfuBizXq89P7zg/3gn74i0unhzHs88F2yZY5/9NqbKMhNlvyJp3x5LjDq94Bbz6+4LXg09lbXr57xvPuPk91gyBO1GyjeTRThvWWeDSs1mvKqmKSZkyShHQ2ZfIQcx9FZPOZ4iZJqmbWMrvZ0Tf4t2ETq6JQKFcrahFsSoGIlvMFRZ6zqcRA+KZXlSW5fLssVrsWaLHca5jN8R8yBvexem+mC25nC0LBMJkyuIvw4lTlTe/PfIkvecO5UcJITuTGGdmqRHOilGvX56jVxjAtPu99wbYd9HDMpR9gyL1aRyd0Tk0O979iuAFno9/oxzqHojGtc9ptnYPWCZ4sowXi3um7dG1fwbh2+OYMuRjHWF6AKXVXakt65pWN4Yf0bseKP71yFG8NPDqSh+mUv1n/BVWBw/6hAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200524%20Transaction%201a6758c01e984b0a8c427bac6ea41fc4/Untitled.png\"\n        title=\"200524%20Transaction%201a6758c01e984b0a8c427bac6ea41fc4/Untitled.png\"\n        src=\"/static/5d74122decd07756236edaa8d52e624b/92d15/200524-1.png\"\n        srcset=\"/static/5d74122decd07756236edaa8d52e624b/5a46d/200524-1.png 300w,\n/static/5d74122decd07756236edaa8d52e624b/92d15/200524-1.png 581w\"\n        sizes=\"(max-width: 581px) 100vw, 581px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<ul>\n<li>직렬 스케쥴 : 하나의 트랜잭션이 끝나야 다음 트랜잭션을 실행할 수 있는 스케쥴</li>\n<li>비직렬 스케쥴: 트랜잭션의 실행 순서와 무관, 병행 수행</li>\n<li>\n<p>직렬가능 스케쥴: 서로 영향을 주지 않는 직렬 스케쥴을 비직렬적으로 수행하겠다!</p>\n<p>→ 동시성을 최대한 보장하면서도 직렬 스케쥴과 같은 결과를 얻을 수 있는 직렬 가능 스케쥴을 지향해야 함</p>\n<p>→ 같은 데이터에 동시에 두 트랜잭션이 접근하는 경우의 수</p>\n</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 820px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 18.999999999999996%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAYAAACOXx+WAAAACXBIWXMAAAsSAAALEgHS3X78AAAA9klEQVQY0x2O3U7CQBCF+/5PoW9A1HCpgBKDBDQtW/oD7ba77baUVsCIl5/LXpxM5nznTMY7X36YrRIeXtY8L1PGM9/pXRg+ogPLuGP6KXmafDFd525fbFvefMXC8skqY/zqMw8q1mmH9zjxiTONiFJUfSCMd+ylJtpJRLwn2ZdEac5mm7KJLCsq+vOvzXYkWUlzPFG3PYfh4nzvbjRHVQ21VpxP3zTG0B87tCpRZYGUObs0QVteVZqikI61jUHmGaXda+sbU/N3veLdj2b2I+WKxh6T0ha0Jo5jIqvbTJIEIUKatmUYBvp+cNkwDAmCwGWEEM77B1t9HjJMPaQjAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200524%20Transaction%201a6758c01e984b0a8c427bac6ea41fc4/Untitled%201.png\"\n        title=\"200524%20Transaction%201a6758c01e984b0a8c427bac6ea41fc4/Untitled%201.png\"\n        src=\"/static/47601b449975028b35b7ca71d309b26a/9f82e/200524-2.png\"\n        srcset=\"/static/47601b449975028b35b7ca71d309b26a/5a46d/200524-2.png 300w,\n/static/47601b449975028b35b7ca71d309b26a/0a47e/200524-2.png 600w,\n/static/47601b449975028b35b7ca71d309b26a/9f82e/200524-2.png 820w\"\n        sizes=\"(max-width: 820px) 100vw, 820px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h1 id=\"비직렬적-스케쥴에서-발생할-수-있는-현상\" style=\"position:relative;\"><a href=\"#%EB%B9%84%EC%A7%81%EB%A0%AC%EC%A0%81-%EC%8A%A4%EC%BC%80%EC%A5%B4%EC%97%90%EC%84%9C-%EB%B0%9C%EC%83%9D%ED%95%A0-%EC%88%98-%EC%9E%88%EB%8A%94-%ED%98%84%EC%83%81\" aria-label=\"비직렬적 스케쥴에서 발생할 수 있는 현상 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>비직렬적 스케쥴에서 발생할 수 있는 현상</h1>\n<h2 id=\"t1이-읽고-t2가-쓸때\" style=\"position:relative;\"><a href=\"#t1%EC%9D%B4-%EC%9D%BD%EA%B3%A0-t2%EA%B0%80-%EC%93%B8%EB%95%8C\" aria-label=\"t1이 읽고 t2가 쓸때 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>T1이 읽고, T2가 쓸때</h2>\n<h3 id=\"오손-읽기dirty-read\" style=\"position:relative;\"><a href=\"#%EC%98%A4%EC%86%90-%EC%9D%BD%EA%B8%B0dirty-read\" aria-label=\"오손 읽기dirty read permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>오손 읽기(Dirty Read)</h3>\n<ul>\n<li>T2가 값을 고치고</li>\n<li>T1이 그 값을 읽었는데</li>\n<li>T2가 롤백하면</li>\n</ul>\n<p>→ T1은 무효가 된 데이터를 읽게 됨</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 730px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 61%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsSAAALEgHS3X78AAAB3ElEQVQoz42SD2/aQAzF8/2/y7RJ69DQWqnr2kJpVW0rlKyFhgXI/0ASAkkIyes900hs3aSeZOXuYv/87LM2NGN09QBXuo/j3gifzu7w8fQ7Wt/66A499B5CdO5dXPRt9H6F6s5Hu6OjdT7A++MbtC91ue+o+7vJEtrQjAR2emvg6OsPfDi5wbt2V6An12NcK+CVAncGNm7HES77c3y+GKB19hNHyudLV1c+gfjdK3HacrnEeDzCaPSIIAiwXq+xWq2QZRskcYyy3KLa7ZBtNqjrCnVV4e9Vqbuq2sk/AbquK7AkSVAUBfK8UOdQgVOkysJwgZ2CvmVpURQJcLFYIE1TUeh5Pp6eDEwmE0ynU1iWJf+pPFaq6dfsN0p5Y3meQ2vIdV2/SN/b4SrLUuCmacJxHAkkgNBXCt9SBhNQJdsThqEoLApCM1Wdp3qdgJXyXmsegf1jCdzneSYqmm+arqV0qiOQMVRo265S/luUz+dzgWqe58EwDHEmNMsypSQWR/bW9wMVaP/RBraH9s9HoYImY2N8VcuyJSsT+b6P2Wwm4KY0VnJoFEOOKGQ5DG5em0EMJphnx9mPFfcM2rfjtXHkNGbXdV0ycNY4vCzZNGcvCl1RuN1uD4b4//YMI+eMUuiUSB0AAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200524%20Transaction%201a6758c01e984b0a8c427bac6ea41fc4/Untitled%202.png\"\n        title=\"200524%20Transaction%201a6758c01e984b0a8c427bac6ea41fc4/Untitled%202.png\"\n        src=\"/static/368156e2d36870af0b991651cc93224c/e9beb/200524-3.png\"\n        srcset=\"/static/368156e2d36870af0b991651cc93224c/5a46d/200524-3.png 300w,\n/static/368156e2d36870af0b991651cc93224c/0a47e/200524-3.png 600w,\n/static/368156e2d36870af0b991651cc93224c/e9beb/200524-3.png 730w\"\n        sizes=\"(max-width: 730px) 100vw, 730px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h3 id=\"반복-불가능-읽기non-repeatable-read\" style=\"position:relative;\"><a href=\"#%EB%B0%98%EB%B3%B5-%EB%B6%88%EA%B0%80%EB%8A%A5-%EC%9D%BD%EA%B8%B0non-repeatable-read\" aria-label=\"반복 불가능 읽기non repeatable read permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>반복 불가능 읽기(Non-repeatable Read)</h3>\n<ul>\n<li>T2가 값을 고치고</li>\n<li>T1이 값을 읽었는데, 이전에 읽은 값과 값이 달라지는 현상</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 808px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 60%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsSAAALEgHS3X78AAAB3UlEQVQoz41SYVObQBC9//9DOtMP2uqMo9NWG41O2toWE8lMMSQkQIAECBwEkCTwvD2DNbbjeDNv2N1b9t6+XfZdC9HuB7js+zg472Pvyw3en1zj49dbGWsLtLouzhT70e652D/tYv+si3dHHRy0VLRVHxfqXIIpdzN01CnOf+k4PP2BD5862Du+xFHrN656Jm6GIZSBj59/PKiTBN9UC5+vbnFyoeBYoHWtQdED9IwI3dECzJ/PMBjcwbZMZMsllgJ5nqEocuGnqKo16mqDQsSEIVDj5amrSuYQmDebwfd9BEGALKNCBcpyJfwQSZKKBzJpr1YrvOWwOI6xWCzAOd8WzGWB0ciAYRgwTRPT6VTmEHueJDI3jrn8NsiyXJJhtWihQSWoNxCNPL26Xq9lcU3TYFmWLE6grsIwlHZZlvI/9hr9eqsXJY7HY1ksiiKhcS7kSLYPv2j5OcP/gc5ms4Gu6xgOh1IWYkyaNvfP89lbhKZEYti0SOyoYBxxoa8j/SiKpZaMnDRNdwQm8SlOE6b2qE3XdXeGR/H5PJBDs20bnueJ+wiMJkgO/UCFaQc5T8WUx5hMTDiOK+921+avHP9o6DiOWOzB0w7e3xeSHa0T5/F2RR5Xi1hR3mt4ADiIjb0cg2X2AAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200524%20Transaction%201a6758c01e984b0a8c427bac6ea41fc4/Untitled%203.png\"\n        title=\"200524%20Transaction%201a6758c01e984b0a8c427bac6ea41fc4/Untitled%203.png\"\n        src=\"/static/502c52f6c96b810892cee6264364604c/3534c/200524-4.png\"\n        srcset=\"/static/502c52f6c96b810892cee6264364604c/5a46d/200524-4.png 300w,\n/static/502c52f6c96b810892cee6264364604c/0a47e/200524-4.png 600w,\n/static/502c52f6c96b810892cee6264364604c/3534c/200524-4.png 808w\"\n        sizes=\"(max-width: 808px) 100vw, 808px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h3 id=\"유령데이터-읽기phantom-read\" style=\"position:relative;\"><a href=\"#%EC%9C%A0%EB%A0%B9%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%9D%BD%EA%B8%B0phantom-read\" aria-label=\"유령데이터 읽기phantom read permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>유령데이터 읽기(Phantom Read)</h3>\n<ul>\n<li>T2가 새로운 값을 삽입하여</li>\n<li>T1이 이전에 없던 새로운 값을 읽게 되는 현상</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 814px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 67%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAAsSAAALEgHS3X78AAAB70lEQVQ4y42SS2/aQBSF/f//RldtpEZRF30Q0tA2sKgKpECyAIxtDBiPg8HmYZvHyZyLBlG6yUif5n3uuXfGqvdj3LcUfnZecP29jfdf65o/uLpt6vUQFU25McZt3UelrXDXnOBDqYGrUhPvPtVwfd/BD71ebgZo9GewOnaIasvDQ3OAj19+4aZUw823Kj5X6njsKTx5Czz2FRrdEM/DBL+ffNzV2ihX/woPjR7aTozWIMYgSGG9RArOwIbrDKBUiDzbHMkzHPZbAAdsi1zWOD5y0Q77E5ZSCuPxWPA8D2EYIk1T5EVxOr/dbnWA/Hj3cPiXC20ryzIRWC6Xx361xGQSwHU9LBYJZrNYMwPPnQvudrsTDEg4tgrthNHPmc8TnX6EKIpENEkSOI4j9Ho96YMgkKx4hsEI71p4Q2Nk3/cxGo2kp2NmRFarlbg7pfxfTS4wNXRdF8PhEOv1WqDYZrMRQToz59/kcL/fi+B0OhWHhKlSzAQ9OeRhAzfZm0KzvuzpKI5jeTTWM0lSpMtU13EqD8g6c5+uLRaW0Vlo27alTvP5XDaZCkXphHMT5Bio0I6V/mpDccvvx2AWJ91uVyZGiJtcp0CW5SJYnP3L81IwGzMmFl2YJzdfKAwj7diVT05hwnT5COZRCOfna7z7Cm983QSjis+qAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200524%20Transaction%201a6758c01e984b0a8c427bac6ea41fc4/Untitled%204.png\"\n        title=\"200524%20Transaction%201a6758c01e984b0a8c427bac6ea41fc4/Untitled%204.png\"\n        src=\"/static/a61e37a0fc65d9370f386c3dd30f0eba/a4262/200524-5.png\"\n        srcset=\"/static/a61e37a0fc65d9370f386c3dd30f0eba/5a46d/200524-5.png 300w,\n/static/a61e37a0fc65d9370f386c3dd30f0eba/0a47e/200524-5.png 600w,\n/static/a61e37a0fc65d9370f386c3dd30f0eba/a4262/200524-5.png 814w\"\n        sizes=\"(max-width: 814px) 100vw, 814px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h2 id=\"t1과-t2가-값을-쓸때\" style=\"position:relative;\"><a href=\"#t1%EA%B3%BC-t2%EA%B0%80-%EA%B0%92%EC%9D%84-%EC%93%B8%EB%95%8C\" aria-label=\"t1과 t2가 값을 쓸때 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>T1과 T2가 값을 쓸때</h2>\n<h3 id=\"갱신-손실lost-update\" style=\"position:relative;\"><a href=\"#%EA%B0%B1%EC%8B%A0-%EC%86%90%EC%8B%A4lost-update\" aria-label=\"갱신 손실lost update permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>갱신 손실(Lost Update)</h3>\n<p>:T1의 갱신한 값을 T2가 덮어써서 T1의 갱신이 손실됨</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 693px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 60%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsSAAALEgHS3X78AAACbklEQVQoz3WS208TURCH+++KMfHJB33QxGfxkhgIgkYNUROCBA02iFJFQ1thCy3l1tv23m1L6fayt3b3c3YBMUZO8tuTk535Zn7nTGg9UeTRUornq4c8/Zhm8n2KB4tJFjaOiW/lWFxO8mFlj5iS41k4zWz4gJlP+zyUnCfLexKfJFNu4y/X8wi9XT/k5myc+28S3Hrxi2tTUa5PR3m8tEN4NcX03CZzL+OsrCW5/SrO3fkEd15vMyExN2ZiTExtohzVzoCuAD13jD400A2bgenLCs6mbeOOHXoDg4Gc3fGI8cjBNE0sy2Lk2IEc28JnSHP4n5DWd0hUenxPqaIiO2WddMMgUR1gWDaV5pDWqREkXbU8AXkBEULqqSWQPhHlmEgiK3uGRKGNUhnSF+B+vku50Zf7cSlKrNq1UU9tSrpDQc5V3T6HnUFDo7FHtWdT6znUpNvyqRnI71xuhZ/JJnnpumM6xApdNrYO+BrfRzmukdMG4m5Ax3D+dBoyRy4lqZRv9VHbQ8pdSyRWRT4wHK2SznXoOyNiqs5Wps52vkVkt8BOSWe3YWOMLu2HKtJyXALXtjN8SeRQil1StSGbao+xN2YhUiKabgbBujWmI3W6AtCNE6pahlY7S/cki9Y4wLZahPzZaQ0d0YjmQHaRJuoEZT3mVnL8SGpYrsu23LWSrRM7qlPRCjTrKTLFQyq1Y7T6AZYpQD/p6uUxuXDI560qjjxKtKizkS4RSaoopQ57mimWLfn3l+WztH/knZcRy/fm93j3rXjFuFwW9qcgeBTbcYJB/Z9MY0j9pE+72xc7/kDbZ/v5cF/IZ1y88m+FiHcB2CaCpQAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200524%20Transaction%201a6758c01e984b0a8c427bac6ea41fc4/Untitled%205.png\"\n        title=\"200524%20Transaction%201a6758c01e984b0a8c427bac6ea41fc4/Untitled%205.png\"\n        src=\"/static/34ab51fdffe8d6aabf629735374ffd25/61c63/200524-6.png\"\n        srcset=\"/static/34ab51fdffe8d6aabf629735374ffd25/5a46d/200524-6.png 300w,\n/static/34ab51fdffe8d6aabf629735374ffd25/0a47e/200524-6.png 600w,\n/static/34ab51fdffe8d6aabf629735374ffd25/61c63/200524-6.png 693w\"\n        sizes=\"(max-width: 693px) 100vw, 693px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h3 id=\"모순성inconsistency\" style=\"position:relative;\"><a href=\"#%EB%AA%A8%EC%88%9C%EC%84%B1inconsistency\" aria-label=\"모순성inconsistency permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>모순성(Inconsistency)</h3>\n<p>:T1이 x, y를 각각 갱신하는 사이에 T2가 값을 갱신하여, 어떤 값은 갱신 전의 값을, 다른 값은 갱신 후의 값을 읽어 데이터가 불일치 하는 현상</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 700px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 77%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAAAsSAAALEgHS3X78AAADBUlEQVQ4y4WTy28bVRSH/b/xWLAFCQmJPWLNjkWphEBIUBCbIrVI7YJNF10U0iYKTaLYTv2YeJLY8St+xOPH+JGXPU+PZ+bjzHUKCInW0vG9c+/RN7/zO2dSxarBR9/t8fkvBT79KcsHX+/xzp0d3v1ql0cvDnnwMM2db3b4/ucM9378k0cbGh//kOGz+3k+uZfl/bs7vHd3lw+/3aFY7ZOyHJeCQPOn6yhIJBe5isHk4oaeMeGk0qMs5632iPHsWt29zlUh+ZqEZbukIGYZhnhhTAAsY3CDECdYqTWOZfVX2F5yGxJFEd4qxP93/irJDwlkTXmriPS5xcvKkGe5Ohtai9z5nLzhkDMWRGFAf+LQM215d8hwviTdXbB7OuT3QpPnWpuiYbHfmdO99knZy5Bj06XWGZHRTskfN8kdNSi3Ruo8FGDTmFPr3iiFxo1PY+pRk/LThbLKb/SmtGY+nUsvAa7QBg563WA7e0T6sM5Je0xjOJdzmzhacdS8QqtdCDBSwOrEo1TvSb5ORm/QGVvUxi6dKwGKBVRnS1HjoQ9t9IHF6TTgeOxzduEqVQflKfv6hMTv10BdgM/38mxnDmmZC2pypoCuPcaxRliLEY5t4jljrPkA30sUoXx7qZls5oZr4PW65KqUfFCqKXDTmP1T8nknx6hfpNd9hTksYZwXaJ9luLlsrIGi8I+DAU/3DQUciMK8YZOtSVMOKmxpZ5xIZbnegu6VNCUZi/rMojMdUTUvKZvSAHkuiy/JGxPfnuz2+G27q4BBGDFzAi7ckCs/4tILmdmBiuROmhKhDcWTRp+t9CHpknS4O6NpWhT6lgI+3urwYKOlgHEc86Zfyrkdm2p7qMZFq7R5pdc5bvY5Ml0F/PVFi/vPmmsDojX0/yKVfA3ZnkW6KoOdrbApnhyKMn3oqsFGxubLxyd88VCXIV+R6HuTylTyd+2tbj2JxZNI+TGxllh+qICbJZON4mgNjN+iMAgCGRGX5W0Evvf3Pjm3bVuYvopk77oujuOoSPb/ff4LHFBLgbHg06AAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200524%20Transaction%201a6758c01e984b0a8c427bac6ea41fc4/Untitled%206.png\"\n        title=\"200524%20Transaction%201a6758c01e984b0a8c427bac6ea41fc4/Untitled%206.png\"\n        src=\"/static/19fd6cd82a493ec0c6af0b880d6f26e9/8c557/200524-7.png\"\n        srcset=\"/static/19fd6cd82a493ec0c6af0b880d6f26e9/5a46d/200524-7.png 300w,\n/static/19fd6cd82a493ec0c6af0b880d6f26e9/0a47e/200524-7.png 600w,\n/static/19fd6cd82a493ec0c6af0b880d6f26e9/8c557/200524-7.png 700w\"\n        sizes=\"(max-width: 700px) 100vw, 700px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h3 id=\"연쇄-복귀cascading-rollback\" style=\"position:relative;\"><a href=\"#%EC%97%B0%EC%87%84-%EB%B3%B5%EA%B7%80cascading-rollback\" aria-label=\"연쇄 복귀cascading rollback permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>연쇄 복귀(Cascading Rollback)</h3>\n<p>:T1이 x를 수정하고, 이를 롤백하려 하는데, 그 사이에 T2가 x를 또 다시 갱신해버려 T1의 롤백이 불가능한 상태</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 586px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 67.33333333333333%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAAsSAAALEgHS3X78AAAC7ElEQVQ4y22SW28bVRSF/U+ReOCJB3iiUoWEVAmpog+UCkEFVUUpaqviqGkqXqCX2E5jx3EcTxzfxtfYY8fOeDye+3jG/ti2Q5EQWzpas8/ZZ80+a+3E76kad3ZKfLer8PWzIreennD7eZFCucvznQLJ3VN2ZGUKKt++KHFP6r5Jnm7qbj0p8LrQZh3L5WqDiR9flfjilxO+fHzCp/dzfPJ9ls9+yvEmW+f+zwc8fHzMg4c59t4q3HhU4OavRT5/kOfje4eb2mSq/oFwtVqRWIQhE9PGcHxM18ewHKaWTRwtcD2XmZx5gpHkjmPjuja+57AIXTz5DgNPyKIN2aZDbR5S7M/J1jWyjSHVsYdy6aHNA3w/pC95EC7kUswyusTQK1yNy4y0Ep7Tlj2NKLwQtLaEbSOg0jfZz5Z4X6yRP2tS7k3pmgts6VpRZ3hCzGrJIrggk0qSepckvb9DWfmLRj1D4DXleM66yURLCEu9GW+zCpliA6U1pjyw6MwCTMsjXRzjeOFaJcEhE11F16sMhmcMRxUsU8jioUhkbzuceRHViUf9yqM2cVGngeQ+VhgznbnsZQbbp5sBR705B9U+ufMqpb7BydBlMPeFJv5XQz7Eiv/GSLf57c+OmBLSMXyqQ5sjRSV1XKVYu6ApP25N/e3t1bXLUbzC8GLmEZjhiql0rLuLTZE2sflhVxVnA5HApzRwRIIGb44qKB2d8sinqW8Jr8eQRHcWku8avD6us6+0KWsWp5qDZoVCaHH7SUW09LHDiPrEpDuz6F4NBee0DBmpONw8GdaTEJBYa1boGLx6l+ePdJHseY90uS8uhwzGFl89OsPY6CQtyIgML/JovTwdNUO/k6N2vk+9mqYve/FCI6G7EZWxS/XSoTKyqY0dFOnSjZaU21M+upOjN9466Hs9socvOXy/R1M9oN06RG1khDBFUzCSsUr8nxn/RGdkcvdlg4m4LbMhA6wT+iN8V5NT43rNZJkbjBdT/gZ7D7RTMO4C5gAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200524%20Transaction%201a6758c01e984b0a8c427bac6ea41fc4/Untitled%207.png\"\n        title=\"200524%20Transaction%201a6758c01e984b0a8c427bac6ea41fc4/Untitled%207.png\"\n        src=\"/static/66334ee9cc78e1a3e5b59e9824b6e731/a76f4/200524-8.png\"\n        srcset=\"/static/66334ee9cc78e1a3e5b59e9824b6e731/5a46d/200524-8.png 300w,\n/static/66334ee9cc78e1a3e5b59e9824b6e731/a76f4/200524-8.png 586w\"\n        sizes=\"(max-width: 586px) 100vw, 586px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h1 id=\"락lock\" style=\"position:relative;\"><a href=\"#%EB%9D%BDlock\" aria-label=\"락lock permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>락(Lock)</h1>\n<p>:Optimistic Lock(비선점 락? 낙관적 락?)과 Pessimistic Lock(선점 락? 비관적 락?)</p>\n<h2 id=\"락킹-단위locking-granularity\" style=\"position:relative;\"><a href=\"#%EB%9D%BD%ED%82%B9-%EB%8B%A8%EC%9C%84locking-granularity\" aria-label=\"락킹 단위locking granularity permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>락킹 단위(Locking Granularity)</h2>\n<p>:잠금의 대상이 되는 객체의 크기</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 1200px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 43.99999999999999%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsSAAALEgHS3X78AAABn0lEQVQoz31SXW/TMBTtL+cX8MDv4IUXHia2abxM06igqhhdx0bWjzShTRo7dpw68cfh2qF0SIgrndjHHyf33OuR9x7OuYi+t2CMQ+sOxzgcDuB1DaVU5NZacM6gmoYY3SUuRE13dNwfhU8Q60hE6xKNSnDQK3QdGwTinobpTz8xxsN6nLgjjcg9RnmaRvW+Nyh2Y+TJObaLC0h+B9sItFmG8voG1ecJuqqEayV8X8OpnFDCUHau3dNaM2RYlmUUNM5g83SN6vIC7OoSIp1CzScQ3z5i9/4V9ldv0MzHUI9TiOUHVJ9eQ83e0doM8utb6Gz8t+Xe9MgWt9ien0Xw/H6woyTU0x3a5Xe8cPnPCP0YHZsSatUWK/CHL2APE6ifK9i6IksMppEEARM439O4h5MsInJWwMqh5lEwIIRaJxDJHGa3QZ8voVNqUPoDek0I4yaJa132jO1sguJ+SvMF7T+S5cXJ8lGwpCfzvFqDCYnOuv/aK+hsmm/BZQPz0jJ+iw2iPkxgjYljIwQy6nKeZ/HtxXNUmoBjhHfonf2T1C8cmbGS/AMZKgAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200524%20Transaction%201a6758c01e984b0a8c427bac6ea41fc4/Untitled%208.png\"\n        title=\"200524%20Transaction%201a6758c01e984b0a8c427bac6ea41fc4/Untitled%208.png\"\n        src=\"/static/95d271d5daa2e65098d55a89bb3b2564/c1b63/200524-9.png\"\n        srcset=\"/static/95d271d5daa2e65098d55a89bb3b2564/5a46d/200524-9.png 300w,\n/static/95d271d5daa2e65098d55a89bb3b2564/0a47e/200524-9.png 600w,\n/static/95d271d5daa2e65098d55a89bb3b2564/c1b63/200524-9.png 1200w,\n/static/95d271d5daa2e65098d55a89bb3b2564/f87c7/200524-9.png 1247w\"\n        sizes=\"(max-width: 1200px) 100vw, 1200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h2 id=\"optimistic-lock\" style=\"position:relative;\"><a href=\"#optimistic-lock\" aria-label=\"optimistic lock permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Optimistic Lock</h2>\n<p>:트랜잭션 대부분 충돌이 발생하지 않을 때 사용하는 방법</p>\n<p>→ 자원을 선점하지 말자, 충돌이 일어날 때만 적절히 대응하자</p>\n<p>→ 엔티티에 version을 담아두고, 수정할 때마다 version을 +1씩 업데이트 한다</p>\n<p>→ 엔티티를 가져와서 값을 수정하고 다시 저장하려고 하는데 갖고 있는 version과 DB의 version이 다르면 rollback!</p>\n<h2 id=\"pessimistic-lock\" style=\"position:relative;\"><a href=\"#pessimistic-lock\" aria-label=\"pessimistic lock permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Pessimistic Lock</h2>\n<p>:트랜잭션이 데이터에 접근하는 동안 그 데이터를 선점</p>\n<p>다시 공유락(LS, Shared Lock)과 배타락(LX, Exclusive Lock)으로 나뉨</p>\n<ul>\n<li>\n<p>공유락) T1이 X에 대해 공유락을 걸면</p>\n<ul>\n<li>T1과 T2 모두 X를 읽기만 할 수 있음</li>\n<li>T2가 동시에 X에 대해 또 다시 공유락을 걸 수 있음</li>\n</ul>\n</li>\n<li>\n<p>배타락) T1이 X에 대해 배타락을 걸면</p>\n<ul>\n<li>T1은 X에 대해 읽기/쓰기를 모두 할 수 있지만</li>\n<li>T2는 아무것도 할 수 없음</li>\n<li>락을 허용받지 못한 T2는 대기 상태가 된다</li>\n</ul>\n</li>\n</ul>\n<h2 id=\"2단계-락킹2plp-2-phase-locking-protocol\" style=\"position:relative;\"><a href=\"#2%EB%8B%A8%EA%B3%84-%EB%9D%BD%ED%82%B92plp-2-phase-locking-protocol\" aria-label=\"2단계 락킹2plp 2 phase locking protocol permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2단계 락킹(2PLP: 2-Phase Locking Protocol)</h2>\n<p>: 트랜잭션들이 Lock하는 시간과 Unlock하는 시간을 구분하여 수행</p>\n<p>→ 직렬 가능한 스케쥴을 항상 보장한다는 것에 의의가 있다</p>\n<ul>\n<li>확장단계(growing phase): 트랜잭션이 Lock 연산만 할 수 있고, Unlock은 할 수 없음</li>\n<li>축소단계(shrinking phase): 트랜잭션이 Unlock 연산만 할 수 있고, Lock은 할 수 없음</li>\n</ul>\n<p>→ 연쇄 복귀 문제에 빠질 수 있다</p>\n<p>→ 이는 모든 unlock연산을 트랜잭션이 완전히 완료된 후에 실행하도록 하는 엄격한 2단계 잠금(strict 2-Phase Locking Protocol)을 통해 해결 가능하다</p>\n<h1 id=\"교착상태deadlock\" style=\"position:relative;\"><a href=\"#%EA%B5%90%EC%B0%A9%EC%83%81%ED%83%9Cdeadlock\" aria-label=\"교착상태deadlock permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>교착상태(Deadlock)</h1>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 849px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 45.666666666666664%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsSAAALEgHS3X78AAABrElEQVQoz2WR3W7aQBBG8/4P0V5Vvel1olaoUS6KGgSEKoWAYzABjLEx2AEbbO/aJ2PzW3WkT+ud2Tn77fgGiYntU2+ZPLZNnrtjOs8WjaZBvdFn6b9ziifD4/bxjZ+tCfeiu99jepZf1YqiqHRTbszBG7VvNeoPHZp/hjQ7Q+rNVx5+dVm4wbEh53tjytcfBp9v+3y66/OlNuT+yf4fGEcbRq99yeqDFdkTXZzJSVQOOkvZO5asyaUkyoviDK2AURAyf3kh2UZoSXqjEf5gQK40Os/PjeF2h+u6rLd7VmEMKiNKdFUrjtCDw+0W2zRJ45iyfT2b8T4ey9V5BdQ6J96nxIk6PCDVWAOT2J7Qnbp0rDnDxeoCDIMAo9djF0UVMJtOKcQhWUYqLjsjm9bIwZh65CufzS4l8Ddyzsbd7AmjvVyWXYBqvUa12xTlKta1gEp3+VGZQMv8Lk7Y/TWYeysca0Zi2WRcj/o4w6Js1DIv0QmilKpU5opjrgwtYwmDNZu1PFGpf/5w5fD0cR1KHM5tG8dxGMssFwuH5dLH930mMl/P8wjC8Ay7hn4AgI+t5R0RV70AAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200524%20Transaction%201a6758c01e984b0a8c427bac6ea41fc4/Untitled%209.png\"\n        title=\"200524%20Transaction%201a6758c01e984b0a8c427bac6ea41fc4/Untitled%209.png\"\n        src=\"/static/822c2ad6f01de55baa419d9465fe58b3/f96df/200524-10.png\"\n        srcset=\"/static/822c2ad6f01de55baa419d9465fe58b3/5a46d/200524-10.png 300w,\n/static/822c2ad6f01de55baa419d9465fe58b3/0a47e/200524-10.png 600w,\n/static/822c2ad6f01de55baa419d9465fe58b3/f96df/200524-10.png 849w\"\n        sizes=\"(max-width: 849px) 100vw, 849px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>→ 두 트랜잭션의 서로의 Unlock연산만 기다리고 대기상태에 들어가게 됨</p>","frontmatter":{"title":"Transaction","date":"May 24, 2020"}}},"pageContext":{"slug":"/database/200524-Transaction/","previous":{"fields":{"slug":"/language/200207-SOLID/"},"frontmatter":{"title":"SOLID"}},"next":{"fields":{"slug":"/language/200524-java-oop/"},"frontmatter":{"title":"Java & OOP"}}}}}