[Git Ranker #4] 순위 및 티어 계산 기능 구현
대규모 정렬 없이 순위를 구하는 효율적인 알고리즘과, 초기 사용자 부족으로 인한 티어 산정의 모순을 해결하기 위해 Tasklet과 Window Function을 활용한 배치 최적화 과정
대규모 정렬 없이 순위를 구하는 효율적인 알고리즘과, 초기 사용자 부족으로 인한 티어 산정의 모순을 해결하기 위해 Tasklet과 Window Function을 활용한 배치 최적화 과정
대기 진료 견적서 상세 조회 API에서 569ms 걸리던 3개의 개별 쿼리를 JOIN과 인덱스 최적화를 통해 50ms로 단축시킨 과정을 다룹니다.
매일 선착순 100명에게 도서를 증정하는 이벤트 시스템을 개발하며 직면한 동시성 문제와 성능 병목을 분석하고, 비관적 락과 DB 커넥션 풀의 한계를 경험한 과정을 다룹니다.
Redis 대신 JPA의 Pessimistic Lock과 MySQL을 활용하여 좋아요 기능의 동시성 문제를 해결하고, 시스템 복잡도를 줄이면서 데이터 정합성을 보장한 과정을 다룹니다.
100만 개 데이터 환경에서 6.57초 걸리던 API를 409ms로 단축시킨 SQL 튜닝 과정입니다. 인덱스 설계 전략, 복합 인덱스 활용, JOIN 최적화를 통해 94% 성능 향상을 달성했습니다.
REST Search API의 Rate Limit 병목과 데이터 정밀도 문제를 해결하기 위해 GraphQL로 전환한 과정과 ‘1년 조회 제한’ 문제를 Alias와 동적 쿼리 매핑으로 극복한 트러블 슈팅
멱등성을 보장하기 위해 누적 방식 대신 전체 재계산 방식을 선택한 기술적 의사결정 과정과 Spring Batch 아키텍처 설계, 그리고 마주한 REST API Rate Limit의 구조적 한계 고민
GitHub Events API의 데이터 유실 및 정책 변경 이슈를 분석하고, Search API 도입을 통해 전체 활동 데이터 기반의 정확한 점수 시스템을 구현한 기술적 의사결정 과정
단순 반복문과 스케줄러의 한계를 넘어, 데이터 무결성과 대용량 트래픽을 감당하기 위해 Spring Batch를 도입한 기술적 의사결정 과정과 Job 아키텍처 상세 설계
GitHub API + Spring Batch로 실시간 랭킹 시스템을 구축하며, 홈랩 환경에서 대용량 배치 처리와 인프라 모니터링 경험을 쌓아가는 여정
멱등성을 보장하기 위해 누적 방식 대신 전체 재계산 방식을 선택한 기술적 의사결정 과정과 Spring Batch 아키텍처 설계, 그리고 마주한 REST API Rate Limit의 구조적 한계 고민
대규모 정렬 없이 순위를 구하는 효율적인 알고리즘과, 초기 사용자 부족으로 인한 티어 산정의 모순을 해결하기 위해 Tasklet과 Window Function을 활용한 배치 최적화 과정
단순 반복문과 스케줄러의 한계를 넘어, 데이터 무결성과 대용량 트래픽을 감당하기 위해 Spring Batch를 도입한 기술적 의사결정 과정과 Job 아키텍처 상세 설계
GitHub API + Spring Batch로 실시간 랭킹 시스템을 구축하며, 홈랩 환경에서 대용량 배치 처리와 인프라 모니터링 경험을 쌓아가는 여정
매일 선착순 100명에게 도서를 증정하는 이벤트 시스템을 개발하며 직면한 동시성 문제와 성능 병목을 분석하고, 비관적 락과 DB 커넥션 풀의 한계를 경험한 과정을 다룹니다.
Redis 대신 JPA의 Pessimistic Lock과 MySQL을 활용하여 좋아요 기능의 동시성 문제를 해결하고, 시스템 복잡도를 줄이면서 데이터 정합성을 보장한 과정을 다룹니다.
미용사 및 병원 검색 API에서 발생한 N+1 문제를 분석하고, Fetch Join의 한계를 극복하여 Native Query를 활용해 성능을 최적화한 과정을 다룹니다.
대기 진료 견적서 상세 조회 API에서 569ms 걸리던 3개의 개별 쿼리를 JOIN과 인덱스 최적화를 통해 50ms로 단축시킨 과정을 다룹니다.
100만 개 데이터 환경에서 6.57초 걸리던 API를 409ms로 단축시킨 SQL 튜닝 과정입니다. 인덱스 설계 전략, 복합 인덱스 활용, JOIN 최적화를 통해 94% 성능 향상을 달성했습니다.
대기 진료 견적서 상세 조회 API에서 569ms 걸리던 3개의 개별 쿼리를 JOIN과 인덱스 최적화를 통해 50ms로 단축시킨 과정을 다룹니다.
100만 개 데이터 환경에서 6.57초 걸리던 API를 409ms로 단축시킨 SQL 튜닝 과정입니다. 인덱스 설계 전략, 복합 인덱스 활용, JOIN 최적화를 통해 94% 성능 향상을 달성했습니다.
대기 진료 견적서 상세 조회 API에서 569ms 걸리던 3개의 개별 쿼리를 JOIN과 인덱스 최적화를 통해 50ms로 단축시킨 과정을 다룹니다.
100만 개 데이터 환경에서 6.57초 걸리던 API를 409ms로 단축시킨 SQL 튜닝 과정입니다. 인덱스 설계 전략, 복합 인덱스 활용, JOIN 최적화를 통해 94% 성능 향상을 달성했습니다.
매일 선착순 100명에게 도서를 증정하는 이벤트 시스템을 개발하며 직면한 동시성 문제와 성능 병목을 분석하고, 비관적 락과 DB 커넥션 풀의 한계를 경험한 과정을 다룹니다.
Redis 대신 JPA의 Pessimistic Lock과 MySQL을 활용하여 좋아요 기능의 동시성 문제를 해결하고, 시스템 복잡도를 줄이면서 데이터 정합성을 보장한 과정을 다룹니다.
매일 선착순 100명에게 도서를 증정하는 이벤트 시스템을 개발하며 직면한 동시성 문제와 성능 병목을 분석하고, 비관적 락과 DB 커넥션 풀의 한계를 경험한 과정을 다룹니다.
Redis 대신 JPA의 Pessimistic Lock과 MySQL을 활용하여 좋아요 기능의 동시성 문제를 해결하고, 시스템 복잡도를 줄이면서 데이터 정합성을 보장한 과정을 다룹니다.
Spring Boot + MySQL 구조의 성능 병목을 Redis Stream 비동기 처리로 해결하여 1,666 RPS 달성과 66% 성능 향상을 이룬 과정을 다룹니다.
매일 선착순 100명에게 도서를 증정하는 이벤트 시스템을 개발하며 직면한 동시성 문제와 성능 병목을 분석하고, 비관적 락과 DB 커넥션 풀의 한계를 경험한 과정을 다룹니다.
GitHub Events API의 데이터 유실 및 정책 변경 이슈를 분석하고, Search API 도입을 통해 전체 활동 데이터 기반의 정확한 점수 시스템을 구현한 기술적 의사결정 과정
단순 반복문과 스케줄러의 한계를 넘어, 데이터 무결성과 대용량 트래픽을 감당하기 위해 Spring Batch를 도입한 기술적 의사결정 과정과 Job 아키텍처 상세 설계
SSH Key 인증 적용 후에도 계속되는 ‘무차별 대입 공격(Brute Force)’을 탐지하고, Fail2ban을 이용해 공격 IP를 자동으로 차단하는 방법 정리
미니 PC로 구축한 홈 서버의 보안을 강화하기 위해, 취약한 비밀번호 인증 대신 차세대 알고리즘인 Ed25519 기반의 SSH Key 인증을 설정하는 과정을 기록합니다.
SSH Key 인증 적용 후에도 계속되는 ‘무차별 대입 공격(Brute Force)’을 탐지하고, Fail2ban을 이용해 공격 IP를 자동으로 차단하는 방법 정리
미니 PC로 구축한 홈 서버의 보안을 강화하기 위해, 취약한 비밀번호 인증 대신 차세대 알고리즘인 Ed25519 기반의 SSH Key 인증을 설정하는 과정을 기록합니다.
SSH Key 인증 적용 후에도 계속되는 ‘무차별 대입 공격(Brute Force)’을 탐지하고, Fail2ban을 이용해 공격 IP를 자동으로 차단하는 방법 정리
미니 PC로 구축한 홈 서버의 보안을 강화하기 위해, 취약한 비밀번호 인증 대신 차세대 알고리즘인 Ed25519 기반의 SSH Key 인증을 설정하는 과정을 기록합니다.
SSH Key 인증 적용 후에도 계속되는 ‘무차별 대입 공격(Brute Force)’을 탐지하고, Fail2ban을 이용해 공격 IP를 자동으로 차단하는 방법 정리
미니 PC로 구축한 홈 서버의 보안을 강화하기 위해, 취약한 비밀번호 인증 대신 차세대 알고리즘인 Ed25519 기반의 SSH Key 인증을 설정하는 과정을 기록합니다.
미용사 및 병원 검색 API에서 발생한 N+1 문제를 분석하고, Fetch Join의 한계를 극복하여 Native Query를 활용해 성능을 최적화한 과정을 다룹니다.
미용사 및 병원 검색 API에서 발생한 N+1 문제를 분석하고, Fetch Join의 한계를 극복하여 Native Query를 활용해 성능을 최적화한 과정을 다룹니다.
미용사 및 병원 검색 API에서 발생한 N+1 문제를 분석하고, Fetch Join의 한계를 극복하여 Native Query를 활용해 성능을 최적화한 과정을 다룹니다.
매일 선착순 100명에게 도서를 증정하는 이벤트 시스템을 개발하며 직면한 동시성 문제와 성능 병목을 분석하고, 비관적 락과 DB 커넥션 풀의 한계를 경험한 과정을 다룹니다.
반복되는 JWT 토큰 검증 코드를 제거하기 위해 Spring MVC의 HandlerInterceptor와 ArgumentResolver를 활용한 토큰 처리 시스템 구축 과정을 다룹니다.
반복되는 JWT 토큰 검증 코드를 제거하기 위해 Spring MVC의 HandlerInterceptor와 ArgumentResolver를 활용한 토큰 처리 시스템 구축 과정을 다룹니다.
반복되는 JWT 토큰 검증 코드를 제거하기 위해 Spring MVC의 HandlerInterceptor와 ArgumentResolver를 활용한 토큰 처리 시스템 구축 과정을 다룹니다.
반복되는 JWT 토큰 검증 코드를 제거하기 위해 Spring MVC의 HandlerInterceptor와 ArgumentResolver를 활용한 토큰 처리 시스템 구축 과정을 다룹니다.
모놀리식 아키텍처의 한계를 극복하기 위해 도메인 주도 설계(DDD)와 포트-어댑터 패턴을 적용한 멀티 모듈 아키텍처로 전환한 과정입니다. 장애 격리와 도메인 경계 명확화를 통해 확장성 있는 시스템을 구축했습니다.
모놀리식 아키텍처의 한계를 극복하기 위해 도메인 주도 설계(DDD)와 포트-어댑터 패턴을 적용한 멀티 모듈 아키텍처로 전환한 과정입니다. 장애 격리와 도메인 경계 명확화를 통해 확장성 있는 시스템을 구축했습니다.
모놀리식 아키텍처의 한계를 극복하기 위해 도메인 주도 설계(DDD)와 포트-어댑터 패턴을 적용한 멀티 모듈 아키텍처로 전환한 과정입니다. 장애 격리와 도메인 경계 명확화를 통해 확장성 있는 시스템을 구축했습니다.
모놀리식 아키텍처의 한계를 극복하기 위해 도메인 주도 설계(DDD)와 포트-어댑터 패턴을 적용한 멀티 모듈 아키텍처로 전환한 과정입니다. 장애 격리와 도메인 경계 명확화를 통해 확장성 있는 시스템을 구축했습니다.
모놀리식 아키텍처의 한계를 극복하기 위해 도메인 주도 설계(DDD)와 포트-어댑터 패턴을 적용한 멀티 모듈 아키텍처로 전환한 과정입니다. 장애 격리와 도메인 경계 명확화를 통해 확장성 있는 시스템을 구축했습니다.
모놀리식 아키텍처의 한계를 극복하기 위해 도메인 주도 설계(DDD)와 포트-어댑터 패턴을 적용한 멀티 모듈 아키텍처로 전환한 과정입니다. 장애 격리와 도메인 경계 명확화를 통해 확장성 있는 시스템을 구축했습니다.
Spring Boot + MySQL 구조의 성능 병목을 Redis Stream 비동기 처리로 해결하여 1,666 RPS 달성과 66% 성능 향상을 이룬 과정을 다룹니다.
Spring Boot + MySQL 구조의 성능 병목을 Redis Stream 비동기 처리로 해결하여 1,666 RPS 달성과 66% 성능 향상을 이룬 과정을 다룹니다.
Spring Boot + MySQL 구조의 성능 병목을 Redis Stream 비동기 처리로 해결하여 1,666 RPS 달성과 66% 성능 향상을 이룬 과정을 다룹니다.
Spring Boot + MySQL 구조의 성능 병목을 Redis Stream 비동기 처리로 해결하여 1,666 RPS 달성과 66% 성능 향상을 이룬 과정을 다룹니다.
코딩테스트를 위한 Java 기초부터 자료구조까지 정리 (Java 8 기준, Stream/Lambda 미사용)
코딩테스트를 위한 Java 기초부터 자료구조까지 정리 (Java 8 기준, Stream/Lambda 미사용)
코딩테스트를 위한 Java 기초부터 자료구조까지 정리 (Java 8 기준, Stream/Lambda 미사용)
코딩테스트를 위한 Java 기초부터 자료구조까지 정리 (Java 8 기준, Stream/Lambda 미사용)
GitHub API + Spring Batch로 실시간 랭킹 시스템을 구축하며, 홈랩 환경에서 대용량 배치 처리와 인프라 모니터링 경험을 쌓아가는 여정
GitHub API + Spring Batch로 실시간 랭킹 시스템을 구축하며, 홈랩 환경에서 대용량 배치 처리와 인프라 모니터링 경험을 쌓아가는 여정
REST Search API의 Rate Limit 병목과 데이터 정밀도 문제를 해결하기 위해 GraphQL로 전환한 과정과 ‘1년 조회 제한’ 문제를 Alias와 동적 쿼리 매핑으로 극복한 트러블 슈팅
SSH Key 인증 적용 후에도 계속되는 ‘무차별 대입 공격(Brute Force)’을 탐지하고, Fail2ban을 이용해 공격 IP를 자동으로 차단하는 방법 정리
SSH Key 인증 적용 후에도 계속되는 ‘무차별 대입 공격(Brute Force)’을 탐지하고, Fail2ban을 이용해 공격 IP를 자동으로 차단하는 방법 정리
공인 IP와 포트 번호가 노출되는 환경에서 벗어나, DNS와 DDNS를 결합하고 Nginx 리버스 프록시를 통해 깔끔한 도메인과 HTTPS 보안을 적용 과정
공인 IP와 포트 번호가 노출되는 환경에서 벗어나, DNS와 DDNS를 결합하고 Nginx 리버스 프록시를 통해 깔끔한 도메인과 HTTPS 보안을 적용 과정
공인 IP와 포트 번호가 노출되는 환경에서 벗어나, DNS와 DDNS를 결합하고 Nginx 리버스 프록시를 통해 깔끔한 도메인과 HTTPS 보안을 적용 과정
공인 IP와 포트 번호가 노출되는 환경에서 벗어나, DNS와 DDNS를 결합하고 Nginx 리버스 프록시를 통해 깔끔한 도메인과 HTTPS 보안을 적용 과정
공인 IP와 포트 번호가 노출되는 환경에서 벗어나, DNS와 DDNS를 결합하고 Nginx 리버스 프록시를 통해 깔끔한 도메인과 HTTPS 보안을 적용 과정