현대의 프로그램은 많고 복잡한 의존 관계를 가지고 있습니다. 만약 의존하고 있던 프로그램의 버전이 업데이트 되면서 문제가 생기면 대응을 해야하는데, 의존하는 라이브러리가 수십개에다가, 모든 라이브러리가 잦은 업데이트를 한다면, 개발은 커녕 업데이트에 대응하느라 시간을 모두 써야 할 것입니다. 이럴 때, 대상 라이브러리의 버전을 지정하여 효율적으로 관리해줄 수 있게 도와주는 버전 관리 방식 중 대표적인 방법이 '유의미 버전' 으로 번역되는 semantic versioning(줄여서 semver) 입니다. https://semver.org/lang/ko/ 이 글에서는 유의적 버전이 어떻게 작동하는지 스토리텔링 방식으로 풀어보며, 각 버전 변경의 대표적인 사례를 함께 살펴 보고자 합니다. 이 글을 한 번 읽어..
PDF 파일의 크기가 큰 파일의 크기(약 200~300MB)를 줄여보려고 Acrobat Reader 와 각종 웹 PDF 리사이징 기능을 지원하는 서비스들을 이용해보았습니다만, 모두 일정 시간이 지나면 타임아웃 에러를 던지거나, 무한 대기 상태에 빠져버리곤 하는데요. 만약 다른 서비스에서 pdf 사이즈를 줄이다가 실패하셨다면 시도해보시길 바랍니다. pd2pdf 라는 커맨드라인 유틸리티를 활용해서 pdf 파일의 크기를 줄이는 방법을 알아봅니다.ps2pdf 로 pdf 파일 크기 줄이기ps2pdf -dPDFSETTINGS=/ebook original.pdf compressed.pdf ps2pdf 가 설치되어 있는 상태에서 해당 폴더로 이동하여 위 스크립트를 실행합니다. original.pdf 에 줄이고자 하는..
백엔드 개발자로 일하면서 구독하고 있는 메일링 서비스들을 정리해보았습니다. 7년간 다양한 메일링 서비스를 구독도 하고 구독취소도 해오면서 개인적으로 정제된 메일링 서비스들을 나열해봅니다. 2단계(구독 필수, 구독 선택)로 나누어 리스트를 제안드립니다. 이 글은 2024년 11월 16일에 작성되었으며, 주기적으로 저의 실제 구독 현황에 따라 리스트를 업데이트합니다.💎 구독 필수뉴스레터 컨텐츠의 품질이 우수geeknews weeklyhttps://news.hada.io/weekly 에서 구독할 수 있습니다. 대한민국의 해커뉴스를 표방하여 만들어진 서비스입니다. 구독을 하면 매주 월요일에 지난 주의 news.hada.io 커뮤니티의 핫토픽을 리스트로 받아볼 수 있습니다. 특히 2~3개 정도의 메인 토픽과 ..
나와 함께했던 IDE들초등학생 시절 다니던 컴퓨터학원에서 정보처리기능사 시험을 준비하면서 간단한 프로그래밍을 배웠었다. 당시에는 정보처리기능사 시험을 Visual Basic 이라는 언어를 활용해서 치렀었기 때문에, 자격증을 따려면 Visual Studio 로 코딩을 배웠어야 했다. 중학교 시절에는 RPG 만들기라는 프로그램으로 게임을 만들어보기도 했었다. 불리언, 분기, 변수, 반복 등의 개념이 있어서 지금의 스크래치와 어찌보면 그 결을 같이 한다고 볼 수도 있겠다 싶다. 대학 시절에도 전산물리 과목을 수행하기 위해 포트란이라는 고대언어를 사용하기도 했었는데, IDE 는 Visual Studio 였다. 그러다가 생활코딩 웹애플리케이션 만들기 수업을 듣기 시작하면서, 본격적으로 프로그래밍의 세계에 뛰어들게..
CORS 에러는 웹 개발에 입문하는 많은 사람들에게 좌절을 안겨주는 유명한 오류입니다. CORS 에러는 웹을 이루는 다양한 요소를 먼저 이해하고 나면, 어렵지 않게 이해할 수 있습니다. 하지만 그 요소가 무척이나 많은데요. 필요한 개념들을 다양한 실습과 함께 모두 뜯어보고 이해해봅시다. [CORS 가 어려운 이유]는 시리즈로 구성됩니다. 아래 목차를 확인해주세요. CORS 가 어려운 이유CORS 에러 마주하기HTTP 요청과 응답의 구조CORS 에러 발생 주체와 시점Origin과 Same-origin PolicyCORS의 정의 톺아보기 (현재 글) ✅ "CORS? 그거 에러 아니야?" 하셨다면 한 번 읽어보시길 바랍니다.✅ CORS 에러 해결을 단순히 cors 라이브러리의 가이드를 단순히 따라 해결해오셨다..
CORS 에러는 웹 개발에 입문하는 많은 사람들에게 좌절을 안겨주는 유명한 오류입니다. CORS 에러는 웹을 이루는 다양한 요소를 먼저 이해하고 나면, 어렵지 않게 이해할 수 있습니다. 하지만 그 요소가 무척이나 많은데요. 필요한 개념들을 다양한 실습과 함께 모두 뜯어보고 이해해봅시다. [CORS 가 어려운 이유]는 시리즈로 구성됩니다. 아래 목차를 확인해주세요. CORS 가 어려운 이유CORS 에러 마주하기HTTP 요청과 응답의 구조CORS 에러 발생 주체와 시점Origin과 Same-origin Policy (현재 글) ✅ 출처(origin)의 의미를 알고싶다면 한 번 읽어보세요.✅ 교차출처(Cross-origin)의 의미와 동일출처(Same-origin)의 의미를 알고싶다면 한 번읽어보세요.✅ 웹..
CORS 에러는 웹 개발에 입문하는 많은 사람들에게 좌절을 안겨주는 유명한 오류입니다. CORS 에러는 웹을 이루는 다양한 요소를 먼저 이해하고 나면, 어렵지 않게 이해할 수 있습니다. 하지만 그 요소가 무척이나 많은데요. 필요한 개념들을 다양한 실습과 함께 모두 뜯어보고 이해해봅시다. [CORS 가 어려운 이유]는 시리즈로 구성됩니다. 아래 목차를 확인해주세요. CORS 가 어려운 이유CORS 에러 마주하기 HTTP 요청과 응답의 구조CORS 에러 발생 주체와 시점 (현재 글) ✅ CORS 에러는 누가 발생시킨건지 궁금하다면 이 글을 한 번 읽어보세요.✅ CORS 에러를 발생시킨 주체가 '웹브라우저'임을 직접 확인해봅니다. CORS 에러는 어디서 발생한 에러일까요? 서버가 에러를 응답한걸까요? 정답부..
CORS 에러는 웹 개발에 입문하는 많은 사람들에게 좌절을 안겨주는 유명한 오류입니다. CORS 에러는 웹을 이루는 다양한 요소를 먼저 이해하고 나면, 어렵지 않게 이해할 수 있습니다. 하지만 그 요소가 무척이나 많은데요. 필요한 개념들을 다양한 실습과 함께 모두 뜯어보고 이해해봅시다. [CORS 가 어려운 이유]는 시리즈로 구성됩니다. 아래 목차를 확인해주세요. CORS 가 어려운 이유CORS 에러 마주하기 (현재 글)HTTP 요청과 응답의 구조 ✅ HTTP 요청메시지의 구조 또는 응답메시지의 구조를 알고싶다면 한 번 읽어보세요.✅ 실제 HTTP 요청을 보내보고, 요청메시지의 모습과 응답메시지의 모습을 직접 눈으로 확인해봅니다. 웹브라우저(client)는 서버에 요청(request)하고, 요청을 받은 ..
CORS 에러는 웹 개발에 입문하는 많은 사람들에게 좌절을 안겨주는 유명한 오류입니다. CORS 에러는 웹을 이루는 다양한 요소를 먼저 이해하고 나면, 어렵지 않게 이해할 수 있습니다. 하지만 그 요소가 무척이나 많은데요. 필요한 개념들을 다양한 실습과 함께 모두 뜯어보고 이해해봅시다. [CORS가 어려운 이유]는 시리즈로 구성됩니다. 아래 목차를 확인해주세요. CORS가 어려운 이유CORS 에러 마주하기 (현재 글) ✅ CORS 에러를 한 번도 본 적이 없다면 읽어보세요.✅ CORS 에러를 별도의 세팅 없이 브라우저만으로 재현해봅니다. CORS 에러를 처음 들어보셨다면, 일단 CORS 에러를 만나보도록 합니다. google.com 에서 개발자도구를 열어 youtube.com 을 fetch 해봅니다.CO..
세상에 가득한 거짓을 심화시키지 않기'알잘딱깔센'으로 대표되는 대한민국의 의사소통 문화는 high-context 문화, guess 문화라고도 합니다. 서로의 대화의 바탕에 공유되는 거대한 배경(high-context)이 있고, 대화 속에서 상대방의 눈치를 살펴 적당히 추측(guess)하여 의도를 파악합니다. 반면 서양 문화는 low-context, ask 문화라고 부른다고 합니다. 공유되는 배경이 적고(low-context), 상대방의 의도가 무엇인지 아직 모호하다면 부족한 부분을 질문(ask)을 통해 채웁니다. 두 사람이 대화를 합니다. 서로 '알 것 같은' 느낌이 들어, '충분히 알았다는 느낌'이 들어 대화를 그만 둡니다. 시간이 흘러 다시 마주하게 된 두 사람은 기분이 좋지가 않습니다. '제가 그렇..
2018년, '애자일', '리팩터링'이라는 용어가 이미 익숙한 용어였던 시기에 개발을 시작했습니다. 얼마 지나지 않아 '애자일', '리팩터링'의 정의와 개발자들이 말하는 뉘앙스가 차이가 있다는 것을 알게 되었고, 오히려 '애자일'과 '리팩터링'을 개발자들에게 유리한(?) 방향으로 왜곡하여 사용하는 모습들도 목격하기도 했습니다. 소프트웨어 산업의 가장 중요한 특성이자 특징 중에 하나인 '변화'에 초점을 맞춰 '애자일'과 '리팩터링'의 본질을 책 '리팩터링'의 2장의 주장을 곁들여 서술해봅니다. 변화(변경)에 주저하는 당신(개발자)에게 과거의 개발 프로세스와 현대 SW 의 특성인 변화책 [리팩터링] 에서는 완벽한 설계 이후에 코딩(구현)을 하는 방식은 20년 전의 방식이라고 말합니다. 책의 쓰여진 연도(20..
Eric Normand 의 책 "쏙쏙 들어오는 함수형 코딩(grokking simplicity)" 의 '가능한 실행순서의 개수' 공식을 유도해봅니다.개요가능한 실행순서의 개수 공식은 다음과 같습니다. $$o =\frac{(t\cdot a)!}{(a!)^t}$$ $t$ 는 타입라인의 개수이고, $a$는 액션의 개수입니다.위 공식은 아래 그림과 같이 각 타임라인이 모두 같은 수의 액션을 가지고 있을 때 적용 가능합니다. (타임라인마다 액션의 수가 다를 수 있는데, 그 부분을 책에서 설명해주지 않은 것 같아보입니다.)위와 같은 경우 $t=3$, $a=2$ 로 적용 가능하며, 가능한 실행순서의 개수 $o=90$ 입니다.가령 다음과 같은 타임라인이라면 위 공식을 적용할 수는 없습니다.책의 공식 $(t \cdot ..