본문 바로가기

전체 글137

GitHub 오픈소스 5선: OpenCode부터 ComfyUI까지, 역할별로 고르기 코드를 고치고 싶은데 학습 로드맵을 열거나, 앱 자동화가 필요한데 새 코딩 에이전트부터 설치하면 출발점부터 어긋나요. 오늘 GitHub Trending에서 고른 오픈소스 5개는 모두 AI와 관련 있지만, 쓰임은 다릅니다.OpenCode와 ComfyUI는 작업을 실행하는 도구, ai-memory와 CLI-Anything은 기존 도구를 이어주는 도구예요. LLM Course는 배우는 순서를 찾을 때 여는 자료입니다.2026년 10월 19일 10:07 KST, GitHub Trending의 Repositories · 모든 언어 · Today 목록에서 골랐어요. 공식 저장소에서 용도와 시작점, 라이선스를 확인한 다섯 후보이며, 전체 인기 순위 1~5위라는 뜻은 아닙니다.2026년 10월 19일 10:07 KST.. 2026. 10. 19.
git bisect run으로 버그 커밋 찾기: 빌드 깨진 커밋을 범인으로 찍지 않으려면 exit 125 주문 합계가 1,300원에 30% 할인을 적용하면 910원이 나와야 하는데 909원이 나온다. 2주 전 커밋에서는 멀쩡했다는 건 아는데, 그 사이 커밋이 스무 개쯤 된다. 이럴 때 꺼내는 게 git bisect run이다. 테스트 스크립트 하나만 주면 Git이 이진 탐색으로 범인 커밋을 찾아준다.나는 스크립트를 "통과하면 0, 실패하면 1"로만 짜면 된다고 생각했다. 그런데 중간에 빌드가 잠깐 깨졌던 커밋이 끼어 있으면, bisect가 엉뚱한 커밋을 범인으로 지목한다. 이 글에서는 실습용 저장소에서 그 상황을 그대로 재현하고, exit 125 한 줄로 결과가 어떻게 바뀌는지 확인한다.git bisect run에서 빌드가 깨진 커밋을 skip해야 하는 이유를 확인한 실습의 표지.결론 먼저1. git bis.. 2026. 10. 19.
Promise.all이 실패해도 나머지 요청은 끝까지 돈다: AbortController로 끊어도 서버는 계속 처리한 이유 프로필, 결제, 쿠폰 API 세 개를 Promise.all로 묶어 호출했는데 결제가 500을 돌려줬다고 해보자. 코드는 catch로 빠져서 "실패" 화면을 띄운다. 그럼 아직 응답이 안 온 쿠폰 요청은 어떻게 될까?나는 막연히 "같이 멈추겠지"라고 생각하고 있었다. Promise.all이 reject되면 나머지 Promise도 정리되는 줄 알았다. 그래서 로컬에 Node.js 서버를 하나 띄워서 요청이 서버에서 실제로 어디까지 처리되는지 로그로 확인해봤다.Promise.all 실패 후 남은 요청이 서버에서 어떻게 되는지 확인한 실습의 표지.결론 먼저1. Promise.all이 reject돼도 남은 요청은 취소되지 않는다. 서버는 끝까지 처리하고, 클라이언트 쪽 후속 코드도 계속 실행된다.2. 첫 번째 에.. 2026. 10. 18.
HTTP 멱등성: 두 번째 DELETE가 404여도 멱등인 이유 같은 문서를 지우는 DELETE에 처음에는 204, 다시 보내니 404가 온 상황을 생각해보자. HTTP 멱등성을 “같은 결과가 나오는 것”으로 외웠다면 여기서 걸린다. 분명 응답이 달라졌으니까.멱등성에서 같아야 하는 것은 동일한 요청의 의도한 서버 효과다. 응답 코드는 달라도 된다.이 글의 204와 404 흐름은 실제 호출 로그가 아니라 RFC 9110을 설명하기 위한 개념 예시다.응답 코드와 삭제 후 상태를 나눠 보는 개념 설명. 실제 서비스의 호출 기록은 아니다.같은 DELETE 두 번 뒤에 남는 것RFC 9110은 같은 요청을 여러 번 보냈을 때, 서버에 미치는 의도한 효과가 한 번 보냈을 때와 같다면 그 요청 메서드를 멱등하다고 정의한다. HTTP에서 safe 메서드와 PUT, DELETE는 멱.. 2026. 10. 17.
CORS 에러인데 서버 로그엔 요청이 찍혀 있는 이유: 단순 요청과 프리플라이트(OPTIONS) CORS 에러가 나면 나는 오랫동안 "요청이 서버까지 못 갔다"고 생각했다.그래서 프론트에서 CORS 에러가 났다는 얘기를 들으면 API Gateway 로그부터 열었고, 거기에 요청이 찍혀 있으면 더 헷갈렸다. 브라우저는 막혔다는데 서버는 받았다고 한다. 둘 중 하나는 거짓말 같았다.이 글에서는 로컬에 서버 두 개를 띄우고 브라우저에서 요청 네 개를 보내서, CORS 에러가 났을 때 요청이 실제로 어디까지 갔는지 서버 로그로 확인하고, 단순 요청과 프리플라이트(preflight)가 어떻게 다르게 막히는지 정리한다.이 글이 필요한 사람: 프론트에서 "CORS 에러 났어요"를 전달받았는데, 서버 로그를 보면 요청이 찍혀 있기도 하고 안 찍혀 있기도 해서 헷갈리는 백엔드 개발자결론 먼저: CORS는 요청이 아.. 2026. 10. 16.
jq로 혼합 로그에서 요청 하나 추리기: 빠진 줄도 확인하는 필터 일반 텍스트와 JSON이 섞인 로그에서 requestId가 req-42인 줄만 jq로 추려 봤다. 정상 로그는 두 줄 나왔는데, 같은 요청 ID가 적힌 손상된 JSON 한 줄은 결과에서 빠졌다.jq로 남은 정상 요청 로그는 아래 두 줄이다. 세 열은 실제 탭 문자로 구분된다.2026-10-16T01:00:01Z INFO accepted2026-10-16T01:00:04Z WARN retry그런데 종료 코드 0과 이 두 줄만으로는 입력이 모두 정상 처리됐다고 말할 수 없었다. 파싱에 실패한 줄, 객체가 아닌 JSON 값, 다른 요청 객체가 모두 최종 결과에서는 보이지 않기 때문이다.특정 요청을 추리는 명령과 빠진 줄의 진단을 함께 다루는 실습이다.jq 1.7.1에서 재현할 10줄 로그jq가 설치된 macO.. 2026. 10. 16.
반응형