754 posts
자바스크립트 배열 정렬: sort()와 toSorted() 함수

자바스크립트 배열 정렬: sort()와 toSorted() 함수

배열 안의 값들을 정렬하는 것은 백엔드 프론트엔드를 가리지 않고 빈번하게 필요한 작업이죠? 자바스크립트에서 배열을 정렬할 때는 예전부터 있었던 sort() 함수나 비교적 최근에 추가된 toSorted() 함수를 사용합니다. 이번 글에서는 이 두 함수를 사용하여 자바스크립트에서 배열을 정렬하는 기본적인 방법과 주의해야 할 부분에 대해서 알아보겠습니다. 배열의 sort() 함수 자바스크립트에서 배열을 정렬을 하는 가장 유명한 방법은 뭐니뭐니 해도 sort() 함수일텐데요. 배열을 상대로 sort() 함수를 호출하면 해당 배열 내의 값들

가드(Guard)로 NestJS 앱 안전하게 지키기

가드(Guard)로 NestJS 앱 안전하게 지키기

이번 글에서는 가드(Guard)를 활용하여 NestJS 앱을 위험한 요청으로 부터 효과적으로 보호하는 방법에 대해서 배워보도록 하겠습니다. 가드(Guard)란? NestJS에서 가드(guard)란 애플리케이션의 최전선에서 말그대로 애플리케이션을 보호하는 역할을 담당하는데요. NestJS로 들어오는 요청은 컨트롤러(controller) 단에 도달하기 전에 반드시 가드를 거쳐가도록 되어 있습니다. 가드를 이용하면 컨트롤러가 요청을 처리하기 전에 안전하지 않은 요청을 효과적으로 차단할 수 있습니다. 따라서 애플리케이션 보안을 위해서 필수

지연 없는 서드파티 스크립트 로딩을 위한 Partytown 🎉

지연 없는 서드파티 스크립트 로딩을 위한 Partytown 🎉

웹사이트 개발을 하다보면 여러가지 이유로 내가 작성하지 않은 서드파티(3rd-party) 스크립트를 불러와야 하는 경우가 있습니다. 대표적인 예로 Google Analytics와 같은 통계용 스크립트와 Google AdSense와 같은 광고용 스크립트를 들 수 있는데요. 이번 글에서는 웹 워커(Web Worker)라는 기술을 사용하여 이러한 서드파티 스크립트를 매우 빠르게 로딩해주는 혁신적인 라이브러리인 Partytown을 소개해드리겠습니다. 기존 스크립트 로딩 방식의 문제점 Partytown에 대해서 이야기하기 전에 기존에 웹에서

자바스크립트 맵(Map) 완벽 가이드

자바스크립트 맵(Map) 완벽 가이드

자바스크립트에서 키와 값의 쌍으로 데이터를 저장해야 할 때, 대부분 일반 객체({})를 사용하실 텐데요. 객체가 워낙 범용적이다 보니 많은 분들이 별 생각 없이 객체로 모든 키-값 저장을 해결하곤 합니다. 그런데 ES6에서 추가된 맵(Map)을 사용하면 객체로는 까다로운 작업들을 훨씬 깔끔하게 처리할 수 있습니다. 키의 타입에 제한이 없고 데이터의 개수를 바로 알 수 있으며 삽입 순서가 보장되는 등 여러 장점이 있거든요. 이번 포스팅에서는 다양한 예제를 통해서 자바스크립트의 Map을 어떻게 사용하는지 차근차근 알아보겠습니다. 맵 자

자바스크립트에서 데이터 스트림 읽기 (ReadableStream)

자바스크립트에서 데이터 스트림 읽기 (ReadableStream)

ChatGPT와 같은 LLM(Large Language Model, 대형 언어 모델)이 등장하면서 웹에서 텍스트를 스트리밍하는 사례가 점점 늘어나고 있는데요. 그에 따라 별다른 라이브러리없이도 웹에서 스트림을 쓰고 읽을 수 있는 자바스크립트의 Streams API가 다시 주목받고 있는 것 같습니다. 이번 포스팅에서는 자바스크립트의 Streams API을 사용하여 스트림을 생성하고 데이터를 읽는 방법에 대해서 알아보겠습니다. 읽을 수 있는 스트림 생성 자바스크립트에서 데이터를 읽을 수 있는 스트림을 만들 때는 ReadableStrea

