hmschlng / bank-server-client-prototype Goto Github PK
View Code? Open in Web Editor NEWThis project forked from soraghe/jaryoteample
IPC를 활용한 Linux 기반의 은행 계정계 서버 프로토타입
License: MIT License
This project forked from soraghe/jaryoteample
IPC를 활용한 Linux 기반의 은행 계정계 서버 프로토타입
License: MIT License
※프로그램 작성을 위해 팀원들에게 알리는 글입니다. 이 글을 읽고 파트 구현에 참고해 주시기 바랍니다. 이 글과 함께 각 파트의 담당자분들이 server 폴더에 구현된 bankserver.cpp와 testcase.cpp, 그리고 msq.h 파일의 코드와 주석을 참고해 주시기를 부탁드리겠습니다. ----------서론---------- 일단 프로젝트의 형태가 db <-> bankserver(db + msq) -> client 형식으로 되어 있습니다. -> administrator 따라서 하나의 서버가 여러 관리자들과 클라이언트를 상대로 처리를 수행해야 하고, 관리자와 클라이언트의 메시지큐 혼선이 있으면 안되므로 메시지타입 (long mtype을 포함한) 구조체를 관리자<->서버용 구조체, 클라이언트<->서버 구조체로 각각 따로 정의하여 사용하도록 구현되었습니다. 아예 프로세스도 분할하여 자식 프로세스는 관리자와 통신하고, 부모 프로세스는 클라이언트와만 통신하도록 하였습니다. 그러니 관리자 파트와 클라이언트 파트는 이를 숙지하시어 관리자용/클라이언트용 구조체가 정의된 msq.h 파일을 include 하셔서 구현해 주시기 바랍니다. (클라이언트 담당자님은 관리자 구조체를 쓸 일은 없으니 msq.h의 복사본에서 관리자 구조체와 매크로들을 삭제하시는 등 수정 자유입니다.) 현재 github 리포지토리에 폴더가 3 개 있습니다. 각 파트 담당자분들은 자신의 파트에 해당하는 폴더(ex. 서버 담당자 -> server 폴더)에 pull request 해주시면 되겠습니다. ----------역할 구분---------- 메시지큐 통신을 기반으로 해야하는 저희 작업물의 특성상 파트별로 구현해야 할 부분이 애매하게 할당된 것 같아서 각 파트별 구현을 정리해 보겠습니다. - 관리자 파트 : bankadministrator.cpp의 완성(msq.h include 필요) 1) 콘솔 UI 디자인(필수사항 아님) 2) msgAdmin 구조체를 사용하여 서버와 통신하도록 구현(서버 부분을 테스트 케이스로 제작해 주시면 서버 담당이 그에 맞추어 bankserver.cpp에 반영) -11/29에 구현해주신 관리자 기능은 추후 서버에 반영하겠습니다. 3) 관리자 프로그램의 기능은 msgAdmin의 멤버 int cmd를 사용하여 구분 (ex) in main(): msgAdmin adm; cout << "작업 선택 (1:login / 2:Show all clients' info / 3:search client / 4:modify client's info" << endl; cin >> adm.cmd; switch(adm.cmd){ case 1:{//로그인 ... } case 2:{//클라이언트 전체 목록 조회 ... } ... } ...return 0; 관리자가 어떤 작업을 하려고 하는 지 서버는 수신한 msgAdmin 구조체의 cmd값을 통해서만 알 수 있기 때문에 예시를 참고하여 구현해 주시기 바랍니다. 4) msgAdmin 구조체는 고객 한명의 정보만을 담고 있습니다. 전체를 넘기면 메시지큐가 가득 차서 오버플로우가 발생할 위험이 있기 때문입니다. 따라서 고객 전체 목록을 불러올 때도 data.txt가 끝날 때 까지 한 명씩 불러오는 것임을 참고해주시기 바랍니다. 5) administrator.cpp에서 메시지큐를 삭제하는 msgctl를 사용하지 말아주시기 바랍니다. 메시지큐는 오직 서버에서만 제어할 수 있어야 합니다. 테스트케이스에는 사용하셔도 좋습니다. 최근 좀비 메시지큐로 인한 이슈가 제보되어 bankserver.cpp에서 서버쪽 오류가 아닌 이상 웬만해서는 꺼지지 않도록 버그 픽스를 했으니 bankserver.cpp를 그대로 administrator 폴더에 복사해 테스트케이스로 만들어 주셔도 좋습니다.(오히려 서버 담당자의 반영에도 편하기 때문에 적극 권장합니다.) - 클라이언트 파트 : bankclient.cpp의 완성(msq.h include 필요) 1) 콘솔 UI 디자인(필수사항 아님) 2) msgClient 구조체를 사용하여 서버와 통신하도록 구현(서버 부분을 테스트 케이스로 제작해 주시면 서버 담당이 그에 맞추어 bankserver.cpp에 반영) 3) bankclient.cpp의 경우, server/testcase.cpp에 구현된 클라이언트 부분을 참고하여 주시기 바랍니다. 기능 구현을 위해 testcase.cpp에 클라이언트 부분이 어느정도 동작이 구체화되어 있으니, 부족하지만 이를 참고하여 구현하시면 서버파트와 충돌이 최소화될 것 같습니다. 4) 관리자 프로그램과 마찬가지로 프로그램의 기능은 msgAdmin의 멤버 int cmd를 사용하여 구분(관리자파트 '3)' - (ex) 참고) 5) msgctl를 사용하지 말아주시기 바랍니다. (관리자 '5)' 부분 참고). 클라이언트 담당자분도 client 폴더에 server/bankserver.cpp를 복사하여 테스트케이스로 사용하는 것을 추천드리겠습니다. - 서버 파트 0. 공통 : bankserver.cpp 프로그램의 완성 1. db파트 : db 파일 관리 기능 구현 : 일단 현재 작성되어있는 bankserver.cpp에 맞게 구현 사양을 제안하겠습니다. 제안일 뿐이니, 꼭 따라야 할 필요는 없지만, 제안에 들어가는 기능들은 꼭 필요한 기능들이니 구현해 주셔야 합니다. 추가로, 관리자의 ID/PW를 다른 별개의 파일(ex. admin.txt)을 제작하여 관리자 로그인 기능에 사용하려고 합니다. 따라서 관리자의 ID/PW를 저장해놓은 파일을 관리하는 기능을 구현해 주시기 바랍니다. 1) db파트는 자료구조를 이용해 db파일을 읽고 쓰고, 탐색하는 기능을 구현해 서버가 db에 접근이 가능하도록 하고, 외부의 요청에 맞게 서버가 db의 데이터를 실어다 나를 수 있게 하면 됩니다. 2) 서버의 동작을 위해 필요한 db 파트의 기능들 (1)고객정보 가져오기(서버 전체에 사용됨) : (제안 : ClientInfo pull_client_info(const char* ID);) data.txt를 읽어 인자로 들어오는 ID와 일치하는 ID를 발견하면,그 ID에 대한 정보를 data.txt에서 읽어와 ClientInfo구조체(msq.h에 정의되어 있음)에 담아, 리턴하는 방향으로 구현해 주시면 되겠습니다. (2)클라이언트 ID 중복검사(회원가입, 로그인 기능을 위해) : (제안 : bool client_is_repeat(const char* ID)) data.txt에 중복되는 ID가 있으면 안됩니다. 때문에 회원가입 시 회원가입 정보가 날아올 텐데(새 ID/PW/이름/주민번호), 이 때, data.txt를 탐색하여 날아온 ID정보와 같은 ID가 존재하면, true를 리턴하는 방향으로 구현해주시면 되겠습니다. 이 기능은 클라이언트의 회원가입 시에는 is_repeat호출값이 true인 경우 회원가입 거부를 하고, 로그인 시에는 data.txt의 내용을 관리자나 클라이언트에 전달하는 데 사용될 예정입니다. (3)관리자 ID 중복검사(회원가입, 로그인 기능을 위해) : (제안 : bool admin_is_repeat(const char* ID)) admin.txt 역시 중복되는 ID가 있으면 안됩니다. 때문에 회원가입 시 회원가입 정보가 날아올 텐데(새 ID/PW), 이 때, admin.txt를 탐색하여 날아온 ID정보와 같은 ID가 존재하면, true를 리턴하는 방향으로 구현해주시면 되겠습니다. 이 기능은 관리자의 회원가입 시에는 is_repeat호출값이 true인 경우 회원가입 거부를 하는 데 사용될 예정입니다. (4)회원정보 추가(회원가입, 입출금, 관리자의 고객정보 수정 요청 등에 사용) : (제안 : void add_client_info(ClientInfo info);) data.txt에 고객 정보를 추가하는 기능입니다. 추가하실 때, clientAccountNum에 난수를 사용해 계좌번호를 생성해 저장하고, data.txt에 저장해주도록 구현해 주시면 되겠습니다. (5)관리자정보 추가(회원가입, 입출금, 관리자의 고객정보 수정 요청 등에 사용) : (제안 : void add_admin_info(msgAdmin info);) admin.txt에 관리자 계정 정보를 추가하는 기능입니다. admin.txt에는 한 줄당 "관리자_ID 관리자_PW"의 양식으로 저장됩니다. (ex) in admin.txt: dnflei asdf1234!@ soraghe q1w2e3r4@@ doraemon500 qwertyuiop kingtaewoo KKing123 2. 통신 파트 : 메시지큐로 외부와 통신하는 동작 구현
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.