Logo

265 posts

자바스크립트 배열의 slice()와 splice() 함수

자바스크립트에서 배열을 다룰 때 자주 사용하게되는 함수 중에서 이름이 상당히 비슷한 slice()와 splice()가 있습니다. 이번 포스팅에서는 예제 코드를 작성하면서 이 두 함수가 어떤 점이 비슷하고 어떤 점이 다른지에 대해서 알아보겠습니다. slice() 함수 slice() 함수는 배열로 부터 특정 범위를 복사한 값들을 담고 있는 새로운 배열을 만드는데 사용합니다. 첫번째 인자로 시작 인덱스(index), 두번째 인자로 종료 인덱스를 받으며, 시작 인덱스부터 종료 인덱스까지 값을 복사하여 반환합니다. 간단한 실습을 위해 숫자…

React로 사이드 네비게이션 UI 구현하기

사이트 네비게이션(site navigation)은 웹사이트에서 사용자가 효과적으로 페이지 사이를 이동을 할 수 있도록 도와주는 매우 흔하면서도 중요한 UI 입니다. 이번 포스팅에서는 React와 Styled Components를 이용하여 아래와 같은 다단계 사이드 네비게이션 UI를 한 번 구현해도록 하겠습니다. 컴파운트 컴포넌트 HTML에는 부모없이는 단독으로 쓰이지 않는 요소들이 있습니다. 대표적인 예로 <option> 요소는 항상 <select> 요소 안에서 사용되며, <li> 요소는 항상 <ul>이나 <ol> 요소 안에서 사…

JSON.parse()와 JSON.stringify()

이번 포스팅에서는 자바스크립트에서 JSON 내장 객체를 이용하여 JSON 형식으로 표현된 데이터를 다루는 방법에 대해서 알아보겠습니다. JSON 이란? 자바스크립트의 JSON 내장 객체에 대해서 배우기 전에 먼저 JSON이 무엇인지에 대해서 간단하게 짚고 넘어가겠습니다. JSON은 JavaScript Object Notation의 약자로서 데이터를 문자열의 형태로 나타내기 위해서 사용됩니다. 이름이 암시하듯 JSON은 본래 자바스크립트에서 파생되었지만 현재는 거의 표준으로 자리잡아 대부분의 다른 프로그래밍 언어에서도 지원하는 데이…

Node.js의 fs 모듈로 파일 입출력 처리하기

이번 포스팅에서는 Node.js에서 파일 입출력 처리를 할 때 사용하는 fs 모듈에 대해서 알아보겠습니다. fs모듈 불러오기 fs 모듈은 Node.js에 내장되어 있어 있기 때문에 별도의 라이브러리 설치없이 바로 불러와서 사용할 수 있습니다. CommonJS 모듈 시스템을 사용하는 프로젝트에서는 require 키워드로 불러오고, ES 모듈 시스템을 사용하는 프로젝트에서는 import 키워드를 사용할 수 있습니다. 비동기 함수 vs 동기 함수 fs 모듈는 비동기(asynchronous) API와 동기(synchronous) API를…

Node.js의 path 모듈로 경로 다루기

이번 포스팅에서는 Node.js에서 파일이나 디렉토리의 경로를 다룰 때 사용하는 path 모듈에 대해서 알아보겠습니다. 운영체제 파일이나 디렉토리의 경로를 다루는 게 뭐가 어렵다고 구지 별도의 모듈이 필요할까요? 사실 경로 처리는 많은 분들이 간과하지만 알고 보면 은근히 오류가 발생할 소지가 많은 부분인데요. 일단 유닉스 계열 운영체제와 윈도우 운영체제는 서로 다른 문자로 디렉토리 구조를 표현합니다. 유닉스 계열 운영체제에서는 / 문자를 사용하는 반면에 윈도우 운영체제에서는 \ 문자를 사용하죠. 유닉스 계열 윈도우 또한 이 두 진…

.gitignore 파일 사용법

이번 포스팅에서는 .gitignore 파일을 이용하여 Git으로 프로젝트의 버전 관리를 할 때 특정 파일이나 디렉토리를 제외시키는 방법에 대해서 알아보겠습니다. 버전 관리를 하지 않는 파일과 디렉토리 어떤 프로그래밍 언어로 프로젝트를 하든 버전 관리를 할 필요가 없거나 하지 말아야하는 파일이나 디렉토리가 생기기 마련입니다. 대표적인 예로, 자바스크립트(JavaScript) 프로젝트에서는 의존성을 설치하고 나면, 프로젝트에 node_modules 디텍토리가 생성되고 그 안에 npm 저장소로 부터 내려받은 라이브러리 코드가 저장됩니다…

nvm으로 여러 Node.js 버전 관리하기

