문제 3) 데이터베이스 분야에서 트랜잭션(transaction) 이라는 개념은 널리 알려져 있습니다. 이 트랜잭 션이라는 개념은 어떤 배경에서 왜 생겼어야 했을까요? 트랜잭션의 개념이 꼭 생겼어야 했던 이 유와 트랜잭션이 DBMS 내부에서 실제로 적용되어 설계되고 구현되어 있는 형태는 어떤 모습인 지에 대해서 서술하세요.
|
답안 3) [설계한 DB Table]
news_contents 테이블은 한 뉴스 기사의 데이터를 저장하는 테이블이며, like_cnt는 해당 기 사에 ‘좋아요’를 누른 유저들의 수를 저장하는 필드입니다. news_contents_like 테이블은 ‘좋 아요’를 누른 유저들의 정보를 저장하는 테이블입니다. (cnt필드를 별도로 추가한 이유는 매번 join으로 count하는 질의를 줄이기 위함이었습니다.) 이러한 테이블 관계를 가지고, 유저가 특정 게시물에 ‘좋아요’를 누르면 우선 news_contents_like 테이블에 해당 정보의 유저가 기록 됩니다.(Insert) 이 후, news_contents 테이블에서는 like_cnt를 +1 시키게 됩니다.(Update) 그러나 당시, Update 시에 코드 상의 오류로 Update Query는 반영되지 못하였습니다. 이렇게 될 경우 ‘좋아요’를 누른 사람은 3명인데, 실제로는 2명으로 표시되게 되었습니다. 물론 코드를 다시 수정하여 해 결하였지만, 추후 예상하지 못했던 또 다른 문제들이 발생할 경우를 생각하여 일괄적으로 처 리해야할 필요가 있다고 생각하였습니다. 학과 강의 때 배운 트랜잭션을 떠올렸고, 인터넷에 서 트랜잭션 sample code를 찾아 익히고 적용하였습니다. 이 후 개념 그대로 ‘일괄 처리’가 필요한 곳에는 꼭 트랜잭션을 적용하였습니다. 저의 사례는 단순하게 ‘기사 보기’ 컨텐츠였지만, 더 크게 나아가보면 생활 속에서 계좌 송금 등과 같은 매우 중요한 단위일 수도 있습니다. 트랜잭션의 성질은 ACID(Automicity, Consistency, Isolation, Durability)라고 개념서에는 쓰여 있지만, 무엇보다 이와 같이 여러 사람들에 의해 공유되는 데이터베이스에서 항상 데이터들의 정확성을 보장하기 위해 도입되었 다고 생각합니다. 그렇다면 트랜잭션이 DBMS 내부에서 어떻게 설계되어 구현되어 있는지 말 씀드리도록 하겠습니다. DBMS에서는 데이터를 보통 디스크에 저장하며, 일부분은 메인 메모리에서 관리합니다. 디스 크에는 고정 길이의 페이지 단위로 저장하며, 메인 메모리에서는 버퍼 관리자에 의해 이런 페 이지들의 입출력을 관리하게 됩니다. 그리고 이 버퍼 관리자의 버퍼 관리 정책은 이제 설명할 트랜잭션 작업에 매우 중요한 영향을 끼칩니다. 먼저 트랜잭션에서 진행 중에 오류가 발생하여 데이터를 다시 복구하는 경우 내부적으로 Undo, Redo 연산에 의해 이루어지게 됩니다. Undo, Redo 복구를 위해 가장 많이 쓰이는 구조는 데이터베이스의 갱신기록을 모두 기록하는 로그입니다. 그리고 이 로그는 연속된 로그 레코드로 이루어져 있습니다. 로그 버퍼라는 별도의 버퍼를 두어 로그 레코드를 모았다가 로 그 파일에 출력하게 됩니다. 트랜잭션들은 각각의 연산에 대해 로그 레코드를 생성하고, 로그 버퍼에 유지하다가 트랜잭션으로부터 커밋을 요청받거나, 데이터베이스에 직접적으로 기록되 기 전에 해당 명령을 먼저 로그에 기록하게(WAL : Write Ahead Logging) 되는 경우 등의 시점에 로그 파일에 기록합니다. 만약, 트랜잭션 중에 오류가 발생하게 되면 기록된 로그들을 무시하게 되고 결국 데이터베이스는 트랜잭션 실행 전의 상태를 유지할 수 있게 되는 것입니 다. 반면, 모든 작업이 오류 없이 완료되었다면 로그들을 데이터베이스에 기록하며 트랜잭션 은 성공하게 됩니다.(commit) [트랜잭션의 갱신(commit)과 복구(rollback)]
|
'Review > IT 채용' 카테고리의 다른 글
넥슨 신입 플랫폼 엔지니어 채용 : 인터넷 접속 과정 (0) | 2020.03.16 |
---|---|
넥슨 신입 플랫폼 엔지니어 채용 : 컴퓨터는 왜 2진수 기반으로 설계가 되었을까? (0) | 2020.03.15 |
쿠팡 신입개발자 채용 (0) | 2020.03.14 |
한화 시스템(ICT) 신입개발채용 (0) | 2020.03.13 |
NHN 엔터테인먼트 신입 (Feel the Toast) (0) | 2020.03.08 |
댓글