자바스크립트의 Streams API

자바스크립트의 Streams API

웹 스트리밍이라고 하면 예전에는 유튜브 같은 동영상 서비스를 떠올리곤 했는데요. ChatGPT가 등장한 이후로는 텍스트 스트리밍도 아주 흔해졌습니다. ChatGPT에 질문을 던지면 답변이 한꺼번에 나오는 게 아니라 글자가 하나씩 흘러나오죠? 바로 이 뒤에서 Streams API가 일하고 있습니다. 이번 글에서는 자바스크립트의 Streams API가 무엇이고 어떻게 사용하는지 알아보겠습니다. 스트림이란? 스트림(stream)은 데이터를 한 번에 전부 가져오는 대신 조각(chunk) 단위로 나눠서 순차적으로 처리하는 방식입니다. 1GB

GitHub의 REST API 호출 방법

GitHub의 REST API 호출 방법

깃허브(GitHub)는 개발자들이 소프트웨어 프로젝트를 관리하고 협업하는 데 필요한 다양한 기능을 제공하는 매우 인기있는 플랫폼인데요. 일상적인 개발을 할 때는 깃허브의 웹사이트를 통해서 대부분의 작업을 처리할 수 있지만 개발 과정을 자동화하거나 다른 개발 도구와 통합할 때는 프로그래밍적으로 접근해야 할 때가 있습니다. 이럴 때는 깃허브에서 제공하는 REST API를 사용하면 되는데요. 이번 포스팅에서는 터미널에서 curl로 깃허브의 REST API를 실제로 같이 호출해보면서 기본적인 API 사용 방법에 대해서 알아보겠습니다. 터미

Zod로 입출력 간 데이터 변환하기

Zod로 입출력 간 데이터 변환하기

지난 포스팅에서 Zod로 스키마를 정의하는 다양한 방법에 대해서 알아보았는데요. Zod의 부가적인 기능이지만 알아두면 굉장히 유용한 입출력 간 데이터 변환에 대해서 알아보겠습니다. 내장 트랜스포머 Zod는 입출력 간 문자열 변환을 돕기 위해서 트랜스포머(transformer)를 내장하고 있는데요. 대표적으로 .trim(), .toLowerCase(), .toUpperCase()를 들 수 있습니다. 그럼 이 3가지 내장 트랜스포머를 모두 사용해서 스키마를 하나 정의한 후에 데이터 변환을 해보겠습니다. 결과를 출력해보면 입력된 문자열이

Zod를 통한 타입스크립트 친화적인 스키마 정의

Zod를 통한 타입스크립트 친화적인 스키마 정의

이전 포스팅에서는 Zod를 사용하여 하나의 스키마로 유효성 검증과 타입 선언을 한 번에 해결하는 방법에 대해서 살펴보았는데요. 이번 포스팅에서는 Zod에 제공하는 타입스크립트 친화적인 검증자를 사용하여 스키마를 정의하는 다양한 방법에 대해서 알아보도록 하겠습니다. 자료형 스키마 정의는 자료형울 명시하는 것부터 시작하는데요. Zod는 자바스크립트의 기본 자료형이나 Date와 같은 내장 클래스에 대응하는 검증자(validator) 함수를 제공합니다. 예를 들어, 이메일, 나이, 활성화 여부, 생성 일자로 이루어진 사용자 객체를 나타내는

Zod로 유효성 검증과 타입 선언의 두 마리 토끼 잡기

Zod로 유효성 검증과 타입 선언의 두 마리 토끼 잡기

이전 포스팅에서 타입스크립트로 코드를 작성하는 것과 무관하게 왜 자바스크립트 프로그램에서 유효성 검증이 필요한지에 대해서 알아보았는데요. 이번 포스팅에서는 최근 개발자들로부터 많은 인기를 끌고 있는 Zod를 사용하는 전반적인 방법에 대해서 알아보겠습니다. 라이브러리 설치 프로젝트에 zod라는 패키지를 npm으로 설치합니다. 그리고 Zod를 사용하실 때는 가급적 타입스크립트는 strict 모드로 쓰시기를 추천드릴게요. 이제 zod 패키지에서 z를 불러올 수 있으며, 이 녀석만 있으면 우리는 Zod의 모든 기능을 활용할 수 있습니다.

타입스크립트를 쓰는데도 유효성 검증이 필요할까?