이번 포스팅에서는 하나의 컴퓨터에서 여러 버전의 Node.js를 사용할 수 있도록 도와주는 도구인 nvm(Node Version Manager)에서 대해서 알아보겠습니다. nvm 설치 제가 Mac을 사용하는 관계로 macOS를 기준으로 nvm을 어떻게 설치하는지 설명하겠습니다. macOS를 포함한 리눅스 계열의 운영체제에서는 nvm 사이트에서 설치 스크립트를 확인할 수 있으며, 윈도우 운영체제의 경우 nvm-windows 사이트에서 설치 파일을 다운로드 받을 수 있습니다. 터미널을 열고 다음 설치 스크립트를 실행합니다. 여기서 다…

자바스크립트로 이벤트 처리하기

우리가 사용하는 웹 사이트나 웹 애플리케이션에서는 수많은 이벤트가 발생합니다. 사용자가 마우스나 키보드로 일으킬 수 있는 이벤트도 있고, 브라우저 자체에서도 웹페이지를 로딩하면서 여러 이벤트를 발생시킵니다. 이번 포스팅에서는 이렇게 웹에서 수시로 발생하는 이벤트를 처리하는 여러가지 방법에 대해서 알아보겠습니다. HTML 이벤트 속성 먼저 가장 손쉬운 방법부터 알아볼까요? HTML 요소(element)에서 발생하는 이벤트를 처리하는 가장 쉬운 방법은 HTML의 이벤트 속성을 활용하는 것입니다. on<이벤트 타입명> 형태를 갖는 이벤…

jQuery 없이 자바스크립트로 HTML 요소 선택하기

2006년에 출시되었던 jQuery는 한 때는 자바스크립트 개발이 곧 jQUery 개발이라고 여겨질 정도로 정도로 상당히 오랫동안 자바스크립트 생태계를 주름잡던 라이브러리입니다. 하지만 최근에는 Angular, React, Vue와 같은 모던 자바스크립트 라이브러리에 밀려 주로 레거시(legacy) 코드에서나 마치못해 쓰는 라이브러리로 전략하고 말았는데요. 아무래도 컴포넌트 기반의 웹 프로그래밍의 대세가 되고 브라우저의 표준화가 전반적으로 개선되고 있어서 앞으로 jQuery가 설 자리는 점점 더 좁아질 것입니다. 사실 jQuery…

자바스크립트 패키지 매니저: npm vs. Yarn

이번 포스팅에서는 자바스크립트에서 패키지 매니저로 가장 많이 사용되고 있는 npm과 Yarn에 대해서 알아보겠습니다. 자바스크립트 패키지 매니저 패키지 매니저(package manager)는 프로젝트가 의존하고 있는 패키지를 효과적으로 설치, 갱신, 삭제할 수 있도록 도와주는 관리 도구입니다. 그 어떤 프로그래밍 언어보다 풍부한 오픈 소스 생태계를 자랑하는 자바스크립트에서는 특히 패키지 매니저는 중요한 역할을 하는데요. 아무리 간단한 자바스크립트 프로젝트라고 해도 적게는 수십게 많게는 수백개의 다른 패키지에 의존하기 때문입니다. …

CSS의 position 속성으로 요소 배치하기

이번 포스팅에서는 요소(element)를 원하는 위치에 배치하기 위해서 사용하는 CSS의 position 속성에 대해서 알아보겠습니다. position 속성 CSS에서 position 속성은 HTML 문서 상에서 요소가 배치되는 방식을 결정합니다. 많은 경우, position 속성은 요소의 정확한 위치 지정을 위해서 top, left, bottom, right 속성과 함께 사용됩니다. position: static position 속성을 별도로 지정해주지 않으면 기본값인 static이 적용됩니다. position 속성이 stati…

자바스크립트 프로젝트에서 스크립트 활용하기 (npm run)

자바스크립트 프로젝트에서 개발을 하다보면 터미널을 열고 명령어를 실행해야하는 경우가 빈번하게 생기는데요. 대표적인 예로 로컬 환경에서 애플리케이션을 빌드하고 구동하거나 테스트를 실행하는 것을 들 수 있습니다. 이번 포스팅에서는 자바스크립트 프로젝트에서 자주 사용되는 명령어를 스크립트로 등록하고 실행하는 방법에 대해서 알아보겠습니다. 반복 명령은 스크립트로 자바스크립트 프로젝트에서 개발을 진행하다보면 테스트나 빌드(build), 린트(lint), 포멧(format)처럼 반복적으로 수행해야하는 작업들이 생기기 마련입니다. 각 작업은 …

CSS 배경(background) 관련 속성

이번 포스팅에서는 CSS로 배경을 설정하는데 자주 사용되는 속성에 대해서 알아보겠습니다. background-color 배경 관련 CSS 속성 중 가장 많이 사용되는 것은 아마도 배경색을 지정할 때 사용하는 background-color일 것 입니다. 기본값은 transparent, 즉 투명이며 색상명이나 색상 코드를 사용할 수 있습니다. 일반적으로 배경색은 웹 접근성(accessibility)을 준수하기 위해서 글자색과의 명암비를 고려해서 결정을 하는데요. 저시력자나 고령자도 텍스트를 인식하는데 어려움이 없도록 하기 위함입니다.…

파이썬의 yield 키워드와 제너레이터(generator)

