전체 글 7

foo, bar, baz 이게 뭐지?

프로그래밍 공부를 하다 보면, 예시 코드에서 foo, bar, baz 등의 이름을 갖는 함수나 변수를 어렵지 않게 만나볼 수 있습니다. 이 단어들이 의미하는 것은 무엇일까요? public void foo(int bar, int baz) { bar++; baz--; return bar * baz; } 이러한 단어들은 메타 문법 변수(Metasyntactic variable)라고 합니다. 위키 백과에서는 메타 문법 변수를 아래와 같이 설명하고 있습니다. 메타 문법 변수 (메타신택틱 변수, metasyntactic variable)는 컴퓨터 과학 , 특히 컴퓨터 프로그래밍에서 견본용 이름으로 사용되는 특정 단어들을 이르는 말이다. 즉, 아직 이름이 정해지지 않은 클래스, 함수, 변수들에 임시로 붙이는 단어들입..

기타주제 2022.02.13

[JavaScript] JPEG 이미지의 메타데이터 읽기

이번 포스트에서는 sharp와 exif-reader를 이용하여 JPEG 이미지의 Exif 데이터를 조회해보겠습니다. JPEG 이미지를 다루는 프로젝트를 진행하던 중, 이미지의 헤더(메타 데이터)를 조회해야 할 필요가 있었습니다. sharp의 metadata() API를 사용하면 이미지의 메타 데이터를 얻어올 수 있습니다. 하지만, 수정일자, 위치 등의 상세한 정보는 EXIF 형식으로 저장되어 있고, sharp에서는 Exif 데이터를 Buffer로 반환해줍니다. 검색을 통해 Buffer를 input으로 사용하는 모듈 exif-reader를 발견했습니다. contributor 에 익숙한 프로필이 보여 확인해보니 sharp의 contributor였습니다. 반가움과 동시에 강한 믿음이 샘솟아 바로 설치했습니다...

JavaScript 2022.02.06

sharp 이미지 퀄리티 낮아지는 문제

sharp를 이용하여 이미지를 처리하다 퀄리티 이슈가 발생하였습니다. 이미지 파일의 크기를 줄이기 위해 PNG파일을 JPEG 포맷으로 변경하면서 발생하였는데, 이유와 해결 방법에 대해 알아보겠습니다. 왜 JPEG를 사용하면 이미지 퀄리티가 떨어질까? PNG는 비손실 압축을 이용하는 이미지 표준이며, RGB값과 함께 8비트의 알파 채널(투명도)이 있습니다. 비손실 압축을 이용하기 때문에 이미지 손실이 없습니다. 대신, 이미지 자체의 크기를 줄이지 않는 한, 파일의 크기를 줄일 수 없기 때문에 주로 원본 이미지에 사용합니다. JPEG는 손실 압축을 이용한 이미지 표준 중 하나이며, PNG와 다르게 알파채널이 존재하지 않습니다. 손실 압축을 이용하기 때문에 이미지를 저장할 때마다 이미지 품질이 감소할 수 밖에..

JavaScript 2022.01.30

[JavaScript] 객체에 조건부로 속성 추가하기

저는 현재 JavaScript를 사용해 인턴 과제를 진행하고 있습니다. 모듈을 사용하면서 config나, option, headers 같이 객체를 파라미터로 전달하는 함수를 많이 볼 수 있었는데, 이런 함수들을 사용하다 보니 조건에 따라 객체를 구성하고 싶다는 생각이 들어 찾아보았습니다. 제 첫 구현은 아래와 같습니다. const a = { foo: 1, bar: baz === true ? "hello" : undefined }; 이 방법은 간단하지만 항상 삼항연산자를 사용해야하고, undefined를 대입하는것이 마음에 들지 않았습니다. 또한 여러개의 속성을 추가하는 경우, 표현식을 중복해서 사용해야 한다는 점도 불편했습니다. const a = { foo: 1, bar: baz === true ? "h..

JavaScript 2022.01.23

Sharp를 이용해 이미지 리사이징 하기

Sharp란? 샤프란 이미지 변환용 node 라이브러리입니다. 리사이징, 색상 변환, 변형 등의 기능을 제공합니다. Node.js 12.13.0 이상의 버전만 지원합니다. 공식문서: https://sharp.pixelplumbing.com github: https://github.com/lovell/sharp 지원하는 포맷 입력 JPEG PNG WebP AVIF TIFF GIF SVG 출력 JPEG PNG WebP AVIF TIFF 입출력을 위해 스트림, 버퍼 개체를 사용할 수 있습니다. 설치 $npm install sharp $yarn add sharp Cross-platform 특정 OS, CPU를 선택하여 설치할 수 있습니다. npm install --platform=... --arch=... --..

JavaScript 2022.01.22

Puppeteer란?

Puppeteer 란? Puppeteer는 Node.js를 이용하여 Chrome / Chromium을 제어하도록 도와주는 라이브러리입니다. 기본적으로 headless로 동작하며, 설정을 이용하여 headless를 무효화 할 수 있습니다. 주로 웹자동화, 크롤링을 위해 사용하는 라이브러리이며, Selenium과 비슷한 역할을 합니다. 단, Selenium은 다양한 언어로 사용할 수 있는 반면, Puppeteer는 Javascript로만 사용할 수 있습니다. Selenium에 비해 나은 점은 Chrome 한정 더 상세한 조작 및 성능 측정 등이 가능하다는 것입니다. github: https://github.com/puppeteer/puppeteer 공식문서: https://pptr.dev Headless란?..

JavaScript 2022.01.16

블로그를 개설하게 된 이유

제가 블로그를 개설하게 된 이유는 아무래도 기록의 의미가 큽니다. 그런데 왜 굳이 공개된 곳에 기록을 하게 됐을까요? [ _ ]과 [ _ ]을 동시에 할 수 있으면 얼마나 좋을까요? 그래서 블로그를 하기로 했습니다. 매일 매일 메모를 하면서 기록의 중요성과 효과를 느끼게 되었습니다. 제가 느낀 두 가지 효과를 말씀드리겠습니다. 1. 기록을 통해 시간과 에너지를 절약할 수 있게 되었습니다. 코딩을 하면서 짧게는 며칠에서 길게는 몇 개월 전의 내용이 필요한 경우가 있었습니다. 이 때 아무 생각 없이 메모했었던 글들이 큰 도움이 되었습니다. 몇 가지 사례를 말씀드리겠습니다. 2021년 10월부터 인턴을 하면서 회사 위키에 리서치 내용을 문서화 하였습니다. 문서화를 처음 시작할 때는 문서화에 대해 부정적인 생각..

기타주제 2022.01.09