타입스크립트를 쓰는데도 유효성 검증이 필요할까?

"타입스크립트로 코드를 짜니까 별도로 유효성 검증은 필요없는 거 아니에요?" 타입스크립트를 공부하고 계시거나 자바스크립트 경험이 많지 않은 개발자들로 부터 종종 받는 질문인데요. 정말 타입스크립트의 타입 검사가 자바스크립트의 유효성 검증을 대신할 수 있을까요? 이번 포스팅에서는 이러한 타입스크립트에 대한 오해를 풀어보는 시간을 갖도록 하겠습니다. 타입스크립트의 역할 이해를 돕기 위해서 타입스크립트로 간단한 코드를 함께 짜볼까요? 사용자 계정을 나타내는 Account 인터페이스를 선언하고 이것을 입력으로 받는 processAccoun

자바스크립트 세트(Set) 완벽 가이드

자바스크립트 세트(Set) 완벽 가이드

세트(Set)는 자바스크립트에서 고유한 값들의 집합을 다루는 자료구조입니다. 이를 활용하면 데이터 중복을 제거하고 유일한 값들을 효과적으로 관리할 수 있는데요. 아무래도 세트가 ES6에서 추가된 기능이다 보니 아직도 많은 분들이 세트를 쓰면 딱인 경우에도 습관처럼 배열을 쓰시는 것 같습니다. 뿐만 아니라 굳이 세트를 쓸 필요가 없는 상황에서 단지 새로운 기능이라고 세트를 오용/납용하시는 주니어분들도 심심치 않게 볼 수 있는데요. 이번 포스팅에서는 다양한 예제를 통해서 자바스크립트의 Set을 어떻게 사용하는지 아주 꼼꼼하고 차근차근

CSS의 accent-color 속성을 활용한 미니멀 스타일링

CSS의 accent-color 속성을 활용한 미니멀 스타일링

HTML에서 체크 박스나 라디오 버튼과 같이 양식(form)을 구성하는 요소들은 CSS로 스타일하기가 까다롭기로 악명이 높은데요. 브라우저에서 제공하는 기본 스타일대로 두자니 너무 올드해보이고 직접 스타일을 하자니 다른 HTML 요소처럼 쉽게 스타일이 되지 않으니까요. 그런데 CSS 속성 딱 하나로 이렇게 스타일이 어려운 HTML 요소를 나름 그럴 듯하게 스타일할 수 있다는 사실을 알고 계셨나요? 이번 포스팅에서는 최소한 노력으로 최대 스타일 효과를 낼 수 있는 CSS의 accent-color라는 유용한 속성을 소개해드리겠습니다.

JSON Schema로 데이터 구조 정의하고 검증하기

JSON Schema로 데이터 구조 정의하고 검증하기

설정 파일 하나 잘못 건드렸다가 배포가 실패한 경험, 다들 한 번쯤 있지 않을까요? tsconfig.json에 오타가 있었다거나 GitHub Actions 워크플로우 파일에서 들여쓰기를 하나 잘못 넣었다거나 😅 JSON 파일은 사람이 읽고 쓰기엔 편하지만 구조가 조금만 복잡해지면 어떤 필드가 필수인지, 값의 타입이 뭔지 헷갈리기 시작합니다. 이런 문제를 해결하기 위해 등장한 것이 JSON Schema인데요. JSON 데이터가 어떤 구조를 가져야 하는지를 JSON 형태로 정의하는 표준이라고 생각하면 됩니다. 이번 글에서는 JSON

ts-reset: 타입스크립트한테 뒤통수 맞지 않기

ts-reset: 타입스크립트한테 뒤통수 맞지 않기

