역시 프로그래밍 공부는 직접 개발하면서 해야하는것 같다. 개발을 진행하면서 난관에 막힐때가 정말 많다. 요즘들어 생각이 드는건 지식을 더욱 확장하기 위해서는 영어가 필수인 것 같다. 한국이 아무래도 세계적으로 볼 때 인구가 적으니 검색을 통해 얻을 수 있는 지식이 어느정도 한계가 있다. firebase가 특히 그런데 한국어로 되어있는 자료가 거의 없어 대부분 구글에 영어로 검색하여 해결하고 있다. 그동안 영어 공부를 소홀히 했던 모습에 후회된다.
이번 포스팅에서 정리할 것은 firebase async awiat 적용 방법이다. 이 방법을 찾아내는 것도 기존 자바스크립트의 비동기 방식에 한계를 느껴서이다.
먼저 firestore에 data를 처리하기 위해서는 then을 통해 데이터를 받고난 뒤 비동기 방식으로 진행되는데 함수 밖에서 처리하고 싶을떄 즉 순차적으로 처리하고 싶을때 async, await으로 해결한다.
원래 callback 함수로 해결할 수도 있지만 너무 복잡해지는 경향이 있다. 실제로 개발하면서 callback으로 처리하려다 도저히 해결이 안되 그동안 공부를 미루었던 async, await을 머리속에 집어넣어 해결하게 되었다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | let boardsaving = async function(req,res){ ....................... let data = await db.collection('infor').doc(brdList).get(); let brdInfor = data.data(); console.log('brdInfor : ',brdInfor); brdCategory = brdInfor.brdCategory; brdName = brdInfor.brdName; brdCount = brdInfor.brdCount; console.log('brdCategory는 이겁니다 : ',brdCategory); console.log('brdName는 이겁니다 : ',brdName); console.log('brdCount는 이겁니다 : ',brdCount); } | cs |
중간에 생략한 부분이 있다.
일단 개발하려는 부분은 게시글을 적고 저장하는 부분이다. firestore의 단점이라고 하면 collection이 가진 doc 문서의 개수를 셀 수 없다는 것이 있다.
따라서 많은 해외 개발진들이 firestore에서 문서 개수를 셀 때 세가지의 방법을 사용한다
첫번째는 문서 개수가 100개 이하일때인데 단순하고 노가다 작업이다. 바로 for문을 사용하여 일일히 개수를 세는 것이다.
두번째는 잘 기억이 안나지만 ajax 통신을 이용해서 해결했던 것으로 기억하는데 정확히는 모르겠다.
세번째가 바로 이 방법인데 정보 저장(메타 데이터 저장)을 위한 collection을 따로 만든 후 key값으로 분류된 문서에 count라는 필드를 추가하는 것이다. 즉 key값과 count하려는 collection을 연동 시켜 데이터 추가,삭제가 이루어질때 count 필드 값을 변경해주는 것이다.
하여튼 비동기를 포함한 함수 앞에 async을 붙여주고 비동기로 진행되는 함수앞에는 await을 붙여준다. 이러면 비동기의 결과값을 얻은 후에야 다음 단계가 진행되는 것이다.
참고로 얻은 데이터 또한 기존 구조와 똑같다. 필드 값을 얻기 위해서는 "data()" 메소드를 사용한다.
필자는 영문 사이트로 고통받았기 때문에 나와 같이 막히는 사람이 있다면 포스팅을 보고 해결하길 소망한다.