[백엔드] 백엔드에서 처리해야하는 logic

Hyo Kyun Lee·2021년 12월 22일
0

백엔드

목록 보기
10/11
post-custom-banner

1. 개요

실무에서 다음과 같은 경우가 발생한다.

  • 특정 시점에서 DB table의 존재 유무를 확인한다.
  • DB table이 존재하지 않는다면, 새로 생성된다.
  • 생성한 table이 존재한다면 특정 column의 value를 update한다.

이때 특정 시점에서 DB table의 존재 유무를 확인하는 작업은 프론트엔드에서 useQuery를 활용하여 이루어지고, DB CRUD에 관한 작업은 백엔드에서 이루어질 수 있다.

그러나 기본적으로 이러한 DB에 접근하고 확인, 수정 등 모든 일괄적인 작업들은 백엔드에서 이루어져야 이상한 동작을 방지하고 오류발생을 막을 수 있다.

2. 프론트엔드에서 사용하는 useQuery

const { data } = useQuery(my_query)

useQuery를 활용하여 해당 data가 DB에 생성되었는지 확인하는 작업을 하고, 없다면 새로운 table을 생성한다고 가정해본다.

이때 useQuery를 이용해서 확인 → useMutation을 이용해서 Update 순으로 이루어질텐데, 만약 useEffect 및 다른 함수 등으로 인해 useQuery를 통해 얻어야 하는 table이 null이 될 수 있다.

즉 비동기처리로 인해 useQuery에 data가 확보된 상태가 아닐 경우, useMutation에서 예상하지 못한 결과를 초래할 수 있다.

다만 확인 자체만 하는 경우라면 useQuery를 사용해도 무방한데, 최대한 정적인 상황에서 사용해야 오류를 방지할 수 있다.

3. 백엔드에서의 일괄적인 처리

 try{
          const currentTable = await db.Table.findOne({
              where: {
                  value: value
              }
          })

          if (currentPost){
              currentPost.value = currentPost.value + 1;
              await currentPost.save();
          } else {
              await db.PostView.create({
                  value: post_type
              })
          }
      }catch (err) {
          console.error('Query caused error! : ', err);
      };

위와 같이 아예 DB 확인/Update이 같이 이루어진다면 하나의 백엔드 logic에서 처리해야 한다.

이때 try , await 등 비동기 처리를 확실하게 해주는 것에 유의하고 table 확인 > 생성 > Update 순으로 작업을 진행한다면 확실하고 안전하게 DB작업을 할 수 있다.

이처럼 DB작업은 웬만하면 백엔드에서 처리한다는 생각으로 임하면 좋을 것 같다.

post-custom-banner

0개의 댓글