깃허브 링크 에서 실행 파일을 다운 받아 사용할 수 있습니다!
프로젝트 이름 : Scream Jar - 고함 항아리
기획/개발 동기 :
공부와 과제 스트레스, 인간관계, 내 말을 듣지 않는 일 동료들과 팀플 동료들. 매번 친구들과의 카톡방에 하소연하기도 그렇고, 나와의 톡방에 계속 정체모를 비명만 쌓여간다. 프로젝트의 제목인 ‘고함 항아리’처럼, 사용자가 고함을 지르고 싶지만 여러 가지 사회적 · 환경적 · 상황적 여건으로 물리적으로 고함을 지르는 것이 불가할 때 사용자에게 위안을 주고자 계획되었다. 과다 경쟁 사회에서 현대인이 맞닥뜨리는 비합리적 규모의 스트레스를 합리적인 방안으로 풀어주는 앱을 프로젝트로 만들고자 했다.
2024-2 전공과목으로 수강한 ‘컴퓨터프로그래밍’ 수업에서 진행한 자유 주제 프로젝트로, 재미있는 주제이고 프로젝트에 미련이 남아 이후 서버 연동을 통한 친구 추가 기능과 피드 확인 기능까지 확장하여 깃허브에 업로드했다.
사용 언어/프레임워크 :
Component | Tech |
---|---|
Frontend | C++ with Qt (Widgets, UI) |
Backend | Python (Flask) |
Database | Supabase (PostgreSQL) |
UI Design | Qt Designer (.ui files) |
기능 :
로컬 DB - 서버 연동 아키텍처
로컬 DB 구현 :
database.h
와 database.cpp
로 클래스 인스턴스 없이 곧바로 데이터베이스 함수를 이용할 수 있게 했다.User
과 Scream
두 가지 객체를 어떻게 관리할지의 문제 users(
id TEXT PRIMARY KEY,
username TEXT NOT NULL,
wallColor TEXT,
friendList TEXT DEFAULT
)
screams(
id INTEGER PRIMARY KEY,
userID TEXT,
categoryIndex INTEGER,
content TEXT,
screamDate TEXT,
FOREIGN KEY (userID) REFERENCES users(id) ON DELETE CASCADE)
)
서버 구현 :
server.py
는 pyflask
를 이용해 작성했다.QNetworkAccessManager
을 이용하여 ServerAPI
클래스를 따로 두어 작성. 서버 접근이 필요한 클래스들의 property로 ServerAPI* server
을 두고, 가장 상위의 클래스에서 한 번의 초기화 이후 하위의 클래스들에게 넘겨주는 방식으로 이용.전체적 구조
UI (MainPage) ←→ ServerAPI ←→ Flask Server
UI (MainPage) ←→ Database ←→ Local SQLite
[ App Starts ]
↓
StartPage widget - pass credential input
↓
login via ServerAPI
↓
receive success signal in MainWindow
→ load user from server + save in local DB + switch to MainPage UI
[ New Scream ]
↓
ServerAPI::saveScreamToServer() → POST to server
+
Save to Object(running-time data) & local cache
[ User Adds Friend ]
↓
ServerAPI::addFriend() → POST to server
+
update local DB (friendList)
문제 해결 과정
기능 기획 고민
UX 고민, 개선
QDialog
와 단순 위젯 형태의 QWidget
, 두 가지 종류의 팝업을 구분해서 사용했다. 사용 시간이 짧게 소요될 것으로 추정되는 친구 확인 및 친구 추가, 배경 색 변경의 경우 일시적 팝업 위젯인 QWidget
을 사용했다.QTextEdit
class를 CustomTextEdit
class로 계승하여 구현했다.QSortFilterProxyModel
class를 override하여 구현했다.QAnimation
으로 고함항아리가 흔들리는 효과를 추가했다.