전체 글 498

Git 강제 push: lease가 막지 못하는 것

본문 중간의 쿠팡 추천 상품 구매시 쿠팡 파트너스에서 일정액의 수수료를 제공받습니다.커밋 메시지만 고친 뒤 push했는데 non-fast-forward로 거부됐다. 그래서 --force-with-lease를 붙였다면, 그 옵션이 정확히 무엇을 확인하는지 알아야 한다. 동료의 변경이 원격에 추가된 뒤 처음에는 거부되던 명령이, fetch 한 번 뒤 성공할 수 있다. 성공한 결과에서 동료가 추가한 파일은 현재 브랜치에 남지 않았다.이 차이는 lease가 고장 나서 생기는 현상이 아니다. 기대한 원격 커밋과 실제 원격 커밋이 같은지를 검사하는 기능과, 새 이력이 다른 사람의 코드를 보존하는지 검사하는 기능은 다르기 때문이다. Git 2.56.0에서 독립된 두 복사본과 예제용 원격으로 이 조건을 나눠 실행했다...

Python datetime: 하루와 24시간의 차이

본문 중간의 쿠팡 추천 상품 구매시 쿠팡 파트너스에서 일정액의 수수료를 제공받습니다.뉴욕 시각으로 토요일 정오부터 일요일 정오까지 걸린 시간을 구한다고 하자. 두 datetime에 모두 시간대를 붙였고, 출력에도 UTC offset이 보인다. 그런데 Python에서 두 값을 바로 빼면 24시간인데, 각각 UTC로 바꿔 뺀 결과는 23시간이다. 가을에는 같은 코드가 25시간을 내놓는다. 시간대 정보를 빠뜨리지 않았는데도 계산 의도와 결과가 어긋날 수 있다.차이는 ‘시계와 달력에 적힌 간격’과 ‘두 시점 사이에 흐른 시간’에 있다. 다음 날 같은 시각에 알림을 보내려는 일정과 정확히 24시간 후에 만료되는 권한은 서로 다른 질문이다. 둘 다 timedelta를 쓸 수 있어서 코드만 보면 비슷하지만, 어느 축..

TLS 인증서 체인: 루트를 보내면 해결될까?

본문 중간의 쿠팡 추천 상품 구매시 쿠팡 파트너스에서 일정액의 수수료를 제공받습니다.같은 서버 인증서라도 중간 인증서를 함께 주면 검증에 성공하고, 중간 인증서를 빼면 실패한다. 그렇다면 루트 인증서까지 전부 보내면 어떤 클라이언트에서도 성공할까? 별도 시험용 인증서로 확인한 결과는 달랐다. 서버가 루트까지 세 장을 보냈어도 클라이언트가 그 루트를 신뢰하지 않으면 검증은 실패했다.인증서 체인은 서명을 따라갈 재료이고, 신뢰 저장소는 그 경로를 어디까지 받아들일지 정하는 정책이다. 두 문제를 섞으면 중간 인증서 누락을 고치려고 클라이언트에 불필요한 CA를 추가하거나, 신뢰되지 않는 루트를 서버 응답에 계속 덧붙이게 된다. 이름·시간·용도 오류까지 같은 증상으로 보일 수 있으므로 실패가 난 조건을 분리해야 ..

HTML 폼 전송: 클릭, Enter, submit() 차이

제목 입력 칸에 required를 붙인 폼이라도 전송 경로를 바꾸면 빈 제목이 요청에 들어간다. 전송 버튼을 클릭할 때는 브라우저가 입력을 요구하는데, 같은 폼에서 form.submit()을 호출하면 요청이 진행된다. 버튼 클릭에만 저장 코드를 달아 두면 Enter로 전송할 때 다른 버튼의 처리가 실행될 수 있고, 중복 클릭을 막으려고 버튼을 잠갔더니 서버가 구분하던 등록 의도가 사라지기도 한다.이 차이는 폼 전송을 함수 하나의 호출로 보면 설명하기 어렵다. 사용자 동작이나 스크립트가 전송을 시작하고, 필요하면 입력 제약을 검사한 뒤, 취소 가능한 전송 이벤트를 거쳐 데이터를 수집한다. 그 후에야 요청과 화면 이동이 이어진다. 어떤 경로는 앞 단계를 생략하고, 어떤 코드는 수집 대상의 상태를 중간에 바꾼..

파일을 안전하게 덮어쓰려면 rename만으로 충분할까?

설정 파일을 새 JSON으로 저장했는데, 읽는 쪽에서 가끔 빈 파일이나 문법 오류를 만난다면 쓰기 완료 시점부터 살펴봐야 합니다. 기존 파일을 쓰기 모드로 열어 내용을 지운 뒤 새 데이터를 기록하는 동안에도 다른 읽기는 가능합니다. 새 내용이 짧든 길든, 파일을 비운 시점과 기록을 끝낸 시점 사이가 하나의 작업으로 묶이는 것은 아닙니다.다른 파일에 완성한 뒤 이름을 교체하는 방식은 이 문제를 해결하는 중요한 수단입니다. 그러나 rename의 성공만으로 전원 차단 후 보존, 여러 작성자의 갱신 충돌, 여러 파일의 일괄 변경까지 해결되지는 않습니다. 무엇을 하나의 순간처럼 보여 줄 것인지, 언제 저장 성공을 반환할 것인지, 누가 이전 값을 읽고 수정할 수 있는지를 나누어 설계해야 합니다.아래 실행 화면은 P..

