개인 기록용이므로 설명이 자세하지 않고 친절하지 않을 수 있습니다.
계기
회사 출근 절차는 다음과 같다. 회사 건물 앞에 도착한다. 엘레베이터를 기다린다. 엘레베이터로 00층에 간다. MDM을 켜고 인증한다. 업무용 컴퓨터를 켠다. 로그인을 한다. 출퇴근 관리 시스템 사이트에 접속한다. 출근을 찍는다.
이것이 불편해서 작년에 '업무용 컴퓨터를 켠다~ 출근을 찍는다'의 과정을 사무실 입구 쪽의 모바일 단말을 통해 nfc 터치 방식으로 바꾸어 사원증을 태깅만 하면 출근이 찍히도록 했다. 작년에도 '회사 건물 앞에 도착하면 바로 찍으면 안돼??'라는 의문이 있어서 짬 있으신 선임 분이 시도해봤지만, 사내 방화벽 정책으로 인해 외부망의 inbound를 허용해주지 않았다.
그런데 문제는 회사 건물 앞에 도착까지 한 것은 좋은데, 출근 시간 엘레베이터에 사람이 매우 몰린다는 것이다. 이로 인해 회사 건물 입구까지는 약 10분 전에 도착했는데 막상 사무실에 도착해서 시스템에 접속해 출근을 찍으면 출근 시간이 지나 시스템상으로 지각처리가 되는 상당히 혈압이 오르는 상황이 가끔 연출되었다.
그냥 개인 핸드폰으로 출근을 찍으면 모두가 행복한 시나리오가 되겠다.. 싶지만 회사 정책과 팀장님 매니저님들과의 근태 정책에 대한 협의가 있어야 하는 일이기 때문에 누구도 나서서 바꾸려고 하지 않았다.. 지금도 정책적인 협의가 된 것은 아니지만, 마냥 계획만 세워서 쪼르기 보다는 '실제로 앱을 이렇게 만들어서 이런 것이 가능해요.'라고 말할 수 있으면 설득이 더 쉽게 되지 않을까, 또는 지원을 더 해주지 않을까란 생각에 무작정 앱을 만들어보기로 결정했다.
MVP를 우선 만들어보고자 하는데 계획은 이렇다.
사내 inbound로 트래픽이 들어가기만 하면 사실 사내 서버에서의 처리는 금방 하는데 이게 정책상 허용해주지 않아서 문제다. 지금 당장 못푸는 문제이니 우선은 모든 서버는 외부에 구성한다.(구성 서버를 동시 운영하면서 외부 데이터를 파일로 들여와서 주기적으로 마이그레이션 하는 방향으로 1안을 제시할 예정..)
이전에 해왔던 방식을 따라서 MVP만 만드는 것이니 public cloud 서버 하나 생성하고 db와 application은 서버 하나에 몰아 넣는다. 백엔드 서버 구성은 빠르게 마치고 기능은 로그인과 출근 기능만 만든다.(누구인지 알아야 하고, 그 사람이 출근을 했는지 알아야 하므로)
client도 동일 서버에 배포한다. 이 때 기능은 geolocation api를 활용해 사용자 위치 정보 수집하고, 회사의 위치 정보와 비교해서 근방 100m에 있을 때만 호출이 가능하도록 한다.
클라우드 서버 구성
네이버 클라우드 플랫폼, aws, azure 등은 모두 free tier를 소진했기 때문에 gcp를 기반으로 구성한다. 다른 클라우드들과 비슷해서 vm 인스턴스를 필요 사양만 충족하게 만들기만 하면 된다.
application이 로컬 DB와 커넥션을 맺으므로 별도 설정은 안해도 되지만, 수월한 작업을 위해서 우리 집 네트워크만 3306 tcp connection을 허용해준다. 이 때 GCP의 방화벽 정책 설정, DB configuration을 같이 변경해주어야 한다. ubuntu 기반으로 mysql server 설치 하면 default configuration이 있는데 그건 아래 다시 설명한다.
GCP에서는 MySQL을 사용하므로 3306 port를 내 네트워크만 허용해주고, 지금 당장은 보안까지 생각할 것이 아니기 때문에 80 http port는 모든 ip에서 요청을 허용한다.
GCP 내 DB 서버는 특정 user에게 localhost와 내 네트워크만 접근 허용하게 만들어 준다. mysql config 파일의 bind-address도 수정해준다. 보통은 /etc/mysql/mysql.conf.d 경로의 mysqld 설정 파일에서 강제로 localhost랑 내 네트워크만 허용해준다(mysql 서버 실행 시 configuration 참조 우선순위가 몇단계가 있는데 당장 기억이 나지 않음. 설정 참조 로그도 각 참조 경로를 다 출력해줬던 것 같은데..). database 하나 create 해주고 user도 하나 만들어서 권한 주고 flush 해준다. 이제 db tool에서 connection test 해보면 성공.
application 구성
이제 DB는 workbench에서 편하게 작업 가능해졌다. 앱도 뭐 별거 기능이 없어서 users, commute 테이블 2개만 만들고 로그인도 우선은 구현하지 않고 출근 endpoint만 dummy method 하나 만든다. 나머지는 기존에 사용하던 spring-jpa 기반 boiler plate 코드를 활용한다. 도커 기반으로 하려고 했다가 일단 또 귀찮으니까 그냥 jar 파일 실행하는 것으로 헬스체크만 해본다.
헬스체크 완료되면 대충 commute 테이블에 특정 유저가 출근 찍히는지만 db 연동 되는지 확인해본다. 데이터가 잘 들어왔다.
이건 좀 context가 있는 내용이긴 한데, 회사에서 다른 사람들하고 같이 개발도 해보기로 해서 backend, frontend 분리해서 개발하기로 해가지고 그래도 spring, react 기반으로 작업을 시작해준다.. 나중에 내가 할게 아니니까(아..닌가..?) 우선은 대충 만들어 둔다..는 아니고 MVP만 우선 만드는거니까 동작하는 것에 집중하기로 한다.
frontend 쪽도 이전에 만들어둔게 있어서 그걸로 빌드해서 확인하면 되는데 오늘은 여기까지! 서버 구성 되었고 연결 확인했고 DB도 들어가는거 확인했으니까 이제 프론트 쪽에서 gps 위치에 따라 서버로 요청 보내는거만 하면 사실 mvp는 완료될 듯하다.
'기타' 카테고리의 다른 글
[개인기록] gps 기반 출퇴근 시스템 간편 일지(3) (1) | 2024.12.15 |
---|---|
[개인기록] gps 기반 출퇴근 시스템 간편 구현 일지(2) (1) | 2024.12.06 |