#1. C언어
운영체제 과목을 수강하면서 FFS-Sim 시뮬레이터를 사용해, 버퍼캐시 내 MRU 알고리즘 구현을 했습니다. 기존의 알고리즘은 LRU로 최근에 사용되지 않은 버퍼가 삭제되는 방식이었지만 이것을 MRU로 바꾸어 최근에 사용한 버퍼가 삭제되도록 변경하였습니다. 이 프로젝트를 진행하며 운영체제 내의 다양한 기능이 독립적이 아닌 유기적으로 연결되어 동작한다는 것을 알 수 있었습니다.
또한 RTOS에 대해 배우면서 uCIOS를 사용해 우선순위 기반의 스케줄링에 라운드 로빈을 추가해 좀 더 효율적인 알고리즘을 구현한 경험이 있습니다. 기존의 우선순위 기반 스케줄링 또한 매우 성능이 좋은 편이었지만 태스크의 작업량이 많은 경우 CPU의 독점으로 전체적으로 느려지는 문제가 있었습니다.
따라서 이것을 해결하기 위해 라운드로빈 알고리즘을 제안해 직접 구현을 했고, 테스트 결과 같은 태스크를 비교했을 때 속도적인 측면에서 향상이 있었음을 확인할 수 있었습니다.
#2. Android
데이터베이스 과목을 수강하며, 안드로이드 기반의 로드뷰 어플리케이션을 개발한 경험이 있습니다. 구글 API를 사용해 캠퍼스 내의 위치 정보를 알려주고, 특정 건물의 간략한 특징이 나타나도록 하였습니다.
또한 건물 내부를 직접 촬영하여, 이것을 바탕으로 각 건물의 내부 또한 확인할 수 있도록 구현하였습니다. 스마트폰의 고도, GPS 등의 센서를 사용했고 사용 시 고도에 대한 약간의 오차로 층에 대한 정보가 잘못 나오는 경우가 있었지만 대부분의 경우 올바른 정보를 확인할 수 있었습니다.
또한 교내 인턴십을 지원해 비콘을 사용한 운동 스케줄을 알려주는 ‘헬스매니저’ 어플리케이션을 개발했습니다. 저는 Servlet을 사용한 서버 프로그래밍을 맡아 안드로이드 기반의 클라이언트와 XML 통신 및 데이터베이스를 구축하였습니다. 저는 좀 더 다양하고 몸 상태에 맞는 운동을 추천하는 알고리즘과 클라이언트와의 통신에 중점을 두고 개발을 진행했습니다.
#3. C#
데이터베이스 응용 과목을 수강하며, ASP.NET을 활용한 도서 관리 웹 페이지를 구현하였습니다. 책, 회원, 판매 등에 관련된 데이터베이스를 구축했고 Open API를 사용해 **문고, ****, ***로부터 책 정보를 받아 화면에 출력하였습니다. 그리고 해당 웹 사이트와 연동을 통해 구매까지 가능하도록 하는 중개자 역할의 서비스로 확장하였습니다.
또한 월계동 지역의 부동산 DB를 다운 받아 가상의 부동산 매매 사이트를 구현해 보았습니다. 사용자가 직접 사진, 지역, 가격 등의 정보를 올리면 관심이 있는 사람이 메시지를 통해 연락을 할 수 있도록 했고 실제 거래까지 확장할 수 있는 가능성을 제시했습니다.
#4. Hadoop
Hadoop을 사용하여 위키피디아 내에서 사용된 단어들의 사용 빈도수를 계산하는 프로젝트를 진행하였습니다. ASP.NET을 통해 검색 페이지를 구성하였고, 검색어를 입력하면 맵과 리듀스 과정을 거쳐 나온 해당 키워드의 사용 횟수와 빈도의 순위가 표시될 수 있도록 하였습니다.
저는 맵과 리듀스 부분을 맡아 프로젝트를 진행하였습니다. 맵 단계를 통해 위키피디아의 내용을 읽어 단어 단위로 나누었고, 리듀스 단계에서 맵의 결과를 받아 빈도수를 추가하도록 하였습니다.
#5. Java
Java는 안드로이드, Servlet 등 다양한 언어의 기반이 되기 때문에 가장 많이 사용해본 언어입니다. Java만을 단독으로 사용한 프로젝트는 알고리즘 과목을 수강하며, 아인슈타인 문제를 Backtracking 기반으로 해결할 수 있도록 구현해 보았습니다.
또한 Jflex와 JavaCup을 사용해 수식을 XML 형식으로 바꾸어 주는 간단한 파서를 만든 경험이 있습니다.
#6. 클라우드 컴퓨팅
IT 이슈 중 하나인 클라우드 컴퓨팅에 대해 연구를 진행하며 대표적인 PaaS인 구글 앱 엔진 기반의 다양한 웹 애플리케이션을 개발한 경험이 있습니다. 특히 도서 추천 웹 서비스를 개발하며 추천 알고리즘에 대해 고민을 해야 했습니다.
일반적으로 추천 시스템에 많이 쓰이는 클러스터링 기반 알고리즘은 과정의 복잡성으로 인해 속도문제가 존재했고, 이것을 해결하기 위해 많은 고민을 했습니다. 기존의 추천 시스템의 알고리즘과 장단점을 비교하고, 직접 구현해 테스트를 진행했습니다. 또한 여러 편의 논문을 읽어보며 개선 방안에 대해 연구했고, 다양한 아이디어를 적용해 보았습니다.
저는 아이템 간의 거리와 사용자 트래킹을 통해 선호도를 계산 후 추천 대상을 결정하는 알고리즘을 고안했고, 테스트 결과 속도와 정확성의 향상을 확인할 수 있었습니다.