개요
kubernetes를 프로그램 기반인 클라우드 환경을 구축하고자 하였다. 그래서 Organization으로 aswcloud를 만들고, 아이폰 어플리케이션, 서버 통신, 로그인 세션등 다양한 환경을 구축하고자 하였다. 그래서 로그인 세션 관리를 위한 프로그램인 Server Comm이란 프로그램을 만들었다. 해당 프로그램에서 로그인, k8s과 통신 하기 위한 모듈을 탑재 할 예정이다. 먼저 로그인을 위한 모듈을 탑재하기 위해서 데이터베이스를 먼저 선택해야 했다. 과거 외주나, 연구과제를 진행 할 때 mariaDB와 내부 캐싱용으로 NoSQL인 Redis를 사용해보면서 관계형 DB가 아닌, Document, 파일 형식의 데이터베이스의 매력에 빠져 NoSQL중 점유율이 높은 MongoDB를 선택하게 되었다.
Mongo Driver
Go 언어에서 MongoDB를 사용하면서 여러가지 방법에 대해서 자료 조사를 하였다. 먼저 가장 접근성이 좋은 Awesome Go와 Awesom MongoDB에서 라이브러리를 검색해 보았었다. 그런 결과 mongoDB의 ODM(Object Data Mapping)이나 Query를 쉽게 변환 해주는 툴이 있었다.
하지만 직접적으로 Mongo Driver를 이용하는 것이 여러가지 설정이나, 문제가 발생했을 때 자료가 더 많아 오류 수정에 용이할것 같아 타 ODM이 아닌 Mongo Driver를 선택하게 되었다.
Mongo Driver는 MongoDB 서버와 통신을 하면서 결과값을 반환하는 라이브러리이다. 조금 더 쉽게 설명을 MongoDB는 k8s중 API Server이고, Mongo Driver는 kubectl라는 형식이다. 실제 사용자는 kubectl을 통해 API Server에 접근하여 결과값을 받아 처리를 해주는 것이다.
Mongo 실 적용
기본적으로 데이터베이스에 대한 개념이 있기에 B-Tree로 돌아가기 때문에 인덱싱을 하게 되면 느리게 된다라는 등, Join이 안된다는 등 다양한 내용은 알고 있지만 실제로 직접 사용하는건 처음이기 때문에 Mongo를 극한의 성능을 끌어 올리거나 최적화란 개념이 많이 부족했다.
gRPC를 통해 iOS 클라이언트에서 server-comm 으로 데이터를 보내고, server-comm에서 내부 로직을 확인 한 뒤, 데이터가 정상적이면 Mongo Driver를 통해 mongoDB 데이터를 추가 하는 방식으로 진행 하였다.
mongoDB는 데이터를 CRUD 할 때 Binary JSON 형식으로 주고 받기 때문에 BSON 자료가 비교적 많아서 좋았었다. 대표적으로는 BSON은 JSON과 규격이 똑같아 JSON에서 Deserialize를 하고 BSON으로 Serialize가 바로 되었다. 그 점 때문에 server-comm 뿐만 아니라 다른 프로젝트에서 Request가 들어온 내용이나 Response를 로깅 할 때 엄청 많이 편하였다.
이후
아이폰 어플리케이션에서 UI 테스트를 한 모습이다. 아이폰에서 gRPC를 통하여 서버에 통신을 하고, 로그인 성공, 실패 했을 때 모습을 표기하도록 하였다.
로그인 실패 | 로그인성공 |
---|---|
현재 작업중인 프로젝트를 실행 하는 방법
- Docker Compose를 올린다.
- iOS를 빌드하여 기기에 업로드 한다.
아이폰에서 UI 테스트를 진행 또는 어플을 실행 합니다.
NoSQL이 SQL을 완전히 대체 하는것도 힘들지만 SQL이 NoSQL을 완전 대체 하기 어려워 보인다. 각각의 장단점이 너무 확실하므로 목적에 따라서 하면 될것 같다.