이번 포스팅에서는 파이썬에서 제네레이터(generator)를 만드는데 사용되는 yield 키워드에 대해서 알아보겠습니다. yield 키워드 대부분의 프로그래밍 언어에서 일반적으로 함수는 어떤 결과 값을 return 키워드를 이용해서 반환을 합니다. 하지만 파이썬에서는 함수가 yield 키워드를 이용해서 다소 다른 방식으로 결과 값을 제공할 수 있습니다. 장황한 설명보다는 간단한 예제 코드부터 살펴보는 것이 좀 더 이해가 쉬울 것 같습니다. 알파벳 A, B, C를 결과 값으로 반환하는 함수를 작성해보겠습니다. 위 함수를 yield …

Create React App: 손쉽게 프로젝트 만들기

이번 포스팅에서는 React 프로젝트를 쉽고 빠르게 만들 수 있도록 도와주는 Create React App에 대해서 알아보겠습니다. Create React App React로 개발 프로젝트를 맨땅에서 시작하려면 웹팩(Webpack), 바벨(Babel) 등 정말 미리 배워야하는 기술들이 한 두개가 아닙니다. 초보 개발자들이 이러한 선수 기술들을 일일이 학습하다보면 본래 목표했던 React 애플리케이션 개발이 아득하게 멀어지기 일수인데요… React는 각종 개발 편의 도구가 함께 포함된 프레임워크(framework)라기 보다는 어느 …

React Intl로 다국어 지원하기 (국제화)

국내 많은 서비스들이 당장 다국어 지원의 요구가 없더라도 향후 해외 진출을 염두해두고 개발 초기부터 애플리케이션을 국제화(internalization)하는 사례가 늘고 있습니다. 이번 포스팅에서는 React Intl 라이브러리를 이용해서 다국어를 지원하는 방법에 대해서 알아보겠습니다. React Intl 설치 React Intl 라이브러리는 Node.js 패키지 매니저인 npm으로 설치할 수 있습니다. Locale: Language & Region 국제화(internalization)된 애플리케이션은 다양한 언어로 서비스를 할 수…

React Hooks Testing Library 사용법

React v16.8에서 리액트 훅(React Hook)이 소개된 이후로 많은 프로젝트에서 커스텀(custom) 훅 함수를 사용하고 있는 것 같은데요. 이번 포스팅에는 리액트 훅(React Hook)을 테스트하는 방법에 대해서 알아보겠습니다. 예제 React Hook 먼저 테스트 대상이 될 간단한 React Hook 함수 하나를 작성해보겠습니다. 아래 useToggle() 함수는 true 또는 false가 될 수 있는 상태 state와 그 상태값을 반전할 수 있는 함수 toggle()을 배열에 담아 반환합니다. 초기 상태값을 in…

[자바스크립트] 테스트 데이터 생성

지난 포스팅에서 가짜 데이터를 만들 때 사용하는 Faker.js에 대해서 간단히 알아보았는데요. 이번 포스팅에서는 실제로 테스트를 작성할 때 Faker.js를 어떻게 활용할 수 있는지에 대해서 다뤄보려고 합니다. 테스트 대상 코드 작성하기 먼저 테스트 대상이 될 임의의 함수를 하나 필요한데요. 사용자 객체를 인자로 받아 회원 가입을 처리해주는 함수를 작성해보겠습니다. 이 함수는 인자로 넘어온 사용자의 이메일과 비밀번호에 대한 입력값 검증이 실패할 경우 error 속성에 오류 메세지를 담아서 반환하며, 회원 가입이 성공한 경우 us…

자바스크립트로 가짜 데이터 생성하기 - Faker.js

가짜 데이터 시제품(prototype)을 개발하거나, 단위 테스트를 작성할 때 가짜 데이터가 필요할 때가 자주 있습니다. 이럴 때, 직접 가짜 데이터를 하드코딩(hard-coding)할 수도 있겠지만, 좀 더 편하고 빠르게 가짜 데이터를 얻을 수 있는 방법이 있어서 소개드리려고 합니다. 바로, Faker.js라는 라이브러리인데요. Faker.js를 사용하면 가짜 데이터를 정말 너무 간단하게 생성할 수 있습니다. 👍 패키지 설치 패키지 임포트 ES 모듈을 사용하는 프로젝트에서는 import 키워드를 사용해서 패키지를 임포트 합니다.…

[HTML] tabindex 속성과 키보드 포커스

이번 포스팅에서는 tabindex 속성을 사용해서 키보드 포커스 여부와 우선순위를 제어하는 방법에 대해서 알아보았습니다. 키보드 포커스 혹시 마우스가 고장나거나 배터리가 나가서 키보드로만 컴퓨터를 조작하거나 웹서핑을 해보신 적이 있으신가요? 마우스 사용자는 포인터로 웹페이지의 어디든지 클릭을 할 수 있지만, 키보드 사용자는 포커스라는 제한된 방법을 이용해야 되는데요. 다행히도 웹은 사용자와 상호작용(interactive)이 가능한 요소(element)는 기본적으로 키보드로 포커스가 잡히게 되어 있습니다. 대표적으로 <input>,…