정글 콤파스 0주차에는 다음과 같은 안내가 적혀 있다.
입학시험 때 배운 기술들을 토대로, 3박 4일간 미니 프로젝트를 완성해보세요.
유쾌하거나 / 의미있거나 / 흥미롭거나 - 자유롭게 주제를 선정해도 무방합니다.
팀원들과 아이디어 협의 후 주제 발표(화)를 하고, 구현 완료 후 결과물 발표(목)를 진행합니다.
한 명의 AWS EC2에 업로드합니다.
(옵션) 도메인을 붙여 완성합니다.
💡 기본적으로, 입소 첫날부터 바로 실전 프로젝트가 시작된다고 보면 된다.
입소 당일인 3월 10일, 다들 피곤해서 23시에 거의 숙소로 돌아갔다.
근데 사실, 원칙적으로는 10시~23시까지 훈련을 받아야 한다.
즉, 23시 이전에 일과를 끝마치는 건 불가능하다는 얘기다.
왜 "원칙적으로는" 불가능하다고 했는지는,
와보면 안다. 😏
어쨌든, 우리 8팀이 결정한 프로젝트 "디포쿠"에 대해 설명하겠다.
📌 디지털 포춘쿠키(Digital Fortune Cookie)
➡ 사용자가 하루에 한 번 행운의 메시지를 받을 수 있는 웹 애플리케이션
✅ 운세 메시지 + 점수를 제공하며, 개인의 운세 기록을 저장 & 비교 가능
✅ 운세 점수는 데이터베이스에 기록되고, 사용자 간 랭킹도 확인 가능
💭 "캠퍼스에서의 단조로운 생활에 재미 한스푼을 추가하자"
전통적인 포춘쿠키(Fortune Cookie)는 과자를 열면 짧은 운세 메시지가 나오는 방식이다.
이걸 웹에서 하루에 한 번만 뽑을 수 있도록 구현해보자는 아이디어가 나왔다.
💡 왜 이 프로젝트를 선택했나?
✅ 매일 운세를 확인할 수 있는 심리적인 재미 요소 제공
✅ 운세 점수를 기반으로 랭킹 기능 추가 가능
✅ MongoDB & Flask를 활용한 웹 서비스 구축 연습
✅ JWT 기반 인증 시스템을 적용하여 보안 강화
✅ 사용자는 하루에 한 번만 포춘쿠키를 열 수 있다.
✅ MongoDB의 원자적 업데이트(Atomic Update) 기술을 사용하여 중복 요청 방지
📌 기술 스택: Flask, MongoDB, AJAX
✅ 각 운세 메시지와 함께 0~100점 사이의 랜덤한 행운 점수가 제공된다.
✅ 점수는 단순 랜덤이 아니라, 가중치 기반의 확률 알고리즘을 적용
📌 기술 스택: Python random.choices()
+ MongoDB
✅ 운세 메시지는 3가지 요소(이벤트 + 결과 + 조언)로 구성되어 매번 다르게 생성된다.
✅ 특정한 점수 범위(좋음/보통/나쁨)에 맞는 운세 메시지가 자동 선택됨.
📌 기술 스택: Python 템플릿 엔진, 랜덤 알고리즘
✅ 회원가입 & 로그인 후, JWT 토큰을 활용하여 사용자 인증이 이루어진다.
✅ 사용자는 로그인 후에만 포춘쿠키를 뽑을 수 있다.
✅ 서버 재부팅 시, 기존 JWT 토큰을 무효화하여 보안성을 강화
📌 기술 스택: Flask JWT Extended, Secure Cookies
✅ 모든 사용자의 행운 점수를 MongoDB에서 직접 계산하여 랭킹 제공
✅ 랭킹 계산 시 전체 데이터를 불러오지 않고, 효율적인 정렬 알고리즘 적용
📌 기술 스택: MongoDB 인덱싱, Flask
카테고리 | 기술 |
---|---|
백엔드 | Flask, MongoDB, JWT 인증 |
프론트엔드 | HTML, CSS, JavaScript (AJAX) |
배포 환경 | AWS EC2, Nginx, Gunicorn |
보안 | JWT, HTTPOnly 쿠키, Secure 쿠키 |
✅ Flask와 MongoDB를 활용한 RESTful API 설계
✅ JWT 인증 시스템 & 보안 설정 적용
✅ Flask + Gunicorn + Nginx를 이용한 웹 서비스 배포
✅ 비동기 AJAX 요청을 활용한 프론트엔드 & 백엔드 통신
📌 디포쿠는 단순한 운세 서비스가 아니다.
단순한 랜덤 운세가 아니라, 데이터베이스 & 인증 시스템을 연습할 수 있는 프로젝트였다.
🚀 실제 작동 화면을 정리해보겠다.
📌 다음 글에서 계속!