일기 · 199

  1. 2026
  2. 9월
  3. 09.20 듀오링고리타분위기린
  4. 09.19 반값 설빙
  5. 09.18 우주 전쟁
  6. 4월
  7. 04.19 REBEL HEART
  8. 1월
  9. 01.20 e ∈ F
  10. 01.20 기술개발 진행상황 공유 1
  11. 01.20 기술개발 진행상황 공유 2
  12. 01.20 기술개발 진행상황 공유 3
  13. 01.15 항저우
  14. 2025
  15. 10월
  16. 10.24 어제까지의 이야기
  17. 10.09 돈 벌기
  18. 9월
  19. 09.02 PERFECT BLUE
  20. 8월
  21. 08.31 코코아분말 0.9%
  22. 08.30 WHAT THE
  23. 08.29 문을 닫고 들어오세요
  24. 08.28 하우스도르프 공간
  25. 08.27 All Time Low
  26. 08.26 세상의 끝을 겨눈대도
  27. 08.25 앉은 자리가 꽃자리
  28. 08.24 6과 7 사이 자연수
  29. 08.23 아직 아무 문제도 발견되지 않았습니다
  30. 08.22 Adventure
  31. 08.21 Adobe Creek
  32. 08.20 나의 무가지보(無價之寶)
  33. 08.19 T. Rex
  34. 08.18 누구를 위하여 종은 울리나
  35. 08.17 Sunday Morning
  36. 08.16 일상의 안녕
  37. 08.15 친애하는 우리의 결함에게
  38. 08.14 이것이 있으므로 저것이 있다
  39. 08.13 나는 나의 길을 간다
  40. 08.12 Vanilla Latte
  41. 08.11 그것은 하나의 가까움
  42. 08.10 정복 불허의 공간에
  43. 08.09 쉼 없이 수선하기
  44. 08.08 나는 전설이다
  45. 08.07 철판치즈버거
  46. 08.06 난 포기에 소질 있음
  47. 08.05 스피또런
  48. 08.04 하룻밤 만에
  49. 08.03 세상에 딱 하나뿐인
  50. 08.02 게으름뱅이를 위한 변명
  51. 08.01 북극 백화점
  52. 7월
  53. 07.31 사람은 무엇으로 사는가?
  54. 07.30 KRAFTON Yeoksam Office
  55. 07.29 Slowly flowing day
  56. 07.28 What's this?
  57. 07.28 Architectural Improvements 4
  58. 07.27 Lime Light
  59. 07.26 우리가 기다린 미래
  60. 07.25 Final approach
  61. 07.25 Poster Design Note : Form and Flow
  62. 07.25 Poster Design Note : How We Made It
  63. 07.24 폭풍의 눈
  64. 07.23 IYKYK
  65. 07.22 순살치킨 -> 치킨너겟
  66. 07.21 TRAIN - TRAIN
  67. 07.21 Architectural Improvements 3
  68. 07.21 Logo Design Note : The Logic of Flow
  69. 07.20 어떤 통찰도 지름길로는 얻을 수 없다
  70. 07.20 DeepDive : Many Over Mighty
  71. 07.19 시간이 느리게 가는 건
  72. 07.19 Architectural Improvements 2
  73. 07.19 DeepDive : GC-Triggered Stop-the-World
  74. 07.18 EVEREST
  75. 07.18 Architectural Improvements 1
  76. 07.18 PhantomFlow : High-performance HTTP request simulator
  77. 07.18 Introduction to Project KlickLab
  78. 07.18 What is Clickstream data?
  79. 07.17 깊은 사고는 더 이상 니즈가 없다
  80. 07.16 이기적인 토대 위
  81. 07.15 무엇이든, 언제가는
  82. 07.14 경험을 압축하는 알고리즘은 존재하지 않는다
  83. 07.13 무한한 가능성을 가질 것
  84. 07.12 화려한 거짓을 향해
  85. 07.11 Kentucky Fried Chicken
  86. 07.10 Tropical Blue
  87. 07.09 처음처럼 내 딛는
  88. 07.08 어제와 다른 하늘의 색
  89. 07.07 누군가의 달이었기를
  90. 07.06 아직 뜯지 않은 마음
  91. 07.05 황금의 오솔길
  92. 07.04 우리는 오가는 바람
  93. 07.03 Nic dwa razy
  94. 07.02 Never basic
  95. 07.01 입꼬리올림근
  96. 6월
  97. 06.30 그럼에도 불구하고
  98. 06.29 과잉포장된 자존심
  99. 06.28 E3i3
  100. 06.27 118
  101. 06.26 무한 우주에 순간의 빛일지라도
  102. 06.25 RUSH
  103. 06.24 그래, 우리는
  104. 06.23 The wind blowing low
  105. 06.22 피어나는 마음의 꽃
  106. 06.21 하나는 죽고, 하나는 살았다
  107. 06.20 초속일초
  108. 06.19 씨앗이 가장 고귀한 이유는
  109. 06.18 Evening Primrose
  110. 06.17 마음이 휑뎅그렁할 때
  111. 06.16 하나
  112. 06.15 강철무지개
  113. 06.14 유람
  114. 06.13 13일의 금요일
  115. 06.12 백만 스물하나, 백만 스물둘
  116. 06.11 경안천
  117. 06.10 달이 아름답네요
  118. 06.09 Tampermonkey
  119. 06.08 미르
  120. 06.07 나 평생 꿈만을
  121. 06.06 아르기닌
  122. 06.05 변속주
  123. 06.04 Global Running Day
  124. 06.03 가장 밝은 별
  125. 06.02 천천히
  126. 06.01 circular metal ring
  127. 5월
  128. 05.31 담장과 쪽문
  129. 05.30 투표런
  130. 05.29 출발선
  131. 05.28 Post Traumatic Growth
  132. 05.27 SET
  133. 05.26 READY
  134. 05.25 청복
  135. 05.24 열복
  136. 05.23 강제 푸시 반성합니다
  137. 05.22 유로파
  138. 05.21 떠오름과 저묾
  139. 05.20 Family Friend Fools
  140. 05.19 Time machine
  141. 05.18 맑은 일요일
  142. 05.17 흐린 토요일
  143. 05.16 PTG
  144. 05.15 셋이 만드는 하나
  145. 05.14 Lotte+Cafeteria
  146. 05.13 오십삼
  147. 05.12 일장춘몽
  148. 05.11 𝑬𝒗𝒆𝒓𝒍𝒂𝒏𝒅, 𝑬𝒗𝒆𝒓 𝑴𝒊𝒏𝒅
  149. 05.10 五月雨よ
  150. 05.09 Your Journey Starts Here
  151. 05.08 「권의 속도」
  152. 05.07 Quiet Air
  153. 05.06 놀자판 하루
  154. 05.05 뭔데이
  155. 05.04 After School
  156. 05.03 나침반이 가리킨 곳
  157. 05.02 짧은 하루
  158. 05.01 예고된 악재는 악재가 아니다
  159. 4월
  160. 04.30 Can More
  161. 04.29 초급반
  162. 04.28 감사합니다. 죄송합니다.
  163. 04.27 맥도날드 원정
  164. 04.26 무용(無用)의 쓸모
  165. 04.25 Sunny Day
  166. 04.24 벚나무 아래에서
  167. 04.23 언제나 이타카를 마음에 두라
  168. 04.22 D-100
  169. 04.21 수상한 미용실
  170. 04.20 손으로 컴퓨터를 마주하다
  171. 04.19 비가 오면 빨래를 하자
  172. 04.18 반차
  173. 04.17 발표, 청소, 러닝
  174. 04.16 반티 발주
  175. 04.15 첫 달리기
  176. 04.14 선택과 해석
  177. 04.13 Home Sweet Home
  178. 04.12 人生
  179. 04.11 반티 디자인 공모 & 제출
  180. 04.10 알고리즘의 끝, C언어의 시작
  181. 04.09 하와이안 스테이크
  182. 04.08 Long Chat
  183. 04.07 Es irrt der Mensch, solang' er strebt.
  184. 04.06 마무리
  185. 04.05 움직이는 물체의 시간은 느리게 간다
  186. 04.04 하나의 칼날
  187. 04.03 3x7=21
  188. 04.02 퀴즈 다음날, 시험 전날
  189. 04.01 April Fools' Day
  190. 3월
  191. 03.31 1년의 90번째 날
  192. 03.30 日曜日은 칠요일 중 첫째 날 이다
  193. 03.29 토요일은 주말이 아니다
  194. 03.28 그래프와 치킨버거
  195. 03.27 3주차의 시작
  196. 03.26 기초 다지기
  197. 03.25 기초 다지기 & 정리해야 할 CS 개념들
  198. 03.24 0.44%
  199. 03.23 본가 다녀온 날
  200. 03.22 문제 풀이에 집중한 하루
  201. 03.21 동료학습
  202. 03.20 첫번째 시험
  203. 03.19 먹다가 끝난 하루
  204. 03.18 눈이 쌓이면 버그도 쌓인다
  205. 03.17 깃허브, 팀별 면담, 키워드 공부
  206. 03.16 외출과 배달
  207. 03.15 첫 주말
  208. 03.14 컴퓨팅 사고로의 전환
  209. 03.13 cookie4u.store + 1주차 발제 + 회식
  210. 03.12 디지털 포춘쿠키
  211. 03.11 정글 입성
  212. 03.10 입소 당일

