현진스 · Hyunjin

실봄 아파트 시세·청약·공공주택·행복주택 공고 · App Store · Google Play 출시

Python 3.12FastAPIPostgres 16 · PostGIS · pgvectorNeo4jOllama · GeminiReact 19CapacitorOCI

실봄은 국토부 실거래가와 청약·공공주택 공고를 지도에 모아 보여 주는 앱입니다. 단지를 누르면 시세와 거래 이력이 나오고 그 단지 주변 뉴스를 근거로 질문에 답하는 「물어보기」 패널도 있습니다.

공공데이터 커넥터 13개가 받은 원본은 그대로 보관합니다. 그다음 YAML로 적은 규칙대로 정규화해 파티션 단위로 트랜잭션 안에서 한 번에 바꿉니다. 뉴스에서는 단지·지역·정책 사이 관계를 뽑아 Neo4j 그래프와 pgvector 임베딩으로 엮었고 질문이 오면 이 둘을 같이 찾아 출처를 붙여 답합니다. 수집 흐름과 데이터셋은 코드를 고치지 않고 관리 화면에서 바꿉니다.

출시 전에 Codex에 검토를 맡기자 서버 재시작과 메모리 부족(OOM)을 이유로 출시를 미루라는 답이 왔습니다. 운영 서버에서는 재시작이 0회였고 메모리는 4.25%여서 그 추정은 맞지 않았습니다.

LLM과 함께 일하며 배운 것

실봄 코드는 대부분 Claude Code로 짰고 설계 검토는 Codex 같은 다른 도구에 맡겼습니다. 빨리 만들 수 있었지만 도구가 「됐다」고 해도 그대로 믿으면 안 된다는 것을 금방 알았습니다. 맞는지는 운영 서버와 로그, 실기기에서 봐야 알 수 있었습니다.

뉴스 수집 잡은 48시간 동안 20번 모두 ok로 끝났는데 DB에는 기사 9,519건 중 9,351건이 임베딩되지 않은 채였습니다. ollama 로그에서 임베딩 요청이 정확히 1분 만에 끊기는 문제를 찾아 고쳤고 지금은 임베딩이 멈추면 점검 화면에 뜹니다. iOS 앱에서는 데스크톱과 Android에서 멀쩡하던 메뉴가 눌리지 않았습니다. 자동 시험으로는 보이지 않다가 실기기 녹화 시험에서야 드러난 문제입니다.

이런 일이 생길 때마다 원인과 규칙을 저장소의 CLAUDE.md에 한 줄씩 남겼습니다. 테스트로 만들 수 있는 것은 만들어 두어서 도구가 같은 실수를 다시 하면 테스트가 먼저 잡습니다. 다른 프로젝트에서 단위 테스트를 통과한 코드가 실제 로그인에서 깨진 적이 있습니다. 그 뒤로 인증을 건드린 배포는 실기기로 흐름을 돌려 본 다음에 냅니다.