정글 · 144
  1. 2025
  2. [0731] 사람은 무엇으로 사는가?2025.08.02
  3. [0730] KRAFTON Yeoksam Office2025.07.31
  4. [0728] What's this?2025.07.30
  5. [0729] Slowly flowing day2025.07.30
  6. [0727] Lime Light2025.07.28
  7. [0726] 우리가 기다린 미래2025.07.28
  8. [0724] 폭풍의 눈2025.07.27
  9. [0723] IYKYK2025.07.27
  10. [0722] 순살치킨 -> 치킨너겟2025.07.27
  11. [0725] Final approach2025.07.27
  12. [0721] TRAIN - TRAIN2025.07.25
  13. [0719] 시간이 느리게 가는 건2025.07.24
  14. [0720] 어떤 통찰도 지름길로는 얻을 수 없다2025.07.24
  15. [0718] EVEREST2025.07.23
  16. [0715] 무엇이든, 언제가는2025.07.21
  17. [0717] 깊은 사고는 더 이상 니즈가 없다2025.07.21
  18. [0716] 이기적인 토대 위2025.07.21
  19. [0714] 경험을 압축하는 알고리즘은 존재하지 않는다 ⏳2025.07.18
  20. [0710] Tropical Blue 🌊2025.07.14
  21. [0712] 화려한 거짓을 향해2025.07.14
  22. [0713] 무한한 가능성을 가질 것2025.07.14
  23. [0711] Kentucky Fried Chicken 🍗2025.07.14
  24. [0708] 어제와 다른 하늘의 색2025.07.11
  25. [0707] 누군가의 달이었기를 🌕2025.07.11
  26. [0709] 처음처럼 내 딛는2025.07.11
  27. [0706] 아직 뜯지 않은 마음 🎁2025.07.08
  28. [0705] 황금의 오솔길2025.07.07
  29. [0704] 우리는 오가는 바람2025.07.05
  30. [0703] Nic dwa razy2025.07.04
  31. [0702] Never basic2025.07.03
  32. [0630] 그럼에도 불구하고2025.07.02
  33. [0701] 입꼬리올림근2025.07.02
  34. [0628] E3i3 🛫2025.06.29
  35. [0629] 과잉포장된 자존심2025.06.29
  36. [0627] 118 ✨2025.06.28
  37. [0626] 무한 우주에 순간의 빛일지라도 🌌2025.06.28
  38. [0625] RUSH2025.06.27
  39. [0624] 그래, 우리는2025.06.26
  40. [0623] The wind blowing low2025.06.24
  41. [0621] 하나는 죽고, 하나는 살았다 💡2025.06.23
  42. [0622] 피어나는 마음의 꽃2025.06.23
  43. [0620] 초속일초2025.06.21
  44. [0619] 씨앗이 가장 고귀한 이유는2025.06.20
  45. [0617] 마음이 휑뎅그렁할 때2025.06.18
  46. [0618] Evening Primrose 🏵️2025.06.18
  47. [0616] 하나2025.06.17
  48. [0615] 강철무지개2025.06.16
  49. [0614] 유람 🚉2025.06.15
  50. [0613] 13일의 금요일 ⏰2025.06.15
  51. [0612] 백만 스물하나, 백만 스물둘2025.06.13
  52. [0609] Tampermonkey 🖥️2025.06.12
  53. [0610] 달이 아름답네요 🌕2025.06.12
  54. [0611] 경안천 🥩2025.06.12
  55. [0608] 미르 ✨2025.06.09
  56. [0606] 아르기닌 🍫2025.06.08
  57. [0607] 나 평생 꿈만을2025.06.08
  58. [0604] Global Running Day 🏃‍2025.06.06
  59. [0605] 변속주 🌃2025.06.06
  60. [0603] 가장 밝은 별2025.06.05
  61. [0602] 천천히 🌃2025.06.04
  62. [0601] circular metal ring 🏀2025.06.03
  63. [0531] 담장과 쪽문 🐋2025.06.01
  64. [0529] 출발선 🏃2025.05.31
  65. [0530] 투표런 🚀2025.05.31
  66. [0527] SET 🎂2025.05.29
  67. [0528] Post Traumatic Growth 🌠2025.05.29
  68. [0526] READY 📅2025.05.28
  69. [0525] 청복 💙2025.05.26
  70. [0522] 유로파 🍏2025.05.25
  71. [0523] 강제 푸시 반성합니다 🔁2025.05.25
  72. [0524] 열복 🫀2025.05.25
  73. [0521] 떠오름과 저묾 🌞2025.05.23
  74. [0520] Family Friend Fools2025.05.22
  75. [0519] Time machine ⏰2025.05.20
  76. [0517] 흐린 토요일 🐢2025.05.18
  77. [0518] 맑은 일요일 🧼2025.05.18
  78. [0515] 셋이 만드는 하나 🧭2025.05.17
  79. [0516] PTG 🌧️2025.05.17
  80. [0513] 오십삼 🌤️2025.05.15
  81. [0514] Lotte+Cafeteria 🍔2025.05.15
  82. [0512] 일장춘몽 💊2025.05.14
  83. [0511] 𝑬𝒗𝒆𝒓𝒍𝒂𝒏𝒅, 𝑬𝒗𝒆𝒓 𝑴𝒊𝒏𝒅 🎡2025.05.12
  84. [0509] Your Journey Starts Here 🪧2025.05.11
  85. [0510] 五月雨よ 🌧2025.05.11
  86. [0508] 「권의 속도」 📄2025.05.10
  87. [0506] 놀자판 하루 🐷2025.05.08
  88. [0507] Quiet Air ⏳2025.05.08
  89. [0505] 뭔데이 🎏2025.05.06
  90. [0503] 나침반이 가리킨 곳 🌌2025.05.05
  91. [0504] After School 🎒2025.05.05
  92. [0502] 짧은 하루 📖2025.05.03
  93. [0501] 예고된 악재는 악재가 아니다 🌧️2025.05.02
  94. [0430] Can More 🍧2025.05.01
  95. [0429] 초급반 🏃‍2025.04.30
  96. [0427] 맥도날드 원정 🍔2025.04.29
  97. [0428] 감사합니다. 죄송합니다. 🙏2025.04.29
  98. [0425] Sunny Day 🌞2025.04.28
  99. [0426] 무용(無用)의 쓸모 🛤️2025.04.28
  100. [0424] 벚나무 아래에서 🌸2025.04.26
  101. [0422] D-100 🧑‍💻2025.04.24
  102. [0423] 언제나 이타카를 마음에 두라 🌿2025.04.24
  103. [0421] 수상한 미용실 💇‍♂️2025.04.22
  104. [0420] 손으로 컴퓨터를 마주하다🔧2025.04.21
  105. [0419] 비가 오면 빨래를 하자 🌧️2025.04.20
  106. [0418] 반차😴2025.04.19
  107. [0415] 첫 달리기🏃‍2025.04.18
  108. [0416] 반티 발주👕2025.04.18
  109. [0417] 발표, 청소, 러닝🗣️2025.04.18
  110. [0414] 선택과 해석🗳️2025.04.15
  111. [0413] Home Sweet Home🏠2025.04.14
  112. [0412] 人生2025.04.12
  113. [0410] 알고리즘의 끝, C언어의 시작🧭2025.04.11
  114. [0411] 반티 디자인 공모 & 제출👕2025.04.11
  115. [0409] 하와이안 스테이크🥩2025.04.10
  116. [0407] Es irrt der Mensch, solang' er strebt.📚2025.04.08
  117. [0408] Long Chat (#🎮)2025.04.08
  118. [0405] 움직이는 물체의 시간은 느리게 간다💤2025.04.06
  119. [0406] 마무리🛌2025.04.06
  120. [0404] 하나의 칼날🗡️2025.04.05
  121. [0403] 3x7=21🧗2025.04.04
  122. [0402] 퀴즈 다음날, 시험 전날😴2025.04.03
  123. [0401] April Fools' Day🎭2025.04.02
  124. [0331] 1년의 90번째 날🌅2025.04.01
  125. [0330] 日曜日은 칠요일 중 첫째 날 이다⏰ 2025.03.31
  126. [0329] 토요일은 주말이 아니다☕2025.03.30
  127. [0328] 그래프와 치킨버거🐔2025.03.28
  128. [0327] 3주차의 시작🗓️2025.03.27
  129. [0325] 기초 다지기 & 정리해야 할 CS 개념들💡2025.03.26
  130. [0326] 기초 다지기🔧2025.03.26
  131. [0324] 0.44%2025.03.25
  132. [0322] 문제 풀이에 집중한 하루 📅2025.03.23
  133. [0323] 본가 다녀온 날🏡2025.03.23
  134. [0321] 동료학습🌿2025.03.22
  135. [0320] 첫번째 시험📝2025.03.22
  136. [0319] 먹다가 끝난 하루🍖2025.03.20
  137. [0318] 눈이 쌓이면 버그도 쌓인다❄️2025.03.19
  138. [0315] 첫 주말🛏️2025.03.17
  139. [0316] 외출과 배달🚶🛍️2025.03.17
  140. [0317] 깃허브, 팀별 면담, 키워드 공부👨‍💻2025.03.17
  141. [0311] 정글 입성🏕2025.03.15
  142. [0312] 디지털 포춘쿠키🍪2025.03.15
  143. [0313] cookie4u.store🍪 + 1주차 발제📚 + 회식🍺2025.03.15
  144. [0314] 컴퓨팅 사고로의 전환🧠2025.03.15
  145. [0310] 입소 당일📅2025.03.15

[0312] 디지털 포춘쿠키🍪

2025.03.15 · 정글

🏕 0주차 미니 프로젝트 - 웹서비스 개발 및 배포

📌 정글 콤파스 0주차 설명

정글 콤파스 0주차에는 다음과 같은 안내가 적혀 있다.

입학시험 때 배운 기술들을 토대로, 3박 4일간 미니 프로젝트를 완성해보세요.
유쾌하거나 / 의미있거나 / 흥미롭거나 - 자유롭게 주제를 선정해도 무방합니다.
팀원들과 아이디어 협의 후 주제 발표(화)를 하고, 구현 완료 후 결과물 발표(목)를 진행합니다.
한 명의 AWS EC2에 업로드합니다.
(옵션) 도메인을 붙여 완성합니다.

💡 기본적으로, 입소 첫날부터 바로 실전 프로젝트가 시작된다고 보면 된다.


🕒 3월 10일 - 첫날 일정

입소 당일인 3월 10일, 다들 피곤해서 23시에 거의 숙소로 돌아갔다.

근데 사실, 원칙적으로는 10시~23시까지 훈련을 받아야 한다.
즉, 23시 이전에 일과를 끝마치는 건 불가능하다는 얘기다.

“원칙적으로는” 불가능하다고 했는지는,
와보면 안다. 😏

어쨌든, 우리 8팀이 결정한 프로젝트 “디포쿠”에 대해 설명하겠다.


🍪 8팀 미니프로젝트 - 디지털 포춘쿠키 (디포쿠)

🎯 프로젝트 개요

📌 디지털 포춘쿠키(Digital Fortune Cookie)
사용자가 하루에 한 번 행운의 메시지를 받을 수 있는 웹 애플리케이션

운세 메시지 + 점수를 제공하며, 개인의 운세 기록을 저장 & 비교 가능
운세 점수는 데이터베이스에 기록되고, 사용자 간 랭킹도 확인 가능


💡 아이디어의 시작

💭 “캠퍼스에서의 단조로운 생활에 재미 한스푼을 추가하자”
전통적인 **포춘쿠키(Fortune Cookie)**는 과자를 열면 짧은 운세 메시지가 나오는 방식이다.
이걸 웹에서 하루에 한 번만 뽑을 수 있도록 구현해보자는 아이디어가 나왔다.

💡 왜 이 프로젝트를 선택했나?
매일 운세를 확인할 수 있는 심리적인 재미 요소 제공
운세 점수를 기반으로 랭킹 기능 추가 가능
MongoDB & Flask를 활용한 웹 서비스 구축 연습
JWT 기반 인증 시스템을 적용하여 보안 강화


🚀 주요 기능

🔹 1. 하루에 한 번만 포춘쿠키 열기

✅ 사용자는 하루에 한 번만 포춘쿠키를 열 수 있다.
MongoDB의 원자적 업데이트(Atomic Update) 기술을 사용하여 중복 요청 방지
📌 기술 스택: Flask, MongoDB, AJAX


🔹 2. 행운 점수(운세 점수) 부여

✅ 각 운세 메시지와 함께 0~100점 사이의 랜덤한 행운 점수가 제공된다.
✅ 점수는 단순 랜덤이 아니라, 가중치 기반의 확률 알고리즘을 적용
📌 기술 스택: Python random.choices() + MongoDB


🔹 3. 운세 메시지 생성 알고리즘

✅ 운세 메시지는 3가지 요소(이벤트 + 결과 + 조언)로 구성되어 매번 다르게 생성된다.
✅ 특정한 점수 범위(좋음/보통/나쁨)에 맞는 운세 메시지가 자동 선택됨.
📌 기술 스택: Python 템플릿 엔진, 랜덤 알고리즘


🔹 4. JWT 기반 인증 시스템

회원가입 & 로그인 후, JWT 토큰을 활용하여 사용자 인증이 이루어진다.
✅ 사용자는 로그인 후에만 포춘쿠키를 뽑을 수 있다.
서버 재부팅 시, 기존 JWT 토큰을 무효화하여 보안성을 강화
📌 기술 스택: Flask JWT Extended, Secure Cookies


🔹 5. 사용자 랭킹 시스템

✅ 모든 사용자의 행운 점수를 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 요청을 활용한 프론트엔드 & 백엔드 통신


🔥 마무리

📌 디포쿠는 단순한 운세 서비스가 아니다.
단순한 랜덤 운세가 아니라, 데이터베이스 & 인증 시스템을 연습할 수 있는 프로젝트였다.

🚀 실제 작동 화면을 정리해보겠다.
📌 다음 글에서 계속!