글 상태
Published
Readable normal-state content.
- Datadog 대안 10선을 전부 꽂아 봤다: 셋은 떴고 넷은 키만 남았고 둘은 축이 달랐다
- 빈 화면의 원인은 매번 달랐다: APM 여섯 개를 띄우며 막힌 자리들
- 빅테크는 APM을 사지 않고 만들었다: Dapper에서 OpenTelemetry 졸업까지
- APM 도구 여섯 개를 직접 붙여 봤다: 에이전트 비용은 날마다 9%와 19% 사이였다
- APM 용어 정리: Observability, Telemetry부터 Span, Exemplar까지
- APM 도구 비교: Datadog부터 Pinpoint, OpenTelemetry까지
- 2026-10-05-TIL: 기준을 어디에 둘 것인가
- Valkey - Redis 라이선스 변경에서 갈라진 포크와 그 뒤의 2년
- 2026-10-02-TIL: 여러 세션에 일을 맡기는 법, 그리고 결정 모델
- 섬유 공장에 API를 붙이면: 제조를 클라우드처럼 쓰는 구상
- 모두의 창업 로컬트랙 지원기: 1라운드 통과와 2차 요건검토 준비
- 2026-09-28-TIL: 통과하는 테스트가 무엇을 잡는가
- ParityPay로 검증하는 결제 정합성 12 - 실험 41종이 못 밟는 경로를 모델 검사가 5단계 만에 찾았다
- ParityPay로 검증하는 결제 정합성 11 - 지터는 언제 값을 하는가: 봉우리를 만들어야 보이는 것
- ParityPay로 검증하는 결제 정합성 10 - 락 lease가 트랜잭션보다 먼저 끝나면 정말 정합성이 깨지는가: SETNX 락, Watchdog, fencing token, 그리고 락 없는 구조의 실측
- 무너지는 Spring 서버 1 - CPU는 놀고 있는데 API가 느리다: 업스트림 하나가 무관한 엔드포인트를 죽이는 과정을 thread dump 세 장으로 읽기
- ParityPay로 검증하는 결제 정합성 9 - 느린 기관 앞에서 결제 서버를 지키기: 타임아웃, 재시도, 차단기, 리미터, 벌크헤드가 각각 무엇을 막는가
- ParityPay로 검증하는 결제 정합성 8 - Kafka에서 중복·유실·순서 역전을 직접 만들어 보기: 멱등 소비자와 Outbox가 막는 것과 못 막는 것
- ParityPay로 검증하는 결제 정합성 7 - 애플리케이션 코드를 믿지 않는 원장: 이중부기를 계정 체계, DB 제약, 속성 테스트로 강제하기
- ParityPay로 검증하는 결제 정합성 6 - 대사: "기관에 물어보지 못했다"와 "기관에 기록이 없다"는 다른 상태다
- CDC의 원리와 한계 - 로그 기반 변경 포착, 초기 스냅샷, 스키마 변경
- Martin Kleppmann 「How to do distributed locking」 리뷰 — 효율을 위한 락과 정확성을 위한 락, fencing token이 막는 것과 못 막는 것, 그리고 lease의 시계는 누구 것인가
- ProofU 초기 설계 - 근거를 추적하는 지원 문서 시스템과 기술 선택의 이유
- ParityPay로 검증하는 결제 정합성 5 - DB 커밋과 Kafka 발행 사이: Transactional Outbox와 at-least-once 소비자
- 2026-09-18-TIL: 아웃박스는 한 번 이상 배달한다
- Airbnb 「Avoiding double payments in a distributed payments system」 리뷰 — 네트워크와 DB 트랜잭션을 섞지 않는 세 단계, 재시도 가능 여부의 분류, 그리고 복제본을 읽으면 이중 결제가 나는 이유
- ParityPay로 검증하는 결제 정합성 4 - 실험 27종이 찾아낸 결함 12건: 문서와 코드를 읽어서 나온 것은 하나도 없었다
- ParityPay로 검증하는 결제 정합성 3 - 외부 승인 응답이 사라졌을 때: 타임아웃은 실패가 아니다
- ParityPay로 검증하는 결제 정합성 2 - 잠금을 필요 이상으로 오래 쥐고 있었다: 추론을 측정으로 바꾼 기록
- TLS 핸드셰이크의 비용 - 세션 재개와 0-RTT의 대가
- 2026-09-11-TIL: 잠금 전략보다 잠금을 쥐는 시간
- ParityPay로 검증하는 결제 정합성 1 - 장애가 나도 지켜야 할 금융 불변조건 여섯 가지
- 카카오뱅크 「하루 N억 건의 알림 시스템 구축기 (1)」 리뷰 — P99의 80%가 대기였다는 진단, Age 기반 Work-Stealing, 그리고 큐를 나누는 순간 순서를 잃는 문제
- NIO와 이벤트 루프 - 셀렉터, 다이렉트 버퍼, Netty가 대신 해주는 일
- ParityPay 초기 설계 - 돈의 규칙은 PostgreSQL에 두고, 나머지 기술은 그 규칙을 돕는 자리에 두기
- CodeDrill 초기 설계 - 판정을 신뢰 경계 밖으로 떼어 낸 온라인 저지와 그 스택을 고른 이유
- LINE 「초당 100만 건, LINE 앱에 Apache Kafka 종단 간 암호화 적용기」 리뷰 — 인터셉터와 시리얼라이저만으로 브로커에 평문을 남기지 않는 법
- 타임아웃, 재시도, 백오프 - 증폭과 지터, 그리고 데드라인 전파
- TMC 25 리뷰 - '주식모으기' 서비스로 살펴보는 대용량 트래픽 처리 노하우: 200만 주문을 3,000건으로 접는 풀링 주문과 그 대가
- 2026-08-30-TIL: 새 저장소 다섯 개로 시작한 한 주와 동시 정답 제출
- 카카오 「MySQL 인증 플러그인 caching_sha2_password에 대한 이해」 리뷰 — 비밀번호 해시가 바뀌는 것보다 '평문이 서버까지 가야 한다'는 점이 전환의 진짜 비용
- 커넥션과 세션 - 커넥션 풀이 실제로 아끼는 것
- LINE 「LINE에서 Kafka를 사용하는 방법 - 1편」 리뷰 — 초당 4GB 클러스터가 바이트가 아니라 요청 수를 제한하는 이유, 그리고 2,000틱짜리 파이프라인에서 같은 것을 본 기록
- SysDrill 초기 설계 - 실제 인프라 없이 장애 대응을 훈련시키는 백엔드의 첫 구조
- HTTP/1.1, 2, 3 - HOL 블로킹은 어디로 옮겨갔는가
- 2026-08-23-TIL: 파일로 주고받는 상태와 A2A 프로토콜
- 클래스 로딩과 기동 시간 - 리플렉션의 비용과 AOT가 바꾸는 것
- 쿠팡 「대용량 트래픽 처리를 위한 쿠팡의 백엔드 전략」 리뷰 — 캐시 두 겹과 '분 단위 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과 등록 단계
- 파티셔닝과 샤딩 - 기준 선택, 로컬과 글로벌 인덱스, 재분배 비용
- 2026-08-09-TIL: rollback-only 버그로 다시 본 트랜잭션 전파, 그리고 Muse Code
- 순서와 격리는 같은 자원을 반대로 당긴다 - 핫 키가 워커 하나를 넘는 순간 세 설계가 갈라지는 지점
- 무신사 「Kafka와 Strimzi를 이용하여 6개의 도메인을 하나의 도메인으로 합쳐보았습니다」 리뷰 — 배치 없이 CDC와 Kafka Streams로 옮긴 결정, 그리고 통합 모델이 원본과 같다는 것을 누가 확인하는가
- API 버저닝과 호환성 - 스키마 진화 규칙
- 네이버 D2 「@RequestCache: HTTP 요청 범위 캐싱을 위한 커스텀 애너테이션 개발기」 리뷰 — 캐시의 수명을 '요청 하나'로 맞추면 TTL 고민이 사라진다, 그리고 @RequestScope가 안 되는 이유
- 혼잡 제어와 지연 - BDP, 버퍼블로트, 처리량과 지연의 교환
- 컬리 「컬리의 입고 시스템이 외부 인입 데이터를 안전하게 동기화하는 방법」 리뷰 — 145회 재시도가 맞는 도메인과 재시도를 금지한 도메인, 그리고 발행부와 수신부가 각자 책임지는 구조
- 카카오 「잃어버린 리포트를 찾아서: 카카오 메시징 시스템의 경쟁 조건 문제와 안티 패턴 제거 과정」 리뷰 — 벤더가 8ms 만에 리포트를 보냈고, 우리는 101ms짜리 트랜잭션 안에 있었다
- 2026-07-26-TIL: 진짜 Spring 내부 읽기와 BeanFactoryPostProcessor 등록 순서
- 리액티브와 백프레셔 - WebFlux가 해결하는 것과 옮기는 것
- 직접 만든 마이크로벤치마크는 얼마나 틀리는가 - 결함 넷을 하나씩 재봤다
- iterview 초기 설계 - 이력서 기반 면접 훈련 플랫폼의 구조와 기술 선택
- 네이버 D2 「일 3,000만 건의 네이버페이 주문 메시지를 처리하는 Kafka 시스템의 무중단 전환 사례」 리뷰 — 두 벌로 발행해 대조한 검증기와, 발행 제어 키를 파티션 키와 같게 둔 이유
- 카카오 「메시징 서버의 스트레스 테스트 노하우와 AI가 덜어 준 부분」 리뷰 — 지표를 네 층으로 내려가 읽는 법, 그리고 LLM에게 맡긴 것과 맡기지 못한 것
- JIT 컴파일 - 계층 컴파일, 인라이닝, 역최적화
- CPU 프로파일러가 1순위로 지목한 코드를 고쳤더니 아무 일도 없었다
- 카카오페이 「MSA 환경에서 네트워크 예외를 잘 다루는 방법」 리뷰 — Unknown을 타입으로 만든 글과, Unknown을 상태로 저장한 프로젝트가 갈리는 지점
- 분산 트랜잭션 - 2PC와 Saga, 보상 트랜잭션이 실패하는 방식
- LINE 「도메인에 의존하지 않는 채팅 플랫폼은 어떻게 만들었을까?」 리뷰 — 사용자를 모르는 채팅 플랫폼, 웹으로 만든 클라이언트, SOFT STOP으로 갈아 끼우는 챗봇 시나리오
- market.ticks 파티션 × 컨슈머 격자 — 키가 같아도 순서가 깨진 이유, 크래시 하나가 시세 전체를 멈춘 이유, 파티션 이웃이 인질이 되는 순간
- SLASH 24 리뷰 - SSE 이벤트 푸쉬로 불필요한 Polling 제거하기: 3초 폴링을 이벤트로 바꾸고 브로커를 세 번 갈아탄 기록
- WAL과 체크포인트 - 커밋은 언제 디스크에 닿는가
- 2026-07-09-TIL: spring-lite 시작과 조건부 빈 평가 시점
- 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 - 프로젝트 구조와 설계 범위
- 2026-07-01-TIL: monticker 핫 패스와 풀 크기, 그리고 Claude Sonnet 5
- 시크릿 관리 - 로테이션과 주입 경로
- Circuit Breaker로 외부 API 장애 격리 — Resilience4j + KIS·Yahoo 폴백 체인
- OpenTelemetry + Jaeger로 분산 추적 — 시세 파이프라인 지연 측정
- SLASH 24 리뷰 - 리플레이 검증으로 새로운 금융 시스템 안전하게 도입하기: 운영 트래픽을 그대로 재생해 차세대 원장을 검증하다
- 가상 스레드를 켜서 37배 느려진 엔드포인트 - 핀닝과 상한 없는 admission을 재다
- 트레이스 샘플링 - 헤드와 테일 샘플링의 선택 기준
- TCP 연결 수립과 큐 - SYN 백로그, accept 큐, TIME_WAIT
- 야놀자 「RESTful API validation 자동화 하기」 리뷰 — 인터페이스 하나에서 검증·문서·타입을 뽑는 이유, 그리고 자동화가 없으면 누락이 필연이라는 문장
- 2026-06-19-TIL: monticker 시작, 그리고 IMMUTABLE이 아닌 인덱스 식
- SLASH 23 리뷰 - Kafka 이중화로 다양한 장애 상황 완벽 대처하기: Active-Standby를 믿지 않고 Active-Active로 간 이유와 IDC 장애 당일의 순서
- 네이버 D2 「스마트스토어센터 Oracle에서 MySQL로의 무중단 전환기」 리뷰 — 두 DB에 동시에 쓰되 한쪽 실패는 무시하고, 읽기 트래픽을 복제해 성능을 재고, 6개월간 불일치를 0으로 만든 과정
- Security 필터 체인 - 인증과 인가는 실제로 어디에 꽂히는가
- G1과 ZGC가 p99에 남기는 차이 - 300배 짧은 pause가 꼬리의 11%를 가져갔다
- GC 알고리즘 비교 - G1, ZGC, Shenandoah가 각자 무엇을 포기하는가
- 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단계 사이클, 컴포지트 분할 정복, 병렬 실행 비교 검증
- 락의 종류와 대기 - row, gap, next-key, intention과 데드락 탐지
- SLASH 22 리뷰 - 토스증권 실시간 시세 적용기: 런칭 직전에 폴링을 WebSocket으로 바꾸고, 한 달 만에 200만 계좌를 받아 낸 기록
- 네이버 D2 「테스트는 어떻게 좋은 코드를 만드는가(feat. 험블 객체 패턴)」 리뷰 — 목이 많아지는 것은 테스트의 문제가 아니라 설계의 신호
- 토스증권 Kafka 데이터센터 이중화 리뷰: 미러링보다 오프셋이 어렵고, 재난과 작업의 기준이 다르다
- SLASH 24 리뷰 - 대규모 사용자 기반의 마이데이터 서비스 안정적으로 운영하기: 클러스터 단위 서킷 코디네이터, 웹소켓 얼리 리턴, 7일 배치 분산
- 이벤트 소싱과 CQRS - 언제 비용이 이익을 넘는가
- SLASH 24 리뷰 - Next 코어뱅킹, MSA와 MySQL로 여는 평생 무료 환전 시대: Oracle을 버린 이유, 30ms 환전, 자정에도 멈추지 않는 잔액 대사
- 토스증권의 CQRS·검증기와 ParityPay의 스냅샷·대사: 읽기 모델을 분리하면 반드시 따라오는 세 가지 장치
- CORS와 CSRF - 브라우저가 막는 것과 서버가 막아야 하는 것
- 우아한형제들 「Spring Batch와 Querydsl」 리뷰 — offset을 버린 Reader가 21분을 4분으로 만든 이유, 그리고 그 Reader가 답하지 않는 두 가지
- 토스증권 공개 자료로 읽는 시세·주문 아키텍처: 무엇을 잃어도 되는지 먼저 정한다
- RED와 USE - 어디에 무엇을 붙이는가
- epoll - select, poll과의 차이와 edge, level 트리거
- 토스증권 Server Developer (Product) 공고 분석: 제품 개발자에게 원장 수준의 정합성을 요구하는 이유
- Spring Batch의 구조 - 청크, 파티셔닝, 재시작과 메타데이터
- 뱅크샐러드 「게임을 만들 때 데이터 정합성을 유지하는 법 (feat. 낙관적 락)」 리뷰 — 같은 WHERE version 조건인데, 충돌한 요청을 어떻게 하는가에서 갈리는 두 설계
- SLASH 23 리뷰 - 프로파일러로 시스템 성능 향상시키기: Pinpoint, 힙 덤프, jemalloc, async-profiler, strace, 그리고 커널 버전
- 가상 스레드의 내부 - 스케줄러와 캐리어, 핀닝, 그리고 쓰지 않아야 할 때
- LINE 「기획서 없이 내재화하기: 검증 로직으로 동일함을 증명하다」 리뷰 — 블랙박스는 입력과 출력만 정의하면 통계로 같음을 증명할 수 있다
- SLASH 23 리뷰 - 연결되면 비로소 보이는 것들: Pinpoint 코루틴 플러그인을 만들기 위해 코루틴 바이트코드를 읽다
- Redis 단일 스레드가 멈추는 순간 - SCAN이 3.7배 오래 걸리면서 아무도 막지 않고, 120ms 멈춤이 p99에 안 잡히는 이유
- 전달 보장 - at-most-once, at-least-once, exactly-once가 각각 무엇을 약속하는가
- 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에 들어가는가
- 실행 계획을 읽는 법 - 연산자, 비용 모델, 카디널리티 추정이 틀어지는 지점
- 주니어 백엔드 개발자가 실무에서 자주 부딪히는 질문들
- GitHub 블로그를 에이전틱 AI와 함께 운영하기
- 2026-04-08-TIL: 어쩐지 좋은일이 생길것 같은 저녁
- SLASH 23 리뷰 - 토스뱅크의 모던 FEP: 전문을 Kotlin 어노테이션으로, 리플렉션 코덱, Netty 논블로킹, Redis 폴링으로 액티브-액티브
- REST, gRPC, GraphQL - 선택 기준과 각자가 내는 비용
- SLASH 23 리뷰 - 은행 최초 코어뱅킹 MSA 전환기 (feat. 지금 이자 받기): 80회 DML을 50회로, MCI 대비 170배, 빅뱅 없는 전환
- 네이버 D2 「CDC 복제 이후 오라클이 느려졌다? child cursor 폭증이 만든 예상치 못한 문제」 리뷰 — 같은 SQL인데 바인딩 타입이 다르면 Oracle은 다른 쿼리로 본다
- 비밀번호 저장 - bcrypt와 argon2의 파라미터를 정하는 기준
- 2026-03-29-TIL: 키워드를 모를 때 지식을 구조화하는 방법
- 캐시 스탬피드와 single flight - 200명 중 125명이 원본까지 갔고, 예외를 삼키자 실패가 가장 빠른 요청이 됐다
- RESP, Reactor, Command Registry로 보는 Redis 요청 처리 흐름
- redis-lite-java로 이해하는 Redis 아키텍처 개요
- MemoryDb, TTL, Hash 구조로 보는 Redis keyspace 설계
- MULTI, Pub/Sub, Lua로 보는 Redis 확장 기능과 구현 과정
- 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 - 11장 자주 쓰는 서버 구조와 설계 패턴
- 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 - 10장 모르면 답답해지는 네트워크 기초
- 2026-03-26-TIL: 블로그 리뉴얼
- 백분위 통계 - 평균이 거짓말하는 이유와 히스토그램의 집계 오류
- 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 - 9장 최소한 알고 있어야 할 서버 지식
- 2026-03-22-TIL: 기술 의사결정은 사람보다 구조를 설계해야 한다
- 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 - 8장 실무에서 꼭 필요한 보안 지식
- 카카오 「MySQL Ver. 8.0 New Feature: Instant DDL Algorithm에 대한 이해」 리뷰 — 컬럼을 0.01초에 추가하는 대가는 '읽을 때마다 버전을 대조하는 것'이다
- 페이지 캐시와 파일 IO - buffered와 direct, fsync가 실제로 하는 일
- 2026-03-19-TIL: 간만에 서울나들이
- 프록시의 한계 - self-invocation, final, JDK와 CGLIB의 선택
- SLASH 22 리뷰 - 왜 은행은 무한스크롤이 안되나요: 채널계가 거래내역을 직접 갖기 위한 여덟 가지 방어
- 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 - 7장 I/O 병목, 어떻게 해결하지
- 동시성 도구의 비용 - synchronized, ReentrantLock, CAS가 경쟁에서 갈리는 지점
- Postgres 커넥션 하나의 비용 - 풀을 키우면 대기가 사라지는 게 아니라 볼 수 없는 곳으로 옮겨간다
- 컨슈머 그룹과 리밸런스 - eager, cooperative, static membership
- 2026-02-27-TIL: Codex 사용 후기
- Netty
- 합의 알고리즘 - Raft를 상태 기계로 읽기
- SLASH 22 리뷰 - 지속 성장 가능한 코드를 만들어가는 방법: import 문이 보내는 신호로 패키지·레이어·모듈을 다시 보기
- 2026-02-24-TIL: AI 활용에 대하여
- B+Tree 인덱스의 내부 - 노드 분할, 클러스터드와 논클러스터드, 커버링이 아끼는 것
- 멱등한 API 설계 - HTTP 메서드의 의미와 재시도 계약
- SLASH 22 리뷰 - 토스뱅크의 완전히 새로운 대출 시스템: Flyway + Hibernate validate, 대외기관 파이프라인, 연동 서킷과 대기열
- 인덱스가 선택되지 않는 순간 - 컬럼에 캐스팅 하나가 3,000배, 그리고 추정이 31.7배 틀려도 계획이 안 바뀌는 경우
- 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 - 6장 동시성, 데이터가 꼬이기 전에 잡아야 한다
- 대용량 파일 업로드를 위한 Presigned URL
- JWT의 구조와 검증 - 서명 알고리즘, 만료, 그리고 폐기의 한계
- 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 - 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 두 클러스터
- 컨텍스트 스위칭과 스케줄링 - CFS, cgroup CPU 제한, 그리고 스로틀링
- SLASH 21 리뷰 - 테스트 커버리지 100%: 두 달의 비용, 1600개 테스트를 6초로, 그리고 100%여도 남는 버그
- 트랜잭션 전파 7종 - 각 옵션이 커넥션과 롤백에 남기는 결과
- 키 생성 병목을 추적해 구조를 바꾼 기록: Part 3 - 채번을 INSERT 시점으로 옮기고 범위 단위로 받기
- 격리 수준의 이상 현상을 직접 만들기 - 같은 REPEATABLE READ에서 PostgreSQL은 중단시키고 MySQL은 조용히 덮어썼다
- 자바 메모리 모델 - happens-before, volatile, 그리고 final의 안전 공개
- monticker 초기 설계: 이벤트를 중심에 둔 첫 구조와 기술 선택
- SLASH 21 리뷰 - MySQL HA & DR Topology: MMM, 대칭 DR 구성, 바이너리 로그 필터, super_read_only 안전장치
- Kafka의 저장 구조 - 세그먼트와 오프셋, 페이지 캐시와 zero-copy
- 키 생성 병목을 추적해 구조를 바꾼 기록: Part 2 - SELECT 안에서 UPDATE가 일어나고 있었다
- SLASH 21 리뷰 - 결제 시스템의 SDK와 API 디자인: 4단계를 2단계로, DELETE·PUT을 버린 이유, 한글 enum
- 일관성 모델 - 선형화, 순차, 최종 일관성, 그리고 CAP를 설정값의 언어로
- 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 - 4장 외부 연동이 문제일 때 살펴봐야 할 것들
- SLASH 21 리뷰 - SRE 사례 소개: Redis 리밸런싱 ASK 에러, Memcached 재분배 실패, Prometheus가 바꾼 GC 패턴
- 격리 수준과 이상 현상 - 표준이 정의한 것과 MySQL·PostgreSQL이 실제로 하는 것
- 키 생성 병목을 추적해 구조를 바꾼 기록: Part 1 - 2분짜리 계약 생성과 SELECT 한 줄
- 대량 배치 안정성을 높이기 위한 구조 개선: Part 5 - 배타적 락과 조건부 해제로 순서를 보장하기
- 대량 배치 안정성을 높이기 위한 구조 개선: Part 4 - 분산 락이 있어도 레이스가 발생한 이유
- 대량 배치 안정성을 높이기 위한 구조 개선: Part 3 - 청크 분할과 병렬 처리로 등록 파이프라인 재설계하기
- 대량 배치 안정성을 높이기 위한 구조 개선: Part 2 - 전체 삭제 후 전체 등록 구조의 위험성
- 대량 배치 안정성을 높이기 위한 구조 개선: Part 1 - 시스템을 압박하기 시작한 배치
- 카카오 「MySQL ALTER DDL 수행 방식에 대한 이해」 리뷰 — Copy·In-Place·Instant는 '무엇을 복사하느냐'보다 '언제 Exclusive 메타 락을 잡느냐'로 구분된다
- 실행하지 않은 재설계: 권리이관 시스템의 요청 모델을 3계층으로 나누자는 제안
- 위반 480건 위에 아키텍처 규칙을 도입하기: 신규 코드는 100% 강제, 레거시는 점진 정리
- 대량 배치 안정성을 높이기 위한 구조 개선: Part 0 - 왜 이 배치는 가끔 터질까?
- Creator-Producer 매핑 장애 대응: DML 대신 애플리케이션 흐름으로 복구한 이유와 확정하지 못한 원인
- 네이버 D2 「6개월 만에 연간 수십조를 처리하는 DB CDC 복제 도구 무중단/무장애 교체하기」 리뷰 — 복제·검증·복구를 셋으로 나누고, 옛 도구와 새 도구를 서로 모르게 같이 돌린 전환
- 2025-12-12-TIL: AI 시대에 대처하는 방법
- Heap Dump가 가리킨 곳은 데이터가 아니라 영속성 컨텍스트였다: Tasklet에서 Chunk로, XSSF에서 SXSSF로
- 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 - 3장 성능을 좌우하는 DB 설계와 쿼리
- refresh 이후에도 옛 access token이 통과하던 문제: TTL과 폐기는 다른 문제다
- Shadow Release로 조회를 옮기기: MyBatis 결과와 QueryDSL 결과를 나란히 비교하며 전환한 기록
- 2025-11-17-TIL
- 감사 로그 표준화와 ISMS 대응: MDC와 ELK로 누가, 언제, 무엇을 했는지 추적하기
- 2025-11-11-TIL
- Bulkhead Pattern
- 모든 도메인이 100% 정합성을 요구하지는 않는다: Post-Commit 이벤트와 재시도 3회 정책을 정한 기준
- 2025-11-05-TIL
- 2025-11-04-TIL
- 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 - 2장 느려진 서비스, 어디부터 봐야 할까
- 유통사가 늘 때마다 복사되던 File Observer 구현체 정리: 제네릭을 걷어낸 Base 클래스와 DB 기반 권리사 ID
- 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 - 1장 들어가며
- 카카오 「MySQL DATETIME, TIMESTAMP 데이터 타입에 대한 분석」 리뷰 — 바이트 단위 저장 구조부터 아직 안 고쳐진 Y2K38까지
- 엑셀로 처리하던 계약 갱신과 라이선스 변경을 Spring Batch와 Jenkins로 옮긴 기록
- 폴링 배치를 SQS 이벤트 파이프라인으로 바꾼 이유: 재시도, DLQ, 메시지 ID 멱등
- 같은 음원이 여러 유통사에서 들어올 때: 콘텐츠 유니피케이션 시스템을 운영하며 정리한 구조
- 정산이 진행되는 동안 기준 데이터 수정을 막는 방법: 상태 플래그와 AOP로 만든 경량 락
- Map 기반 입력을 DTO와 3단계 검증으로 바꾸기: Bean Validation, 매핑, 도메인 규칙
- 실전 데이터베이스 입문 복습: SQL을 적는 순서와 해석하는 순서
- 화면 단위 API를 도메인 책임 단위로 다시 나누기: 응답 1.5초에서 300ms까지
- 8천만 곡 규모 음원 데이터와 온프레미스에서 AWS로의 점진 전환: 참여자로 본 것
- 이력서 기반의 면접 준비 노트
- 카카오 「추가배포 없이 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()를 함께 오버라이드해야 하는 이유
- 2025-06-25-TIL
- Stateful vs Stateless
- Function Signature
- 2025-06-13-TIL
- WEB 3.0
- WEB 3.0 지갑
- What is NFT?
- 민주주의 = 탈중앙화라고 볼 수 있는가?
- 대용량 지분율 데이터 처리 성능 개선과 동시성 제어 전략
- 무거운 엑셀 다운로드 요청을 사전에 판별하는 방법
- 대용량 엑셀 다운로드 요청을 안정적으로 처리하는 방법
- 대량 엑셀 다운로드를 메시지 큐와 S3 사전 생성으로 나누는 설계
- 테이블과 데이터만 남은 외주 시스템을 리뉴얼한 과정: 음원 유통 시스템(MDS)
- ISMS 대응을 위한 로그 수집 체계 개선
- 백엔드 시스템 로깅 베스트 프랙티스
- MCP 전면 개편기: 판단 로직의 자리를 정하고 ArchUnit으로 지키기
- MCP 전면 개편기: 화면 단위 API를 도메인 책임 API로 옮기기
- MCP 전면 개편기: MyBatis와 JPA 공존 환경의 데이터 정합성 전략
- MCP 전면 개편기: 계약 코드 채번의 락 경합을 줄여 2분을 10초로
- MCP 전면 개편기: Map 입력을 DTO와 3단계 검증으로 바꾸기
- 크리에이터 스튜디오 개요: 외부 연동 분리, 감사 로그, 토큰 세션, 매핑 장애에서 내린 판단
- 조건 기반 예측 캐싱: 고속 엑셀 다운로드 처리 구조 설계
- [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
- 2025-04-07-TIL
- The Hidden Evolution of Java Strings
- Integer.toString(int) vs String.valueOf(int) vs "" + int
- 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
- 스프링 데이터 JPA 복습: 반복 코드를 줄인 뒤에도 남는 조회 설계
- ADR(Architecture Decision Record) - 결정의 맥락을 결정과 함께 남기기
- JMX와 MBean, 그리고 Micrometer가 지표를 얻는 길 - MBean이 없으면 지표는 0이 아니라 없다
- 세마포어와 permit - 동시에 몇 개까지 들일지를 세는 도구, 그리고 벌크헤드
- thread dump 읽는 법 - 스레드 상태와 스택 프레임, 그리고 RUNNABLE이 CPU를 쓴다는 뜻이 아닌 이유
- 모델 검사 입문 - TLA+, TLC, 상태 공간, 불변조건, 반례
- Lock-Free와 CAS - 락 없이 공유 변수를 바꾸는 방법과 그 한계
- JPA 활용 2편 복습: API 응답과 조회 전략을 분리하기
- 프로세스는 왜 멈추는가 - GC, 페이지 폴트, CPU 경합, SIGSTOP, VM 정지와 스스로 알 수 없는 멈춤
- 읽기 수리, 쓰기 수리, 비동기 수리 - 최종 일관성은 누가 언제 맞추는가
- 사용자 공간과 커널 공간 - 시스템 콜, 복사, sendfile과 kTLS
- TLS 키 교환과 암호 스위트 - key share, forward secrecy, PSK, AES-NI
- 다이렉트 메모리와 Cleaner - 힙 밖의 버퍼는 누가 언제 해제하는가
- 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 핵심 정리
- Statement와 PreparedStatement는 무엇이 다른가
- JVM은 무엇을 하는가
- 점 이력과 선분 이력 모델링
- 데이터베이스 인덱스를 어떻게 이해해야 하는가
- Troubleshooting Java 1장: 앱에서 모호한 부분 밝히기
- Spring in Action 1장: 스프링 시작하기
- Token Authentication
- Thread Local
- Synchronous, Asynchronous, Blocking, Non-Blocking
- Serialization and Deserialization
- Pure Function
- Programming Paradigm
- Object-Oriented Programming(OOP) and Functional Programming(FP)
- Lambda
- JavaScript setTimeout()
- Higher-order Function
- Garbage Collectors
- Garbage Collection(GC)
- Choosing the Best Garbage Collector: G1GC vs ZGC
- Exception Handling
- Java Concurrency
- Closure
- 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
- Apache POI SXSSF vs XSSF vs HSSF
- 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
- JPA 활용 1편 복습: 계층을 나누고 변경의 경계를 정하기
- 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
- HTTP 웹 기본 지식 복습: 섹션별 학습 시리즈
- 2022-10-28-TIL
- 2022-10-27-TIL
- HTTP 웹 기본 지식 10: 배운 개념을 작은 API의 설계 기준으로 바꾸기
- 2022-10-25-TIL
- 2022-10-24-TIL
- HTTP 웹 기본 지식 9: 캐시의 저장, 신선도, 재검증을 구분하기
- 2022-10-19-TIL
- 2022-10-17-TIL
- 2022-10-15-TIL
- 2022-10-14-TIL
- HTTP 웹 기본 지식 8: 표현과 협상, 인증과 쿠키를 헤더로 연결하기
- 2022-10-11-TIL
- 2022-10-10-TIL
- HTTP 웹 기본 지식 7: 상태 코드가 클라이언트의 다음 행동을 정한다
- 2022-10-07-TIL
- 2022-10-06-TIL
- 2022-10-05-TIL
- 2022-10-04-TIL
- HTTP 웹 기본 지식 6: 폼 전송에서 리소스 중심 API 설계까지
- HTTP 웹 기본 지식 5: 메서드의 의미와 재시도 판단
- 2022-09-25-TIL
- 2022-09-21-TIL
- HTTP 웹 기본 지식 4: 무상태, 연결 재사용, 메시지 구조
- 2022-09-15-TIL
- HTTP 웹 기본 지식 3: URL 한 줄에서 요청과 응답까지
- 2022-09-13-TIL
- HTTP 웹 기본 지식 2: IP, TCP, 포트, DNS의 역할 나누기
- 2022-09-05-TIL
- HTTP 웹 기본 지식 1: 웹 프레임워크 앞에서 확인할 것들
- 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
- 스프링 MVC 1편 복습: 요청이 컨트롤러에 도착하기까지
- 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-27-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-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
- 2021-01-06-TIL
- 2021-01-05-TIL
- 2021-01-04-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
- 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. 리모컨