이번에 마케팅 팀에서.. 또 일거리를 맹글어주셧다..ㅎㅎ 처음 접해보는 백그라운드 알림! 전화가 오면 클라이언트쪽에서 백엔드에서 던져주는 값으로 브라우저에서 알림창,모달창을 띄어주는 일이다! 기존에 있던 소스들에서 유지보수겸으로 추가하는거라서 소스가 지저분해서 꽤나 예를 먹은 .... ㅠ 나중에 리팩토링하거나.. 수정을 좀 해줘야할것같다..
일단 첫작업으로는 파이어베이스 npm 을 설치를 해준다.
현재 관리자에서는 vue 2 를 사용하여 여기에 맞는 npm 모듈을 설치! 파이어베이스가 말이 좀 많던데 node 13버전에서도 무리없이 돌아가긴한다 ㅎ
파이어베이스 모듈이 필요하다!
npm i@firebase/messaging
으로 설치 해준다
설치 후 백그라운드 js 를 사용하기 위한 js 파일을 생성 (백그라운드 js 가 궁금하면 구글링하면 자세하게 설명이 나온다~fcm 동작원리도 아주 자세하게 나온다~ 궁금하면 검색!~개발자는 언제나 검색~ㅋㅎ)
public 폴더안에 firebase-messaging-sw.js 파일을 생성해준다.
생성 후에 파이어베이스 필요한 정보 삽입 회사 api 키니깐 ㅎ 가려놓깅(아래에서 자세하게 설명)
자 이렇게 셋팅하고 위에 키는 아래에 파이어베이스 콘솔창에서 따오자
프로젝트 설정에 들어가서 일반 클릭후내앱에서 sdk 설정 및 구성에서 파이어베이스콘피그 복사 후 내가 사용 용도에 맞게 넣어준다.
일단 우리회사는 vue2 로 진행중이고.. 노드 버전도 좀 하위버전을 사용중이라서 여러가지 시도했지만 잘안먹혀서 나는아래방식대로 진행하였다
백그라운드에서 사용할 메시징 처리인데 꽤나 애먹었다.. 처음써보는 백그라운드에서 도는 정적 js 에 익숙치 않아서 ㅠ(import 가 불러오질못했다.. 아주 미치는줄...)
셋팅도 완료했으니 실질적으로 사용할 곳으로 이동하여 코드 작성해준다.
로그인시 알림요청 권한 처리와 백엔드로 요청을 보내는 코드를 작성했다.
이미 완성이 된 코드에서 유지보수성 처리라서 좀 꽤나 애를 먹었다....
위에 부분도 파이어베이스 공식 사이트에서 대략 흟어보면서.. 감으로 작업을 하였다.
로그인 쪽 뷰에서는 이런식으로 코드를 작성하여 로그인 할때 파이어베이스에서 받은 fcm 토큰을 백엔드에게 전달해준다.
로그인을 하면! 이렇게 허용하라는알림창이 뜬다~
이렇게 백엔드 요청 파라미터값들도 잘들어가있다~
현재 우리 사이트에 적용한 원리는 전화로 해당되는 매장에 전화 시 백쪽에서 받아서 파이어베이스 토큰을 가지고있는 pc 로 값을 전달하여
클라이언트에서 해당 값을 알림창으로 보여주고 화면이 켜져있는경우에는 연락처로 조회가 되게 하는 화면이다.
일단 우리 회사에 맞게 화면이 켜있으면 모달창이 어디서든 떠야 하기때문에 App.vue와 헤더.vue에 추가적인 소스를 추가하기로했다.
라이프 사이클 마운티드에다가 아래 코드를 작성
app.vueapp.vue
이벤트 버스 사용시 beforedestroy 를 사용 안하면 이벤트 가 계속 살아있어서 여러번 호출을 하기 때문에 작성 해준다~.
메서드 안에
app.vue navigator.serviceWorker
요로코롬 작성해준다. 나는 또 이벤트 버스를 사용하여 topNav.vue 에 값을 넘겨줄것이다.!
백에서는 이지콜등 회선을 연결하여 테스트할수있는 휴대기기를 주셧당 이걸로 테스트를 진행할것이다!
관리자에서 미리 셋팅 한 번호로 내 휴대전화기로 전화를 걸면 테스트를 할수있는 상황이다. 하지만 이지콜이랑 무슨 계약건때문에 개발에서 테스트를 진행이 무리가 있어서 포스트맨으로 다시 테스트 진행...
헤더쪽 분리 컴포넌트인 topNav.vue 에서 코드는 아래와 같이 정의를 한다. app.vue 에서 이벤트를 수신을 받으면 동작할수있게 이벤트 버스로 동작하게 한다.
topNav.vuetopnav.vue
전개발자가 쓰고 있는 템플릿에 맞게 모달창을 띄우고 닫고를 설정해주고 매장관리자가 아닌 권한이 있는사람은 못보도록 막아둔다.
이벤트 버스를 여러군데쓰면 찾기도 힘들고 어렵지만.. 서로다른 곳에 위치한 컴포넌트여서 일단은 대략적으로 사용 이벤트버스는 되도록이면 안쓰는게 가독성도 좋아지고 유지보수성도 향상되지만 나는 일단 어쩔 수 없이 진행! 다음에 전개발자가 만들고간 코드 전체적으로 리팩토링 할때 그때 수정하도록...하겠다. 이렇게 하여 프론트 소스는 완료!
영업팀에서 제안이 하나 들어왔다. 현재 우리 사용자사이트와 saas 모드로 제공 가능한 홈페이지를 분리시켜달라고!
하나의 소스로 각각의 페이지로 보여야하는 사이트를 제공하기 위해서 ...
패키지 json 에서 스크립트 부분을 수정하였다
요런식으로 node_env 셋팅 후 ! yarn 으로 실행 시 분리하여 배포도 가능하게 만들기 위해서
빌드 쪽도 추가 해준다.
기존의 나는 vue2로 관리자를 유지보수 하는 개념으로만 수정하여 타입스크립트와 넉스트에 익숙하지 않았지만
클라이언트 쪽 언어는 구글링 하면 거의 대부분 이해가 쏙쏙 간다 ㅎㅎ(아마도 리액트 하신분들은 더쉬울것이다. 스토어 개념, es6, 웹팩 등등 만있으면 다 똑같은듯 싶다! 최근에 리액트 공부도하는중인데 리덕스 next 쿼리.js 재밌댜..어렵지만..)
추가로.. 윈도우 쪽에서만 작업을 하다보니 npm 이 익숙했지만 이번에 새로 mac에서 작업을 시작하여 yarn 을 사용하여 프로젝트를 진행하여 비슷무리? 해서 이것도 그닥 어렵지 않았다!
saas 로 실행 시킬경우 이런식으로 셋팅을 하여 쓰면 된다!
ts 파일로 분리시켜서 저장시켜준다음쓰고싶은곳에서는 이런식으로 불러와서 사용한다.
무리없이 진행하다가 관리자에서 셋팅한 값들이 api 호출 하여 돔이 그려지기 전 인 시점인 process.server 에서 실행하여 꼭 가져와야하는 데이터들이 있엇다 사이트 색상이라던지 디스플레이에 뿌려줄 정보라든지 등등 화면이 깜박거리면서 다른색으로 변경되는걸 방지 하기 위해서 store/index.ts 에서 스토어에 정보를 셋팅 해준뒤 가져다 쓰는 식으로 변경을 해야했다.
코드가 살짝 지저분하다! 아직 준비중이라서..ㅎㅎ일단 되는걸 확인해야한다!
요런식으로 대강 작성해주고 가장 중요한부분!
개발쪽과 운영쪽에서에 환경은 틀리다.
지금 개발쪽은 회사 자체내에 서버를 구축해서 사용중이다. 리눅스에 vm 을 뛰운후 거기서 nginx 를 사용하여 개발서버에서 테스트를 진행중이다. 운영쪽은 azure 클라우드를 사용중이다!!