JavaScript

266 posts
Jest를 이용한 클래스 모킹과 테스팅

Jest를 이용한 클래스 모킹과 테스팅

ES6에서 클래스(class)가 도입되고 타입스크립트가 대중화되면서 이제 클래스를 사용하는 자바스크립트 코드를 흔하게 볼 수 있게 되었습니다. 뿐만 아니라 Angular나 NestJS처럼 클래스를 기반으로 동작하는 라이브러리나 프레임워크도 점점 늘어나고 있지요. 하지만 아직 클래스를 모킹하거나 테스팅하시는데 어려움을 겪는 개발자 분들이 많은 것 같습니다. 이번 포스팅에서는 자바스크립트의 대표적인 테스팅 프레임워크인 Jest를 사용하여 클래스를 모킹(mocking)하고 테스트 코드를 작성해보겠습니다. 본 포스팅을 이해하시려면 jest

Vitest 처음 시작하기

Vitest 처음 시작하기

자바스크립트 생태계에서 Vite가 번들러의 왕으로 등극하면서, 덩달아 자매 제품인 Vitest도 인기도 높아지고 있는데요. State of JS 2024 설문 결과를 보면 오랫동안 테스팅 프레임워크의 강자였던 Jest까지 위협하는 모습입니다. 이번 포스팅에서는 차세대 테스팅 프레임워크로 각광받고 있는 Vitest에 대해서 살펴보는 시간을 가져보겠습니다. Vitest란? Vitest는 Vite를 기반으로 작동하는 테스팅 프레임워크입니다. 이전에 나왔던 Jest처럼 테스트 실행뿐만 아니라 모킹(mocking)과 스냅샷(snapshot)

자바스크립트에서 SQLite 데이터베이스 사용하기

자바스크립트에서 SQLite 데이터베이스 사용하기

이번 포스팅에서는 자바스크립트에서 경량화 데이터베이스 SQLite를 사용하는 기본적인 방법에 대해서 알아보겠습니다. 파이썬에서 SQLite 데이터베이스를 사용하는 방법에 대해서는 관련 게시물을 참고 바랍니다. SQLite란? SQLite는 전 세계에서 가장 많이 사용되는 경량화 데이터베이스입니다. 알게 모르게 우리가 쓰고 있는 대부분의 전자기기에서 SQLite가 사용되고 있기 때문이죠. SQLite는 다른 데이터베이스와는 달리 클라이언트와 서버 간에 데이터를 송수신하지 않고, 모든 데이터를 로컬 컴퓨터에 저장하는데요. SQLite는

자바스크립트로 UUID 생성하기

자바스크립트로 UUID 생성하기

클라이언트나 서버를 가리지 않고 웹 개발을 할 때 랜덤 문자열 기반의 식별자가 많이 사용되고 있습니다. 전통적인 숫자 시퀀스 기반의 식별자를 사용하면 애플리케이션을 수평적으로 확장하기가 어렵고 보안적으로도 불리한 측면이 있기 때문입니다. 이번 포스팅에서는 대표적인 랜덤 문자열 기반의 식별자인 UUID를 자바스크립트로 생성하는 방법에 대해서 알아보겠습니다. UUID란? UUID(Universally Unique IDentifier)는 가장 대표적인 랜덤 문자열 기반의 식별자입니다. UUID는 16진수로 구성되며 128 비트, 즉 36

자바스크립트 배열의 toSpliced() 함수

자바스크립트 배열의 toSpliced() 함수

자바스크립트에서 배열의 원소를 삭제하거나 추가하거나 교체할 때 가장 많이 사용되는 메서드가 바로 splice()인데요. 이 메서드에는 한 가지 골치 아픈 문제가 있습니다. 바로 원본 배열을 직접 변경해버린다는 점이죠 😅 원본 배열이 바뀌면 안 되는 상황에서는 매번 배열을 복제한 다음에 splice()를 호출해야 했는데 이게 꽤 번거로웠습니다. ES2023에서 이 불편함을 해소해주는 toSpliced() 함수가 등장했는데요. 이번 글에서는 toSpliced() 함수의 사용법과 splice()와의 차이점에 대해서 알아보겠습니다. sp

타입스크립트의 경로 맵핑 (baseUrl, paths)

타입스크립트의 경로 맵핑 (baseUrl, paths)

