카공족을 위한 카페의 정보를 제공하는 프로젝트를 웹프로그래밍 동아리에서 팀을 꾸려 진행했었다. 카페의 의자 수, 형태, 콘센트의 개수 등을 DB에서 저장하여 사용자의 위치정보나 검색을 통해 추천한 위치기반 서비스였다. 자주 팀 프로젝트에서 백엔드 부분을 자주 맡아와서 자연스럽게 백엔드를 담당 하였다. 언어, 프레임 워크와 DB를 Node.js, Express.js, Mongodb로 선정하여 프로젝트를 진행하였다. 자주 사용되는 REST API로 제공하여 사용자에게 정보를 보여주도록 하였다. 프로젝트가 작지만, 세부적으로 나누었다. 클라이언트와 만나는 API, DB와 연결되어 데이터의 관리하는 Model, 그사이를 연결하는 service 로 나누었다. 이것들을 각각 나누고 연동되도록 작업을 하였다. 서버가..
DB는 MYSQL을 선택하였습니다. 사용하는 언어에 맞게 MYSQL C 라이브러리를 했습니다. 많은 부분 PHP의 MYSQL 레퍼런스를 참고했습니다. DB에 쿼리를 JSON 변환을 이용했기 때문에 여러 줄을 이용한 쿼리는 복잡하고 길어졌습니다. 일부 SQL문들은 procedure로 구현하였습니다. 이를 이용해 get 요청에도 get 쿼리 변환 실행 후 함수 실행하듯 DB의 procedure를 실행하도록 만들었습니다. 어떠한 컬럼이 바뀌면 같이 바뀌어야 하는 부분이 있어서 MYSQL의 기능인 트리거를 이용하여 같이 변하게 만들었습니다. 주로 데이터 추가와 삭제를 트리거로 다른 테이블의 데이터를 수정, 삭제 등을 했습니다. 박물관, 미술관 등 현장실습 할만한 곳을 추가하기 위해 공공데이터 API를 쓴 적이 ..
교육 보조용 프로그램, 현장 실습 때 AR과 위치기반 출석체크 및 퀴즈 풀이 서비스 AR과 Google Map API 기반 기술을 통해 현장 실습에 도움을 주던 프로그램이었습니다. 사용자가 위치정보와 문제를 통해 이곳을 방문하고 잘 관람했는지 관리자가 체크를 할 수 있는 서비스를 기획했습니다. 이전에 진행한 프로젝트에서는 CSV와 비슷하게 특정 문자열을 이용하여 데이터를 분리하는 방법을 썼습니다. 이 방식이 관리하기 어렵다고 생각해 github에 있는 C언어 JSON 파싱 라이브러리를 이용해 JSON을 프로토콜에 사용했습니다. 말만 JSON이었지 SQL 쿼리 변환기를 짜는 것과 다름이 없었습니다. 사용자가 프로토콜에 맞게 JSON을 보내면 서버가 JSON의 데이터를 이용해 SQL 쿼리문을 작성하고 DB에..
올해(2022년) 겨울 인턴을 백엔드 부문을 지원했는데 인턴 면접 방식을 Discord chatbot을 디자인하고 제작하여 시연하는 것이였다. 챗봇의 슬래시 커맨드를 구현하는 프로젝트이다. /XXX YYY 를 디스코드 입력창에 입력하면 챗봇이 명령에 맞게 처리해주는 챗봇을 구현하는 프로젝트였다. 챗봇이 얼마나 재미있는지, AI관련한 기능이 들어가 있는지를 중점을 두고 심사하는 과제였다. 그래서 재미를 골라 주제를 설정하게 되었다. 일종의 스포일러 봇으로 이 영화, 게임, 드라마에서 이 캐릭터가 죽는지 알려주는 나쁜 봇을 만들기로 하였다. 심사하는 분들이 이런 장난스러운 기획에 웃었으면 하면서 만들었다. 일단 데이터는 Fandom 이라는 위키에서 한 페이지를 크로링하여 파이썬 딕셔너리 코드를 출력하는 코드..
교내 현장학습으로 인턴 생활을 했었다. 이전부터 임베디드 소프트웨어에 관심 있어서 관련 회사 찾았다. 찾은 회사는 자동차에 들어가는 전장 소프트웨어 솔루션을 제공하는 회사였다. 그중 가상화 부분에서 유명한 회사였다. 그곳에서 target 시스템 환경을 구축하는 업무를 받았고, 운영체제나 ARM, 보안기능에 대해 배웠다. 당시 수강하지 않았던 과목인 컴퓨터 구조, 운영체제에 대한 가벼운 사내 교육을 통해 배웠다. 업무는 팀 내에서 인턴들을 관리하시던 분이 추천하신 BuildRoot라는 툴을 사용하였다. Target system의 하드웨어 사양과 업무를 내려주신 분이 설정하신 사양에 맞게 설정하였다. 설정한 사양은 GUI 앱이 구동 가능한 리눅스 rootfs 이미지를 만드는 것이었다. BuildRoot는 a..
시험기간이 겹쳐 여러가지로 작성이 늦어졌다. 다국어화, 리스트뷰, 데모자료, glade를 집중적으로 보았다. 다국어화는 보다 많은 교내학생들이 사용하기 위해 자료를 찾아보았다. 일본어, 중국어(간체자, 정체자) (CJK)등의 언어는 번역이 할 수 없으나 기본적인 뼈대를 제공하여 누구든지 번역할 수 있도록 할 예정이다. FOSS에서는 gettext라는 툴을 이용하여 다국어를 지원한다. 영어를 문장을 키로 번역, 현지화된 글을 치환해 준다. 치환기준은 실행시 로케일이다. 이전 작성한 코드 수정 pk_client_set_locale(client, g_get_language_names()[0]); setlocale(LC_ALL, g_get_language_names()[0]); 을 차라리 아래와 같이 하여 저런..
Packagekit을 전체적으로 테스트 해보았다. 스터디 이전에 집에서 사용하는 리눅스 테스크탑에서 코드를 작성하고 테스트 해보았다. include해야하는 헤더파일이 달랐으나 일단은 작동하였다. 처음에는 아래와 같이 진행하였으나 #include #include 로 하는 것이 맞았다. 공식문서에 include 문 없이 코드 스니펫만 있어서 어려웠다. vim, vscode에서 설정을 해주지 않으면 자동 추천기능이 자동하지 않아 오랜만에 공식문서를 참고하여 작성하였다. GIO관련 프로그래밍이 처음이기에 async 기능을 쓰기 위해 glib, gio 스니펫을 보고 작성을 하게 되었다. Gio는 GTK쪽에서 개발한 이벤트 기반 프로그래밍을 C에서 구현이 가능하게 만들어주는 라이브러리로 C에서 GTK, GLib 등..
첫 주의 스터디에는 그동안 GTK나 DBUS에 대하여 모아둔 정보들을 항목마다 링크를 추가한 문서에 새로운 링크를 추가하고 대략적인 설계를 진행하였다. 대략적인 프로젝트 진행 목적 및 이 프로젝트를 진행하면서 배워야 할 내용들을 정리하였다. 국민대 소프트웨어 단과대에서 지정한 표준환경을 구축해주는 GUI앱을 제작하는 것이 이번 프로젝트의 목표이다. GUI 툴킷은 GTK+로 정하고 패키지 관리를 맡아줄 PackageKit을 이용하여 패키지관리 서비스를 제공할 예정이다. 기반이 되는 D-BUS와 Linux에서 GUI화면이 어떻게 보여지는 지에 대한 이해와 MVP와 같은 디자인패턴을 습득할 것이다. 이번 프로젝트의 목적이 저학년생들의 환경구축에 대한 도움이기에 설치가 간단한 Debian package를 사용할..