본문 바로가기

전체 글

(82)
재난안전 앱 위치 전송 구조 개요 전체 구조 및 역할 상세 설명 com.disasteraidplatform│ ├── auth/ # JWT 인증 및 토큰 관리│ ├── JwtManager.kt # JWT 토큰 저장, 갱신, 전달│ ├── JwtModule.kt│ └── JwtPackage.kt│ ├── cache/ # 위치 데이터 캐싱│ ├── LocationCache.kt # 현재 위치 저장, 최신 위치 제공│ ├── LocationCacheModule.kt│ └── LocationCachePackage.kt│ ├── kakao/ # 카카오 API 기반 지역명 변환 (..
TIL: JPA에서 @EmbeddedId 복합키 사용의 장점 1. 자연스러운 도메인 모델링과 데이터 무결성 보장UserReportAlert 같은 N:N 조인 엔티티에서 복합키(user_id + alert_id)를 기본키로 사용하면, 중복 데이터 삽입을 DB 차원에서 자동으로 막을 수 있다.별도의 surrogate key (id 필드)를 두는 것보다 더 직관적이고, 관계의 의미를 명확히 표현할 수 있다.2. 복합키 로직의 코드 집중화 및 재사용성복합키를 별도의 @Embeddable 클래스에 분리해 관리하므로, equals/hashCode와 같은 동등성 비교 로직이 한 곳에 집중된다.복합키 관련 코드를 재사용하거나 유지보수하기 쉽다.3. JPA 표준 방식과의 부합@EmbeddedId는 JPA 권장 복합키 매핑 방식 중 하나로, ORM이 복합키를 객체로 다루기에 편리하..
TIL: React Native 환경 설정 및 Android 에뮬레이터 연결 과정 1. Git 특정 브랜치 클론git clone --branch 브랜치명 --single-branch URL로 원격 특정 브랜치만 클론 가능브랜치명 오타 주의 (ex. dev/front → dev/frontend)2. React Native 초기 세팅Node.js 버전 확인 (node -v) → React Native 권장 버전 확인 필요Android Studio 설치 및 JDK 버전 확인 (Android Studio Koala Feature Drop, JDK 17 사용 중)React Native 프로젝트 생성 및 패키지 설치(npm install)package.json에 dependencies, devDependencies 적절히 설정 필요3. React Native 개발 서버 실행npx react-na..
답변 저장 1. 지금까지 진행한 프로젝트 중 가장 기억에 남는 기능은 무엇이며, 왜 그렇게 생각하나요?답변 예시가장 기억에 남는 기능은 회원가입 시 이메일 인증 기능을 구현했던 경험입니다.사용자가 회원가입을 요청하면 이메일로 6자리 인증번호를 보내고, 이를 Redis에 TTL(유효시간) 설정하여 임시 저장한 후 사용자가 입력한 값과 비교하는 방식이었습니다.이 과정에서 Redis와 Docker를 처음 실무에 도입했고, 단순 동작뿐 아니라 왜 이 기술들이 필요한지, 어떤 장점이 있는지 체감했습니다.Redis는 짧은 시간만 유효한 데이터를 TTL로 관리하기 적합하며, 다양한 자료형과 확장성, 풍부한 자료를 갖춰 memcached나 local cache 대비 뛰어나다고 느꼈습니다.Docker는 Redis 환경을 컨테이너로..
TIL: Hibernate LazyInitializationException과 @Transactional 적용 문제 상황Spring AMQP 리스너 내에서 VolunteerTeam 엔티티를 조회 후, participants 컬렉션을 접근할 때org.hibernate.LazyInitializationException: could not initialize proxy - no Session 예외 발생.원인Hibernate는 기본적으로 연관 컬렉션을 지연 로딩(Lazy Loading)한다.이를 초기화하려면 활성화된 Hibernate 세션(트랜잭션 범위 내)이 필요하다.리스너 등에서 트랜잭션 없이 엔티티를 조회 후 지연로딩된 필드를 접근하면 예외 발생.해결 방법volunteerTeamRepository.findWithPostAndDetailsById() 쿼리에서 필요한 연관 엔티티를 JOIN FETCH로 미리 가져오기 ..
봉사자 위치 확인 및 알림 시스템 아키텍처 보고서 1. 개요본 시스템은 봉사단체가 특정 시간대에 설정한 반경 내에서 봉사자의 위치를 확인하고, 일정 조건을 만족하는 경우 알림을 발송하기 위한 비동기 분산 시스템이다.효율적 자원 사용과 확장성 확보를 위해 RabbitMQ 메시지 큐, Redis 위치 저장, Spring Boot 기반 스케줄링 및 서비스 구조를 채택하였다.2. 전체 시스템 구성도[봉사자 프론트엔드] ---주기적 위치 정보 전송(1분 간격, 30분간)---> [백엔드 API 서버 (Spring Boot)] | v Redis 위치 저장소 (GEO 데이터) ..
Redis /재난 대응 프로젝트 Redis 설계 및 활용 정리 ✅ 1. Redis 정의Redis(REmote DIctionary Server)는 인메모리 기반의 Key-Value 스토어빠른 읽기/쓰기 성능다양한 데이터 구조 지원: String, Hash, List, Set, Sorted Set, Streams, HyperLogLog, Bitmaps, Geospatial✅ 2. 사용 목적 목적 설명 캐시(Cache)자주 조회되는 데이터를 메모리에 저장하여 DB 부하 감소세션 관리사용자 세션 정보를 Redis에 저장하여 빠른 인증 처리분산 락Redisson 등을 활용하여 분산 환경에서의 락 처리실시간 순위/통계Sorted Set 등을 활용하여 실시간 랭킹 시스템 구현메시지 브로커Pub/Sub 또는 Streams를 활용한 이벤트 메시징 처리지리정보 처리GEO 명령어로 ..
Apache Kafka 정의 및 주요 특성 종합 정리 Apache Kafka는 실시간 데이터 스트리밍과 이벤트 기반 시스템 구축에 최적화된 분산 메시징 플랫폼이자 스트림 처리 시스템입니다.수많은 데이터 원본으로부터 이벤트를 신속하고 안정적으로 수집·저장·분배하여, 다양한 애플리케이션 간 데이터 통합과 실시간 분석을 가능하게 합니다.1. Kafka의 핵심 개념이벤트 중심(Event-Oriented)이벤트(메시지)를 중심으로 시스템이 구성되며, 발생한 이벤트를 실시간으로 수집하고 처리합니다.Publish-Subscribe 모델Producer(생산자)가 메시지를 특정 Topic(주제)에 발행(publish)Consumer(소비자)가 원하는 Topic을 구독(subscribe)하여 메시지를 실시간으로 받음메시지 소비 후에도 삭제되지 않아 여러 Consumer가 독..