프로그램이 예외를 던지며 멈추면 적어도 어디가 잘못됐는지 단서가 남습니다. 그런데 프로그램이 멈추지도, 끝나지도 않고 같은 일을 영원히 반복한다면 단서조차 없습니다. 화면은 응답이 없고, 로그는 더 이상 늘지 않으며, 무엇을 기다리는지도 알 수 없습니다. 무한 루프는 이렇게 침묵하는 고장입니다. 이번 글에서 다룰 LangChain4j의 임베딩 모듈 수정은 바로 그 무한 루프에 관한 것이었습니다. 평범한 문장을 임베딩할 때는 멀쩡하던 코드가, 아주 특별한 형태의 입력 하나를 만나면 영원히 끝나지 않는 반복에 빠졌습니다. 결과만 보면 반복문에 조건 몇 줄을 더하고 테스트 하나를 추가한 작은 변경이지만, 왜 그 반복문이 멈추지 못했는지, 그리고 멈추는 반복문이란 무엇을 보장해야 하는지를 따져 보는 과정이 저에..
버그에는 시끄러운 것과 조용한 것이 있습니다. 시끄러운 버그는 예외를 던지며 멈추거나, 눈에 띄게 잘못된 결과를 내놓습니다. 적어도 무언가 잘못됐다는 신호는 줍니다. 반면 조용한 버그는 아무 소리 없이 잘못된 일을 합니다. 프로그램은 멈추지 않고, 로그에도 아무것도 남지 않으며, 결과는 그럴듯해 보입니다. 그래서 한참 뒤에야, 그것도 엉뚱한 곳에서 문제가 드러납니다. 이번 글에서 다룰 LangChain4j의 마크다운 파서 수정은 바로 그 조용한 종류의 버그였습니다. 비영어권 문자가 든 마크다운 문서를 읽으면, 어떤 환경에서는 글자가 깨진 채로 조용히 통과해 버렸습니다. 예외도 없고 경고도 없었습니다. 결과만 보면 코드 한 줄을 고치고 테스트 하나를 더한 작은 변경이지만, 이 버그가 왜 눈에 잘 띄지 않는..
오픈소스 코드를 읽다 보면, 큰 결함보다 오히려 "여기는 왜 다른 곳과 다르게 생겼지" 하는 작은 어긋남이 더 눈에 들어올 때가 있습니다. 같은 일을 하는 함수가 둘 있는데 한쪽만 어떤 처리를 하고 다른 쪽은 그냥 지나친다거나, 형제처럼 나란히 놓인 클래스들이 미묘하게 다른 습관을 가진 경우입니다. 이런 어긋남은 당장 프로그램을 멈추게 하지는 않지만, 누군가 그 코드를 믿고 쓰다가 예상치 못한 곳에서 발이 걸리게 만듭니다. 이번 글에서 다룰 LangChain4j의 Tencent COS 문서 로더 수정도 그런 어긋남에서 출발했습니다. 한 클래스 안에서 두 갈래의 길이 서로 다른 규칙을 따르고 있었고, 그중 한쪽 길에만 안전장치가 빠져 있었습니다. 결과만 보면 코드 한 줄을 감싸고 테스트 몇 개를 더한 작은..
이 글은 LangChain4j의 Azure Blob Storage 문서 로더 수정의 기여를 처음부터 끝까지 따라가며, 무엇이 문제였고 그것을 어떻게 확인했으며 저장소의 기여 규칙을 익히면서 어떤 점에 부딪혔는지 정리한 기록입니다. 결과만 보면 코드 한 줄을 바꾼 작은 수정이지만, 그 한 줄에 도달하기까지 거쳐야 했던 확인 과정을 기록해두려고 합니다. 문서의 출처를 알려주는 한 줄에서 시작했습니다LangChain4j는 여러 저장소에서 문서를 읽어와 LLM이 다룰 수 있는 형태로 바꿔주는 라이브러리입니다. 그중 document-loaders 묶음에는 Amazon S3, Google Cloud Storage, Azure Blob Storage, Tencent COS 같은 클라우드 저장소에서 파일을 불러오는..
- Total
- Today
- Yesterday
- Spring Batch
- Double-Checked Locking
- Cache Penetration
- 트래픽 처리
- Eager Initialization
- Cache Avalanche
- Redis 캐시 전략
- 캐시와 인덱스
- 백엔드 아키텍처
- Initialization-on-Demand Holder Idiom
- 동시성처리
- InterruptedException
- mybatis
- Cache Aside
- 캐시 성능 비교
- Enum 기반 싱글톤
- DB 인덱스 성능
- Redis vs DB
- spring batch 5
- DB 트랜잭션
- Redis 성능 개선
- 스레드 생명주기
- Hot Key 문제
- Java Performance
- 트랜잭션 관리
- 캐시 장애
- 백엔드 성능 튜닝
- TTL 설계
- 백엔드 성능 설계
- 백엔드 성능
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