자바스크립트 프로젝트에서 아래와 같은 형태로 모듈을 불러오는 코드를 마주친 적이 있으신가요? 머리 속에서 상위 디렉토리를 하나씩 차례대로 올라갔다가 다시 내려오다보면 혈압이 오르는 경험할 수 있는데요. 🤬 이번 포스팅에서는 상대 경로나 절대 경로를 통해서 내부 모듈을 불러올 때 겪을 수 있는 문제점에 대해서 알아보겠습니다. 그리고 경로 별칭을 통해서 좀 더 깔끔하게 내부 모듈을 불러올 수 있도록 타입스크립트를 설정하는 방법에 대해서 배우겠습니다. 상대 경로 타입스크립트 프로젝트에서 내부 모듈을 불러올 때 가장 쉽게 볼 수 있는 방

자바스크립트 패키지 설치법 완벽 가이드 (npm install)

자바스크립트 패키지 설치법 완벽 가이드 (npm install)

npm 저장소는 모든 프로그래밍 언어를 통털어 명실상부 가장 큰 패키지 저장소입니다. 자바스크립트 개발자들은 편리하게 npm install 명령어를 사용하여 npm 저장소로부터 다양한 패키지를 내려받아 사용하고 있는데요. 이번 포스팅에서는 워낙 자주 사용하다 보니 의외로 잘 모를 수 있는 npm install 명령어를 사용하는 방법에 대해서 알아보려고 합니다. 별도 포스팅에서 자바스크립트 개발자를 위한 필수 npm 커맨드도 정리해두었으니 참고바랍니다. npm install의 별칭 npm install 명령어는 여러가지 별칭이 있는데

자바스크립트 배열 뒤집기: reverse()와 toReversed() 함수

자바스크립트 배열 뒤집기: reverse()와 toReversed() 함수

자바스크립트로 코딩하다 보면 배열의 순서를 뒤집어야 할 때가 종종 있죠? 최신 데이터를 먼저 보여줘야 하는 타임라인이나, 정렬 순서를 반대로 바꿔야 하는 상황처럼요. 이럴 때 예전부터 있었던 reverse() 함수를 사용하면 간단히 해결되는데, 이 함수에는 한 가지 까다로운 점이 숨어 있습니다. 바로 원본 배열을 직접 변경해버린다는 건데요. 이번 글에서는 기존의 reverse() 함수가 왜 문제가 될 수 있는지 살펴보고 비교적 최근에 추가된 toReversed() 함수로 안전하게 배열을 뒤집는 방법을 알아보겠습니다. 배열의 reve

자바스크립트 프로젝트 생성법 정리 (npm init, npm create, npx)

자바스크립트 프로젝트 생성법 정리 (npm init, npm create, npx)

개발자 경험을 중요시하는 트렌드에 따라서 최근에 나오는 자바스크립트 프레임워크는 대부분 프로젝트를 편리하게 구성할 수 있도록 명령줄 도구(CLI)를 제공하고 있습니다. 그런데 각 프레임워크의 문서를 확인해보면 프로젝트를 생성하는 방법이 조금씩 다르다는 것을 알 수 있는데요. 예를 들어, React 기반 SPA(Single Page Application)을 생성할 때 많이 사용되는 Create React App의 문서를 보면, npx 명령어나 npm init 명령어를 사용하고 있습니다. 다른 예로, React의 대표적인 메타 프레임워

Jest의 가짜 타이머로 테스트의 시간을 멈추기

Jest의 가짜 타이머로 테스트의 시간을 멈추기

테스트를 작성하다보면 날짜와 시간이 골칫거리가 되는 경우가 많습니다. 날짜와 시간은 다른 데이터와 다르게 항상 변하기 때문인데요. 이번 포스팅에서는 Jest를 이용하여 날짜와 시간을 효과적으로 모킹(mocking)하는 방법에 대해서 알아보겠습니다. 테스팅 프레임워크인 Jest에 생소하신 분들은 먼저 관련 포스팅를 읽어 보시고 돌아오시기를 추천드립니다. 예제 코드 자바스크립트의 Intl API를 사용하여 현재 날짜를 주어진 언어에 따라 문자열로 변환해주는 간단한 함수를 작성해보겠습니다. 이 함수는 Date() 생성자를 통해서 현재 날

