본문 바로가기
Project Review

[Project Review] 2023_2 편의점 Pos System

by lumana 2024. 6. 24.

2023년 2학기 유닉스 프로그래밍 과목에서 진행했던 프로젝트. 시스템 콜(System Call)을 이용하여 프로그램을 만드는 프로젝트였다.

교수님께서 리눅스 서버에서 프로그램 시연을 할 것이기 때문에, CLI로 구현하라고 하셨다

 

시스템 콜은 read(), open(), write() 부터 fork(), execve() 등등 굉장히 많기 때문에 사실 저수준에서 어떤 것을 구현하는 것이 과목의 목표와 조금 더 맞긴 하지만, 우리 팀은 기존에 C의 high level로 구현되어 있던 코드들을 system call을 이용하여 구현하는 것으로 프로젝트의 방향을 잡았다. 최대한 수업시간에 배운 시스템 콜을 이용하여 만들만한 프로그램을 찾다가, 편의점 Pos System을 만들기로 하였다.

프로젝트 진행 기간은 약 2-3주정도 였고, 2인에서 진행하였다.

 

 

 

 

 

기능 구현

일단 편의점 시스템의 도메인을 먼저 구상하였다.

시스템 상 경영주(관리자) / 고객을 구분하였고, 관리자에서는 경영주와 알바를 구분하였다.

고객은 GS25의 나만의 냉장고와 같이 사용자가 이용할 수 있는 서비스를 바탕으로 기능을 구현하였고,

경영주/알바는 실제 POS 기계의 시스템을 바탕으로 기능을 구현하였다.

 

경영주 / 알바 기능

관리자 기능

 

 

발주

 

발주 - 새로운 물품 추가

 

구매내역 확인
근무자 정보 확인/수정

 

경영 지표 분석

 

시간대별 분석

 

월간 분석

 

할인 이벤트 수정

 

물건 환불

 

알바 기능

 

알바 기능 - 근무 시간 조정

 

경영주의 근무 시간 조정 요청 처리
예상 급여 명세서

고객 기능 구현

 

 

 

 

시스템 콜 활용

setjmp, longjmp를 이용하여 로그인 기능, 메뉴 돌아가기 등을 구현하였다.

fgets, fscanf, fprintf, open, read, fseek 등의 시스템 콜을 통해 파일 입출력

malloc/realloc 등의 시스템 콜로 구조체 동적할당

fflush()로 출력 버퍼 비우기

time 구조체를 이용하여 구매 기록 저장

 

아쉬웠던점

fork()와 execve() 를 통해서 실제 편의점 포스 시스템처럼 창을 띄우는 구조를 구현하고 싶었는데, 운영체제 한계 + 시연 환경의 한계로 인해서 구현하지 못했다.

 

느낀점

시스템 콜을 이용할 때는 일반 라이브러리 함수를 사용할 때 보다 더 조심해야 한다는 것을 느꼈다.

그리고 Github PR 기능을 잘 사용할 줄 몰라서 2인 팀프로젝트를 진행함에도 서로 커밋을 하다 보니 충돌을 일으키는 경우가 빈번히 존재했다. 프로젝트를 끝내고 github 공부를 해서 브랜치를 만들고 PR을 하고 merge 하는 과정을 추가로 학습했다.

 

 

사실 시스템 콜을 이용해서 저수준에서만 할 수 있는 기능들을 구현하지 않았지만, 그래도 시스템 콜을 이용해서 굉장히 많은 기능을 구현했다. 볼륨이 빵빵해서인지 교수님께서 높은 평가 점수를 주셨다 ㅎㅎ