Notes 122
- 주니어 백엔드 개발자가 실무에서 자주 부딪히는 질문들
- GitHub 블로그를 에이전틱 AI와 함께 운영하기
- RESP, Reactor, Command Registry로 보는 Redis 요청 처리 흐름
- redis-lite-java로 이해하는 Redis 아키텍처 개요
- MemoryDb, TTL, Hash 구조로 보는 Redis keyspace 설계
- MULTI, Pub/Sub, Lua로 보는 Redis 확장 기능과 구현 과정
- 키 생성 병목을 추적해 구조를 바꾼 기록: Part 2 - SELECT 안에서 UPDATE가 일어나고 있었다
- Netty
- 대용량 파일 업로드를 위한 Presigned URL
- 키 생성 병목을 추적해 구조를 바꾼 기록: Part 1 - INSERT가 느린 줄 알았다
- 대량 배치 안정성을 높이기 위한 구조 개선: Part 5 - 배타적 락과 조건부 해제로 순서를 보장하기
- 대량 배치 안정성을 높이기 위한 구조 개선: Part 4 - 분산 락이 있어도 레이스가 발생한 이유
- 대량 배치 안정성을 높이기 위한 구조 개선: Part 3 - 청크 분할과 병렬 처리로 재설계하기
- 대량 배치 안정성을 높이기 위한 구조 개선: Part 2 - 전체 삭제 후 전체 등록 구조의 위험성
- 대량 배치 안정성을 높이기 위한 구조 개선: Part 1 - 시스템을 압박하기 시작한 배치
- 운에 맡기던 배치를 시스템으로 바꾸기: Part 1 — 왜 이 배치는 가끔 터질까?
- 단위 테스트와 통합 테스트를 어떻게 구분해야 할까
- Error Handling in HTTP APIs
- Redis Sentinel Replication
- Redis Cache Best Practices
- Redo Log와 Undo Log를 어떻게 구분해야 하는가
- 데이터베이스 리플리케이션 기본 정리
- 데이터베이스 트랜잭션을 어떻게 봐야 하는가
- ACID를 실무적으로 이해하기
- Preventing Cache Write Amplification under High Concurrency
- @RestController는 무엇을 의미하는가
- @SpringBootApplication은 실제로 무엇을 하는가
- Spring Boot DevTools를 언제 써야 하는가
- MVCC를 어떻게 이해해야 하는가
- Gap Lock
- Process and Thread
- Multiplexing
- Multithreading
- Java의 Garbage Collection을 어떻게 이해해야 할까
- State in REST API
- Spring Bean Lifecycle 정리
- 부동소수점 오차는 왜 발생하는가
- Java에서 static은 무엇을 의미하는가
- equals()와 hashCode()를 함께 오버라이드해야 하는 이유
- 민주주의 = 탈중앙화라고 볼 수 있는가?
- 대용량 지분율 데이터 처리 성능 개선과 동시성 제어 전략
- 무거운 엑셀 다운로드 요청을 사전에 판별하는 방법
- 대용량 엑셀 다운로드 요청을 안정적으로 처리하는 방법
- 대량 엑셀 다운로드를 메시지 큐와 S3 사전 생성으로 개선한 이야기
- DB 스키마만으로 외주 시스템을 내재화한 리빌딩 여정
- ISMS 대응을 위한 로그 수집 체계 개선
- 백엔드 시스템 로깅 베스트 프랙티스
- JSP 기반 시스템의 구조적 문제를 해결한 아키텍처 전환기: JavaScript에 과도하게 집중된 로직 분리하기
- JSP 기반 시스템의 구조적 문제를 해결한 아키텍처 전환기: API 명세 없는 레거시 시스템의 신규 시스템 이관 전략
- JSP 기반 시스템의 구조적 문제를 해결한 아키텍처 전환기: MyBatis와 JPA 공존 환경의 데이터 정합성 전략
- JSP 기반 시스템의 구조적 문제를 해결한 아키텍처 전환기: 시퀀스 테이블 기반 코드 생성의 병목을 해결한 이야기
- JSP 기반 시스템의 구조적 문제를 해결한 아키텍처 전환기: DTO 중심 아키텍처 전환과 검증 체계 개선
- Redis 기반 인증 토큰 관리로 분산 환경의 인증 일관성 확보
- @TransactionalEventListener 빠른 체크 노트
- 백엔드 개발자: 데이터 흐름의 설계자
- Spring에서 이해해야 할 JPA 아키텍처
- 데이터베이스 페이징 성능을 어떻게 봐야 하는가
- 캐시 스탬피드(Cache Stampede)
- CPU부터 CDN까지: 모든 계층에서의 캐싱
- 왜 이벤트가 안 먹히지? @TransactionalEventListener가 무시되는 이유와 해결법
- Spring에서 Java 21을 도입할 때 체크할 것
- 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은 무엇을 하는가
- 점 이력과 선분 이력 모델링
- 데이터베이스 인덱스를 어떻게 이해해야 하는가
- 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
- Spring Boot에서 외부 API 연동을 설계할 때 보는 것
- 배열을 데이터베이스에 저장할 때 무엇을 먼저 판단해야 하는가
- SOLID 원칙을 실무적으로 어떻게 이해해야 하는가
- Java에서 this와 super는 언제 어떻게 써야 하는가
- 객체, 클래스, 인스턴스는 어떻게 구분해야 하는가
- 상속과 다형성은 어떻게 연결되는가
- Java에서 객체 비교를 어떻게 해야 하는가
- 빅 오(Big-O)와 시간복잡도를 어떻게 봐야 하는가
- 단일, 이중, 환형 연결 리스트는 어떻게 다른가
- LinkedList로 Queue를 구현할 때 핵심은 무엇인가
- LinkedList로 Deque를 구현할 때 알아야 할 것
- 배열과 연결 리스트는 언제 차이가 커지는가
- Java에서 배열과 리스트를 어떻게 구분해야 하는가
- Apache POI SXSSF vs XSSF vs HSSF
- Git
- Maven Dependencies를 가져오지 못할 때 어디부터 봐야 하는가
- Git의 기본을 어떻게 이해해야 하는가
- C++의 vector를 어떻게 이해해야 하는가
- 순열(Permutation)
- 동적 계획법(Dynamic Programming)
- 재귀(Recursion)
- 그래프(Graph)
- 깊이 우선 탐색(DFS)
- 연결 요소(Connected Component)
- 너비 우선 탐색(BFS)