Bun: 귀엽지만 강력한 새로운 자바스크립트 런타임

Bun: 귀엽지만 강력한 새로운 자바스크립트 런타임

최근에 번(Bun) v1.0이 출시되면서 차세대 자바스크립트 런타임(Runtime)으로 많은 기대를 한몸에 받고 있습니다. 2023년 JavaScript Rising Stars에서도 Bun이 당당이 2위를 차지하였는데요. 이번 포스팅에서는 귀여운 이름과 로고 뒤에 무시무시한 기능과 성능으로 무장하고 하고 있는 Bun이라는 새로운 자바스크립트 런타임에 대해서 살펴보겠습니다. 자바스크립트 런타임 Bun에 대해서 소개드리기 전에 먼저 자바스크립트 런타임(Runtime)이 무엇인지 가볍게 짚고 넘어가면 좋을 것 같아요. 자바스크립트 런타임

NestJS에서 API 버전 관리하기(Versioning)

NestJS에서 API 버전 관리하기(Versioning)

이번 글에서는 NestJS에서 API의 버전을 체계적으로 관리하는 방법에 대해서 배워보도록 하겠습니다. API Versioning이란? REST API와 같은 서버 애플리케이션을 운영하다 보면, 부득이하게 클라이언트에 큰 영향을 줄 수 있는 위험한 변경을 해야 할 때가 있는데요. API Versioning, 즉 버전 관리를 통해서, 우리는 서버 측 API 변경에 따른 클라이언트의 영향을 최소화하고, API의 호환성과 안정성을 높일 수 있습니다. 버전 관리가 이루어지는 API는 보통 클라이언트에게 v1, v2, v3... 이런 식으로

자바스크립트 배열의 원소 제거하기: pop()와 shift() 메서드

자바스크립트 배열의 원소 제거하기: pop()와 shift() 메서드

배열에 원소를 제거하는 것은 자바스크립트 코딩할 때 매우 빈번하게 필요한 작업이죠? 이번 포스팅에서는 자바스크립트 배열의 원소를 제거하는 다양한 방법에 대해서 간단히 정리해보겠습니다. pop() 메서드 자바스크립트 배열에 원소를 제거하는 방법 중에서 가장 널리 알려진 방법은 뭐니뭐니 해도 배열의 pop() 메서드일 것 같은데요. 예를 들어, pop() 메서드로 과일 이름을 담은 배열로 부터 원소를 제거해보겠습니다. pop() 메서드는 배열에서 마지막 원소를 제거한 후에, 제거된 원소를 결과로 반환합니다. shift() 메서드 반대로

자바스크립트 배열에 원소 추가하기: push()와 unshift() 메서드

자바스크립트 배열에 원소 추가하기: push()와 unshift() 메서드

배열에 원소를 추가하는 것은 자바스크립트 코딩할 때 매우 빈번하게 필요한 작업이죠? 이번 포스팅에서는 자바스크립트 배열에 원소를 추가하는 다양한 방법에 대해서 간단히 정리해보겠습니다. push() 메서드 자바스크립트 배열에 원소를 추가하는 방법 중에서 가장 널리 알려진 방법은 뭐니뭐니 해도 배열의 push() 메서드일 것 같은데요. 예를 들어, push() 메서드로 과일 이름을 담은 배열에 원소를 추가해보겠습니다. push() 메서드에 넘어온 인수는 배열의 끝, 즉 기존에 마지막 원소 바로 뒤에 추가됩니다. 그리고 결과로 원소를 추

React로 필터 UI 구현하기 (+ URL 동기화)

React로 필터 UI 구현하기 (+ URL 동기화)

전자 상거래와 같이 많은 양의 데이터를 다루는 서비스에서 필터(filter)는 사용자가 데이터를 추려낼 수 있는 도와주는 매우 중요한 UI입니다. 이번 포스팅에서는 아래와 같은 간단한 상품 목록 페이지를 구현하면서 필터(filter) UI를 어떻게 React로 개발하는지 알아보겠습니다. 상품 목록 컴포넌트 구현 우선 단순히 모든 상품 목록을 보여주는 React 컴포넌트를 작성하겠습니다. <Products/> 컴포넌트는 prop으로 상품 배열(products)와 로딩 여부(loading)를 받습니다. 그리고 아직 데이터를 로딩 중이라

React에서 불필요한 useState와 useEffect 줄이기

