[C] 다형성(Polymorphism) 구현하기

개요 객체지향 패러다임에서 다형성을 정의하는 법도 여러가지겠지요. 위키백과에서는 프로그램 언어의 각 요소들이 다양한 자료형(type)에 속하는 것이 허가되는 성질을 가리킨다고 되어있습니다. 모두 아시다시피, C에서는 객체지향의 패러다임을 언어 차원에서 설계를 해놓지 않았으므로 그러한 개념을 구현하기가 굉장히 까다롭습니다. 이론적인 부분을 크게 다루지는 않을 것이므로, 간단하게 정의하는 것으로 시작하겠습니다. 이 글에서 다형성을 구현한다는 의미는, 소스코드 상에서 동일한 함수 호출이 […]

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) 해야 하는가에 대한 질문을 조금이나마 더 잘 대답할 수 […]

Scroll to top