
ReadingBounce
모바일 앱스크린샷 한 장으로 한국어/영어 배우기
웹툰·SNS·뉴스 어떤 화면이든 캡처하면 글자를 알아보고, 듣기·따라읽기로 자연스럽게 연습할 수 있어요. 휴대폰과 PC 어디서든.
- Tauri 2
- Rust
- Next.js 16
- React 19
- TypeScript
- SQLite
직접 만들고 운영 중인 서비스 5종

스크린샷 한 장으로 한국어/영어 배우기
웹툰·SNS·뉴스 어떤 화면이든 캡처하면 글자를 알아보고, 듣기·따라읽기로 자연스럽게 연습할 수 있어요. 휴대폰과 PC 어디서든.

나만의 맛 기록장
오늘 먹은 음식을 '맛있어 / 또다시 / 별로야 / 모르겠' 네 가지 반응으로 가볍게 기록하는 앱. 출처·날짜로 다시 찾기 쉬워요.
가격·의료·장기요양 공공데이터 플랫폼
warragon.duckdns.org
가격 공유부터 구매희망·가계부·재구매까지 한 흐름. 연봉·의료비·요양시설 같은 공공데이터를 한곳에서 비교·검색할 수 있어요.
내 문서로 답하는 채팅
dmddksl.duckdns.org
내 문서·이미지에서 글자를 읽어 들이고, 그 안에서만 답을 찾아주는 채팅 서비스. 외부에 자료를 보내지 않고도 정확한 인용으로 답해줘요.
마음의 정원 다이어리
warragon.duckdns.org
다이어리·기념일·루틴·목표를 한 곳에서 정리하고, 매일의 운세까지 함께 받아보는 한국어 일상 관리 서비스. 모바일 우선.
초보 개발자와 비개발자를 위한 개발 입문 블로그이자, 제가 만든 서비스를 소개하는 포트폴리오예요.
Java API와 Python 음성 엔진은 서로 다른 프로세스이므로, 문자열 기반 내부 호출보다 protobuf 계약이 변경과 장애를 더 분명하게 만든다. voice/v1/voice.proto는 음성 합성·voice catalog·capability를 하나의 버전 경계로 묶고, Java client는 요청 deadlin…
스케줄러 작업이 예외를 던지지 않았다는 사실은 성공을 뜻하지 않는다. 내부에서 오류를 잡고 None, error, 처리 수, partial을 반환하는 작업이 섞이면 관제는 정상·빈 결과·부분 실패를 구분하지 못한다.
파일 업로드와 검색 가능은 같은 상태가 아닙니다. 파싱·임베딩·저장이 끝나고 processed = TRUE가 된 검색 사본만 사용자 답변의 근거가 될 수 있습니다.
컨테이너가 running이어도 DB 연결·필수 테이블·내부 의존성이 준비되지 않았을 수 있습니다. readiness는 사용자 요청을 받을 수 있는 상태를, liveness는 프로세스가 살아 있는지를 나타내야 합니다.
프로세스가 살아 있다는 사실, 핵심 검색 요청을 처리할 준비가 됐다는 사실, 선택 기능이 모두 정상이라는 사실은 서로 다릅니다. 하나의 ready 값에 전부 넣으면 선택 모델 장애가 전체 재시작으로 이어지고, 핵심 DB 장애를 liveness가 가립니다.
HTTP 요청은 응답을 돌려주고 끝나지만 Kafka 작업은 나중에 처리됩니다. 이 둘을 같은 업무 payload로 억지로 묶지 않고, 별도의 correlation header를 전달하면 JSON 계약을 보존하면서 한 요청의 흐름을 따라갈 수 있습니다.
요구사항을 검증 증거로 바꾸고 HTTP·DB·외부 연동·파일·AI·실시간 미디어·배포·관측까지 하나의 운영 가능한 계약으로 연결해요.
컴퓨터를 켜는 순간부터 첫 코드를 실행하기까지. 비개발자·입문자가 한 칸씩 따라하면 끝.
프론트엔드의 시작부터 상태·오프라인 데이터 경계까지를 한 흐름으로 잇는 12단계 강좌.
Next.js 16 App Router 로 DB 연결까지 4단계. PostgreSQL + Drizzle ORM 까지 연결하는 실전.
진짜 백엔드를 처음 만나는 8단계. 첫 줄부터 인증, 테스트, 배포와 Spring MVC 실패 계약까지.
Python 한 가지로 API 서버부터 스케줄링·외부데이터 수집·관측·실무 패턴까지 잇는 8단계.
실용적인 도구와 공공데이터 기반 서비스를 만드는 개발자예요. 모바일(Tauri/Flutter), 웹(Next.js), 백엔드(FastAPI/Spring) 풀스택으로 작업하며 AI/LLM 통합에 관심이 많아요.