React에서 불필요한 useState와 useEffect 줄이기

React로 개발하다 보면 useState()를 정말 많이 쓰게 됩니다. 값이 바뀌어야 하니까 state로 만들고, 그 state가 바뀔 때 뭔가 해야 하니까 useEffect()를 붙이고... 이러다 보면 컴포넌트에 state와 effect가 잔뜩 쌓이면서 코드가 복잡해지고 디버깅도 어려워지죠. 사실 이런 코드의 상당 부분은 state나 effect 없이도 작성할 수 있습니다. 이번 글에서는 React 개발자가 빠지기 쉬운 useState와 useEffect의 흔한 오용 패턴과 이를 개선하는 방법을 알아보겠습니다. 파생 값을 st

자바스크립트 개발자를 위한 package.json 파일 정리

자바스크립트 개발자를 위한 package.json 파일 정리

자바스크립트 프로젝트의 최상위 경로를 열어 보면 대부분 package.json 파일이 있습니다. 처음에는 설치한 패키지와 실행 명령어를 적어 두는 파일 정도로 보입니다. 그런데 프로젝트가 커질수록 낯선 필드가 하나둘 늘어나는데요. 어떤 프로젝트에는 exports가 있고 다른 프로젝트에는 module이 있습니다. 모노레포(monorepo)를 열어 보면 workspaces도 등장하죠. 이 필드들이 모두 같은 프로그램을 위한 설정은 아닙니다. npm과 같은 패키지 관리자(package manager)가 읽는 필드도 있고 Node.js와

자바스크립트 배열에서 조건 검색: find()부터 findLast()까지

자바스크립트 배열에서 조건 검색: find()부터 findLast()까지

자바스크립트에서 배열을 다루다 보면 특정 조건에 맞는 원소를 하나만 찾아야 할 때가 종종 있는데요. 이럴 때 배열 전체를 filter()로 걸러낸 다음 첫 번째 원소만 꺼내는 코드를 작성하시는 분이 의외로 많습니다. 물론 동작은 하지만, 배열 전체를 순회해서 새 배열을 만든 뒤 첫 번째 원소만 쓰고 나머지는 버리니까 비효율적이죠? 이번 글에서는 이런 상황에 딱 맞는 find() 계열 메서드 네 가지를 정리해보겠습니다. find()로 원소 찾기 find() 메서드는 배열을 앞에서부터 순회하면서 콜백 함수가 true를 반환하는 첫 번째

쿼리 스트링을 다루기 위한 자바스크립트 라이브러리 2종 비교 (qs vs. query-string)

쿼리 스트링을 다루기 위한 자바스크립트 라이브러리 2종 비교 (qs vs. query-string)

웹 개발을 할 때 쿼리 스트링(Query String)을 다루는 일은 번거롭기도 하고 버그도 생기기 쉬워서 오래전부터 라이브러리가 많이 쓰였는데요. 관련해서 npm에서 검색해보면 이름이 조금씩 다른 수많은 라이브러리가 있어서 어떤 것을 선택해야 할지 헷갈릴 수 있습니다. 이번 포스팅에서는 현재 npm trends 기준으로 가장 많이 사용되고 관리가 잘 되고 있는 2종의 자바스크립트 라이브리리, qs와 query-string에 대해서 알아보겠습니다. 라이브러리가 필요한 이유 먼저 자바스크립트로 쿼리 스트링을 다룰 때 왜 라이브러리가

자바스크립트에서 Faker로 가짜 데이터 생성하기

자바스크립트에서 Faker로 가짜 데이터 생성하기

제가 몇 년 전에 블로그에서 npm 패키지 저장소에 faker라는 이름으로 등록되어 있는 라이브러리를 소개해 드린 적이 있는데요. 안타깝게도 2022년에 faker를 유지보수하던 개발자가 불미스러운 일을 저질러 더 이상 사용하면 안 되는 라이브러리가 되었습니다. (오픈 소스 커뮤니티에 시사하는 바가 컸던 사건이므로 관심있으신 분은 관련 기사를 참고하시기 바랍니다.) 현재는 npm 패키지 저장소에 @faker-js/faker라는 패키지 이름으로 등록된 새로운 라이브러리가 예전에 faker 라이브러리를 대신하고 있는데요. 과거의 실수를

Discord