앙큼한 개발기록

서버의 로컬화에 대한 기록(server localization) 본문

개발

서버의 로컬화에 대한 기록(server localization)

angkeum 2022. 6. 8. 21:59

이번 회사에서 진행한 프로젝트가 electron을 이용한 프로그램 개발인데 

이게 인터넷이 끊겨도 정상적으로 작동해야 된다고 한다..

 

여러 고심 끝에 내린 결론은 로컬 서버를 구축해 인터넷이 끊겼을 경우 request url을 로컬로 변경하고 로컬 서버에서 처리, 

로컬 서버에서 처리 되다가 인터넷이 연결되면 다시 메인 서버로 변경하여 데이터를 동기화 시키는 작업을 진행하게 되었다. 

 

프로젝트 진행 순서는 다음과 같다. 

1. 메인 서버 클론

2. 메인 서버의 로컬화

 - 로컬 서버는 가볍게 만든다. 

 - 필요없는 api, table 모두 삭제 

 - 각 테이블에 syncFlag, syncUid 추가 -> 동기화가 된 테이블은 syncFlag를, 인터넷이 끊긴 상태에서 로컬의 데이터를 서버로 전송하면 uid(unique id) 가 맞지 않을 수 있어 해당 uid 동기화용 칼럼 추가

 - updateRecord table 추가 (데이터 업데이트 날짜 확인)

3. 로컬 서버 스케줄러 제작

 - 순서

  a. 초기 데이터 호출

  b. 서버에 있는 데이터를 로컬에 업데이트 (30분마다, 1시간마다)

  c. 인터넷 끊기면 로컬에 저장

  d. 인터넷 연결 되면 서버에 있는 데이터 호출 후 로컬 데이터 서버에 저장

4. electron 프로젝트 인터넷 연결 상태 확인 및 인터넷 연결 끊기면 baseUrl 변경, 다시 연결되면 메인 서버로 바라보게 또 변경

 

로컬 서버에서는 sequelize 를 이용하여 database를 2개 연결 후 서버DB에 직접 접근했다. 

electron의 request는 axios를 이용해 서버와 통신하며 인터넷 연결은 1분에 한번씩 확인, axios에서 'Network Error'가 터지면 바로 로컬 서버로 전송할수 있도록 error 함수 적용을 한다. 

 

위험요소

- 메인 서버가 변경되면 로컬서버도 변경해줘야 된다. (자동 업데이트 기능을 붙여야 될거 같다.) -> s3 나 별도로 업데이트 모듈 사용해서 

- 로컬 서버의 데이터와 메인 서버의 데이터의 동기화 (항상 가지고 가는 이슈)

 

Comments