정글 · 144

  1. 2025
  2. 8월
  3. [0731] 사람은 무엇으로 사는가?08.02
  4. 7월
  5. [0730] KRAFTON Yeoksam Office07.31
  6. [0729] Slowly flowing day07.30
  7. [0728] What's this?07.30
  8. [0726] 우리가 기다린 미래07.28
  9. [0727] Lime Light07.28
  10. [0722] 순살치킨 -> 치킨너겟07.27
  11. [0723] IYKYK07.27
  12. [0724] 폭풍의 눈07.27
  13. [0725] Final approach07.27
  14. [0721] TRAIN - TRAIN07.25
  15. [0719] 시간이 느리게 가는 건07.24
  16. [0720] 어떤 통찰도 지름길로는 얻을 수 없다07.24
  17. [0718] EVEREST07.23
  18. [0715] 무엇이든, 언제가는07.21
  19. [0716] 이기적인 토대 위07.21
  20. [0717] 깊은 사고는 더 이상 니즈가 없다07.21
  21. [0714] 경험을 압축하는 알고리즘은 존재하지 않는다 ⏳07.18
  22. [0710] Tropical Blue 🌊07.14
  23. [0711] Kentucky Fried Chicken 🍗07.14
  24. [0713] 무한한 가능성을 가질 것07.14
  25. [0712] 화려한 거짓을 향해07.14
  26. [0708] 어제와 다른 하늘의 색07.11
  27. [0707] 누군가의 달이었기를 🌕07.11
  28. [0709] 처음처럼 내 딛는07.11
  29. [0706] 아직 뜯지 않은 마음 🎁07.08
  30. [0705] 황금의 오솔길07.07
  31. [0704] 우리는 오가는 바람07.05
  32. [0703] Nic dwa razy07.04
  33. [0702] Never basic07.03
  34. [0630] 그럼에도 불구하고07.02
  35. [0701] 입꼬리올림근07.02
  36. 6월
  37. [0629] 과잉포장된 자존심06.29
  38. [0628] E3i3 🛫06.29
  39. [0626] 무한 우주에 순간의 빛일지라도 🌌06.28
  40. [0627] 118 ✨06.28
  41. [0625] RUSH06.27
  42. [0624] 그래, 우리는06.26
  43. [0623] The wind blowing low06.24
  44. [0621] 하나는 죽고, 하나는 살았다 💡06.23
  45. [0622] 피어나는 마음의 꽃06.23
  46. [0620] 초속일초06.21
  47. [0619] 씨앗이 가장 고귀한 이유는06.20
  48. [0617] 마음이 휑뎅그렁할 때06.18
  49. [0618] Evening Primrose 🏵️06.18
  50. [0616] 하나06.17
  51. [0615] 강철무지개06.16
  52. [0613] 13일의 금요일 ⏰06.15
  53. [0614] 유람 🚉06.15
  54. [0612] 백만 스물하나, 백만 스물둘06.13
  55. [0609] Tampermonkey 🖥️06.12
  56. [0610] 달이 아름답네요 🌕06.12
  57. [0611] 경안천 🥩06.12
  58. [0608] 미르 ✨06.09
  59. [0606] 아르기닌 🍫06.08
  60. [0607] 나 평생 꿈만을06.08
  61. [0604] Global Running Day 🏃‍06.06
  62. [0605] 변속주 🌃06.06
  63. [0603] 가장 밝은 별06.05
  64. [0602] 천천히 🌃06.04
  65. [0601] circular metal ring 🏀06.03
  66. [0531] 담장과 쪽문 🐋06.01
  67. 5월
  68. [0529] 출발선 🏃05.31
  69. [0530] 투표런 🚀05.31
  70. [0527] SET 🎂05.29
  71. [0528] Post Traumatic Growth 🌠05.29
  72. [0526] READY 📅05.28
  73. [0525] 청복 💙05.26
  74. [0522] 유로파 🍏05.25
  75. [0523] 강제 푸시 반성합니다 🔁05.25
  76. [0524] 열복 🫀05.25
  77. [0521] 떠오름과 저묾 🌞05.23
  78. [0520] Family Friend Fools05.22
  79. [0519] Time machine ⏰05.20
  80. [0518] 맑은 일요일 🧼05.18
  81. [0517] 흐린 토요일 🐢05.18
  82. [0515] 셋이 만드는 하나 🧭05.17
  83. [0516] PTG 🌧️05.17
  84. [0513] 오십삼 🌤️05.15
  85. [0514] Lotte+Cafeteria 🍔05.15
  86. [0512] 일장춘몽 💊05.14
  87. [0511] 𝑬𝒗𝒆𝒓𝒍𝒂𝒏𝒅, 𝑬𝒗𝒆𝒓 𝑴𝒊𝒏𝒅 🎡05.12
  88. [0510] 五月雨よ 🌧05.11
  89. [0509] Your Journey Starts Here 🪧05.11
  90. [0508] 「권의 속도」 📄05.10
  91. [0506] 놀자판 하루 🐷05.08
  92. [0507] Quiet Air ⏳05.08
  93. [0505] 뭔데이 🎏05.06
  94. [0503] 나침반이 가리킨 곳 🌌05.05
  95. [0504] After School 🎒05.05
  96. [0502] 짧은 하루 📖05.03
  97. [0501] 예고된 악재는 악재가 아니다 🌧️05.02
  98. [0430] Can More 🍧05.01
  99. 4월
  100. [0429] 초급반 🏃‍04.30
  101. [0427] 맥도날드 원정 🍔04.29
  102. [0428] 감사합니다. 죄송합니다. 🙏04.29
  103. [0425] Sunny Day 🌞04.28
  104. [0426] 무용(無用)의 쓸모 🛤️04.28
  105. [0424] 벚나무 아래에서 🌸04.26
  106. [0422] D-100 🧑‍💻04.24
  107. [0423] 언제나 이타카를 마음에 두라 🌿04.24
  108. [0421] 수상한 미용실 💇‍♂️04.22
  109. [0420] 손으로 컴퓨터를 마주하다🔧04.21
  110. [0419] 비가 오면 빨래를 하자 🌧️04.20
  111. [0418] 반차😴04.19
  112. [0415] 첫 달리기🏃‍04.18
  113. [0417] 발표, 청소, 러닝🗣️04.18
  114. [0416] 반티 발주👕04.18
  115. [0414] 선택과 해석🗳️04.15
  116. [0413] Home Sweet Home🏠04.14
  117. [0412] 人生04.12
  118. [0410] 알고리즘의 끝, C언어의 시작🧭04.11
  119. [0411] 반티 디자인 공모 & 제출👕04.11
  120. [0409] 하와이안 스테이크🥩04.10
  121. [0407] Es irrt der Mensch, solang' er strebt.📚04.08
  122. [0408] Long Chat (#🎮)04.08
  123. [0406] 마무리🛌04.06
  124. [0405] 움직이는 물체의 시간은 느리게 간다💤04.06
  125. [0404] 하나의 칼날🗡️04.05
  126. [0403] 3x7=21🧗04.04
  127. [0402] 퀴즈 다음날, 시험 전날😴04.03
  128. [0401] April Fools' Day🎭04.02
  129. [0331] 1년의 90번째 날🌅04.01
  130. 3월
  131. [0330] 日曜日은 칠요일 중 첫째 날 이다⏰03.31
  132. [0329] 토요일은 주말이 아니다☕03.30
  133. [0328] 그래프와 치킨버거🐔03.28
  134. [0327] 3주차의 시작🗓️03.27
  135. [0325] 기초 다지기 & 정리해야 할 CS 개념들💡03.26
  136. [0326] 기초 다지기🔧03.26
  137. [0324] 0.44%03.25
  138. [0322] 문제 풀이에 집중한 하루 📅03.23
  139. [0323] 본가 다녀온 날🏡03.23
  140. [0320] 첫번째 시험📝03.22
  141. [0321] 동료학습🌿03.22
  142. [0319] 먹다가 끝난 하루🍖03.20
  143. [0318] 눈이 쌓이면 버그도 쌓인다❄️03.19
  144. [0315] 첫 주말🛏️03.17
  145. [0316] 외출과 배달🚶🛍️03.17
  146. [0317] 깃허브, 팀별 면담, 키워드 공부👨‍💻03.17
  147. [0311] 정글 입성🏕03.15
  148. [0312] 디지털 포춘쿠키🍪03.15
  149. [0310] 입소 당일📅03.15
  150. [0313] cookie4u.store🍪 + 1주차 발제📚 + 회식🍺03.15
  151. [0314] 컴퓨팅 사고로의 전환🧠03.15

[0312] 디지털 포춘쿠키🍪

🏕 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 요청을 활용한 프론트엔드 & 백엔드 통신


🔥 마무리

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

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