12/13주차 회고

lim1313·2021년 10월 17일
0

WEEK 회고

목록 보기
9/9

😎 사실

  • 관계형 데이터베이스인 SQL 학습을 통해, instagram의 간단한 스키마를 디자인하였다.
  • Cmarket 과제를 수행하며 MySQL db와 connection하여 MySQL과 통신하는 방법을 학습하였다.
  • Cmarket 과제의 server 코드의 흐름도를 그려보며 MVC 패턴에 대한 이해도를 높였다.
  • Cmarket 과제 중 N:M관계를 형성하고 있는 orders와 items를 연결하는 order_items에 row를 추가하는 과정에서 트랜젝션 안정성 처리 방법을 연습하였다.

😎 발견점

mysql 모듈의 경우 promise를 지원하지 않는다. 그러다보니 callback으로 비동기를 처리해주어야 하는데, 상당히 불편하였다. 그래서 mysql2 모듈을 적용해 보았는데, promise를 지원하기 때문에 비동기 처리는 보다 간편했다.
하지만, db 통신 과정에서 트랜잭션 안정성을 유지하기 위해 에러 핸들링이 반드시 필요한데, try, catch 혹은 then으로 에러 핸들링을 해주다보니 콜백지옥과 비슷한 양상이 보이게 되었다.

Cmarket은 MVC 패턴으로 디자인되었는데, view, controller, model이 나누어져있어, 에러 발생시 코드 수정이 편리하였다. db와 관련된 에러가 발생했다면 db와 통신하는 model에 접근하여 에러 코드를 수정하면 되기 때문에, 유지보수가 용이할 것 같다.

Cmarket 과제 중 orders 테이블에 새로운 row를 추가한 후 orders.id를 외래키로 하는 order_items 테이블에도 새로운 row를 추가해 주어야 했다. 이때 트랜잭션의 안정성을 유지하는 것이 중요했다.
처음에는 controller에서 잘못된 body 정보가 들어오면 res.sendStatus(400)을 보내주는 것으로 에러를 핸들링하였다.
하지만 db통신 과정에서 문제가 발생할 수 있었다. 제대로된 정보가 들어왔지만, db 통신하는 과정에서 문제가 생기게 된다면 트랜잭션 안정성이 깨지게 된다. 그래서 controller에서만이 아니라, db 통신을 하는 models에서 transaction 처리를 해주어, 한 유닛의 모든 작업에 정상적으로 수행되었을 때에만 commit되도록 하였고, 중간에 하나라도 실패하게 되면 rollback되도록 해야한다.

😎 느낌

간단한 로직이었지만, Cmarket 과제를 통해 MVC패턴의 전반적인 개념을 이미지로 구조화할 수 있었고, 개념만으로 이해되지 않았던 트랜잭션의 안정성 유지를 어떻게 코드로 구현하는지에 대해서도 배울 수 있었다.

profile
start coding

0개의 댓글