목록IT/러스트 (6)
altair의 프로젝트 일기
몇 달 전 라이브러리를 개선하는 PR이 들어온 적이 있었다. 비록 언젠가 수정하려고 생각했던 부분이지만 당시에는 학기 중에 과제가 쏟아지고 있었기에 제대로 확인하지도 못했고 내가 의도하지 않는 수정 사항도 많아서 수락하지 않았다. 1.4.1 버전까지 이미지 압축 로직은 다음과 같았다. image 라이브러리를 사용해 원본 이미지 파일을 jpeg 파일로 변환해 저장한다. 변환한 임시 파일을 다시 읽어와 주어진 비율만큼 리사이징하고 퀄리티를 낮춘다. 압축된 결과 이미지를 jpeg으로 저장하고 임시파일을 삭제한다. 이렇다보니 압축과정에서 불필요한 파일 읽기/쓰기가 추가로 발생했다. 지금까지는 일단 작동하니까 놔뒀던 방식이지만, 시간 여유가 생긴 지금, 이를 개선할 필요가 있다고 생각했다. 위에서 보다시피 원본 ..
먼저 구 테스트 코드를 분석해보자. 이 두 함수는 매 테스트의 처음과 끝에 실행된다. 테스트를 위해 원본 폴더, 목적지 폴더를 각각 생성하고 맨 마지막에 그 두 폴더를 삭제한다. 샘플 파일들이 담긴 폴더에서 필요한 파일을 원본 폴더에 복사한 후 테스트하는 구조로 만들어져 있다. 위 예시 테스트를 보자. jpg 이미지 하나를 압축하는 기능을 테스트하고 있다. 다른 모든 테스트들에게서 나타나는 공통적인 문제를 모두 포함한다. 파일 경로가 직접적으로 코드에 포함된다. 샘플 파일과 그 경로에 대한 종속성이 대단히 높다. 테스트할 파일 형식이 코드에 포함된다. 샘플 파일의 형식에 대한 종속성 또한 높다. 테스트 결과 중 일부를 출력한다. 유닛 테스트는 실패 또는 성공 두 상태만 존재하는 것이 좋다. 무엇보다 압축..
개요 예전에 ImageCompressor2 프로그램을 개발한 적이 있다. 본래는 내가 가장 중요한 사용자였고 일단 내 상황에 맞춰 라이브러리를 만들었다. 코드에서 나는 냄새들도 일단 덮어놓고 작동하기만 하는 부분도 많았다. 그런데 작년 어느 날, github 리포지토리에 풀 리퀘스트가 올라왔다. 불필요한 데이터 복사를 수정하는 코드였다. Avoid unnecessary copies in Compressor::resize. by adamreichold · Pull Request #4 · altair823/image_compressor (github.com) Avoid unnecessary copies in Compressor::resize. by adamreichold · Pull Request #4 · ..
개요 저번 글에서 기본적인 직렬-역직렬화를 구현했다. 파일을 단순히 저장하고 복원하기만 할 뿐이라면 굳이 더 뭔가 필요하진 않다. 하지만 만약 민감한 파일이나 너무 큰 용량의 파일을 저장할 때는 문제가 될 수 있다. 파일 데이터가 날 것으로 저장되기 때문에 마음만 먹으면 남들도 언제든지 파일을 복원하고 내용을 확인할 수 있다. 그래서 이번엔 데이터를 압축하고 암호화하는 과정을 설명하고자 한다. 압축 데이터 압축은 쉬운 문제가 아니다. 압축률과 시간, 메모리 사이의 적절한 트레이드오프가 필연적으로 발생한다. 압축률이 높다면 시간이 오래 걸리거나, 메모리를 많이 사용해야 하거나, 둘 다일 것이다. 반대로 시간을 짧게 쓰고 싶거나 메모리를 적게 쓰고 싶다면 압축률을 어느 정도 포기해야 한다. 다른 압축 프로그..
개요 예전에 여러 글로 따로 썼듯이 난 라즈베리파이로 만든 개인 나스를 아직도 적극적으로 사용중이다. 거의 컴퓨터 D드라이브처럼 많은 파일을 보관하는 용도로 사용 중이다. 오죽하면 데스크탑의 용량은 빠르게 작업하기 위한 캐시가 아닌가 하는 정도로 말이다. 게다가 맥북과 윈도우 데스크탑을 자주 번갈아 쓰는 난 양쪽 모두에서 접근할 수 있는 개인 공유 드라이브가 있다는 점에서 나스가 참 매력적이다. ImageCompressor2 개발기 가끔 아카이빙 했던 사진들을 둘러보곤 한다. 그리운 옛날 생각도 나고 그때 기분도 다시 느낄 수 있었다. 그러다 어느 날 모든 사진들의 용량을 살펴봤다. 80기가가 넘는 용량이었다. 평소라면 altair823.tistory.com 그러던 어느 날, 다시 한 번 사진들이 날 불..
가끔 아카이빙 했던 사진들을 둘러보곤 한다. 그리운 옛날 생각도 나고 그때 기분도 다시 느낄 수 있었다. 그러다 어느 날 모든 사진들의 용량을 살펴봤다. 80기가가 넘는 용량이었다. 평소라면 별생각 없이 넘겼겠지만, 그때는 뭔가 과하다는 생각이 들었다. 모든 사진 스캔본이 png 파일로 저장되어 있는 것이 아닌가? 내가 배운 것이 맞다면 png 포맷은 무손실 압축 포맷이라 화질이 좋지만 비교적 용량이 크다. 실제로 일기 스캔본을 확대해보니 흑연이 종이에 뭍은 모습까지 보였다. 어떤 사진은 해상도보다 내용이 중요한 사진들이 있다. '얼마나 많은 머리카락이 보이느냐'보다 '그 사진에 누가 어떤 모습으로 나와있나'가 더 중요한 사진들 말이다. 모임에서 친구들과 찍은 사진이나 일기 스캔본은 어느 정도 이상의 화..