회사 인턴면접 도중 프론트에서 트랜잭션 처리를 어떻게 할거냐는 질문을 받았고 이를 잘 알지 못했어서 잘 모르지만 백엔드 단에서 자주 발생하는 이슈인걸로 알고있다고 이에대해 더 공부하겠다고 대답했다.
우선 트랜잭션은 백엔드에서 주로 일어나며 DB를 변경할때 하나의 요구사항이지만 여러개의 DB나 API를 수정해야할 때 중간에 에러가 나는 경우를 대비해서 하나의 완결된 작업이 될 수 있도록 결과적으로 모두 성공하거나 모두 실패할 수 있도록 하는 것이다.
(즉, 한꺼번에 수행되어야 할 일련의 연산을 말한다.)
대표적인 예시로 송금과 출금을 할 때 한쪽의 값을 줄이고 한쪽의 값을 올리는 행위중 하나만 성공하고 하나만 실패할 때 어떻게 롤백을 처리할지 등을 포함한다.
면접 당시에는 프론트에서 트랜잭션을 처리할게 있나 ? 했는데 지금 와서 생각해보면 트랜잭션이라는 용어에 빗대서 하나의 요구사항이 있을 때 여러가지 스토리지나 API 등을 어떻게 다 성공시키거나 실패하게 만들건지에 대한( 트랜잭션의 개념을 이해하고 있고, 경험해본적 있는지, 이를 어떻게 해결하면 좋을지에 대한 ) 질문이었던 것 같다.
(에러 핸들링 중에서도 단순 에러 핸들링이 아니라 일부는 성공하고 일부는 실패했을때 , 혹은 낙관적 업데이트처럼 화면은 이미 업데이트 했는데 서버는 실패했을 때 등의 특수상황의 경험치에 대한 대응 경험을 말하는 것 같다고 테오님께서 말씀해주셨다..! )
케이스에 따라 다른데
- API를 여러개 쓰는 경우 → 백엔드에서 트랜잭션 처리를 부탁
- API 순서가 꼬이지 않게 에러까지 잘 도달하게 하기
- (최악이 스크립트 에러가 발생한 경우이다. 사용자에게는 아무런 안내나 에러가 뜨지않으니까)
정해진 대응 형태는 없고 주로 1번 형태를 띈다고 한다.
앞으로는 이러한 상태관리와 낙관적 업데이트에 대해 더 깊이 공부해야겠다고 생각했고, 상황에 따라 백엔드에서 트랜잭션 처리를 부탁하거나, API 순서가 꼬이지 않게 에러를 잘 처리하는 것이 중요하며, 최악의 경우 스크립트 에러가 발생하지 않도록 하는것에 배울 수 있는 시간이었다.
(현재 개발 진행중인 프로젝트에서 한 페이지에 두가지 요청을 동시에 보내는 게 있는데 이 부분을 적용해서 업로드 할 예정이다.)
'FE' 카테고리의 다른 글
[ Jest ] toBeCalledWith vs toEqual (0) | 2023.11.07 |
---|---|
[Error : Warning: Each child in a list should have a unique "key" prop ] (0) | 2023.09.21 |