- Today
- Total
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- MariaDB
- 오라클
- Hostinger
- javascript
- 워드프레스
- url파라미터
- Oracle
- 오류해결
- mysqli
- 비주얼코드
- dbeaver
- spring boot
- 문제해결
- 엘리멘터
- php
- 이클립스
- PLSQL
- 쿼리개선
- iframe
- 클론코딩
- 트러블슈팅
- PROCEDURE
- 환경세팅
- sql
- 의존성주입
- PDO
- 코덱스
- 백엔드
- TIL
- 프로시저
목록전체 글 (120)
개발 공부중
이번에는 Google Gemini를 연결한 뒤, 질문이 생성될 때까지 기다려야 했던 요청 구조를 바꾼 이야기다.BOOKMATE에서는 새로운 북클럽을 열면 Gemini가 독서토론 질문을 만들어준다. 그런데 질문 생성에 시간이 걸리다 보니 북클럽 화면에 들어가는 것까지 같이 늦어졌다. 처음에는 한 번의 요청에서 전부 처리했다처음 흐름은 단순했다. 사용자가 책을 선택하고 북클럽에 들어가면, 서버가 Gemini를 호출하고 질문을 받아온 뒤 응답하는 방식이었다.POST /enter→ Gemini API 호출→ 질문 생성 대기→ 결과 처리 및 저장→ 응답한 번 요청해서 책 정보와 질문을 같이 받으니 프론트엔드에서는 이해하기 편한 구조였다. 응답이 오면 그 데이터로 북클럽 화면을 보여주면 됐다.문제는 Gemini의 ..
이번에는 친구들과 책을 읽고 질문과 생각을 나누는 웹 서비스, BOOKMATE를 만들었다.이전 프로젝트와 다르게 Antigravity를 사용해봤고, 코드를 작성하기 전에 설계를 정리하는 데도 시간을 많이 썼다. 이 글은 BOOKMATE 개발기를 시작하면서, 어떤 서비스를 만들려고 했고 왜 MD 파일로 기준을 정리했는지에 대한 이야기다.사이트 주소 : https://bookmate-kmzj.onrender.com/ 이번에는 Antigravity를 사용해봤다지난 프로젝트에서는 gpt나 제미나이 대화창을 이용한 방식으로 만들었다.이번에는 AI 코딩 도구인 Antigravity를 사용하면서 다른 방식으로 프로젝트를 진행해보고 싶었다.지난 프로젝트를 하면서 느낀점은 AI가 일관성을 유지하도록 설계를 분명히 해야된..
안티그래비티로 작업하면서, 다른 PC에서도 이어서 작업할 수 있는 방법이 궁금해졌다.프로젝트 코드를 옮기는 것은 어렵지 않지만, Python과 라이브러리까지 다시 설치하고 실행 환경을 맞추는 과정이 번거로울 것 같았다. 그때 알게 된 도구가 Docker였다. 1. Docker를 쓰면 무엇이 달라질까?Docker는 프로그램과 실행에 필요한 환경을 이미지로 구성하고, 이를 컨테이너라는 독립된 공간에서 실행하는 도구다.FastAPI 프로젝트라면 Python, 필요한 라이브러리, 소스코드 등을 이미지에 담을 수 있다.처음 접할 때는 아래 세 가지를 구분하면 이해하기 쉽다.Dockerfile실행 환경을 만드는 설정 파일조리법이미지프로그램 실행에 필요한 파일과 환경을 담은 패키지준비된 밀키트컨테이너이미지를 바탕으..
VS Code에서 Codex를 사용하다 보면 채팅 목록에서 보관(Archive) 버튼을 누를 때가 있다.문제는 보관 버튼을 누르는 순간 해당 대화가 일반 채팅 목록에서 사라지는데,VS Code Codex에서는 보관된 채팅 목록을 화면에서 바로 확인하거나 복원하는 메뉴를 찾기 어려웠다. 처음에는 대화가 삭제된 줄 알았지만 확인해보니 실제 채팅 데이터는 그대로 남아 있었다.이번 글에서는 직접 해본 Codex 보관 채팅 복원 방법을 정리했다.1. Codex 채팅은 어디에 저장될까?Windows 환경에서 Codex 관련 데이터는 사용자 폴더 아래의 .codex 폴더에 저장된다.C:\Users\사용자명\.codex 내 환경에서는 다음과 같은 구조였다.C:\Users\user\.codex├─ sessions├─ a..
증상매시간 정상적으로 돌던 크론탭이 어떤 시점을 이후로 실행되지 않았던 걸 발견했다.스크립트는 수정한 적이 없고 크론탭으로 설정해둔 로그에는 오류도 없었다. 로그 확인/usr/sbin/crond -n 로그를 확인해보니 다음과 같은 메시지가 나왔다.pam_unix(crond:account): expired password for user tomcat (password aged)(tomcat) PAM ERROR (Authentication token is no longer valid; new one required)(tomcat) FAILED to authorize user with PAM (Authentication token is no longer valid; new one required) 첫 줄에 ..
4편까지 닷홈빌더에서 PHP로 넘어온 이유부터, FCM 웹 푸시를 붙이고 버그를 잡고 구독 기능의 DB 구조를 설계한 과정까지 정리했다. 이번 글은 이 시리즈를 마무리하는 글로, 만들고 나서 든 생각들을 정리했다.관리자 페이지 제작빌더로 사이트를 운영할 때 관리자 페이지가 있었다. 근데 기능이 제한적이라 회원이 몇 명인지, 어떤 글이 올라오는지, 문의가 들어왔는지 같은 것들을 빌더가 제공하는 화면 안에서만 제한적으로 볼 수 있었다. 그래서 내가 원하는 방식으로 데이터를 들여다보거나 조작할 방법이 없었다.PHP로 새로 만들면서는 이 부분을 직접 설계할 수 있었다. 그래서 운영에 필요한 관리자 페이지를 따로 만들었다.대시보드 — 사이트 전반의 현황을 한눈에 보는 첫 화면회원관리 — 가입한 회원 목록과 상태를..
3편에서 알림이 두 번 오던 문제의 원인이 정리되지 않은 fcm_tokens였다는 걸 찾아냈다.이번 글은 그 과정에서 다시 들여다보게 된 구독 관련 DB 구조 이야기다."구독"이 하나가 아니었다처음엔 "구독"이라는 개념을 단순하게 생각했다. 게시판 하나를 구독하면, 그 게시판에 올라오는 모든 글에 대한 알림을 받는 것.그런데 막상 알림 종류를 하나씩 나열해보니, 실제로 필요한 구독은 두 가지 결이 달랐다.게시판 구독 — "이 게시판에 새 글이 올라오면 알려줘" (게시판 단위)글 구독 — "내가 댓글 단 이 글에 다른 댓글이 더 달리면 알려줘" (개별 게시글 단위)처음에는 이 둘을 하나의 테이블로 운영할까 고민했다. 하나의 테이블에서 target_type('board' 또는 'post') 컬럼으로 분류하여..
2편에서 FCM 웹 푸시를 어떻게 구성했는지 정리했다. 그런데 그 글 마지막에 살짝 흘렸던 문제가 하나 있었다 — 개발 중에 PC 토큰이 정리되지 않은 채 fcm_tokens 테이블에 그대로 남아 있었던 것. 이번 글은 그 잔여 토큰이 실제로 어떤 문제를 일으켰고, 어떻게 찾아서 고쳤는지에 대한 이야기다.증상 — 글 하나 등록했는데 알림이 두 번새 글 알림 기능을 테스트하던 중이었다.글을 하나 올렸는데, 폰에 알림이 두 개씩 뜨는 거다. 당연히 코드에 버그가 있다고 생각했다.첫 번째 의심 — 서비스워커가장 먼저 의심한 건 서비스워커였다. 포그라운드/백그라운드에서 알림을 각각 처리하는 로직이 겹쳐서 중복으로 뜨는 게 아닐까 싶어서, 이것저것 손을 댔다.showNotification 호출 제거onBackgr..
