분류 전체보기 130

[개발일지_safeHome] 14. react native로 app 시작하기

React Native 프로젝트 시작1. React Native를 선택한 이유이번 프로젝트는 웹이 아닌 앱만 제공하는 설치형 서비스를 목표로 했다.iOS와 Android를 각각 네이티브로 개발하기엔 개발·유지 비용이 부담되기 때문에,하나의 코드베이스로 두 플랫폼을 동시에 지원할 수 있는 React Native를 선택했다.React Native는 이라는 특징이 있다.JavaScript / TypeScript 기반React 문법 그대로 사용실제 네이티브 컴포넌트로 렌더링웹(React) 경험을 그대로 활용하면서도 네이티브 앱에 가까운 성능과 UX를 낼 수 있다.2. 프로젝트 시작 시 Expo를 사용한 이유React Native는 순수 CLI 방식으로 시작할 수도 있지만,초기 환경 설정과 네이티브 빌드 설정이 ..

개발일지 2026.01.18

[개발 고민] webSocket, SSE(Server Sent Event) 중 뭐가 좋을까?

개인 프로젝트에서 비동기로 시간이 걸리는 작업을 진행중일때, 진행 상황을 클라이언트에게 실시간으로 알려주는 기능이 필요했음.초기에는 WebSocket을 고려했으나, SSE(Server-Sent Events)로 방향을 전환하게 됨 1. WebSocket이란?간단 설명양방향 실시간 통신 프로토콜.클라이언트와 서버가 서로 자유롭게 메시지를 주고받을 수 있음.동작 방식1. 클라이언트 → 서버: WebSocket 연결 요청 (HTTP Handshake)2. 서버 → 클라이언트: 연결 승인 (프로토콜 업그레이드)3. ↔ 양방향 통신: 클라이언트 ↔ 서버 자유롭게 메시지 전송4. 연결 종료: 어느 쪽에서든 종료 가능특징양방향 통신: 서버 → 클라이언트, 클라이언트 → 서버 모두 가능프로토콜: ws:// 또는 wss:..

개발 고민 2026.01.18

[개발일지_safeHome] 13. SSE 샘플 추가

등본 분석 상황을 실시간으로 알려주기 위해서웹소켓을 사용할려고한다,웹소켓이 아닌 SSE(Server Sent Event)를 활용할 예정 (중간에 앱을 종료했을때는, 알림을 사용하려고 한다) SSE(Server-Sent Events)가 더 적합한 이유- 단방향 통신만 필요 - 서버에서 프론트로만 진행 상황을 전송 - 더 간단한 구현 - WebSocket보다 설정이 단순함 - 자동 재연결 - 연결 끊김 시 브라우저가 자동으로 재연결 시도 - HTTP 기반 - 별도의 프로토콜이나 복잡한 설정 불필요 예를 들어---1. PDF 파싱 --> "첨부된 파일을 분석중이에요"2. LLM 분석--> AI가 등본을 분석중이에요"3. 이후 처리--> "분석한 내용을 정리중이에요"4. 완료 --> "완료 됐습니다!" 1. ..

개발일지 2026.01.15

[개발일지_safeHome] 12. 등기부등본 분석 작업 관련 DB 설계 및 서비스 개발(임시)

분석 요청 API 동작 시 비동기로 처리를 할건데처리를 위한 job 을 관리하는 DB를 만들것이다. 1. analysis_jobs 테이블 설계schema.sql-- 분석 job 테이블CREATE TABLE IF NOT EXISTS analysis_jobs ( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT 'ID', job_id VARCHAR(255) NOT NULL COMMENT '작업 ID(UUID)', file_name VARCHAR(255) NOT NULL COMMENT '파일명', file_size BIGINT NOT NULL COMMENT '파일 크기', status VARCHAR(50) NOT NULL COMMENT '상태(예: PE..

개발 고민 2026.01.08

[개발일지_safeHome] 10. 등기부등본 분석 설계는 어떻게 할 것인가?

1. 등기부등본 분석 서비스 플로우 1. 사용자가 앱에서 PDF 업로드 ↓2. Spring API: POST /api/v1/deed/analyze - Job 생성 (PENDING) - FCM 토큰 저장 - 즉시 응답 (202 Accepted, jobId 반환) ↓3. 비동기 처리 시작 (@Async) ├─ WebSocket 연결 중인 사용자: 실시간 진행상황 전송 └─ 백그라운드 사용자: 대기 ↓4. Step 1: S3에 PDF 업로드 - WebSocket: "파일 업로드 중..." (10%) ↓5. Step 2: Python PDF 서비스 호출 - HTTP POST → pdf-service:8001/api/extract - WebSocket: "PDF 변환 중..

개발일지 2025.12.29

[개발일지_safeHome] 8. Custom Exception 개발

비지니스 로직 처리 중 발생하는 엣지케이스들은 왠만하면 예외로 처리할려고 한다.그래서 Custom Exception을 만들것이다. 1. ErrorCode 정의예외 응답을 위한 ErrorCode는 아래와 같이 작성함너무 상세하게 원인을 적지는 않고, 예외 타입 정도만 작성함 package com.woopi.safehome.global.exceptionimport org.springframework.http.HttpStatusenum class ErrorCode( val code: String, val httpStatus: HttpStatus, val defaultMessage: String) { NOT_FOUND("NOT_FOUND", HttpStatus.NOT_FOUND, "데이터를..

개발일지 2025.12.28

[개발일지_safeHome] 7. sample 도메인 개발 (adapter, usecase, repository, 등등.....)

1. Sample Repository 생성Sample, SampleDetail 엔티티에 맞춰서 repository를 생성sample도메인에서는 만들지 않을거지만,추후 복잡한 쿼리는 QueryDsl을 활용하고자 한다 SampleRepositorypackage com.woopi.safehome.domain._sample.adapter.outbound.persistence.jpaimport org.springframework.data.jpa.repository.JpaRepositoryimport org.springframework.stereotype.Repository@Repositoryinterface SampleRepository: JpaRepository { fun findByIsDeletedFal..

개발일지 2025.12.23