Axios 이상하게 동작할 때 해결법

개요 axios 의 버그인지, 아니면 라이브러리끼리의 충돌인지 하여튼, axios 리턴 객체가 문서상의 객체와 다른 원인 불명의 문제를 해결하는 글입니다. axios 그 자체에 대한 설명은 다른 글에도 많으니 참고해주시기 바랍니다. 문제 갑자기 axios가 이상하게 동작했습니다. 원래 요청을 받으면 AxiosResponse 로 받게 됩니다. Typescript 타입 정의를 보니 아래와 같이 되어 있었습니다. 그런데 말입니다, node.js 에서 axios 를 […]

[typescript] readonly 배열의 includes 인수 범위를 확장하기 (Type Predicates)

개요 이 글의 제목을 정하는 데 좀 고민이 많이 들었습니다.. 뭔가 복합적인 문제인 듯 한데, 좀 길게 풀어서 설명하자면, const array = [‘a’, ‘b’, ‘c’] as const 와 같은 readonly 배열에서 ‘a’ | ‘b’ | ‘c’ 타입이 아닌 const needle: string = ‘needle’ 와 같은 string 타입을 이용해 array.includes(needle) 과 같이 사용하고 싶은데, 타입 문제 […]

타입스크립트(typescript) 프로젝트 세팅하기

개요 이 글을 읽기 전에 타입스크립트에 대한 기본적인 개념이 잡혀있어야 합니다. 타입스크립트에 대한 필요성, 기능, 문법 등은 다른 글을 참조해주세요. 트랜스파일링이란 코드를 코드로 변환한다는 뜻입니다. 실제로 node.js 에서 실행할 때에는 js 파일만 해석할 수 있는데, 그래서 ts 파일을 모두 js 파일로 변경해야 합니다. 타입스크립트 컴파일러인 tsc 가 그 역할을 합니다. typescript 를 설치하면 함께 설치되는 […]

[C] 간단한 파서 (Parser) 직접 만들기 (작성중)

극한의 환경이라고도 알려져 있는 C, 여기서 우리는 간단한 파싱 작업을 할 수 있는 프로그램을 만들고자 합니다. 목표 우리의 목표는 간단한 파서(Parser)를 만드는 것입니다. 다음 파일을 규칙에 맞게 잘 읽어들이는 것입니다. 본 파일은 어떤 그래픽 렌더링 프로그램에 전달할 입력 파일입니다. 이 파일은 렌더링 프로그램의 각종 설정과 렌더링할 도형을 정의합니다. 정의하는 방법은 다음과 같이 정의되어 있습니다. 지시자 […]

[Node.js] multer 업로드 실패(에러) 핸들링하기 (작성중)

개요 업로드가 실패하는 원인은 두 가지가 있을 수 있습니다. 업로드 제대로 잘 되고 있었는데 뭔가 서버에서 문제가 터져서 작동을 멈췄을 때 업로드 제대로 되고 있다가 그냥 사용자가 브라우저를 꺼버렸을 때. 생각보다 이 세상에는 인터넷이 느린 곳이 많습니다. 특히 모바일 환경이라면 인터넷이 느린 상황을 더더욱 고려해야 합니다. Node.js 의 Multer 는 파일 업로드 모듈로 유명합니다. 근데 […]

[Node.js] pug + tailwind + Puppeteer + Docker 로 프린터 출력용 PDF 만들기

개요 인터넷 쇼핑몰에서 견적서 같은 걸 자동으로 생성해주는 것을 볼 수 있는데요, 우리도 한번 구현해 봅시다! 전체적으로 Node.js 바탕으로 돌아갑니다. 우선 node 를 설치해주세요. 필자의 버전 기준은 node 14 입니다. docker 를 사용하고자 한다면, docker 와 docker-compose 까지 설치해주세요. 각 기술에 대한 간략한 설명 pug: HTML 템플릿 엔진입니다. 직접 html 파일을 작성하는 것보다 훨씬 간편하고, […]

[Pop!_OS] 부트로더 초기화

개요 ssd 가 잘 인식이 안되서 잘 꼽혀있던 두 개의 자리를 바꿨습니다. 그랬더니 거짓말처럼 Pop!_OS 가 메뉴에서 사라졌습니다. 이게 무슨 일이죠.. 이제 리눅스를 부팅할 수가 없었습니다… Pop!_OS 부팅이 제대로 안되는 문제를 발벗고 해결하기 위해 나섰습니다. 본래 설치를 하면 Pop!_OS 는 systemd-boot 로 부팅된다고 합니다. (아래 인용문 참조) 그게 무슨 소리일까요? 저도 모릅니다. GRUB 도 뭔지 […]

[Node.js] 안전한 암호화 기법인 scrypt 로 사용자 패스워드 암호화하기

들어가기 전에 패스워드는 암호화되어 저장되어 있어야 합니다. 법적으로도 그렇고 보안적으로도 당연합니다. 당신의 데이터이스는 언제든지 털릴 수 있습니다 … scrypt 함수를 이용하는데, 이게 콜백을 받는 함수라서 Promise 로 래핑했습니다. Promise 에 대한 기본 지식이 있어야 코드를 이해할 수 있습니다. mongoose 코드도 많이 사용하므로, 해당 라이브러리를 알고 있다면 읽으시는 데 크게 도움이 될 겁니다. 내가 이해한 암호화 […]

데이터 검증 (Data Validation)은 언제, 얼마나 해야 할까?

개요 필자는 처음 웹 프로젝트를 받았을 때 고생했습니다. 왜냐하면 아는 게 하나도 없었기 때문이지요 (물론 그렇다고 지금도 아는 게 많은 것 같지는 않아요..) 그래도 고생하고 경험하면서 직접적으로 느끼며 배우는 것들은 많은 것 같습니다. 그 많고 많은 주제 중에, 데이터 검증 (Data Validation) 을 언제(when) 얼마나(how much) 해야 하는가에 대한 질문을 조금이나마 더 잘 대답할 수 […]

[vscode] 정규표현식으로 변수의 case 를 변환해보기 (lookahead, lookbehind 활용)

개요 우리의 목표는 아래 코드에서 모든 #define 한 녀석들을 Upper Case Snake Case 로 변환해보는 작업을 할 것입니다. 일일히 손으로 타이핑하여 수정하기에는 너무 오랜 시간이 걸리지요? 그래서 정규표현식을 이용하여 깔쌈하게 바꿔 볼 예정입니다. 바로 아래 나오는 소스코드를 바꿔볼 텐데요, 예를 들어 NoEventMask 라는 문자를 NO_EVENT_MASK 로 바꿔볼 것입니다. case를 변환시키는 작업은 vscode 의 기능을 활용하기 […]

Scroll to top