돈 벌기

Attendly

친구가 창업한 도자기 공방 무릇(@mooroot__)에서 사용할
출석 관리 시스템을 웹 기반으로 만들어달라는 요청을 받았다.

처음에는 “출석부만 체크하면 되는 단순한 웹페이지겠지”라고 생각했는데,
막상 작업을 시작하니 운영 효율과 사용 편의성을 동시에 잡아야 했다.

게다가 당근에서 오만원이면 구할 수 있는
구형맥에서 구동이 되어야해서
구버전의 브라우저를 지원해야하는 조건도 있었다.

공방에 음악을 틀어놓는 용도로 비치해둔
구형 아이맥으로 지금은 수기로 작성하고 있는
출석 체크 또한 하고 싶은 것이다.


친구가 원하는 화면구성을 간단히 그려서 나에게 보내주었다.

화면 구성 예시 1화면 구성 예시 2화면 구성 예시 3
화면1화면2화면3
화면 구성 예시 4화면 구성 예시 5화면 구성 예시 6
화면4화면5화면6

공방이나 학원 같은 소규모 공간은 대부분 수강생 출석과 결제 기록을 수기로 관리한다.
문제는, 그게 생각보다 굉장히 귀찮고 자주 헷갈린다는 점이다.

“이 사람 이번 달 몇 번 남았지?”
“결제는 했던가?”
“출석부 적는 거 깜빡했다…”

