IT Oasis 기술 블로그를 만들다
Astro 기반 정적 블로그를 직접 설계하고 구축한 과정을 정리했어요. TinaCMS 연동, i18n, 카테고리 시스템, 다크모드 등 주요 기술 결정을 다뤄요.
검색 결과가 없습니다
제목, 태그, 카테고리로 검색
Astro 기반 정적 블로그를 직접 설계하고 구축한 과정을 정리했어요. TinaCMS 연동, i18n, 카테고리 시스템, 다크모드 등 주요 기술 결정을 다뤄요.
게임 기획자를 위한 오픈소스 밸런싱 플랫폼 인디밸런싱의 개발 과정과 GDC/NDC 이론 학습 경험을 정리했습니다.
B-Tree 인덱스의 한계를 넘어 FULLTEXT ngram 역색인으로 LIKE 검색을 대체하고, 57만 건 한국어 데이터에서 12초→6ms로 약 2,100배 성능을 개선한 과정과 ngram의 알려진 한계점을 정리한다.
게이미피케이션 기반 집중력 타이머 서비스 타이미의 개발 동기, Linear-GitHub-Slack 자동화, 모바일 OAuth 인증, 코드 품질 파이프라인을 정리했습니다.
자동완성 LIKE prefix 검색이 인덱스 없이 Full Table Scan으로 타임아웃되는 문제를 B-Tree 복합 인덱스(title, view_count DESC)로 해결하고, 단일 인덱스 대안과 커버링 인덱스, Trie 자료구조를 비교 검토한 과정을 정리한다.
LIKE 검색이 Full Table Scan으로 2,744만 행을 스캔하며 HikariCP 커넥션 풀을 고갈시켜 시스템을 마비시킨 원인을 분석하고, 긴급 완화 조치로 시스템 안정성을 확보한 과정을 정리한다.
실제 사용자 피드백을 바탕으로 입력값 손실 버그, 드래그 성능, ESC 처리, 키보드 네비게이션 등 24개 항목을 개선한 과정을 정리했어요.
나무위키, 위키피디아 덤프 데이터를 MySQL에 적재하고, 커뮤니티 수준의 트래픽을 감당할 수 있는 검색엔진을 만드는 프로젝트의 개요와 서버 구성을 정리한다.
MVP로 공개한 인디밸런싱의 계산기, 성장곡선, 전투 시뮬레이션, 밸런스 분석 등 15가지 핵심 기능을 소개해요.
React 스프레드시트에서 IME 조합 입력 시 자음/모음 분리 문제를 Uncontrolled Component와 Composition 이벤트로 해결한 과정을 정리했어요.
debounce에서 rafThrottle, 최종적으로 즉시 동기화까지 오픈소스 분석을 통해 도달한 셀-수식바 동기화 최적화 과정을 정리해 봤어요.
CVSS 10.0 Redis 취약점(CVE-2025-49844 RediShell)을 발견하고, 긴급 패치 적용과 다층 보안 강화 조치를 수행한 과정을 정리한다.
Spring Boot 4의 API Versioning이 Swagger UI와 충돌하는 문제의 원인을 분석하고, ApiVersionCustomizer로 해결한 과정을 정리한다.
React 스프레드시트에서 드래그 선택 시 발생한 성능 병목을 Set 자료구조, RAF 기반 throttle, DOM 직접 조작으로 해결한 과정을 정리했어요.
SimpleBroker의 수평 확장 한계를 Redis 세션 관리로 해결하고, LocalDateTime→Instant 마이그레이션, 커서 기반 페이지네이션, SockJS Fallback 등 트러블슈팅을 정리한다.
Spring Boot 4.0 / Spring Framework 7.0에서 새로 도입된 프레임워크 레벨 API 버전 관리 기능의 설정과 동작 원리를 정리한다.
Redis Pub/Sub의 Fire-and-Forget 특성으로 WebSocket 재연결 시 메시지가 유실되는 문제를 MongoDB 기반 커서 페이지네이션으로 해결한 과정을 정리한다.
Soft Delete + 배치 스케줄러로 고아 파일을 자동 정리하는 시스템 설계와, @TransactionalEventListener AFTER_COMMIT의 트랜잭션 함정을 정리한다.
인디게임 개발자를 위한 웹 기반 게임 밸런스 데이터 관리 툴의 기능, 수식 체계, 시뮬레이션, 게임 엔진 연동을 소개해요.
Spring WebSocket STOMP의 Inbound Thread가 I/O 대기로 블로킹되는 문제를 분석하고, Kotlin Coroutine으로 스레드를 즉시 반환하도록 개선한 과정을 정리한다.
웹의 HttpOnly Cookie 인증과 모바일 앱 인증의 차이, 모바일에서 JWT + Redis Refresh Token 전략을 설계한 과정을 정리한다.
레이어 간 객체 변환에서 수동 매핑의 문제를 분석하고, MapStruct로 컴파일 타임 매핑 코드를 자동 생성하는 전략을 정리한다.
Spring MVC에서 Coroutine의 withContext로 스레드가 전환되면서 Hibernate Session과 SecurityContext가 유실되는 문제를 분석하고, runBlocking + Fetch Join으로 해결한 과정을 정리한다.
2,200명 규모 인디게임 개발 커뮤니티에서 설문조사와 피드백 분석을 통해 게임 밸런스 툴의 시장 수요를 검증한 과정을 정리했어요.
Spring Security에서 로그인 사용자 정보를 가져오는 방법을 비교하고, @CurrentUser 커스텀 어노테이션으로 의존성을 관리한 과정을 정리한다.
채팅 메시지 전송 시 매번 MySQL을 조회하던 권한 체크를 Redis 캐싱으로 최적화하고, lastMessage 업데이트를 비동기로 처리하여 응답 시간을 2배 개선한 과정을 정리한다.
Spotless, Checkstyle, SpotBugs, JaCoCo, Codecov를 조합한 무료 코드 품질 관리 파이프라인 구축 과정을 정리한다.
N+1 Query로 1.3초 걸리던 채팅방 목록 조회를 Fetch Join + 배치 조회 + Redis 캐싱(MGET)으로 85ms까지 최적화한 과정을 정리한다.
JPA ddl-auto의 위험성, Flyway와 Liquibase 비교, 환경별 마이그레이션 전략, 체크섬 오류 해결법을 정리한다.
분산 환경에서 채팅 메시지 순서를 보장하기 위해 서버 타임스탬프 + 클라이언트 정렬 + MongoDB 정렬 조회 전략을 설계한 과정을 정리한다.
UUID를 PK로 쓰면 안 되는 이유, Auto Increment의 한계, Snowflake ID로 내부 PK와 외부 노출용 ID를 분리한 과정을 정리한다.
C2C 공유 플랫폼 빌려조잉을 6주간 개발하며 채팅 시스템 설계, 팀원 이탈 대응, 그리고 삼성 우수상까지의 여정을 정리했습니다.
Spring의 여러 예외 처리 방법을 비교하고, @ControllerAdvice + 커스텀 에러 코드 + 통일된 응답 포맷을 선택한 이유를 정리한다.
채팅 메시지 브로커로 Kafka, RabbitMQ, Redis Stream, NATS를 비교하고, Redis Pub/Sub + MongoDB 조합을 선택한 이유를 정리한다.
properties와 yml의 차이, Spring Boot가 properties를 기본으로 생성하는 이유, 멀티모듈 프로젝트에서 yml을 선택한 배경을 정리한다.
채팅 시스템에서 MySQL(관계 데이터), MongoDB(메시지 저장), Redis(실시간 전달+캐싱) 세 DB를 함께 사용한 Polyglot Persistence 설계를 정리한다.
멀티모듈 프로젝트에서 의존성 버전 관리 방법 5가지를 비교하고, Version Catalog + Spring BOM 하이브리드 방식을 선택한 이유를 정리한다.
JWT 저장 방식의 역사(LocalStorage → HttpOnly Cookie)를 분석하고, SameSite 쿠키 정책으로 로컬 개발이 막힌 문제를 Vite 프록시로 해결한 과정을 정리한다.
헥사고날 아키텍처를 왜 선택하지 않았는지, 도메인 기반 멀티모듈 + 레이어드 아키텍처로 결정한 이유를 정리한다.
Kotlin + Java + Lombok 환경에서 발생하는 빌드 순서 문제와 Enum 호환성 이슈를 분석하고, kotlin-plugin-lombok + io.freefair.lombok + delombok 조합으로 해결한 과정을 정리한다.
즉각적인 피드백과 성취 공유 욕구를 결합하여 집중을 게임처럼 만드는 앱, 타이미의 기획 의도와 프로젝트 소개.
서버 재시작할 때마다 알림이 50-100건씩 쏟아져서 정작 중요한 알림을 놓치고 있었다. for 절과 inhibit_rules로 노이즈를 90% 줄인 과정을 정리한다.
Exception 로그가 여러 줄로 분리되어 Grafana에서 스택트레이스 검색이 안 됐다. Log4j2 JSON 포맷 + Promtail JSON 파이프라인으로 해결한 과정을 정리한다.
userId 기반 파티셔닝 때문에 헤비 유저의 이벤트가 한 파티션에 몰리면서 Lag 편차가 10배까지 벌어졌다. uploadId 기반으로 바꿔서 해결한 과정을 정리한다.
동시 요청 제한 없이 AI 서버에 보내다가 하루 5-10회 GPU OOM이 터졌다. ThreadPool + Semaphore 이중 동시성 제어로 OOM 0회를 달성한 과정을 정리한다.
음성 기반 노래 추천 플랫폼 오락가락을 5주간 개발하며 Kafka 파이프라인, GPU OOM 방어, Prometheus+Grafana 모니터링을 구축한 이야기입니다.
파일 업로드 후 동기 처리로 5-30초 걸리던 구조를 Kafka 기반 비동기 파이프라인으로 바꿔 200ms 이내 응답 + DLQ 패턴으로 실패 복구까지 구현한 과정을 정리한다.
서버를 거치는 업로드 방식이 OOM과 이중 전송 문제를 일으킨다는 걸 파악하고, Presigned URL로 S3 직접 업로드 + EventBridge로 완료 감지하는 구조로 전환한 과정을 정리한다.
Webhook, API, Actuator가 각각 다른 인증 방식을 요구해서 3개의 SecurityFilterChain을 @Order로 분리하고, 경로별 독립적인 보안 정책을 적용한 과정을 정리한다.
장애를 SSH로 확인하던 구조를 Prometheus(메트릭) + Loki(로그) + Grafana(시각화) + Alertmanager(알림)로 자동화해서 장애 감지를 30초 이내로 줄인 과정을 정리한다.
에지 케이스 테스트로 발견한 게시글과 댓글 관련 버그 12가지의 원인 분석과 해결 과정을 정리한다.
단위 테스트 환경을 MySQL에서 H2 인메모리로 전환하여 테스트 속도를 45% 개선한 과정과 Spring Profile 분리 전략을 정리한다.
청각장애인을 위한 온라인 교육 플랫폼 EduMeet을 6주간 개발하며 배운 것들을 정리했습니다.
UUID vs Auto Increment PK 전략, S3 업로드 방식 비교, 이미지 처리 접근 방식을 분석하고 프로젝트에 적합한 전략을 선택한 과정을 정리한다.
Spring Data JPA의 Custom Repository 구현체를 레이어 이동할 때 발생한 쿼리 메서드 파싱 오류와 해결 과정을 정리한다.
JPA N+1 문제의 4가지 해결 방법(FetchJoin, EntityGraph, SUBSELECT, BatchSize)을 실측 비교하고 최적 전략을 선택한 과정을 정리한다.
JPA Lazy 로딩에서 발생한 LazyInitializationException의 원인과 @EntityGraph를 이용한 해결 과정을 정리한다.
JPA @OneToMany의 기본 동작으로 생성된 불필요한 중간 테이블을 mappedBy로 제거한 과정을 정리한다.
레이어드 아키텍처를 선택한 이유와 의존성 역전으로 헥사고날 아키텍처까지 진화시키는 과정을 정리한다.