우리가 버그가 없는 코드를 작성하기 위해서 사용하는 타입스크립트도 알고 보면 은근히 버그 투성이라는 것을 혹시 알고 계신가요? 이번 포스팅에서는 많은 개발자들이 타입스크립트로 코딩하다가 겪게 되는 황당한 경우에 대해서 알아보고, 이러한 타입스크립트의 버그를 깔끔하게 고쳐주는 ts-reset이라는 라이브러리를 소개해드리려고 합니다. 배열의 includes() 함수의 배신 배열에 특정 요소가 존재하는지를 확인하기 위해서 includes() 함수를 많이 사용하시죠? 그런데 배열을 상대로 as const를 사용하여 읽기 전용(read-on

CSS aspect-ratio로 가로세로 비율 맞추기

CSS aspect-ratio로 가로세로 비율 맞추기

웹 페이지에 이미지나 비디오를 넣을 때 가로세로 비율 때문에 고생해본 적 있으신가요? 너비를 100%로 맞추면 높이가 찌그러지고, 높이를 고정하면 이미지가 잘리고 😅 특히 반응형 웹에서는 화면 크기에 따라 요소의 너비가 계속 바뀌기 때문에 비율을 유지하는 게 쉽지 않습니다. 예전에는 padding-top 트릭 같은 우회 방법을 썼는데요. 이제는 CSS의 aspect-ratio 속성 하나로 깔끔하게 해결할 수 있습니다. aspect-ratio 속성 aspect-ratio는 요소의 가로세로 비율을 지정하는 CSS 속성입니다. 너비 /

CSS의 object-fit 속성으로 이미지를 왜곡없이 보여주기

CSS의 object-fit 속성으로 이미지를 왜곡없이 보여주기

예전에는 웹에서 너비와 높이가 제한된 상황에서 이미지를 효과적으로 보여주는 것이 쉽지가 않았는데요. 그래서 이미지의 왜곡을 피하기 위해서 어쩔 수 없이 대신 배경 이미지를 사용해서 처리해야 하는 경우가 많았습니다. 하지만 다행히도 최근 몇 년 동안 CSS에서 이미지 요소를 다루는 방식이 상당히 개선되었습니다. 이번 포스팅에서는 이미지를 보여주는 방식을 결정하는 CSS의 object-fit 속성에 대해서 다양한 예제를 통해 최대한 쉽게 설명드리겠습니다. 이미지 본래 크기 HTML에서 <img> 요소를 사용할 때 너비나 높이를 지정해주

CSS 포커스 관련 가상 클래스 사용법 :focus, :focus-visible, :focus-within

CSS 포커스 관련 가상 클래스 사용법 :focus, :focus-visible, :focus-within

CSS에서는 포커스 상태를 스타일링하기 위해 focus, focus-visible, focus-within과 같은 가상 클래스(pseudo class)를 제공하는데요. 그런데 이 녀석들이 이름이 묘하게 비슷해서 정확하게 언제 어떻게 쓰시는지에 대해서 햇갈려하시는 분들이 많은 것 같습니다. 이번 포스팅에서는 CSS의 focus와 focus-visible 그리고 focus-within 가상 클래스에 대해 자세히 알아보고, 각각이 나타내는 포커스 상황과 용도와 차이점을 비교해보겠습니다. HTML 요소의 포커스 상태 CSS의 포커스(foc

파이썬 리스트(list) 완벽 가이드

파이썬 리스트(list) 완벽 가이드

파이썬에서 리스트(list)는 사전(dictionary)과 더불어 가장 널리 사용되는 내장 자료형입니다. 이 두 가지 자료형은 파이썬 프로그래밍에서 필수적인 요소로 사용되지 않은 프로그램을 보기 힘들 정도이죠. 이번 포스팅에서는 다양한 예제를 통해서 파이썬에서 리스트를 어떻게 사용하는지 아주 꼼꼼하게 차근차근 알아보도록 하겠습니다. 참고로 사전(dictionary)에 대해서는 별도의 포스팅에서 아주 자세히 다루고 있습니다! 리스트의 특징 리스트(list)는 여러 데이터를 순서있게 담기 위해서 파이썬에서 가장 범용적으로 사용되는 자료

Preflight: CSS 초기화에 대한 Tailwind의 해답

Preflight: CSS 초기화에 대한 Tailwind의 해답

어떤 웹 프로젝트를 하든 브라우저의 내장 스타일에 영향을 최소화하면서 일관적인 UI를 구현하는 것은 매우 중요한 고려사항인데요. 이번 포스팅에서는 Tailwind에서 제시하고 있는 이러한 CSS 초기화 문제에 대한 해답인 Preflight에 대해서 알아보겠습니다. Preflight란? Preflight는 Tailwind에서 가장 근간이 되는 기본 스타일시트(stylesheet)이며 Tailwind로 스타일한 웹 페이지가 어느 브라우저에서 열든 일관적으로 보이도록 해주는데요. Tailwind를 사용하는 것을 "비행"이라고 비유하여 T

Discord