위치 인증(성지 체크인)은 GPS 스푸핑으로 쉽게 위조할 수 있어 서비스 신뢰의 근간이 흔들립니다.
거리 임계값·이동 속도 검증·텔레포트 감지·일일 방문 제한을 조합한 Anti-tamper 검증 계층을 지리공간 쿼리 위에 구축했습니다.
물리적으로 불가능한 체크인 패턴이 서버에서 차단됩니다.
Spring을 쓰는 것과 Spring을 이해하고 쓰는 것의 차이를 만들려고 했습니다.
도메인 경계는 원했지만, 1인 개발에서 마이크로서비스의 비용 — 네트워크 장애 모드, 분산 트랜잭션, 서비스별 배포 오케스트레이션 — 은 명백한 오버엔지니어링입니다. Modulith는 그 중간 지점입니다. 단일 배포 단위를 유지하면서 모듈 경계 위반을 아키텍처 테스트가 빌드에서 잡아내고, 도메인 간 통신을 스프링 이벤트로 강제합니다. 지금 이벤트 계약을 만들어두면, 특정 모듈에 트래픽이 몰릴 때 그 모듈만 서비스로 떼어내는 진화 경로가 열립니다. '나중에 분리할 수 있는 모놀리스'가 처음부터 분산 시스템보다 낫다고 판단했습니다.
무엇을 캐시할지가 아니라 어디에 캐시할지를 데이터 성격으로 갈랐습니다. 읽기 빈도가 높고 인스턴스 간 불일치가 잠깐 허용되는 참조 데이터(장소·이벤트 목록)는 Caffeine L1으로 네트워크 홉 자체를 제거하고, 정합성이 곧 보안인 것들(세션, 토큰 블랙리스트, 속도 제한 카운터)은 반드시 Redis L2 단일 진실로 뒀습니다. 같은 '캐시'라도 요구 속성이 다르면 다른 도구입니다.
GPS 좌표는 클라이언트가 보내는 입력이라 본질적으로 신뢰할 수 없습니다. 이건 무결성 제약으로 막을 수 있는 문제가 아니라 도메인 규칙의 문제입니다 — 직전 인증과의 거리·소요 시간으로 물리적으로 가능한 이동인지, 텔레포트 패턴인지, 일일 한도를 넘는지를 서비스 계층에서 판정합니다. PostGIS는 거리 계산이라는 사실을 제공하고, 그 사실로 신뢰를 판정하는 건 도메인 코드의 몫으로 나눴습니다.
위치 기반 서비스의 신뢰성과 비용을 함께 설계했습니다.
Spring Modulith 이벤트 드리븐 아키텍처로 identity·place·event·social·analytics 5개 도메인을 느슨한 결합으로 분리했습니다. Hibernate Spatial + JTS 기반 지리공간 처리와 프로젝트·유닛·지역 계층 구조로 멀티테넌트 시스템을 구축하고, Cloudflare R2 비용 보호로 인프라 비용을 통제합니다.
Resilience4j 서킷 브레이커로 외부 서비스 장애 전파를 차단하고, Caffeine/Redis 이중 캐시와 GIST/GIN 인덱스 조합으로 공간 쿼리와 대용량 필터링 성능을 최적화했습니다. Flyway 마이그레이션과 HikariCP 커넥션 풀 최적화로 DB 운영 안정성을 확보했습니다.
JWT + OAuth2(Google/Apple) + 이메일 인증의 다중 인증 체계와 프로젝트 수준 RBAC를 구현했습니다. Anti-tamper 위치 검증으로 위변조를 차단하고, Redis 분산 속도 제한과 커뮤니티 모더레이션 시스템으로 서비스 안정성을 확보했습니다.
지리공간 데이터를 다루는 방법입니다.
Hibernate Spatial + JTS Core 기반으로 PostGIS geography 타입과 EPSG:4326 좌표계를 활용한 정밀 위치 관리를 구현했습니다. Anti-tamper 위치 검증(거리 임계값, 속도 검증, 텔레포트 감지)으로 위변조를 차단합니다.
5개 도메인을 Spring Modulith 이벤트 기반으로 느슨하게 결합했습니다. 프로젝트 → 유닛 → 멤버 계층과 지역 트리 구조로 멀티테넌트 아키텍처를 구현했습니다.
Prometheus + Actuator로 실시간 메트릭을 수집하고, Testcontainers로 PostgreSQL 통합 테스트를 자동화했습니다. Kover 커버리지 검증(서비스 계층 80% 목표)과 Detekt/Ktlint 정적 분석으로 코드 품질을 관리합니다.
마주친 문제 · 고민하고 적용한 접근 · 실제 결과를 한 세트로 묶어 정리했습니다.
위치 인증(성지 체크인)은 GPS 스푸핑으로 쉽게 위조할 수 있어 서비스 신뢰의 근간이 흔들립니다.
거리 임계값·이동 속도 검증·텔레포트 감지·일일 방문 제한을 조합한 Anti-tamper 검증 계층을 지리공간 쿼리 위에 구축했습니다.
물리적으로 불가능한 체크인 패턴이 서버에서 차단됩니다.
Cloudflare R2 오브젝트 스토리지는 사용량 기반 과금이라, 악의적 트래픽이 비용 폭탄으로 직결될 수 있었습니다.
일일 대역폭·월간 요청 한도와 긴급 차단 임계값을 둔 비용 보호 시스템을 애플리케이션 레벨에 구현했습니다.
예산 상한을 넘는 트래픽이 자동 차단되어 비용이 통제됩니다.
커뮤니티·이벤트·장소·인증 로직이 한 코드베이스에서 뒤엉켜 변경 파급이 커졌습니다.
Spring Modulith로 5개 도메인 경계를 모듈 테스트로 강제하고, 도메인 간 통신을 이벤트로 제한했습니다.
도메인 간 직접 의존이 사라져 모듈 단위 변경이 안전해졌습니다.