전체 글 495

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..

Nginx proxy_read_timeout 기준

Nginx의 proxy_read_timeout은 애플리케이션에서 응답 데이터를 읽을 때의 대기 제한입니다. 기본값은 60초이며, 응답 전체를 60초 안에 끝내라는 의미는 아닙니다. 연결 수립, 요청 전송, 응답 읽기를 구분해야 설정을 올바르게 고를 수 있습니다.proxy_read_timeout은 어느 방향에 적용될까?리버스 프록시는 클라이언트의 요청을 애플리케이션에 전달하고 응답을 받아 돌려줍니다. 이때 Nginx가 응답을 받는 구간과 클라이언트에게 보내는 구간은 구분됩니다.설정대상 구간기준proxy_connect_timeoutNginx → 애플리케이션연결을 수립하는 시간proxy_send_timeoutNginx → 애플리케이션요청을 쓰는 동작 사이의 대기proxy_read_timeout애플리케이션 → ..

삼성 에어컨 팬모터 교체 결과

절대 따라 하지 마세요 — 310V 고전압 감전 위험이 에어컨 내부에는 DC 310V 고전압이 걸리는 회로가 있다. 전원을 꺼도 커패시터의 잔류 전하로 심각한 감전 사고가 발생할 수 있다. 분해, 배선·커넥터 조작, 전압·저항 측정을 절대 따라 하지 말고 전문 서비스 엔지니어에게 맡겨야 한다. 아래 내용은 수리 결과를 기록한 사례이며 작업 지침이 아니다.삼성 에어컨 AF18DX839WSN의 상단 팬모터 한 개를 교체해 수리를 마쳤다. 팬 세 개를 모두 교체하는 40만 원 이상 견적을 받았지만, 이번에 실제 지출한 부품값은 임직원 할인을 적용한 56,200원이었다. 할인 전 정상가는 75,000원이다.앞선 팬모터 오류와 15V 전압 강하 분석에서는 상단 모터를 분리하면 15V 계통과 나머지 팬 동작이 회복..

리눅스 memory.oom.group 기준

여러 프로세스가 하나의 작업을 수행할 때, OOM으로 일부만 종료되면 나머지를 계속 실행해도 될까요? 리눅스 cgroup v2의 memory.oom.group은 메모리 부족 시 작업을 함께 종료할 단위를 지정합니다. 메모리 상한이나 자동 재시작 설정과는 역할이 다릅니다.memory.oom.group은 무엇을 바꾸나?기본값은 0입니다. 1로 설정하면 해당 cgroup과 하위 cgroup의 작업을 OOM killer가 나눌 수 없는 하나의 작업으로 취급합니다. 일부 프로세스만 사라지는 상태를 피하려는 설정입니다. 다만 oom_score_adj=-1000으로 보호된 작업은 종료 대상에서 제외됩니다.그림은 그룹 종료 정책의 차이를 나타낸 개념도입니다. 값이 0이라고 매번 정확히 한 프로세스만 종료되는 것은 아닙..

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