이런 작은 일들이 쌓이면 관리 피로도가 꽤 크다고 한다.
그래서 수강생들이 공방에 와서
직접 타이핑을 통해 출석을 하고
남은 수업 횟수까지 직접 확인 할 수 있게 만들어 달라는 요청을 받았다.


핵심 아이디어 — 셀프 체크인(Self Check-in)

Attendly는 수강생이 스스로 자신의 이름을 입력해서 출석하는 방식이다.
관리자가 한 명 한 명 체크하지 않아도 된다.

  • 이름을 입력하면 → 출석 완료
  • 잔여 수강 횟수가 자동으로 차감
  • 출석 내역과 결제 내역이 연동되어 저장

사장님은 그저 화면만 열어두면 된다.
회원이 오면 직접 이름을 입력하고,
어탠들리가 자동으로 정리해준다.


기능 요약

  • 출석 관리: 이름 입력 → 출석 완료 → 잔여 횟수 차감
  • 회원 등록: 이름, 번호, 초기 횟수 입력
  • 결제 관리: 결제 내역 추가 → 잔여 횟수 갱신
  • 달력 보기: 월별 출석 현황 확인
  • 백업 / 복원: JSON/CSV 내보내기 / 불러오기
  • 완전 로컬 기반: 서버 없이, 브라우저 localStorage로만 작동

