# TIL-20210906

# Today

  • Database Transaction

# Contents

# 당면 과제

API Body에 넘겨받은 데이터를 Local Database에 기록하면서 다른 Server로 값을 전달해야 한다.

문제상황

  • 로컬 Database에 insert 하는 곳에서 Error가 발생하는 경우
  • 다른 서버에 데이터를 넘겨주는 과정에서 Error가 발생하는 경우

두 가지 모두 다른 행동을 원상태로 돌려 놓아야 한다.

만약, 다른 서버에 보낸 요청에서 문제가 생겼을 때에는 Database에 insert한 데이터를 invert하거나 Delete해야하는 상황이 발생하고

반대로, Database에서 insert, update등을 실패하면 다른 서버에 보낸 요청을 취소해야 한다.

# 조치 방법

  1. 작업의 우선순위를 정한다. DB에 작성 후 요청을 보내거나, 다른 서버에 요청 후 DB에 기록하거나 하는데 그 순서를 정할 수 있다면 어디에 롤백을 할지 정할 수 있다.

다만,DB에 추가 조작을 해야하는 경우와 서버에 추가 콜을 보내야 하는 상황이 생기므로 리소스를 추가적으로 사용하게 된다.

  1. transaction을 이용한다. DB에 데이터를 쓰고 읽고를 동시에 한다면 일종의 하나의 작업으로 보고 시행할 수 있다. 이러한 방식을 Transaction이라고 한다.

현재 서버는 nest(Javascript) 서버를 사용중이고, DB (mongoDB)를 사용하고 있어 해당 Framework에서 Mongoose를 이용해 Transaction을 구현 할수 있다.