전체 글65 근처에 있는 사용자 조회 기능: Redis Geospatial가 적합한 선택일까? 들어가면서..IT 연합 동아리 디프만에서 진행한 프로젝트에서 '위치기반 주변 유저를 조회'하는 기능을 구현해야 했습니다. 이번 글에서는 다양한 공간 인덱싱 알고리즘과 시스템을 비교 분석하고, Redis Geospatial를 선택한 과정과 구현 방법에 대해 공유하려 합니다. 관련 Issue 및 PR:https://github.com/depromeet/Took-BE/issues/62 [Feat] : 주변 유저 검색 기능을 위한 Redis Geospatial의 사용성 검증 · Issue #62 · depromeet/Took-BE✨ 이슈 내용 주변 유저 검색 기능을 위해 Redis Geospatial의 사용성 검증 진행 ✅ 체크리스트 Assignees / Labels 선택github.com https://git.. 2025. 3. 17. 모니터링으로 성능 개선점 찾기 (with Prometheus, Grafana, Loki, Promtail) 들어가면서..Maru-egg (입시 정보 안내 RAG 챗봇) 프로젝트를 실제 운영 환경에 배포하면서 모니터링 시스템 구축에 대한 필요성을 느끼게 되었습니다. 학교 입학 홈페이지가 공개되고 실제 입시생들이 사용하기 시작하면서, 예상치 못한 트래픽과 시스템 부하에 어떻게 대응할지 고민하게 되었습니다. 처음에는 단순히 서버가 잘 돌아가는지 확인하는 정도로만 생각했지만, 실제 사용자들이 늘어나면서 서버의 상태를 실시간으로 파악하고 잠재적인 성능 병목이나 오류를 조기에 발견하는 것이 얼마나 중요한지 깨닫게 되었습니다. 이에 Prometheus를 활용해 메트릭을 수집하고, Loki와 Promtail로 로그를 집계한 다음, Grafana를 통해 이를 시각화하는 모니터링 환경을 구축했습니다.특히 CPU 사용률, DB .. 2025. 3. 13. JPA 없이 통계 시스템 구축하기: QueryDSL + Flyway로 데이터 접근하기 들어가면서..인턴십 기간 동안 저는 기존 DB에 쌓여 있던 데이터를 활용해 통계 서비스(대시보드 형태)를 구축하는 과제를 맡았습니다. 이를 구현하면서 자연스럽게 JPA(Java Persistence API) 기반의 ORM(Object-Relational Mapping)을 사용했는데, 개발을 진행할수록 몇 가지 불편함이 드러났습니다. 예를 들어, 기존에 JPA로 짜여진 데이터를 사용하기 위해서 기존에 존재하던 Entity 클래스에 의존해야하는 문제가 있었습니다.(저의 역량 부족일 확률이 높지만..) 또한 서비스 도메인 모델과 DB 엔티티 클래스들을 1:1로 매핑하여 설계했는데, 실제 통계 로직을 작성하다 보니 이러한 도메인-엔티티 1:1 매핑 방식에 의문이 생겼습니다. 이런 고민을 겪으면서 기존 JPA 중.. 2025. 2. 28. 개발 고민 | 테스트 가능한 코드와 테스트의 범위에 대하여 들어가기 전...최근 테스트 코드를 작성하면서 "어떤 코드가 테스트하기 좋은 코드일까?" 라는 고민을 하게 되었습니다. 테스트 코드의 범위를 어떻게 설정해야 하는지, 그리고 테스트하기 좋은 코드의 특징이 무엇인지에 대한 고민이 많았습니다.테스트 가능한 코드란 무엇일까?테스트의 범위는 어디까지 설정해야 하지?테스트 코드에서 관리할 수 없는(라이브러리와 같은) 코드를 어떻게 다뤄야 할까?이런 고민을 하다 보니, 테스트의 목적과 코드의 구조적 설계가 밀접한 관계가 있음을 깨달았습니다. 특히, 프로덕트 코드에서는 의존성을 줄이고, 테스트 코드에서는 동작을 제어할 수 있도록 설계하는 것이 테스트 코드와 프로덕트 코드를 모두 고려하는 방법이라고 생각이 들었습니다. 그래서 이번 글에서는 테스트하기 좋은 코드란 무엇인.. 2025. 2. 17. Transaction(트랜잭션) Spring에서 톺아보기 - 트랜잭션 지원모델과 관리 방식 들어가기 전..Spring은 다양한 환경에서 일관된 트랜잭션 관리를 제공하여 비즈니스 로직과 트랜잭션 처리를 분리합니다.이때, 일관된 트랜잭션 관리 란 데이터 접근 기술(JDBC, JPA 등)이나 여러 리소스를 사용하는 경우에도 동일한 방식으로 트랜잭션을 관리할 수 있도록 해준다는 것을 의미합니다.즉, 비즈니스 로직 코드에는 트랜잭션 시작, 커밋, 롤백과 같은 세부 처리가 전혀 포함되지 않고, 오로지 핵심 비즈니스 로직에 집중할 수 있습니다.Spring이 내부에서 해당 메서드 실행 전후로 트랜잭션을 자동으로 관리하여, 예외 발생 시 자동으로 롤백하는 등의 처리를 해줍니다.예시아래는 주문 처리 서비스를 예로 든 코드입니다:@Servicepublic class OrderService { @Autowired .. 2025. 2. 10. DB와 Application 코드의 역할과 범위를 어떻게 나눌까? 들어가기 전..인턴십에서 통계 관련 작업을 진행하며 DB와 Application 코드 중 어디에서 로직을 처리할지 고민해야 하는 상황이 있었습니다. 특히, 주차에 맞는 날짜를 반환하는 로직을 작성할 때 선택지가 다음과 같았습니다.1. DB에서 처리:`WEEK()` 함수로 주차별로 그룹화한 후, 적절히 날짜를 반환하는 쿼리를 작성한다.2. Application 코드에서 처리:간단한 SELECT 문으로 날짜 데이터를 조회한 뒤, Java의 `LocalDateTime` 을 활용해 처리한다.예: `date.with(java.time.DayOfWeek.MONDAY).toLocalDate().atStartOfDay()`이 간단한 로직을 작성하는 과정이 작은 고민의 시작이었지만, 결과적으로 “DB와 Applicati.. 2025. 1. 22. 이전 1 2 3 4 ··· 11 다음