1)
Smart 계량기 프로젝트 / (주)OO / 2016.05 ~ 2016.06아쉬운점 1
- 프로젝트 소개 : 각 가정의 전기 사용 데이터를 수집하여 LTE 신호에 실어 전기 회사에 전송하는 스마트 계량기의 Firmware Solution을 개발하는 프로젝트입니다.
- 개발환경 : [Linux / Ubuntu 14.01], [C, Shell / Eclipse CDT], [SVN / GCT SVN SourceStorage]
- 담당개발 : Multi Client Socket Server 구현
● Multi Client Sokcet Server
클라이언트와 소켓통신을 통해 어플리케이션이 측정한 전력량 데이터를 수신하는 소켓서버를 개발하였습니다. 다수의 클라이언트가 동시에 패킷을 전송하는 구조이기 때문에 Multi Client Connection 구조로 개발하였습니다. 또한 패킷 전송의 신뢰를 위해 TCP 소켓구조로 구현하였습니다.
해당 기능을 구현하던 중 두 개 이상의 클라이언트가 동시에 패킷을 전송하면 서버 측에서 순서대로 수신하지 못하는 파일 디스크립터 에러가 발생하였습니다. 문제를 분석한 결과 서버가 클라이언트의 소켓 접속요청을 수락하는 과정을 Blocking 방식으로 처리한 것이 원인이었습니다. 동시에 다수의 클라이언트가 보낸 패킷을 서버가 비동기식으로 수신할 수 있도록 Blocking 구조를 Non-Blocking 구조로 수정함으로써 해당 문제를 해결 할 수 있게 되었습니다.
해당 프로젝트를 통해 소켓통신 원리와 구조, 동기식/비동기식 통신의 차이점을 정확히 이해할 수 있었습니다.
2) Smartfren MIFI Andromax M2Y Firmware 개발 / (주)OO / 2016.01 ~ 2016.04
- 프로젝트 소개 : 인도네시아 통신사 중 하나인 Smartfren사의 포켓WiFi인 ‘Andromax M2Y’의 Firmware를 개발하는 프로젝트입니다. 해당 Device는 4G LTE 신호를 포켓WiFi를 이용하여 데이터를 사용할 수 있도록 해주는 휴대용 라우터입니다.
- 개발환경 : [Linux / Ubuntu 14.01], [C, Shell, javascript / Eclipse CDT], [SVN / GCT SVN SourceStorage]
- 담당개발 : Marvell WiFi Application 제어 Daemon 개발, 네트워크 고급설정 기능 구현, WiFi Disk 구현
● Marvell WiFi Application 제어 Daemon 개발
Host IP를 통해 사용자가 WiFi 설정 정보를 변경할 수 있는 CPE Web Page를 구현하였습니다. 클라이언트는 HTML과 Javascript, Jquery를 이용하여 구성하였고 웹인터페이스는 Cgi로 구현하였습니다. 해당 Web Page를 통해 WiFi Application을 제어하고 WiFi 구성 정보를 설정할 수 있도록 Linux Daemon 프로그램을 개발하였습니다.
● 네트워크 고급설정 기능 구현
방어벽과 같이 외부 네트워크로부터의 무분별한 침입 및 제한을 위해 Filtering 기능을 다수 구현하였습니다. 특정 MAC 주소의 접근을 허용/차단하는 MAC Filtering, 특정 외부 IP로부터의 접근 또는 특정 외부 IP로 접근하는것을 제어하는 IP Filtering, 특정 String이 포함된 URL의 접근을 차단하는 URL Filtering과 특정 Port로 접근하는 것을 차단하는 Port Filtering 또한 구현하였습니다.
Filtering 기능 이외에도 외부 접근을 특정 Port로만 허용하여 내부 특정 IP로 Forwarding하는 Port Forwarding 기능도 구현하였습니다. 위 기능들은 Linux Kernel을 구동하기 위해 Linux Application로 구현하였으며, C를 사용하여 개발하였습니다. 또한 해당 Application이 Linux Kernel을 구동하도록 Trigger를 Shell Script로 개발하였습니다.
● WiFi Disk
해당 Device의 WiFi 신호를 통해 File Storage 기능을 사용할 수 있는 WiFi Disk를 구현하였습니다. CPE Web Page를 통해 해당 UI를 개발하였고. C를 이용하여 Cgi 및 WiFi Disk Application을 구현하였고, Shell Script를 통해 Linux의 File System Command를 설정하도록 구성하였습니다.
WiFi Disk 기능으로는 File Upload, Download, Delete, Renaming, Create Directory 등을 구현하였습니다. 또한Image/Text/Audio/Movie와 같은 미디어 File을 Web UI상에서 미리볼수 있도록 미리 보기 기능을 구현하였습니다. 해당 기능 구현중 Web Page에서 첨부한 File 크기가 1GB이상이 되면 버퍼 메모리 Overflow가 발생하는 문제가 있었습니다. 문제의 원인은 Client에서 파일을 전송할 때 256Byte 씩 분할하여 전송하게 되고 이것이 Linux상의 임시 버퍼에 쌓인 후 일정 시간간격을 두고 메모리에 Write하게 됨으로써, 전송되는 버퍼의 크기 만큼 Linux가 빠르게 메모리에 Write하지 못해 발생한 문제였습니다. 이를 해결하기 위해 당시 웹어플리케이션으로 사용하고 있던 Lighttpd의 전송 버퍼 크기를 256Byte에서 128Byte로 수정하였습니다. 이후 4GB 크기의 File을 전송하더라도 문제가 발생하지 않게 되었습니다.
3)
OO 모바일 앱 개발 / (주)OO / 2015.01 ~ 2015.07
- 서비스 소개 : 남성 퍼스널 스타일링 서브스크립션 O2O 서비스를 개발하는 프로젝트입니다.
- 개발환경 : [Java(Android), Node.js / Eclipse], [MySQL / MySQL WorkBench], [SVN / Subclipse]
- 담당개발 : Client 전체 개발, 미들웨어 서버 개발, DB 설계 및 구축좋은점 1
● Client Side
UX 설계에 따른 Layout 구현 및 서버와 통신을 위한 Network Manager 모듈을 안드로이드를 통해 개발하였습니다. 뿐만 아니라 배송현황과 도로명 주소 정보를 위해 공공데이터 Open API의 데이터 Parsing 구조를 개발하였습니다. 또한 결제를 위해 PG사의 결제 시스템과 연동하였습니다.
● Server Side
Node.js를 이용한 Restful API 서비스 미들웨어 서버를 개발하였습니다. 서비스 시스템 관리에 있어서 확장성과 유연성을 위해 Restful API 정의서, Json 정의서를 문서화하였습니다. 또한 Amazon AWS EC2를 이용하여 Server Hosting을 구축하였습니다.
● DB
회원 테이블과 제품 테이블을 다대다 관계로 구성하여 구매 내역에 대한 정보를 효율적으로 관리하였습니다. 또한 회원 개인당 스타일리스트를 한 명씩 배정하여 스타일리스트 전용앱에서 한번에 자신이 관리하는 고객의 정보를 확인할 수 있도록 일대다 관계를 정의하였습니다. 또한 제품 구매에 대한 결제의 정확성과 신뢰성을 위해 트렌젝션-세이프를 고려한 InnoDB의 MySQL을 통해 데이터베이스를 구축하였습니다. 이밖에도 Amazon AWS RDS를 이용하여 DB Server Hosting 구축하고 미들웨어 서버와 연동하였습니다.
글자수 3,635자5,187Byte