인터넷이 안 되어도 출석은 된다.
데이터는 오직 사장님 컴퓨터 안에만 있다.


디자인

무릇의 공간 분위기에 맞춰 전체적으로 짙은 톤의 미니멀 UI로 구성했다.
페이지마다 다른 질감의 배경 이미지를 사용하고,
모달창을 통해 출석 상황(정상, 추가 출석, 잔여 0회, 동명이인 등)을 직관적으로 구분했다.

폰트는 Noto Sans KR,
그리고 모든 버튼과 알림은 손끝의 감각이 느껴지도록 blur + shadow 중심으로 디자인했다.


기술적으로

  • Vanilla JS + localStorage 기반
  • 프레임워크 없이, 완전 정적 HTML 구조
  • 모든 데이터는 mooroot_db_v4 키에 JSON 형태로 저장
  • 페이지 간 상태 공유는 동일 로컬 스토리지 참조로 처리

이 방식의 장점은 배포가 필요 없다는 것.
그냥 index.html 파일을 더블 클릭하면 작동한다.
이보다 더 간단한 백오피스는 아마 없을 거다.


무릇 전용 커스터마이징

이 버전은 무릇의 실제 운영 흐름에 맞춰 커스터마이징되었다.

  • 로고 / 배경 이미지 교체
  • 문구와 버튼 라벨 한글화
  • 결제 기준 단위 수정
  • 테마 색상 및 알림 문구 조정

하지만 로고만 바꾸면 사실상 어느 공방이나 학원에서도 그대로 쓸 수 있다.
완전히 범용적인 구조다.


스크린샷

출석 메인 (index.html)

이름 입력 → 출석 처리 → 잔여 횟수 자동 차감
다양한 상황(정상, 추가 출석, 잔여 0회, 동명이인 등)에 따른 모달 예시입니다.

기본 화면플로팅 메뉴샘플데이터 경고
Main1Main2Main3
출석 확인 모달출석 완료 모달추가 출석 확인 모달
Main4Main5Main6
추가 출석 완료출석 불가 (잔여 0회)동명이인 확인 모달
Main7Main8Main9

신규 등록 (register.html)

이름, 전화번호, 초기 잔여횟수를 입력하여 회원을 등록합니다.

등록 화면등록 확인 모달등록 완료 모달
Register1Register2Register3

회원 목록 (members.html)

전체 회원 조회 및 검색, 정렬 기능을 제공합니다.

회원 목록
Members1

회원 정보 수정 (edit.html)

선택한 회원의 이름, 전화번호, 잔여횟수를 수정하거나 삭제할 수 있습니다.

회원 정보 수정 화면회원 삭제 확인 모달
Edit1Edit2

결제 정보 (payments.html)

회원별 결제 추가, 잔여횟수 갱신, 결제/출석 이력 확인이 가능합니다.

결제 검색결제 내역 입력
Pay1Pay2

출석 달력 (calendar.html)

월별 출석 현황을 한눈에 확인할 수 있는 달력형 인터페이스입니다.

월별 달력일별 출석자 목록
Calendar1Calendar2

설정 / 백업 (settings.html)

데이터 백업, 복원, 샘플 생성, 초기화 기능을 제공합니다.

데이터 관리 메뉴모든 데이터 삭제삭제 완료 모달
Settings1Settings2Settings3

마무리

어탠들리를 만들면서 처음으로 견적서를 쓰고
프리랜서로 코딩을 통해 돈을 벌어 보았다.
적지 않은 금액을 받았기 때문에 책임감이 생긴다.

댓글