다시 볼 페이지는 책갈피로, 중요한 구절은 형광펜으로 남기는 크롬 익스텐션입니다. 형광펜은 다시 방문해도 그 자리에 그대로 있고, 폴더·태그 정리와 검색을 지원합니다. 온디바이스로 처리해 가입이 필요 없습니다.
내용증명, 차용증, 합의서, 위임장, 사직서 같은 문서를 질문 몇 개에 답하면 격식을 갖춰 완성해 줍니다. 입력한 내용은 서버로 보내지 않고 브라우저 안에서만 다룹니다.
RSI, MVRV-Z, SOPR, 공포탐욕지수, 펀딩비 등 25개가 넘는 시장 지표를 매일 자동으로 모아 한 화면에서 보여 주는 대시보드입니다. Claude Code와 함께 헥사고날 아키텍처로 설계했습니다.
GC를 이해하기 위한 OS 기초: 프로세스와 스레드
CPU가 명령어를 실행하는 방식부터 OS의 역할, RAM이 부족할 때 쓰는 가상 메모리와 page fault, 프로세스와 스레드의 차이까지 GC 공부에 필요한 OS 기초를 정리합니다.
SimpleDateFormat 동시성 문제부터 불변 객체까지
서비스의 날짜 변환 유틸에서 간헐적으로 발생한 ArrayIndexOutOfBoundsException을 추적하며 찾은 SimpleDateFormat 동시성 문제의 원인과 같은 유형의 사례, 불변 객체를 정리합니다.
Spring Session Redis에서 중복 로그인이 막히지 않는 원인 (SessionRegistry)
Spring Session Redis에서 중복 로그인이 막히지 않은 원인과 SpringSessionBackedSessionRegistry로 해결한 방법, 밀려난 세션을 Redis에서 직접 지운 내용을 정리합니다.
MySQL DATETIME과 TIMESTAMP
MySQL DATETIME과 TIMESTAMP가 값을 저장하는 방식과 세션 타임존에 따른 변환, 2038년 범위 한계를 예제로 비교하고 어떤 타입을 고를지 기준을 정리합니다.
데드락의 네 가지 조건과 해결 전략
데드락이 생기는 네 가지 조건과 운영체제의 예방·회피·감지·무시 전략을 정리하고, InnoDB·JVM·tryLock·락 순서 정렬 같은 실제 도구가 각각 어느 전략에 해당하는지 예제 흐름도로 연결합니다.
스핀락, 뮤텍스, 세마포
한 프로그램 안의 여러 스레드가 같은 데이터를 건드릴 때 쓰는 스핀락·뮤텍스·세마포를 기다리는 방식과 소유권 차이로 비교하고, 순서 신호와 우선순위 역전까지 예제 흐름도로 정리합니다.
트랜잭션 스케줄과 격리 수준
트랜잭션이 섞여 실행되는 순서인 스케줄과 시리얼라이저블의 뜻, DB가 검사 대신 락과 MVCC라는 규칙을 쓰는 이유, 격리 수준 네 단계와 데드락을 예제 흐름도로 정리합니다.
ElasticSearch를 도입하게 된 이유
대량 거래 데이터에서 여러 조건을 조합해 이상 건을 찾는 작업이 RDBMS 인덱스로는 한계가 있어 ElasticSearch를 도입한 과정과, 역인덱스·색인 시점 분석으로 검색이 빠른 이유를 정리합니다.
슬로우 쿼리 개선
응답에 6초 이상 걸리던 페이지의 원인을 실행계획으로 분석하고, MySQL 옵티마이저가 데이터가 적은 테이블을 드라이빙 테이블로 고르며 생긴 문제를 STRAIGHT_JOIN으로 해결한 경험을 정리합니다.
Layered Architecture 구조별 테스트 작성법
Persistence, Business, Presentation 계층의 역할과 계층별 테스트 범위, @SpringBootTest·@DataJpaTest·@WebMvcTest의 차이와 @Transactional(readOnly = true) 사용법을 정리합니다.
@Mock, @MockBean, @Spy, @SpyBean, @InjectMocks
Mockito의 @Mock·@Spy·@InjectMocks와 스프링 부트의 @MockBean·@SpyBean이 각각 무엇을 가짜 객체로 대체하는지 예제 코드로 비교하고, 테스트 준비 코드를 @BeforeEach·given·when에 나누는 문제를 정리합니다.
DB 인덱스
MySQL이 인덱스로 B-Tree를 사용하는 이유와 인덱스의 동작 방식을 그림으로 살펴보고, 복합 인덱스를 활용해 불필요한 단일 인덱스로 인한 자원 낭비를 줄이는 실무 설계 방법을 정리합니다.
SOLID
SRP, OCP, LSP, ISP, DIP 다섯 가지 객체지향 설계 원칙을 주문 유효성 검사, 도형 넓이, 새 클래스 Java 예제와 흐름도로 정리합니다.
실무에서 잘못 사용하고 있던 Transaction
실무 프로젝트 전반에 REQUIRES_NEW가 걸려 있던 원인을 프록시 패턴과 롤백 시점, 컨트롤러에 걸린 AOP 트랜잭션 설정에서 찾아 분석한 과정을 정리합니다.
DB 분산락
비관적 락이 분산 환경에서 갖는 한계와 Redisson 분산락을 사용하는 이유, DB 안에서의 대기와 Redisson pub/sub 방식의 락 획득 차이, 상황별 트레이드오프를 흐름도와 함께 정리합니다.
MVCC (multiversion concurrency control)
락 기반 동시성 제어의 한계를 살펴보고, MVCC가 커밋된 데이터만 읽는 방식과 트랜잭션 격리 수준에 따라 읽는 데이터가 달라지는 원리를 예제 흐름도와 함께 정리합니다.
Spring Annotation 그리고 Custom Annotation
@Component에 붙은 Target, Retention 같은 메타 어노테이션의 의미와, @Service처럼 @Component를 품은 어노테이션을 Spring이 ClassPathBeanDefinitionScanner의 doScan으로 찾아 빈으로 등록하는 과정을 정리합니다.
DBCP
API 요청마다 TCP 연결을 맺고 끊는 비효율을 DBCP가 어떻게 해결하는지 흐름도로 설명하고, MySQL의 max_connections·wait_timeout과 HikariCP의 minimumIdle, maximumPoolSize, maxLifetime, connectionTimeout 설정을 정리합니다.
DB 비관적 락
비관적 락의 개념과 S-Lock/X-Lock, 갭 락과 next-key lock의 동작을 살펴보고, JPA 동시성 테스트로 재고 차감 문제를 해결하는 과정과 갭 락으로 생기는 데드락을 예제 흐름도와 함께 정리합니다.
DB 낙관적 락
재고 차감 동시성 테스트로 문제를 재현하고, JPA @Version 기반 낙관적 락의 동작 원리와 사용 시점, 주의할 점을 예제 흐름도와 함께 정리합니다.
Kafka 동시성 발생
카프카 컨슈머 3개가 같은 데이터를 동시에 적재하며 생긴 중복 적재 문제와 분산락을 이용한 해결 방법, 이를 찾아보며 공부한 트랜잭션 ACID와 스케줄·회복 가능성 이론을 흐름도와 함께 정리합니다.
Garbage Collection(GC)
JVM 메모리 구조와 Mark·Sweep·Compaction, 세대별 GC의 동작 원리를 정리하고, Serial GC부터 G1 GC, ZGC까지 주요 GC 알고리즘의 단계와 Stop-The-World 구간을 흐름도로 비교합니다.