Git rebase --onto로 브랜치 기준점 옮기기

api 브랜치에서 화면 작업용 app을 만들었는데, 화면 코드만 main 위로 옮겨야 한다고 하자. git rebase main app을 실행하면 화면 코드보다 앞선 API 작업도 함께 따라올 수 있다. 새 기준점은 main이지만, 가져올 변경의 시작 경계는 api이기 때문이다. 이 두 역할을 따로 지정하는 명령이 git rebase --onto main api app이다.명령이 성공했다는 메시지보다 중요한 것은 무엇이 선택됐고, 옮긴 뒤 무엇이 남았는지다. 여기서는 Git 2.56.0에서 서로 분리된 예제를 실행해 범위 선택, 의존성 누락, 충돌, 빈 커밋, 병합 구조와 후속 브랜치까지 비교한다. 화면은 직접 실행한 명령과 주요 출력을 발췌한 캡처이며, 커밋 ID는 각 예제에만 해당한다. 원격 갱신 충..

Python Decimal로 계산해도 금액이 달라지는 이유

소수 금액을 모두 Decimal로 바꿨는데도 항목 합계와 청구 합계가 다를 수 있다. 예를 들어 계산 전 값이 각각 0.335인 항목 세 개를 소수 둘째 자리로 반올림하면 각 항목은 0.34, 합계는 1.02다. 반면 원래 값을 먼저 더한 1.005를 반올림하면 1.01이다. 둘 다 같은 십진수 자료형과 같은 반올림 규칙을 쓴 결과다. Decimal을 선택하는 것만으로 금액 계산의 규칙까지 정해지지는 않는다.이 글은 특정 통화나 세법의 계산법을 제시하지 않는다. 소수 두 자리를 사용하는 가상의 금액을 놓고, 프로그램의 입력·연산·확정·전달 단계에서 결과가 갈리는 이유를 살펴본다. 독자가 결정해야 하는 것은 “float를 Decimal로 바꿀까?”에 더해 “어떤 값을 받아 어느 시점에 어떤 단위로 확정할까..

CSS 컨테이너 쿼리로 카드 배치 바꾸기

본문 중간의 쿠팡 추천 상품 구매시 쿠팡 파트너스에서 일정액의 수수료를 제공받습니다.본문에서는 가로로 잘 보이던 카드를 사이드바에 넣으면 제목이 여러 줄로 갈라진다. 브라우저 창은 충분히 넓고 모바일용 미디어 쿼리도 작동하지 않는다. 카드가 배치될 공간은 줄었지만, 스타일 조건은 여전히 창 너비만 보고 있기 때문이다. 이런 문제는 화면 크기에 대한 분기를 더 만드는 것보다 카드에 실제로 할당된 공간을 기준으로 배치를 바꾸는 것으로 해결할 수 있다.CSS 크기 컨테이너 쿼리는 조상 요소의 콘텐츠 크기를 조건으로 자손의 스타일을 적용한다. 카드마다 복잡한 상태를 관리하지 않아도 같은 마크업을 본문·사이드바·분할 패널에 재사용할 수 있다. 다만 컨테이너를 선언하는 순간 크기 계산의 일부가 달라진다. 어느 요소..

HTTP HEAD로 다운로드 크기를 알 수 있을까?

본문 중간의 쿠팡 추천 상품 구매시 쿠팡 파트너스에서 일정액의 수수료를 제공받습니다.HEAD 응답에 Content-Length: 1048576이 있는데 본문은 비어 있다면, 1MiB를 받다 실패한 것일까요? HEAD에서는 정상적인 조합입니다. 이 값은 이번에 받은 본문 길이가 아니라, 같은 요청을 GET으로 보냈다면 전송됐을 본문 크기를 가리킵니다.본문 없이 GET의 크기를 알려 주는 응답HEAD는 GET으로 얻을 표현의 메타데이터를 요청하되 응답 본문은 받지 않는 메서드입니다. 다운로드 전에 크기와 형식을 알아보려는 상황에 사용할 수 있습니다. 다음은 실제 사이트의 측정 결과가 아니라, 이 관계를 보여 주는 HTTP/1.1 구성 예시입니다.HTTP/1.1 200 OKContent-Type: applic..

DGX Spark·맥북 성능과 가격 비교

DGX Spark는 노트북이 아니라 소형 AI 개발용 데스크톱이다. 최근 노트북 비교에 등장하는 RTX Spark는 별도의 Windows PC 플랫폼이다. 두 이름을 구분해야 가격·메모리·벤치마크를 제대로 비교할 수 있다.선택 기준은 최대 연산량 하나가 아니다. 모델이 들어가는 메모리 용량, 입력을 처리하는 시간, 출력을 생성하는 속도, 필요한 소프트웨어 환경을 함께 봐야 한다. 아래 수치는 2026년 10월 22일 확인한 공개 자료다. 자체 실측이 아닌 제조사 사양과 원저자의 측정 기록을 구분해 인용했다.1. 세 제품의 역할과 비교 범위구분DGX Spark 128GBRTX Spark 노트북MacBook Pro M5 Max형태소형 데스크톱제조사별 노트북14형·16형 노트북칩·운영체제GB10·DGX OSN..

페이스북으로 공유카카오톡으로 공유카카오스토리로 공유트위터로 공유URL 복사