아카이브
- 30 / 07 벡터 검색만으로 AI의 기억을 만들 수 있을까: OpenHuman의 Memory Tree
- 29 / 07 배포 준비와 다음 기능 개발을 병렬로 진행하기 위한 Git 브랜치 전략
- 28 / 07 .env에 넣으면 안전할까? 비밀값 관리와 1Password·Bitwarden
- 27 / 07 AI 에이전트는 어떻게 판단하고 행동할까: LLM, 도구, 관찰, 반복 구조
- 24 / 07 Spec-kit만으로는 부족했다: 팀 병렬 개발을 위한 SDD 문서 구조 설계
- 23 / 07 RAG 청킹 전략 비교: 문서를 길이로 자를까, 의미로 자를까?
- 22 / 07 RAG는 LLM에게 지식을 학습시키는 기술이 아니다
- 21 / 07 MVP는 기능을 줄이는 것이 아니라 가설을 줄이는 과정이다
- 20 / 07 클린 코드를 읽고, 읽기 쉬운 코드의 기준이 달라졌다
- 16 / 07 실무에서 PostgreSQL을 선택하는 이유: 데이터 정합성과 JSONB를 중심으로
- 15 / 07 포인트 결제 동시성은 어디서 막아야 할까: 조건부 UPDATE부터 Redis 분산 락까지
- 14 / 07 단일 Redis 장애에서 Sentinel까지: Primary-Replica와 자동 Failover 이해하기
- 13 / 07 대용량 트래픽 처리는 서버를 늘리는 것부터 시작하지 않는다
- 10 / 07 기록을 저장하는 것에서 연결하는 것으로: 온톨로지와 AI 세컨드 브레인
- 09 / 07 Kafka 재처리와 DLT는 예외 처리가 아니라 운영 설계다
- 08 / 07 Kubernetes를 명령어가 아니라 조정 루프로 이해하기
- 07 / 07 RAG의 핵심은 생성이 아니라 검색이다
- 06 / 07 Nginx를 단순 프록시가 아니라 배포 전환 지점으로 이해하기
- 03 / 07 Docker Compose 다음에 Kubernetes가 필요한 이유
- 02 / 07 Nginx는 왜 Spring Boot 앞단에 있을까?
- 01 / 07 CI/CD는 YAML 작성이 아니라 안정적인 배포와 복구를 설계하는 과정이었다
- 30 / 06 PR은 리뷰 요청이 아니라 배포 실패를 막는 첫 번째 검증 지점이다
- 29 / 06 JWT 인증 필터에서 검증 책임을 분리한 이유
- 26 / 06 k6로 성능 테스트를 코드로 관리하기
- 25 / 06 AI가 코드를 만드는 시대, 개발자는 무엇을 검증해야 할까
- 24 / 06 코드보다 먼저 명세를 정리한다는 것
- 23 / 06 AI 에이전트가 브라우저를 사용한다는 것의 의미
- 22 / 06 협업 속도를 높이는 의존성 분리와 안정적인 API 버저닝, 그리고 경계 세우기
- 19 / 06 Spring Boot 도전 기능 구현 과정에서 고민한 설계 포인트
- 18 / 06 Spring Boot Todo 과제 필수 기능 구현 중 고민한 부분
- 17 / 06 Vector DB 완전 정복: 개념부터 실무 활용까지
- 16 / 06 WebSocket, STOMP, 그리고 인증: 실시간 서비스의 복잡성을 해결하는 여정
- 15 / 06 MySQL 인덱스, 무작정 추가하기 전에 알아야 할 것들
- 12 / 06 Spring Cache: 캐시 Key 설계부터 동기화, RedisTemplate 동작 원리까지
- 11 / 06 JPA와 QueryDSL: Q타입, Repository 역할, 동적 쿼리, 연관관계 설계까지 정리하기
- 10 / 06 PortOne 결제 연동에서 배운 보상 트랜잭션 설계
- 09 / 06 PG는 최종 진실: 결제 상태 동기화, 왜 웹훅만으로는 부족할까?
- 08 / 06 Agent OS를 넘어선 AI 개발 워크플로우 자동화: 설계 의사결정 중심의 회고
- 05 / 06 Flyway를 활용한 DB 스키마 관리: ddl-auto=validate와 defer-datasource-initialization의 함정
- 04 / 06 Spring AI 실전: Tool Calling 설계와 멀티 모델 활용 전략
- 02 / 06 Spring AI로 AI 앱 개발 시작하기: ChatClient와 Structured Output
- 01 / 06 동시성 문제를 이해하면서 정리한 생각 — 왜 락이 필요할까
- 29 / 05 구현보다 먼저: 팀 프로젝트를 위한 GitHub 협업 환경 구축기
- 28 / 05 AI 시대, Spec Driven Development: LLM과 협업하는 새로운 개발 방식
- 27 / 05 AI 시대, 데이터 표현의 두 축: 임베딩과 그래프
- 26 / 05 어제는 됐는데 오늘은 왜 안 될까? GitHub Pages 의존성 문제와 재현 가능한 빌드
- 22 / 05 AI 에이전트의 Harness(하네스)에 대한 기술적 고찰
- 21 / 05 AI 개발 환경을 공부하면서 헷갈렸던 개념들
- 20 / 05 배포 자동화와 오토스케일링은 어떻게 연결될까?
- 19 / 05 사용자의 요청은 AWS 내부에서 어떻게 처리될까?
- 18 / 05 실전 클라우드 배포와 운영: 내가 마주한 기술적 고민과 해결책
- 15 / 05 왜 컨테이너만으로는 부족할까?
- 14 / 05 Docker 이미지는 정말 OS일까?
- 13 / 05 컨테이너는 어떻게 격리될까?
- 12 / 05 VM과 컨테이너는 무엇이 다를까?
- 11 / 05 AOP 기반 로깅 전략 — 이력 파이프라인으로 확장 가능한 시스템 설계
- 08 / 05 EntityGraph와 페이징을 같이 사용할 때 주의할 점
- 07 / 05 AOP를 이해하면서 정리한 생각 — 공통 로직은 어디에 있어야 할까
- 06 / 05 Interceptor를 이해하면서 정리한 생각 — 요청 흐름은 어디서 제어되는가
- 04 / 05 Filter를 이해하면서 정리한 생각 — 인증은 어디서 시작되는가
- 01 / 05 Filter vs Interceptor vs AOP — 어디서 무엇을 처리해야 할까
- 30 / 04 코드 컨벤션과 GitHub 규칙을 정리하면서 느낀 것
- 29 / 04 세션 기반 인증에서 JWT 기반 인증으로 전환하면서 정리한 것들
- 28 / 04 데이터의 안전한 작별: Soft Delete와 유예 기간(Grace Period) 전략
- 27 / 04 로컬 develop 오염으로 PR 커밋이 섞인 문제와 해결
- 24 / 04 PUT vs PATCH — 단순한 수정 범위를 넘어 멱등성으로 이해하기
- 23 / 04 Spring Security 요청 처리 흐름과 DispatcherServlet
- 22 / 04 Facade vs Application Service
- 21 / 04 JPA 심화 학습: 영속성 컨텍스트의 비밀과 조회 최적화 전략
- 20 / 04 퍼사드(Facade) 패턴: 서비스 순환 참조와 JPA 데이터 정합성 해결
- 17 / 04 인증 방식의 이해: Session vs JWT와 Spring ArgumentResolver 활용
- 16 / 04 Spring Boot: 빈 관리부터 전역 예외 처리까지의 핵심 정리
- 15 / 04 락, 캐시, 메시지 큐, 비동기 처리 언제 써야 할까?
- 14 / 04 Spring: 개발자의 자신감, 테스트
- 13 / 04 Spring: 오브젝트와 의존관계
- 10 / 04 Spring Proxy: 핵심 로직을 투명하게 감싸는 '기술적 안경'
- 09 / 04 실무적 선택의 기로: ID 전략부터 서비스 레이어 설계까지
- 08 / 04 API 문서 자동화: Javadoc과 Swagger로 구축하는 소통의 '캐시(Cache)'
- 07 / 04 개발자의 기본기: 코드 이전에 갖춰야 할 '기록'과 '소통'의 기술
- 06 / 04 재귀의 늪에서 탈출하기: 메모이제이션(Memoization)
- 03 / 04 안정 계수 정렬(Stable Counting Sort)의 원리와 역방향 순회
- 02 / 04 프로그램의 안전망: 예외 처리(Exception Handling)의 모든 것
- 01 / 04 Javadoc: 코드를 제품으로 격상시키는 문서화의 기술
- 31 / 03 Enum, Lambda, Stream: 선언적 코드와 객체지향적 책임의 결합
- 30 / 03 삭제 로직과 데이터 연관성으로 엮인 양방향 매핑의 함정
- 27 / 03 객체지향 설계 원칙: 다형성 활용과 명확한 의도 표현
- 26 / 03 [Java] 스트림 인덱스 출력과 객체지향적 책임 분리 (DI & SRP)
- 25 / 03 [Java] 요제푸스 문제: 인덱스 계산 없이 '큐 회전'으로 해결하기
- 24 / 03 Java JVM 구성 요소와 Garbage Collection(GC) 동작 원리
- 23 / 03 Java Enum의 추상 메서드와 람다(Lambda) 활용
- 20 / 03 Java Scanner nextInt() 호출 후 nextLine() 무시 현상
- 18 / 03 머릿속 엉킨 로직을 푸는 열쇠: 컴퓨팅적 사고와 플로우차트
- 17 / 03 협업의 문턱, 깃허브 코드 리뷰와 Pending의 늪
- 16 / 03 GitHub 기본 브랜치명을 master에서 main으로 변경하며 배운 점
- 13 / 03 자바의 구동 원리: JDK, JVM 그리고 플랫폼 독립성
- 12 / 03 PUT 메서드에 'Optional' 매개변수를 넣었을 때 벌어지는 일
- 11 / 03 패키지 임포트 오류로 깨달은 npm의 본질과 전략적 학습법
- 10 / 03 AI보다 먼저 '에러 메시지'를 믿어야 하는 이유 (feat. JSON Syntax Error)
- 09 / 03 개발 효율을 높이는 API 명세서 작성의 5단계 원칙
- 25 / 01 콘서트 랭킹 개발을 하며 느낀 것 – UseCase를 두지 않기로 한 이유
- 24 / 01 락과 트랜잭션 경계 분리: 좌석 예약을 구현하며 배운 실무 패턴
- 22 / 01 Redis 캐시에 객체를 저장할 때 직렬화가 필요한 이유
- 21 / 01 Testcontainers Docker 연결 오류를 해결하지 못하고 다시 yml 방식으로 돌아간 이유
- 20 / 01 Spring 테스트 구조에서 sourceSet 분리와 Testcontainers를 써보며 느낀 점
- 19 / 01 테스트 때문에 엔티티에 setter를 추가하면 안 되는 이유
- 19 / 01 예약 HOLD 타임아웃 처리에서 Port-In 인터페이스를 생략한 이유
- 19 / 01 람다에서 JPA 엔티티를 쓰다 컴파일 에러가 난 진짜 이유
- 19 / 01 Gradle Kotlin DSL에서 create import를 하면 안 되는 이유
- 18 / 01 JPA 동시성 테스트에서 TransactionRequiredException을 만난 이유
- 18 / 01 낙관적 락 테스트가 실패하던 이유
- 17 / 01 Spring Data JPA 테스트에서 JpaRepository 메서드가 사라진 이유