글 상태
Published
Readable normal-state content.
- 카카오뱅크 「하루 N억 건의 알림 시스템 구축기 (1)」 리뷰 — P99의 80%가 대기였다는 진단, Age 기반 Work-Stealing, 그리고 큐를 나누는 순간 순서를 잃는 문제
- LINE 「초당 100만 건, LINE 앱에 Apache Kafka 종단 간 암호화 적용기」 리뷰 — 인터셉터와 시리얼라이저만으로 브로커에 평문을 남기지 않는 법
- TMC 25 리뷰 - '주식모으기' 서비스로 살펴보는 대용량 트래픽 처리 노하우: 200만 주문을 3,000건으로 접는 풀링 주문과 그 대가
- 카카오 「MySQL 인증 플러그인 caching_sha2_password에 대한 이해」 리뷰 — 비밀번호 해시가 바뀌는 것보다 '평문이 서버까지 가야 한다'는 점이 전환의 진짜 비용
- LINE 「LINE에서 Kafka를 사용하는 방법 - 1편」 리뷰 — 초당 4GB 클러스터가 바이트가 아니라 요청 수를 제한하는 이유, 그리고 2,000틱짜리 파이프라인에서 같은 것을 본 기록
- 쿠팡 「대용량 트래픽 처리를 위한 쿠팡의 백엔드 전략」 리뷰 — 캐시 두 겹과 '분 단위 99.99% 동일'이라는 문장, 그리고 그 0.01%를 누가 어떻게 세는가
- Claude Code를 개인 워크벤치처럼 쓰는 방법
- spring-internals-lab로 다시 읽는 Spring 1 - 이 프로젝트는 무엇을 검증하려는가
- spring-internals-lab로 다시 읽는 Spring 7 - @Transactional의 실체
- spring-internals-lab로 다시 읽는 Spring 9 - Spring Boot는 무엇을 자동으로 조립하는가
- spring-internals-lab로 다시 읽는 Spring 3 - refresh()와 Bean 생성 파이프라인
- spring-internals-lab로 다시 읽는 Spring 6 - 프록시와 AOP
- spring-internals-lab로 다시 읽는 Spring 8 - DispatcherServlet과 MVC 요청 흐름
- spring-internals-lab로 다시 읽는 Spring 4 - 의존성 주입과 후보 선택
- spring-internals-lab로 다시 읽는 Spring 5 - Bean lifecycle과 후처리기
- spring-internals-lab로 다시 읽는 Spring 2 - BeanDefinition과 등록 단계
- 무신사 「Kafka와 Strimzi를 이용하여 6개의 도메인을 하나의 도메인으로 합쳐보았습니다」 리뷰 — 배치 없이 CDC와 Kafka Streams로 옮긴 결정, 그리고 통합 모델이 원본과 같다는 것을 누가 확인하는가
- 네이버 D2 「@RequestCache: HTTP 요청 범위 캐싱을 위한 커스텀 애너테이션 개발기」 리뷰 — 캐시의 수명을 '요청 하나'로 맞추면 TTL 고민이 사라진다, 그리고 @RequestScope가 안 되는 이유
- 컬리 「컬리의 입고 시스템이 외부 인입 데이터를 안전하게 동기화하는 방법」 리뷰 — 145회 재시도가 맞는 도메인과 재시도를 금지한 도메인, 그리고 발행부와 수신부가 각자 책임지는 구조
- 카카오 「잃어버린 리포트를 찾아서: 카카오 메시징 시스템의 경쟁 조건 문제와 안티 패턴 제거 과정」 리뷰 — 벤더가 8ms 만에 리포트를 보냈고, 우리는 101ms짜리 트랜잭션 안에 있었다
- 네이버 D2 「일 3,000만 건의 네이버페이 주문 메시지를 처리하는 Kafka 시스템의 무중단 전환 사례」 리뷰 — 두 벌로 발행해 대조한 검증기와, 발행 제어 키를 파티션 키와 같게 둔 이유
- 카카오 「메시징 서버의 스트레스 테스트 노하우와 AI가 덜어 준 부분」 리뷰 — 지표를 네 층으로 내려가 읽는 법, 그리고 LLM에게 맡긴 것과 맡기지 못한 것
- 카카오페이 「MSA 환경에서 네트워크 예외를 잘 다루는 방법」 리뷰 — Unknown을 타입으로 만든 글과, Unknown을 상태로 저장한 프로젝트가 갈리는 지점
- LINE 「도메인에 의존하지 않는 채팅 플랫폼은 어떻게 만들었을까?」 리뷰 — 사용자를 모르는 채팅 플랫폼, 웹으로 만든 클라이언트, SOFT STOP으로 갈아 끼우는 챗봇 시나리오
- market.ticks 파티션 × 컨슈머 격자 — 키가 같아도 순서가 깨진 이유, 크래시 하나가 시세 전체를 멈춘 이유, 파티션 이웃이 인질이 되는 순간
- SLASH 24 리뷰 - SSE 이벤트 푸쉬로 불필요한 Polling 제거하기: 3초 폴링을 이벤트로 바꾸고 브로커를 세 번 갈아탄 기록
- WebSocket push와 REST polling을 클라이언트 1만 개에서 재다 — 지연과 서버 비용, Kafka 정지 45초, 느린 소비자 25개
- spring-lite로 이해하는 Spring 구현 5 - MiniSpringApplication과 자동 설정 조립 방식
- spring-lite로 이해하는 Spring 구현 4 - DispatcherServlet과 MVC 요청 처리 파이프라인
- 카카오 「MySQL Json 데이터 타입의 저장 구조와 성능 비교」 리뷰 — 통째로 넣고 통째로 꺼내면 TEXT, 키로 파고들면 JSON
- spring-lite로 이해하는 Spring 구현 3 - ProxyFactory, @Transactional, JdbcTemplate 연결
- spring-lite로 이해하는 Spring 구현 2 - AnnotationConfigApplicationContext로 보는 IoC와 생명주기
- spring-lite로 이해하는 Spring 구현 1 - 프로젝트 구조와 설계 범위
- ParityPay로 검증하는 결제 정합성 9 - 느린 기관 앞에서 결제 서버를 지키기: 타임아웃, 재시도, 차단기, 리미터, 벌크헤드가 각각 무엇을 막는가
- Circuit Breaker로 외부 API 장애 격리 — Resilience4j + KIS·Yahoo 폴백 체인
- OpenTelemetry + Jaeger로 분산 추적 — 시세 파이프라인 지연 측정
- SLASH 24 리뷰 - 리플레이 검증으로 새로운 금융 시스템 안전하게 도입하기: 운영 트래픽을 그대로 재생해 차세대 원장을 검증하다
- 야놀자 「RESTful API validation 자동화 하기」 리뷰 — 인터페이스 하나에서 검증·문서·타입을 뽑는 이유, 그리고 자동화가 없으면 누락이 필연이라는 문장
- SLASH 23 리뷰 - Kafka 이중화로 다양한 장애 상황 완벽 대처하기: Active-Standby를 믿지 않고 Active-Active로 간 이유와 IDC 장애 당일의 순서
- 네이버 D2 「스마트스토어센터 Oracle에서 MySQL로의 무중단 전환기」 리뷰 — 두 DB에 동시에 쓰되 한쪽 실패는 무시하고, 읽기 트래픽을 복제해 성능을 재고, 6개월간 불일치를 0으로 만든 과정
- EMA 기반 이상 탐지 — 가격 급등과 거래량 서지 실시간 감지
- TimescaleDB를 시계열 DB로 고른 이유 — Hypertable과 연속 집계
- SLASH 23 리뷰 - 실시간 시세 데이터 안전하고 빠르게 처리하기: Kafka 15ms 대 Redis Pub/Sub 3ms, 그리고 22,000 TPS에서 1ms를 만든 이벤트 루프 설계
- 모듈식 모놀리스를 선택한 이유 — MSA의 유혹을 거부하기
- 가격이 아니라 이벤트를 팔자 — monticker 설계 철학
- SLASH 22 리뷰 - 애플 한 주가 고객에게 전달되기까지: 분산락 위에 낙관적 락을 얹고, 타임아웃을 실패로 확정하지 않는 해외주식 원장
- 당근 「QR을 찍으면 무슨 일이 벌어질까? 당근페이 현장 결제의 모든 것」 리뷰 — 카드망을 빌려 7주 만에 낸 결제와, 그 글이 다루지 않은 승인 응답이 사라지는 순간
- SLASH 24 리뷰 - 토스뱅크가 차세대를 하지 않는 이유, 지속 가능한 마이그레이션 전략: 스트랭글러 피그, 6단계 사이클, 컴포지트 분할 정복, 병렬 실행 비교 검증
- SLASH 22 리뷰 - 토스증권 실시간 시세 적용기: 런칭 직전에 폴링을 WebSocket으로 바꾸고, 한 달 만에 200만 계좌를 받아 낸 기록
- 네이버 D2 「테스트는 어떻게 좋은 코드를 만드는가(feat. 험블 객체 패턴)」 리뷰 — 목이 많아지는 것은 테스트의 문제가 아니라 설계의 신호
- 토스증권 Kafka 데이터센터 이중화 리뷰: 미러링보다 오프셋이 어렵고, 재난과 작업의 기준이 다르다
- SLASH 24 리뷰 - 대규모 사용자 기반의 마이데이터 서비스 안정적으로 운영하기: 클러스터 단위 서킷 코디네이터, 웹소켓 얼리 리턴, 7일 배치 분산
- SLASH 24 리뷰 - Next 코어뱅킹, MSA와 MySQL로 여는 평생 무료 환전 시대: Oracle을 버린 이유, 30ms 환전, 자정에도 멈추지 않는 잔액 대사
- 토스증권의 CQRS·검증기와 ParityPay의 스냅샷·대사: 읽기 모델을 분리하면 반드시 따라오는 세 가지 장치
- 우아한형제들 「Spring Batch와 Querydsl」 리뷰 — offset을 버린 Reader가 21분을 4분으로 만든 이유, 그리고 그 Reader가 답하지 않는 두 가지
- 토스증권 공개 자료로 읽는 시세·주문 아키텍처: 무엇을 잃어도 되는지 먼저 정한다
- 토스증권 Server Developer (Product) 공고 분석: 제품 개발자에게 원장 수준의 정합성을 요구하는 이유
- 뱅크샐러드 「게임을 만들 때 데이터 정합성을 유지하는 법 (feat. 낙관적 락)」 리뷰 — 같은 WHERE version 조건인데, 충돌한 요청을 어떻게 하는가에서 갈리는 두 설계
- SLASH 23 리뷰 - 프로파일러로 시스템 성능 향상시키기: Pinpoint, 힙 덤프, jemalloc, async-profiler, strace, 그리고 커널 버전
- LINE 「기획서 없이 내재화하기: 검증 로직으로 동일함을 증명하다」 리뷰 — 블랙박스는 입력과 출력만 정의하면 통계로 같음을 증명할 수 있다
- SLASH 23 리뷰 - 연결되면 비로소 보이는 것들: Pinpoint 코루틴 플러그인을 만들기 위해 코루틴 바이트코드를 읽다
- ParityPay로 검증하는 결제 정합성 10 - 락 lease가 트랜잭션보다 먼저 끝나면 정말 정합성이 깨지는가: SETNX 락, Watchdog, fencing token, 그리고 락 없는 구조의 실측
- SLASH 23 리뷰 - 토스는 Gateway 이렇게 씁니다: 목적별 게이트웨이, 패스포트, 요청 서명 검증, YAML 라우트와 게이트웨이 봇
- 카카오 「PostgreSQL to ES: Kafka Connect CDC 파이프라인」 1·2편 리뷰 — 변경이 없어서 디스크가 차고, LSN이 사라져서 스냅샷을 다시 짜야 했던 CDC의 실제 운영 비용
- SLASH 23 리뷰 - 분산 추적 체계 & 로그 중심으로 Observability 확보하기: 좋은 로그의 조건, 글로벌 trace ID, TCP 전문에 문맥 심기, 헤더 라우팅 디버깅 환경
- 카카오 「MySQL InnoDB Log에 대한 이해 - (1)」 리뷰 — 트랜잭션 하나가 어떻게 MTR 여러 개로 쪼개져 Redo Log Buffer에 들어가는가
- ParityPay로 검증하는 결제 정합성 8 - Kafka에서 중복·유실·순서 역전을 직접 만들어 보기: 멱등 소비자와 Outbox가 막는 것과 못 막는 것
- 주니어 백엔드 개발자가 실무에서 자주 부딪히는 질문들
- GitHub 블로그를 에이전틱 AI와 함께 운영하기
- 2026-04-08-TIL: 어쩐지 좋은일이 생길것 같은 저녁
- SLASH 23 리뷰 - 토스뱅크의 모던 FEP: 전문을 Kotlin 어노테이션으로, 리플렉션 코덱, Netty 논블로킹, Redis 폴링으로 액티브-액티브
- ParityPay로 검증하는 결제 정합성 7 - 애플리케이션 코드를 믿지 않는 원장: 이중부기를 계정 체계, DB 제약, 속성 테스트로 강제하기
- SLASH 23 리뷰 - 은행 최초 코어뱅킹 MSA 전환기 (feat. 지금 이자 받기): 80회 DML을 50회로, MCI 대비 170배, 빅뱅 없는 전환
- 네이버 D2 「CDC 복제 이후 오라클이 느려졌다? child cursor 폭증이 만든 예상치 못한 문제」 리뷰 — 같은 SQL인데 바인딩 타입이 다르면 Oracle은 다른 쿼리로 본다
- 2026-03-29-TIL: 키워드를 모를 때 지식을 구조화하는 방법
- RESP, Reactor, Command Registry로 보는 Redis 요청 처리 흐름
- redis-lite-java로 이해하는 Redis 아키텍처 개요
- MemoryDb, TTL, Hash 구조로 보는 Redis keyspace 설계
- MULTI, Pub/Sub, Lua로 보는 Redis 확장 기능과 구현 과정
- 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 - 10장 모르면 답답해지는 네트워크 기초
- 2026-03-26-TIL: 블로그 리뉴얼
- 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 - 11장 자주 쓰는 서버 구조와 설계 패턴
- 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 - 9장 최소한 알고 있어야 할 서버 지식
- ParityPay로 검증하는 결제 정합성 6 - 대사: "기관에 물어보지 못했다"와 "기관에 기록이 없다"는 다른 상태다
- 2026-03-22-TIL: 기술 의사결정은 사람보다 구조를 설계해야 한다
- 키 생성 병목을 추적해 구조를 바꾼 기록: Part 2 - SELECT 안에서 UPDATE가 일어나고 있었다
- 카카오 「MySQL Ver. 8.0 New Feature: Instant DDL Algorithm에 대한 이해」 리뷰 — 컬럼을 0.01초에 추가하는 대가는 '읽을 때마다 버전을 대조하는 것'이다
- 2026-03-19-TIL: 간만에 서울나들이
- ParityPay로 검증하는 결제 정합성 5 - DB 커밋과 Kafka 발행 사이: Transactional Outbox와 at-least-once 소비자
- SLASH 22 리뷰 - 왜 은행은 무한스크롤이 안되나요: 채널계가 거래내역을 직접 갖기 위한 여덟 가지 방어
- 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 - 8장 실무에서 꼭 필요한 보안 지식
- 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 - 7장 I/O 병목, 어떻게 해결하지
- ParityPay로 검증하는 결제 정합성 4 - 실험 27종이 찾아낸 결함 12건: 문서와 코드를 읽어서 나온 것은 하나도 없었다
- ParityPay로 검증하는 결제 정합성 3 - 외부 승인 응답이 사라졌을 때: 타임아웃은 실패가 아니다
- 2026-02-27-TIL: Codex 사용 후기
- Netty
- SLASH 22 리뷰 - 지속 성장 가능한 코드를 만들어가는 방법: import 문이 보내는 신호로 패키지·레이어·모듈을 다시 보기
- 2026-02-24-TIL: AI 활용에 대하여
- ParityPay로 검증하는 결제 정합성 2 - 잠금을 필요 이상으로 오래 쥐고 있었다: 추론을 측정으로 바꾼 기록
- SLASH 22 리뷰 - 토스뱅크의 완전히 새로운 대출 시스템: Flyway + Hibernate validate, 대외기관 파이프라인, 연동 서킷과 대기열
- 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 - 6장 동시성, 데이터가 꼬이기 전에 잡아야 한다
- 대용량 파일 업로드를 위한 Presigned URL
- ParityPay로 검증하는 결제 정합성 1 - 장애가 나도 지켜야 할 금융 불변조건 여섯 가지
- 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 - 5장 비동기 연동, 언제 어떻게 써야 할까
- SLASH 22 리뷰 - Java Native Memory Leak 원인을 찾아서: RSS와 NMT의 2GB 차이, jemalloc 프로파일, C2 컴파일러, Graal JIT
- 카카오 「MySQL Orchestrator 기반의 새로운 HA 표준 개발기」 리뷰 — 10년 멈춘 Perl 도구를 떠나 Raft 클러스터로, 그리고 slave_net_timeout 한 줄
- 2021년의 결제대행 API 연동을 2026년의 질문으로 다시 보기
- SLASH 21 리뷰 - 토스 서비스를 구성하는 서버 기술: 두 데이터센터 사이의 트래픽 이동, Istio 도입 후 남은 것, Kafka 두 클러스터
- SLASH 21 리뷰 - 테스트 커버리지 100%: 두 달의 비용, 1600개 테스트를 6초로, 그리고 100%여도 남는 버그
- 키 생성 병목을 추적해 구조를 바꾼 기록: Part 3 - 채번을 INSERT 시점으로 옮기고 범위 단위로 받기
- SLASH 21 리뷰 - MySQL HA & DR Topology: MMM, 대칭 DR 구성, 바이너리 로그 필터, super_read_only 안전장치
- SLASH 21 리뷰 - 결제 시스템의 SDK와 API 디자인: 4단계를 2단계로, DELETE·PUT을 버린 이유, 한글 enum
- 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 - 4장 외부 연동이 문제일 때 살펴봐야 할 것들
- SLASH 21 리뷰 - SRE 사례 소개: Redis 리밸런싱 ASK 에러, Memcached 재분배 실패, Prometheus가 바꾼 GC 패턴
- 키 생성 병목을 추적해 구조를 바꾼 기록: Part 1 - INSERT가 느린 줄 알았다
- 대량 배치 안정성을 높이기 위한 구조 개선: Part 5 - 배타적 락과 조건부 해제로 순서를 보장하기
- 대량 배치 안정성을 높이기 위한 구조 개선: Part 4 - 분산 락이 있어도 레이스가 발생한 이유
- 대량 배치 안정성을 높이기 위한 구조 개선: Part 3 - 청크 분할과 병렬 처리로 재설계하기
- 대량 배치 안정성을 높이기 위한 구조 개선: Part 2 - 전체 삭제 후 전체 등록 구조의 위험성
- 대량 배치 안정성을 높이기 위한 구조 개선: Part 1 - 시스템을 압박하기 시작한 배치
- 카카오 「MySQL ALTER DDL 수행 방식에 대한 이해」 리뷰 — Copy·In-Place·Instant는 '무엇을 복사하느냐'보다 '언제 Exclusive 메타 락을 잡느냐'로 구분된다
- 위반 480건 위에 아키텍처 규칙을 도입하기: 신규 코드는 100% 강제, 레거시는 점진 정리
- 대량 배치 안정성을 높이기 위한 구조 개선: Part 0 - 왜 이 배치는 가끔 터질까?
- 네이버 D2 「6개월 만에 연간 수십조를 처리하는 DB CDC 복제 도구 무중단/무장애 교체하기」 리뷰 — 복제·검증·복구를 셋으로 나누고, 옛 도구와 새 도구를 서로 모르게 같이 돌린 전환
- Heap Dump가 가리킨 곳은 데이터가 아니라 영속성 컨텍스트였다: Tasklet에서 Chunk로, XSSF에서 SXSSF로
- 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 - 3장 성능을 좌우하는 DB 설계와 쿼리
- Shadow Release로 조회를 옮기기: MyBatis 결과와 QueryDSL 결과를 나란히 비교하며 전환한 기록
- 2025-11-17-TIL
- 2025-11-11-TIL
- Bulkhead Pattern
- 모든 도메인이 100% 정합성을 요구하지는 않는다: Post-Commit 이벤트와 재시도 3회 정책을 정한 기준
- 2025-11-05-TIL
- 2025-11-04-TIL
- 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 - 2장 느려진 서비스, 어디부터 봐야 할까
- 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 - 1장 들어가며
- 카카오 「MySQL DATETIME, TIMESTAMP 데이터 타입에 대한 분석」 리뷰 — 바이트 단위 저장 구조부터 아직 안 고쳐진 Y2K38까지
- 폴링 배치를 SQS 이벤트 파이프라인으로 바꾼 이유: 재시도, DLQ, 메시지 ID 멱등
- 정산이 진행되는 동안 기준 데이터 수정을 막는 방법: 상태 플래그와 AOP로 만든 경량 락
- 카카오 「추가배포 없이 API의 case 통일시키기」 리뷰 — 받는 쪽이 자기 케이스에 맞춰 알아서 읽게 하면 배포 순서가 사라진다
- 단위 테스트와 통합 테스트를 어떻게 구분해야 할까
- 테스트 코드는 왜 작성해야 할까?
- Single Flight
- 2025-09-02-TIL
- 2025-08-27-TIL
- 2025-08-26-TIL
- Error Handling in HTTP APIs
- Redis Sentinel Replication
- Redis Cache Best Practices
- Redo Log와 Undo Log를 어떻게 구분해야 하는가
- 데이터베이스 리플리케이션 기본 정리
- 애프랩(F-Lab) Java Backend 2개월 후기
- 데이터베이스 트랜잭션을 어떻게 봐야 하는가
- ACID를 실무적으로 이해하기
- Preventing Cache Write Amplification under High Concurrency
- 2025-08-13-TIL
- 2025-08-12-TIL
- Resolve Git Conflicts
- Problem Details for HTTP APIs
- @RestController는 무엇을 의미하는가
- @SpringBootApplication은 실제로 무엇을 하는가
- Spring Boot DevTools를 언제 써야 하는가
- MVCC를 어떻게 이해해야 하는가
- Gap Lock
- Evolution of Java: Version-by-Version Breakdown
- Understanding HTTP Versions: From 0.9 to 3.0
- Process and Thread
- Multiplexing
- Multithreading
- Inside ArrayList: Capacity Expansion Mechanism
- 2025-07-18-TIL
- 2025-07-17-TIL
- 2025-07-16-TIL
- 애프랩(F-Lab) Java Backend 1개월 후기
- Java의 Garbage Collection을 어떻게 이해해야 할까
- Stateless(무상태)가 Idempotent(멱등성)을 의미하는가?
- State in REST API
- Microservice Architecture
- Spring Bean Lifecycle 정리
- 2025-06-30-TIL
- Floating Point
- 부동소수점 오차는 왜 발생하는가
- Java에서 static은 무엇을 의미하는가
- equals()와 hashCode()를 함께 오버라이드해야 하는 이유
- Stateful vs Stateless
- Function Signature
- 2025-06-13-TIL
- WEB 3.0
- WEB 3.0 지갑
- What is NFT?
- 민주주의 = 탈중앙화라고 볼 수 있는가?
- 대용량 지분율 데이터 처리 성능 개선과 동시성 제어 전략
- 무거운 엑셀 다운로드 요청을 사전에 판별하는 방법
- 대용량 엑셀 다운로드 요청을 안정적으로 처리하는 방법
- 대량 엑셀 다운로드를 메시지 큐와 S3 사전 생성으로 개선한 이야기
- DB 스키마만으로 외주 시스템을 내재화한 리빌딩 여정
- ISMS 대응을 위한 로그 수집 체계 개선
- 백엔드 시스템 로깅 베스트 프랙티스
- JSP 기반 시스템의 구조적 문제를 해결한 아키텍처 전환기: JavaScript에 과도하게 집중된 로직 분리하기
- JSP 기반 시스템의 구조적 문제를 해결한 아키텍처 전환기: API 명세 없는 레거시 시스템의 신규 시스템 이관 전략
- JSP 기반 시스템의 구조적 문제를 해결한 아키텍처 전환기: MyBatis와 JPA 공존 환경의 데이터 정합성 전략
- JSP 기반 시스템의 구조적 문제를 해결한 아키텍처 전환기: 시퀀스 테이블 기반 코드 생성의 병목을 해결한 이야기
- JSP 기반 시스템의 구조적 문제를 해결한 아키텍처 전환기: DTO 중심 아키텍처 전환과 검증 체계 개선
- Redis 기반 인증 토큰 관리로 분산 환경의 인증 일관성 확보
- 조건 기반 예측 캐싱: 고속 엑셀 다운로드 처리 구조 설계
- [3주차] 속도를 지배하는 DB 인덱스
- Load Balancing Algorithms
- 2025-05-19-TIL
- 이력서 기반의 면접 예상질문 자문자답 2
- 2025-05-14-TIL
- @TransactionalEventListener 빠른 체크 노트
- Chapter 2. Architectural Thinking
- 헬퍼 클래스는 안티패턴일까?
- 콜백(callback)
- 백엔드 개발자: 데이터 흐름의 설계자
- Spring에서 이해해야 할 JPA 아키텍처
- 데이터베이스 페이징 성능을 어떻게 봐야 하는가
- 캐시 스탬피드(Cache Stampede)
- CPU부터 CDN까지: 모든 계층에서의 캐싱
- 2025-04-22-TIL
- 응집도와 결합도에 관하여: About Cohesion and Coupling
- 2025-04-21-TIL
- 2025-04-18-TIL
- Java 진화의 두 축 JEP vs JSR
- Jakarta EE 기업용 Java의 진화
- 2025-04-17-TIL
- 2025-04-16-TIL
- 왜 이벤트가 안 먹히지? @TransactionalEventListener가 무시되는 이유와 해결법
- 2025-04-15-TIL
- 이력서 기반의 면접 예상질문 자문자답
- Spring에서 Java 21을 도입할 때 체크할 것
- Java 21 Features
- 2025-04-12-TIL
- 2025-04-11-TIL
- The Hidden Evolution of Java Strings
- Integer.toString(int) vs String.valueOf(int) vs "" + int
- 2025-04-03-TIL
- 2025-04-03-TIL
- 카카오 「실시간 메시징 시스템 개발기」(3편) 리뷰 — Redis에 몰린 부하를 서버로 옮기고, 그 서버를 pprof로 세 번 깎은 이야기
- 2025-03-21-TIL
- 2025-03-20-TIL
- 2025-03-19-TIL
- 2025-02-17-TIL
- 2025-02-14-TIL
- 2025-02-13-TIL
- 2025-02-12-TIL
- 2025-02-05-TIL
- 2025-02-04-TIL
- 2025-02-03-TIL
- 2024-09-26-TIL
- MIME(Multipurpose Internet Mail Extensions)
- 2024-09-25-TIL
- 2024-09-24-TIL
- 2024-09-23-TIL
- 2024-09-22-TIL
- 2024-09-13-TIL
- 2024-09-12-TIL
- Reverse Proxy
- HikariCP
- 2024-09-11-TIL
- Apache vs Tomcat
- ELB vs ALB vs NLB
- 2024-09-10-TIL
- Network Load Balancers(NLB)
- Keep-Alive
- 2024-09-09-TIL
- 2024-09-08-TIL
- Single Sign-On
- Session and JWT
- Preflight Request
- OpenID Connect
- Log4j Vulnerability
- Log4j vs Logback vs Log4j2
- Log Level
- Large List Rendering Issue
- JWT vs Opaque Token
- GraphQL
- GraphQL with Spring Boot
- Connection Pool
- Microservice Architecture
- Querydsl을 사용하는 이유와 기본 패턴
- Spring 애플리케이션에서 페이지네이션을 설계하는 방법
- Spring의 IoC와 DI를 어떻게 이해할 것인가
- Spring과 JPA에서 Race Condition을 다루는 방법
- Filter, Interceptor, AOP의 차이와 선택 기준
- Spring 애플리케이션에서 예외를 설계하는 방법
- Spring 예외 처리 전략 정리
- Spring Data JPA에서 동적 쿼리를 다루는 방법
- @ControllerAdvice와 @RestControllerAdvice 정리
- Spring AOP 핵심 정리
- Thread Local
- Synchronous Asynchronous Bloking Non Blocking
- Serialization
- Pure Function
- Programming Paradigms
- Oop And Fp
- Lambda
- Javascript Settimeout
- Higher Order Function
- Garbage Collectors
- Garbage Collection
- G1gc Zgc
- Exception Handling
- Concorrency
- Closure
- Statement와 PreparedStatement는 무엇이 다른가
- JVM은 무엇을 하는가
- 점 이력과 선분 이력 모델링
- 데이터베이스 인덱스를 어떻게 이해해야 하는가
- Token Authentication
- SSL/TLS
- Apache Zookeeper
- Spring AMQP
- Shell Script
- Reverse Proxy
- RabbitMQ
- RabbitMQ with Spring Boot
- RabbitMQ Installation
- Message Queue
- Circuit Braker
- Transaction
- System Structure & Program Execution
- MultiThreading and Thread Scheduling
- JANDI와 AWS CodeCommit 연동
- Increasing System Performance in MultiProcessing
- Concurrency Control
- AWS Code Commit
- Introduction to Operating System
- Redis Cluster vs Sentinel
- Authorization
- Authentication
- Facade
- Microservices Architecture
- Unique ID Generation Strategy in Distributed Systems
- 2024-09-02-TIL
- 2024-08-28-TIL
- 2024-08-27-TIL
- 2024-08-20-TIL
- 2024-08-19-TIL
- 2024-08-13-TIL
- 2024-08-12-TIL
- 2024-08-09-TIL
- 2024-08-08-TIL
- 2024-08-06-TIL
- 2024-08-05-TIL
- 2024-08-01-TIL
- 2024-07-31-TIL
- 2024-07-30-TIL
- 2024-07-25-TIL
- 2024-07-24-TIL
- 2024-07-17-TIL
- 2024-07-16-TIL
- 2024-07-15-TIL
- 2024-07-11-TIL
- 2024-07-10-TIL
- 2024-07-09-TIL
- 2024-07-08-TIL
- 2024-07-03-TIL
- 2024-07-01-TIL
- 2024-06-28-TIL
- 2024-06-12-TIL
- 2024-05-30-TIL
- 2024-05-24-TIL
- 2024-05-02-TIL
- 2024-04-29-TIL
- 2024-04-26-TIL
- 2024-04-25-TIL
- 2024-04-22-TIL
- 2024-04-16-TIL
- 2024-04-15-TIL
- 2024-03-20-TIL
- 2024-03-12-TIL
- 2024-02-28-TIL
- 2024-02-19-TIL
- 2024-02-14-TIL
- 2024-02-02-TIL
- 2024-02-01-TIL
- 2024-01-31-TIL
- 2024-01-20-TIL
- 2024-01-19-TIL
- 2024-01-18-TIL
- 2024-01-11-TIL
- 2024-01-10-TIL
- 2024-01-09-TIL
- 2024-01-08-TIL
- 2024-01-05-TIL
- 2024-01-04-TIL
- 2024-01-03-TIL
- 2024-01-02-TIL
- 2023-12-29-TIL
- 2023-12-21-TIL
- 2023-12-20-TIL
- 2023-12-18-TIL
- 2023-12-15-TIL
- 2023-12-12-TIL
- 2023-12-11-TIL
- 2023-12-09-TIL
- 2023-12-07-TIL
- 2023-12-05-TIL
- 2023-11-30-TIL
- 2023-11-24-TIL
- 2023-11-23-TIL
- 2023-11-20-TIL
- 2023-11-17-TIL
- 2023-11-16-TIL
- 2023-11-15-TIL
- 2023-11-09-TIL
- 2023-11-08-TIL
- 2023-11-07-TIL
- 2023-11-06-TIL
- 2023-10-31-TIL
- 2023-10-30-TIL
- 2023-10-24-TIL
- 2023-10-23-TIL
- 2023-10-19-TIL
- 2023-10-18-TIL
- 2023-10-17-TIL
- 2023-10-16-TIL
- 2023-10-13-TIL
- 2023-10-10-TIL
- 2023-10-04-TIL
- 2023-09-21-TIL
- 2023-09-18-TIL
- 2023-09-15-TIL
- 2023-09-14-TIL
- 2023-09-07-TIL
- 2023-09-05-TIL
- 2023-09-04-TIL
- 2023-08-30-TIL
- 2023-08-22-TIL
- 2023-08-21-TIL
- 2023-08-17-TIL
- 2023-08-16-TIL
- 2023-08-11-TIL
- 2023-08-10-TIL
- 2023-08-09-TIL
- 2023-08-08-TIL
- 2023-08-07-TIL
- 2023-08-06-TIL
- 2023-08-04-TIL
- 2023-08-03-TIL
- 2023-07-31-TIL
- 2023-07-25-TIL
- 2023-07-24-TIL
- 2023-07-21-TIL
- 2023-07-20-TIL
- 2023-07-19-TIL
- 2023-07-18-TIL
- 2023-07-03-TIL
- 2023-07-02-TIL
- 2023-07-01-TIL
- 2023-06-28-TIL
- 2023-06-27-TIL
- 2023-06-26-TIL
- 2023-06-23-TIL
- 2023-06-22-TIL
- 2023-06-21-TIL
- 2023-06-17-TIL
- 2023-06-16-TIL
- 2023-06-15-TIL
- 2023-06-13-TIL
- 2023-06-12-TIL
- 2023-06-10-TIL
- 2023-06-07-TIL
- 2023-06-03-TIL
- 2023-05-30-TIL
- 2023-05-24-TIL
- 2023-05-22-TIL
- 2023-05-19-TIL
- 2023-05-16-TIL
- 2023-05-15-TIL
- 2023-05-12-TIL
- 2023-05-11-TIL
- 2023-05-08-TIL
- 2023-05-02-TIL
- 2023-04-28-TIL
- 2023-04-27-TIL
- 2023-04-26-TIL
- 2023-04-25-TIL
- 2023-04-24-TIL
- 2023-04-21-TIL
- 2023-04-20-TIL
- 2023-04-19-TIL
- 2023-04-17-TIL
- 2023-03-30-TIL
- 2023-03-29-TIL
- 2023-03-28-TIL
- 2023-03-27-TIL
- 2023-03-25-TIL
- 2023-03-22-TIL
- 2023-03-21-TIL
- 2023-03-20-TIL
- 2023-03-15-TIL
- 2023-03-12-TIL
- 2023-03-11-TIL
- 2023-03-10-TIL
- 2023-03-07-TIL
- 2023-03-03-TIL
- 2023-02-27-TIL
- 2023-02-25-TIL
- 2023-02-24-TIL
- 2023-02-23-TIL
- 2023-02-22-TIL
- 2023-02-20-TIL
- 2023-02-18-TIL
- 2023-02-17-TIL
- 2023-02-16-TIL
- 2023-02-15-TIL
- 2023-02-14-TIL
- 2023-02-13-TIL
- 2023-02-12-TIL
- 2023-02-11-TIL
- 2023-02-09-TIL
- 2023-02-08-TIL
- 2023-02-07-TIL
- 2023-02-06-TIL
- 2023-02-04-TIL
- 2023-02-03-TIL
- 2023-02-01-TIL
- 2023-01-27-TIL
- 2023-01-26-TIL
- 2023-01-18-TIL
- 2023-01-17-TIL
- 2023-01-16-TIL
- 2023-01-15-TIL
- 2023-01-13-TIL
- 2023-01-12-TIL
- 2023-01-11-TIL
- 2023-01-10-TIL
- 2023-01-09-TIL
- 2023-01-05-TIL
- 2022-12-26-TIL
- 2022-12-24-TIL
- 2022-12-21-TIL
- 2022-12-19-TIL
- 2022-12-17-TIL
- 2022-12-15-TIL
- 2022-12-13-TIL
- 2022-12-12-TIL
- 2022-12-10-TIL
- 2022-12-06-TIL
- 2022-12-05-TIL
- 2022-12-01-TIL
- 2022-11-28-TIL
- 2022-11-26-TIL
- 2022-11-22-TIL
- 2022-11-17-TIL
- 2022-11-16-TIL
- 2022-11-12-TIL
- 2022-11-09-TIL
- 2022-11-08-TIL
- 2022-11-07-TIL
- 2022-11-05-TIL
- 2022-11-03-TIL
- 2022-11-02-TIL
- 2022-10-31-TIL
- 2022-10-28-TIL
- 2022-10-27-TIL
- 2022-10-25-TIL
- 2022-10-24-TIL
- 2022-10-19-TIL
- 2022-10-17-TIL
- 2022-10-15-TIL
- 2022-10-14-TIL
- 2022-10-11-TIL
- 2022-10-10-TIL
- 2022-10-07-TIL
- 2022-10-06-TIL
- 2022-10-05-TIL
- 2022-10-04-TIL
- 2022-09-25-TIL
- 2022-09-21-TIL
- 2022-09-15-TIL
- 2022-09-13-TIL
- 2022-09-05-TIL
- 2022-08-29-TIL
- 2022-08-26-TIL
- 2022-08-25-TIL
- 2022-08-24-TIL
- 2022-08-23-TIL
- 2022-08-18-TIL
- 2022-08-11-TIL
- 2022-08-09-TIL
- 2022-08-06-TIL
- 2022-07-19-TIL
- 2022-07-18-TIL
- 2022-07-15-TIL
- 2022-07-14-TIL
- 2022-07-13-TIL
- 2022-07-12-TIL
- 2022-07-08-TIL
- 2022-07-02-TIL
- 2022-06-29-TIL
- 2022-06-28-TIL
- 2022-06-27-TIL
- 2022-05-24-TIL
- 2022-05-23-TIL
- 2022-05-20-TIL
- 2022-05-18-TIL
- 2022-05-17-TIL
- 2022-05-13-TIL
- 2022-05-11-TIL
- 2022-05-10-TIL
- 2022-05-09-TIL
- 2022-05-03-TIL
- 2022-04-27-TIL
- 2022-04-25-TIL
- 2022-04-22-TIL
- 2022-04-21-TIL
- 2022-04-20-TIL
- 2022-04-18-TIL
- 2022-04-16-TIL
- 2022-04-15-TIL
- 2022-04-13-TIL
- 2022-04-12-TIL
- 2022-04-11-TIL
- 2022-04-09-TIL
- 2022-04-07-TIL
- 2022-04-04-TIL
- 2022-03-30-TIL
- 2022-03-29-TIL
- 2022-03-25-TIL
- 2022-03-24-TIL
- 2022-03-23-TIL
- 2022-03-22-TIL
- 2022-03-21-TIL
- 2022-03-18-TIL
- 2022-03-17-TIL
- 2022-03-15-TIL
- 2022-03-14-TIL
- 2022-03-13-TIL
- 2022-03-12-TIL
- 2022-03-11-TIL
- 2022-03-10-TIL
- 2022-03-08-TIL
- 2022-03-07-TIL
- 2022-03-06-TIL
- 2022-03-03-TIL
- 2022-03-02-TIL
- 2022-03-01-TIL
- 2022-02-27-TIL
- 2022-02-26-TIL
- 2022-02-24-TIL
- 2022-02-23-TIL
- 2022-02-22-TIL
- 2022-02-21-TIL
- 2022-02-19-TIL
- 2022-02-18-TIL
- 2022-02-17-TIL
- 2022-02-16-TIL
- 2022-02-15-TIL
- 2022-02-14-TIL
- 2022-02-13-TIL
- 2022-02-11-TIL
- 2022-02-10-TIL
- 2022-02-08-TIL
- 2022-02-04-TIL
- 2022-02-03-TIL
- 2022-02-02-TIL
- 2022-01-30-TIL
- 2022-01-26-TIL
- 2022-01-25-TIL
- 2022-01-24-TIL
- 2022-01-21-TIL
- 2022-01-20-TIL
- 2022-01-19-TIL
- 2022-01-18-TIL
- 2022-01-17-TIL
- 2022-01-14-TIL
- 2022-01-13-TIL
- 2022-01-04-TIL
- 2021-11-30-TIL
- 2021-11-27-TIL
- 2021-11-23-TIL
- 2021-11-22-TIL
- 2021-11-21-TIL
- 2021-11-18-TIL
- 2021-11-17-TIL
- 2021-11-16-TIL
- 2021-11-10-TIL
- 2021-11-09-TIL
- 2021-11-08-TIL
- 2021-11-07-TIL
- 2021-11-06-TIL
- 2021-11-02-TIL
- 2021-10-30-TIL
- 2021-10-27-TIL
- 2021-10-26-TIL
- 2021-10-25-TIL
- 2021-10-23-TIL
- 2021-10-19-TIL
- 2021-10-18-TIL
- 2021-10-17-TIL
- 2021-10-16-TIL
- 2021-10-07-TIL
- 2021-10-01-TIL
- 2021-09-16-TIL
- 2021-09-15-TIL
- 2021-09-14-TIL
- 2021-09-13-TIL
- 2021-09-10-TIL
- 2021-09-04-TIL
- 2021-09-03-TIL
- 2021-09-02-TIL
- 2021-09-01-TIL
- 2021-08-31-TIL
- 2021-08-30-TIL
- Spring Boot에서 외부 API 연동을 설계할 때 보는 것
- 2021-08-26-TIL
- 2021-08-25-TIL
- 2021-08-24-TIL
- 2021-08-23-TIL
- 2021-08-22-TIL
- 2021-08-21-TIL
- 2021-08-20-TIL
- 2021-08-19-TIL
- 2021-06-25-TIL
- 2021-06-10-TIL
- 2021-06-04-TIL
- 2021-06-03-TIL
- 2021-06-02-TIL
- 2021-05-31-TIL
- 2021-05-28-TIL
- 2021-05-26-TIL
- 2021-05-25-TIL
- 2021-05-24-TIL
- 2021-05-23-TIL
- 2021-05-19-TIL
- 2021-05-18-TIL
- 2021-05-17-TIL
- 2021-05-16-TIL
- 2021-05-15-TIL
- 2021-05-14-TIL
- 2021-05-27-TIL
- 2021-05-12-TIL
- 2021-05-11-TIL
- 2021-04-29-TIL
- 2021-04-27-TIL
- 2021-04-26-TIL
- 2021-04-23-TIL
- 2021-04-21-TIL
- 배열을 데이터베이스에 저장할 때 무엇을 먼저 판단해야 하는가
- 2021-04-19-TIL
- 2021-04-16-TIL
- 2021-04-15-TIL
- 2021-04-13-TIL
- 2021-04-12-TIL
- 2021-04-10-TIL
- 2021-04-09-TIL
- 2021-04-07-TIL
- 2021-04-06-TIL
- 2021-04-02-TIL
- 2021-03-31-TIL
- 2021-03-29-TIL
- 2021-03-27-TIL
- 2021-03-26-TIL
- 2021-03-25-TIL
- 2021-03-24-TIL
- 2021-03-23-TIL
- 2021-03-22-TIL
- 2021-03-19-TIL
- 2021-03-18-TIL
- 2021-03-17-TIL
- 2021-03-16-TIL
- 2021-03-15-TIL
- 2021-03-13-TIL
- 2021-03-12-TIL
- 2021-03-11-TIL
- 2021-03-10-TIL
- 2021-03-09-TIL
- 2021-03-08-TIL
- 2021-03-07-TIL
- 2021-03-05-TIL
- 2021-03-04-TIL
- 2021-03-03-TIL
- 2021-03-02-TIL
- 개발자의 학습유형
- 코드스쿼드 CS10 회고
- 2021-02-28-TIL
- 2021-02-27-TIL
- 2021-02-26-TIL
- 2021-02-25-TIL
- 2021-02-24-TIL
- 2021-02-23-TIL
- 2021-02-22-TIL
- 2021-02-21-TIL
- 2021-02-19-TIL
- 2021-02-18-TIL
- 2021-02-17-TIL
- 2021-02-16-TIL
- 2021-02-15-TIL
- 2021-02-14-TIL
- 2021-02-11-TIL
- 2021-02-10-TIL
- 2021-02-09-TIL
- 2021-02-08-TIL
- 2021-02-05-TIL
- 2021-02-04-TIL
- 2021-02-03-TIL
- 2021-02-02-TIL
- 2021-02-01-TIL
- 2021-01-31-TIL
- 2021-01-29-TIL
- 2021-01-28-TIL
- 2021-01-27-TIL
- 2021-01-26-TIL
- 2021-01-25-TIL
- 2021-01-22-TIL
- 2021-01-21-TIL
- 2021-01-20-TIL
- 2021-01-19-TIL
- 2021-01-18-TIL
- 2021-01-17-TIL
- 2021-01-15-TIL
- SOLID 원칙을 실무적으로 어떻게 이해해야 하는가
- Java에서 this와 super는 언제 어떻게 써야 하는가
- 객체, 클래스, 인스턴스는 어떻게 구분해야 하는가
- 상속과 다형성은 어떻게 연결되는가
- Java에서 객체 비교를 어떻게 해야 하는가
- 2021-01-14-TIL
- 2021-01-13-TIL
- 빅 오(Big-O)와 시간복잡도를 어떻게 봐야 하는가
- 단일, 이중, 환형 연결 리스트는 어떻게 다른가
- LinkedList로 Queue를 구현할 때 핵심은 무엇인가
- LinkedList로 Deque를 구현할 때 알아야 할 것
- 배열과 연결 리스트는 언제 차이가 커지는가
- Java에서 배열과 리스트를 어떻게 구분해야 하는가
- 2021-01-12-TIL
- 2021-01-11-TIL
- 2021-01-10-TIL
- 2021-01-08-TIL
- 2020-12-20-TIL
- 2020-12-19-TIL
- 2020-12-09-TIL
- 2020-12-03-TIL
- 2020-12-01-TIL
- 2020-11-30-TIL
- 2020-11-28-TIL
- 2020-11-27-TIL
- 2020-11-26-TIL
- 2020-11-25-TIL
- 2020-11-24-TIL
- 2020-11-21-TIL
- 2020-11-20-TIL
- 2020-11-19-TIL
- 2020-11-17-TIL
- 2020-11-06-TIL
- Apache POI SXSSF vs XSSF vs HSSF
- Git
- Maven Dependencies를 가져오지 못할 때 어디부터 봐야 하는가
- Git의 기본을 어떻게 이해해야 하는가
- C++의 vector를 어떻게 이해해야 하는가
- programmers. SELECT
- BOJ 16928. 뱀과 사다리 게임
- BOJ 14502. 연구소
- SWEA 2001. 파리 퇴치
- SWEA 1284. 수도 요금 경쟁
- BOJ 2529. 부등호
- SWEA 1859. 백만 장자 프로젝트
- SWEA 1204. 최빈수 구하기
- 순열(Permutation)
- BOJ 1697. 숨바꼭질
- BOJ 13913. 숨바꼭질 4
- BOJ 17779. 게리맨더링 2
- BOJ 14889. 스타트와 링크
- BOJ 14501. 퇴사
- programmers. 직사각형 만들기
- BOJ 9093. 단어 뒤집기
- BOJ 17413. 단어 뒤집기 2
- BOJ 10799. 쇠막대기
- 동적 계획법(Dynamic Programming)
- BOJ 15649~52. N과 M (1)~(4)
- BOJ 9095. 1, 2, 3 더하기
- BOJ 6064. 카잉 달력
- BOJ 1759. 암호 만들기
- BOJ 1748. 수 이어 쓰기 1
- 재귀(Recursion)
- BOJ 14500. 테트로미노
- BOJ 2667. 단지번호붙이기
- 그래프(Graph)
- 깊이 우선 탐색(DFS)
- 연결 요소(Connected Component)
- 너비 우선 탐색(BFS)
- BOJ 1476. 날짜 계산
- BOJ 1107. 리모컨
- 2021-01-06-TIL
- 2021-01-05-TIL
- 2021-01-04-TIL