Skip to content

v0.240.0

Choose a tag to compare

@github-actions github-actions released this 09 Sep 00:09
· 11 commits to main since this release

kanpic v0.240.0

v0.240.0

표 위의 제목 한 줄이 파일을 다시 한 열로 만들지 않습니다

지난 릴리즈에서 세미콜론으로 가른 CSV 를 올리기·부르기 두 문이 똑같이 읽게
했습니다. 그런데 현장에서 오는 파일은 표만 담겨 있지 않습니다. 보고서를
내보내는 도구는 대개 표 위에 제목을 한 줄 얹습니다.

2026년 1분기 보고서
지점;매출;비고
서울;1200;
부산;900;

열을 가르는 규칙은 첫 줄만 세었습니다. 첫 줄인 2026년 1분기 보고서 에는
쉼표도 세미콜론도 탭도 없습니다. 아무것으로도 갈리지 않는 줄이니 세어 봐야
전부 0 입니다. 그러면 쉼표가 이깁니다 — 그리고 이 파일에는 쉼표가 없으므로,
아래의 멀쩡한 표까지 통째로 A 열 한 줄짜리 글자 덩어리 가 됩니다.

지점;매출;비고 가 A1 에, 서울;1200; 이 A2 에 통으로 들어앉습니다. 수는
하나도 없으니 =SUM(B:B) 은 0 을 내놓습니다. 유럽식 CSV 를 위해 세미콜론을
세게 해 놓고도, 그 파일이 제목 줄을 이고 오면 고치기 전으로 돌아가던 셈입니다.
빈 줄 하나가 위에 붙어 있어도 마찬가지였습니다.

한 줄이 아니라, 뜻이 맞는 줄들이 정합니다

이제 머리의 열 줄까지 보고, 그 중 가장 많은 줄을 같은 열 수로 가르는
후보를 고릅니다. 위 파일에서 세미콜론은 세 줄을 나란히 3열로 가릅니다.
쉼표는 한 줄도 가르지 못합니다. 그래서 세미콜론이 이깁니다.

핵심은 가르지 못하는 줄은 세지 않는다 는 것입니다. 제목 줄은 어느
후보에 대해서도 아무 말을 하지 않으므로, 아래 줄들의 판단을 뒤집지 못하고
조용히 빠집니다. 제목에 쉼표가 들어 있어도(보고서, 1분기) 그 한 줄은 세
줄을 이기지 못합니다.

같은 수로 갈린다면 예전과 똑같이 쉼표가 이깁니다. 규칙이 바뀌면서 덤으로
얻은 것도 있습니다.

  • 본문에 흩어진 세미콜론이 더는 파일을 가로채지 못합니다. 1,김,가;나
    2,박,다;라;마 처럼 줄마다 개수가 다르면 세미콜론은 어느 열 수로도 뜻이
    맞지 않는 반면, 쉼표는 매 줄을 3열로 가릅니다.
  • 짝이 맞지 않는 따옴표가 잃는 것은 그 줄 하나 뿐입니다. 예전에는 그
    아래 전부가 따옴표 안으로 보여 아무것도 세지 못했습니다.
  • 따옴표 안은 여전히 세지 않습니다. 이름,"가;나;다;라" 는 두 열입니다.

머리의 열 줄만 봅니다. 이십 메가바이트짜리 업로드를 가르는 것을 고르자고
파일 전체를 훑지 않습니다. 가져오기 쪽도 첫 줄만 잘라 넘기던 것을 앞
64 KiB(마지막 줄 끝까지)로 넓혔을 뿐, 본문 전체를 글자로 옮기지는 않습니다.

확인

  • internal/delimited/delimiter_test.go
    • TestDelimiterFollowsTheLinesThatAgree — 제목 줄, 빈 첫 줄, 쉼표가 낀
      제목, 제목 아래의 탭 파일, 본문에 섞인 세미콜론, 열 수가 들쭉날쭉한
      파일까지 열일곱 가지를 갈라 봅니다
    • TestDelimiterReadsOnlyTheHead — 머리 뒤에 천 줄을 더 붙여도 판단이
      바뀌지 않는다는 것을 못 박습니다
  • internal/external/fetcher_test.go
    • TestImportDataReadsWhicheverSeparatorCutsTheFile — 제목 줄을 인
      세미콜론 표가 2열로 들어오고 1200 이 수로 읽히는지 봅니다
  • internal/importexport/service_test.go
    • TestATitleRowAboveTheHeaderDoesNotDecideHowTheFileIsCut — 올리기로
      들어온 같은 파일에도 같은 규칙이 걸린다는 것을 못 박습니다

서버 안쪽에서 파일을 읽는 규칙만 바뀌었습니다. 화면과 이미 저장한 문서는
그대로이고, 따로 하실 일은 없습니다.

오프라인 설치

이 릴리즈는 웹 자산과 서버 바이너리를 포함한 Docker 이미지 아카이브로 제공됩니다.

sha256sum -c kanpic-v0.240.0.tar.gz.sha256
gzip -dc kanpic-v0.240.0.tar.gz | docker load
docker run --rm -p 8080:8080 \
  -e POSTGRES_DSN='postgres://kanpic:password@postgres.internal:5432/kanpic?sslmode=require' \
  kanpic:v0.240.0
  • 필수 런타임 환경 변수: POSTGRES_DSN
  • Redis 및 외부 인터넷 연결: 불필요
  • 관리자 초기 로그인을 보호하려면 BOOTSTRAP_ADMIN_IDBOOTSTRAP_ADMIN_PASSWORD를 함께 지정합니다.
  • 무결성 검증 파일: kanpic-v0.240.0.tar.gz.sha256