Web

332 posts
[CSS] 성배 (Holy Grail) 레이아웃 (Flexbox, Grid)

[CSS] 성배 (Holy Grail) 레이아웃 (Flexbox, Grid)

웹사이트에서 정말 흔하게 접할 수 있는 성배(Holy Grail) 레이아웃은 한 때 개발자 사이에서 제대로 구현하기 어렵기로 악명이 높았었는데요. Flexbox와 CSS Grid가 보편화되면서 이제는 옛말이 되어 가고 있는 것 같습니다. 이번 포스팅에서는 CSS의 최신 기술을 이용하여 어떻게 성배 레이아웃을 구현할 수 있는지 알아보도록 하겠습니다. 기본 구조 성배 레이아웃은 일반적으로 5개의 영역으로 구성이 되는데요. 회면 최상단에 각각 헤더(header)와 풋터(footer) 영역이 위치하고, 그 사이의 영역이 다시 네비게이션(n

React로 버튼 컴포넌트 만들기

React로 버튼 컴포넌트 만들기

버튼은 웹 에서 사용자와 상호 작용에 있어서 핵심이 되는 요소로서 하나의 웹 애플리케이션에서도 여러 종류의 버튼이 필요하기 마련입니다. 이번 포스팅에서는 다앙한 크기와 형태의 버튼을 표현하기 위해 사용할 수 있는 React로 컴포넌트를 함께 개발해보도록 하겠습니다. 컴포넌트 함수 우선 disabled와 children prop을 인자로 받고 아무 스타일링없이 단순히 <button> HTML 엘리먼트를 반환하는 간단한 컴포넌트 함수를 작성합니다. 지금부터 React에서 Styled Components 라이브러리를 사용해서 이 버튼 컴

Styled Components 전역 스타일링 (Global Style)

Styled Components 전역 스타일링 (Global Style)

이번 포스팅에서는 Styled Components로 전역 스타일(global style)을 정의하는 방법에 대해서 알아보겠습니다. Styled Components 자체에 대한 자세한 설명은 관련 포스팅를 참고 바랍니다. 컴포넌트 레벨 스타일링 React와 Styled Components로 웹 개발을 하다보면 대부분의 경우 컴포넌트 레벨에서 스타일을 하게 됩니다. React가 컴포넌트 기반 자바스크립트 라이브러리라는 것을 감안해보면 너무나 자연스러운 현상일 것입니다. 예를 들어, 다음 <BlogPost/> React 컴포넌트는 Sty

[CSS] ::before / ::after

[CSS] ::before / ::after

이번 포스팅에서는 추가 컨텐츠를 삽입하기 위해서 사용되는 ::before과 ::after에 대해서 알아보겠습니다. Pseudo Element ::before과 ::after는 CSS에서 소위 pseudo element라고 하는데요. 일반적인 CSS 선택자(selector)로는 지정할 수 없는 미세한 영역을 선택하기 위해서 사용됩니다. 본 포스팅에서 다룰 ::before과 ::after뿐만 아니라 ::first-letter, ::first-line, ::selection, ::marker 등 CSS에는 다양한 pseudo elemen

CSS의 overflow 속성 사용법

CSS의 overflow 속성 사용법

웹 개발을 하다보면 주어진 공간보다 더 많은 양의 컨텐츠를 보여줘야 하는 경우가 생기는데요. CSS에서는 overflow 속성을 통해서 주어진 공간이 모자라 넘치는 컨텐츠를 어떻게 보여줄지를 제어합니다. 이번 포스팅에서는 크기가 제한된 영역에서 많은 양의 컨텐츠를 보여줄 때 유용한 CSS의 overflow 속성에 대해서 알아보겠습니다. visible 먼저 overflow 속성을 별도로 명시해주지 않았을 때 적용되는 기본값인 visible에 대해서 살펴보겠습니다. 긴 기사의 컨텐츠를 고정된 크기의 박스 안에서 보여줘야하는 경우를 예를

CSS의 fixed position을 통한 HTML 요소의 위치 고정

CSS의 fixed position을 통한 HTML 요소의 위치 고정

이번 포스팅에서는 화면의 한 곳에 고정되어 있는 UI를 구현할 때 사용되는 CSS의 고정 배치(fixed positioning)에 대해서 알아보도록 하겠습니다. Fixed Position CSS의 고정 배치(fixed positioning)를 사용하면 브라우저의 전체 화면(viewport)을 기준으로 HTML 요소를 배치할 수 있습니다. CSS의 position 속성은 HTML 요소가 어떻게 배치되는가를 결정하는데, 이 속성의 값을 fixed로 지정해주면 고정 배치가 적용됩니다. HTML 문서 상에서 고정 배치가 적용된 요소는 부모

CSS의 absolute position으로 툴팁(tooltip) 구현하기

CSS의 absolute position으로 툴팁(tooltip) 구현하기

웹사이트에서 부연적인 정보를 선택적으로 보여주긴 위한 수단으로 툴팁(tooltip)이 많이 사용됩니다. 예를 들어, 아래 웹페이지에서 HTML과 CSS위에 마우스 포인터를 올려놓으면 각 용어가 무엇의 약자인지가 표시됩니다. 이번 포스팅에서는 CSS의 absolute position를 응용해서 간단한 툴팁을 구현하는 방법에 대해서 알아보겠습니다. absolute position에 대한 기본적인 특징과 작동 매커니즘은 대해서는 관련 포스팅를 참고 바랍니다. HTML 마크업 먼저 툴팁 구현을 위한 HTML 코드를 작성해보도록 하겠습니다.

CSS의 상속(Inheritance)

CSS의 상속(Inheritance)

이번 포스팅에서는 CSS에서 상속의 개념과 기본적으로 CSS 상속을 어떻게 활용하는지 알아보겠습니다. CSS의 상속 CSS에도 다른 프로그래밍 언어들처럼 상속(Inheritance)이라는 개념이 있는데요. 하위 엘리먼트에서 어떤 CSS 속성을 명시하지 않은 경우, 기본적으로 상위 엘리먼트에 적용된 스타일이 하위 엘리먼트에도 적용되는 것을 뜻합니다. 예를 들어, 다음와 같은 간단한 HTML 코드를 예를 들어 생각해보겠습니다. 여기서 section 태그의 color 속성을 설정해주는 스타일 적용하면 어떻게 될까요? 파란 글자색이 <se

CSS 미디어 쿼리 (Media Query) 사용법

CSS 미디어 쿼리 (Media Query) 사용법

다양한 디바이스들이 웹브라우징을 지원하면서 뷰포트(viewport) 너비에 따라 유연하게 컨텐츠를 배치하는 기술이 점점 중요해지고 있습니다. 이번 포스팅에서는 이러한 반응형 웹디자인의 기본이되는 CSS의 미디어 쿼리(Media Query)에 대해서 살펴보겠습니다. 기본 문법 미디어 쿼리는 CSS에서 어떤 스타일을 선택적으로 적용하고 싶을 때 사용합니다. 다른 프로그래밍 언어의 if 조건문과 비슷한 개념이라고 생각하시면 이해가 쉬우실 겁니다. @media 키워드로 시작하는 미디어 쿼리의 문법 구조는 아래와 같습니다. 스타일 부분에는

Jest로 파라미터화 테스트하기: test.each(), describe.each()

Jest로 파라미터화 테스트하기: test.each(), describe.each()

테스트를 작성하다보면 다양한 테스트 데이터에 대해서 동일한 테스트 코드를 돌리고 싶을 때가 있죠? 이러한 테스팅 기법을 보통 파라미터화(parameterized) 테스팅이라고 하는데요. 이번 글에서는 Jest에서 제공하는 test.each()와 describe.each() 함수를 사용하여 파라미터화 테스트를 하는 방법에 대해서 배워보겠습니다. 파라미터화(parameterized) 테스트 간단한 실습을 위해 2개의 문자열의 인자로 받아 애너그램(anagram) 여부를 반환해주는 함수를 작성해볼까요? 이제 위 함수에 대한 테스트를 작성

[React] forwardRef 사용법

[React] forwardRef 사용법

React 컴포넌트에 ref prop을 넘겨서 그 내부에 있는 HTML 엘리먼트에 접근을 하게 해주는 forwardRef() 함수에 대해서 알아보겠습니다. HTML 엘리먼트의 ref prop React에서 ref prop은 HTML 엘리먼트의 직접 접근하기 위해서 사용됩니다. 예를 들어, 아래 <Field/> 컴포넌트에서는 useRef() 훅(hook) 함수로 생성한 inputRef 객체를 <input/> 엘리먼트의 ref prop으로 넘기고 있습니다. 이렇게 해주면 inputRef 객체의 current 속성에 <input/> 엘리

[React] ref로 HTML 엘리먼트에 접근/제어하기

[React] ref로 HTML 엘리먼트에 접근/제어하기

React로 웹 애플리케이션을 개발하다 보면 간혹 React 컴포넌트가 아닌 HTML 엘리먼트에 직접 접근해서 DOM API를 이용해서 제어해야 할 필요가 있는데요. 이번 포스팅에서는 이럴 때 유용하게 사용할 수 있는 React의 독특한 prop인 ref 에 대해서 알아보도록 하겠습니다. ref prop React의 ref prop은 HTML 엘리먼트의 레퍼런스를 변수에 저장하기 위해서 사용합니다. 예를 들어, 다음과 같이 <input> 엘리먼트에 ref prop으로 inputRef라는 변수를 넘기게 되면, 우리는 이 inputRe

React Table로 테이블 UI 구현하기

React Table로 테이블 UI 구현하기

웹 페이지 상에서 많은 양의 데이터를 일목요연하게 보여주기 위해서 테이블(table) UI가 많이 사용됩니다. 정렬이나 검색을 지원하는 완성도 있는 테이블 UI를 직접 개발하려면 생각했던 것보다 구현이 복잡해지는 경우가 많은데요. React Table은 React로 테이블 UI를 간단하게 구현할 수 있도록 도와주는 라이브러리 입니다. 이 번 포스팅에서는 React Table을 이용하여 정렬과 검색을 지원하는 테이블 UI를 구현해보도록 하겠습니다. 테이블 데이터 생성 본인의 React 프로젝트에 npm으로 랜덤 데이터를 생성해주는 f

Material UI의 Table 컴포넌트

Material UI의 Table 컴포넌트

웹 페이지에서 많은 양의 데이터를 일목요연하게 보여주기 위해서 테이블(table) UI가 많이 사용됩니다. React로 완성도 있는 테이블 컴포넌트를 개발하려면 이외로 고려할 부분이 많아서 생각보다 많은 시간과 노력이 들어가게 되는데요. 이번 포스팅에서는 Material UI를 이용하여 좀 더 손쉽게 테이블 UI를 구현해보도록 하겠습니다. Material UI의 기본적인 셋업에 대한 부분은 관련 포스팅를 참고 바랍니다. 필요한 컴포넌트 HTML을 사용해서 테이블의 열과 행의 골격을 만들 때, <table> 엘리먼트 뿐만 아니라, <

dotenv로 환경 변수를 .env 파일로 관리하기

dotenv로 환경 변수를 .env 파일로 관리하기

많은 Node.js 프로젝트에서 환경 변수를 좀 더 효과적으로 관리하기 위해서 dotenv라는 라이브러리를 사용하고 있습니다. 이번 포스팅에서는 환경 변수를 파일에 저장해놓고 접근할 수 있게 도와주는 dotenv 라이브러리에 대해서 알아보겟습니다. dotenv 패키지 설치 npm 패키지 매니저를 이용하여 dotenv 라이브러리를 Node.js 프로젝트에 설치합니다. .env 파일 작성 dotenv 라이브러리는 아무 설정을 하지 않으면 현재 디렉토리에 위치한 .env 파일로 부터 환경 변수를 읽어오는데요. .env 파일을 생성하고,

Node.js에서 환경 변수 다루기 (process.env)

Node.js에서 환경 변수 다루기 (process.env)

여러 환경에 동일한 애플리케이션을 배포하려면 환경 변수(environment variable)라는 것을 사용해야하는데요. 이번 포스팅에서는 환경 변수에 대한 기본 개념을 설명드리고 Node.js에서는 어떻게 환경 변수에 접근하고 설정할 수 있는지에 대해서 알아보겠습니다. 환경 변수란? 먼저 환경 변수(environment variable)가 무엇인지 간단하게 개념부터 짚고 넘어가면 좋을 것 같아요. 일반적으로 우리는 코드 베이스는 하나만 관리하고, 개발, 테스트, 운영 등 여러 환경에 애플리케이션을 배포하는데요. 어느 환경에 배포하

React에서 원격 API 호출하기

React에서 원격 API 호출하기

React 앱을 개발하다보면 네트워크를 통해 REST API나 GraphQL API를 호출하여 원격에 있는 데이터를 가져와야 하는 일이 빈번하게 생기는데요. 이번 포스팅에서는 React 훅 함수를 이용해서 원격 API를 깔끔하게 호출하는 방법에 대해서 알아보겠습니다. useEffect()로 원격 데이터 가져오기 보통 원격 API를 호출하는 작업은 컴포넌트 랜더링을 막지않기 위해서 비동기로 처리하기 경우가 대부분인데요. 이러한 Side Effect 처리를 위해 React에서는 useEffect 훅 함수를 제공하고 있습니다. 예를 들어

React에서 웹 스토리지 사용하기

React에서 웹 스토리지 사용하기

이번 포스팅에서는 React에서 웹 스토리지를 사용해서 컴포넌트의 상태를 유지시키는 방법에 대해서 살펴보겠습니다. useState()로 유실되는 상태 관리하기 React에서 제공하는 useState() 훅 함수를 사용하면 컴포넌트의 상태를 간편하게 관리할 수 있는데요. 예를 들어, 버튼 클릭 횟수에 대한 상태 관리가 필요한 간단한 카운터 컴포넌트를 작성해보겠습니다. 너무 당연한 얘기겠지만 페이지를 새로 고침하는 순간 기존의 count 상태값은 사라집니다. 만약에 이 컴포넌트의 상태값을 웹 스토리지를 이용해서 유지시키고 싶다면 어떻게

script 요소의 defer과 async 속성을 통한 효과적인 스크립트 로딩

script 요소의 defer과 async 속성을 통한 효과적인 스크립트 로딩

웹 개발을 하다보면 <script> 요소를 이용해서 HTML 문서 안에 자바스크립트 코드를 삽입하는 경우가 필연적으로 생기기 마련인데요. 이번 글에서는 이렇게 정말 자주 사용하게 되는 <script> 요소를 좀 더 효과적으로 사용하는 방법에 대해서 알아보겠습니다. script 요소의 위치 혹시, 브라우저가 <script> 요소를 어떻게 처리하는지 생각해보신 적이 있으신가요? 당연한 얘기처럼 들리기시겠지만 브라우저는 HTML 문서를 처리하다가 <script> 요소를 만나면 src 속성에 명시된 경로의 파일을 내려받아 자바스크립트 코드

React Testing Library 유저 이벤트 처리

React Testing Library 유저 이벤트 처리

브라우저 상에서 사용자가 발생시키는 이벤트에 웹 애플리케이션이 예상대로 반응하는지 어떻게 테스트할 수 있을까요? 이번 포스팅에서는 사용자와 애플리케이션의 상호 작용을 검증하기 위한 테스트 코드를 작성하는 방법에 대해서 알아보겠습니다. 예제 컴포넌트 우선 테스트 대상이 될 간단한 React 컴포넌트 하나를 작성해보도록 하겠습니다. 아래 <LoginForm/> 컴포넌트는 이메일 입력란과 비밀번호 입력란, 로그인 버튼으로 구성되어 있습니다. 로그인 버튼은 이메일과 비밀번호가 입력되었을 때만 활성화가 되고, 클릭을 하면 prop으로 넘어온

Discord