방로그
FRONTEND
13 posts
기능 분할 설계(Feature-Sliced Design, FSD)

소개 기능 분할 설계 (Feature-Sliced Design, FSD)는 대규모 프론트엔드 애플리케이션을 구조화하기 위한 현대적인 아키텍처 방법론입니다. FSD는 애플리케이션을 기능 단위로 분할하고, 각 기능을 독립적으로 개발, 테스트, 유지보수할 수 있도록 하는 것을 목표로 합니다. FSD의 핵심 원칙 FSD는 다음과 같은 핵심 원칙을 기반으로 합니다. 기능 중심 설계: 애플리케이션을 비즈니스 기능 단위로 구성합니다. 계층화: 코드를 여러 계층으로 구분하여 관심사를 분리합니다. 단방향 의존성: 상위 계층은 하위 계층에만 의존할 수 있습니다. 명시적 공개 인터페이스: 각 모듈은 명확한 공개 API를 통해 상호작용합니다. 구성 가능성: 작은 단위의 기능을 조합하여 더 큰 기능을 만들 수 있습니다. FSD의 주요 구성 요소 레이어 (Layers) 레이어는 FSD의 가장 상위 수준의 구조입니다. 각 레이어는 특정한 책임을 가지며, 애플리케이션의 복잡성을 관리하는 데 도움을 줍니다. …

September 14, 2024
FRONTEND
Meta의 StyleX

최근 프론트엔드 개발에서 스타일링의 중요성은 점점 커지고 있습니다. Meta에서 개발한 StyleX는 CSS-in-JS 방식의 단점을 극복하고 더 나은 성능과 유지보수성을 제공하기 위한 경량 CSS 솔루션입니다. 이 글에서는 StyleX의 구조와 사용법, 주요 사용 사례, 그리고 장단점에 대해 알아보겠습니다. 주니어 개발자와 StyleX에 관심 있는 분들을 위해 쉽게 설명하려고 하니 편안하게 읽어주세요. StyleX란 무엇인가? StyleX는 Meta(Facebook)에서 개발한 CSS-in-JS 라이브러리로, React 기반의 대규모 애플리케이션에서 성능 문제를 해결하기 위해 만들어졌습니다. 기존의 CSS-in-JS 방식에서 발생하던 런타임 성능 문제와 스타일 중복을 줄이고, 스타일 관리를 더 쉽게 하기 위해 설계된 것이 특징입니다. CSS-in-JS는 자바스크립트 내에서 CSS를 작성하여 컴포넌트와 스타일을 결합하는 방식입니다. 그러나 대부분의 CSS-in-JS 라이브러리는 런…

December 18, 2023
FRONTEND
Styled-Components와 Emotion을 활용한 스타일링

프론트엔드 개발에서 컴포넌트 기반 스타일링의 중요성이 점점 커지고 있습니다. 특히 CSS-in-JS 방식은 최근 트렌드로 자리 잡았는데, 여기서 대표적인 두 라이브러리가 Styled-Components와 Emotion입니다. 이번 글에서는 이 두 라이브러리를 사용해 스타일링을 어떻게 더 쉽게 하고, 컴포넌트 기반 개발에서 어떤 장점을 제공하는지 알아보겠습니다. CSS-in-JS란? CSS-in-JS는 자바스크립트 코드 안에 CSS를 작성하는 방식입니다. 전통적인 CSS 파일과 달리, 각 컴포넌트에 맞춘 스타일을 자바스크립트 코드 내에서 정의할 수 있습니다. 이는 스타일을 컴포넌트와 함께 관리할 수 있게 해주며, 코드의 재사용성과 유지보수를 용이하게 만듭니다. CSS-in-JS 방식의 주요 특징은 다음과 같습니다: 컴포넌트 기반 스타일링: 각 컴포넌트에 맞는 스타일을 정의하여 스타일의 독립성을 보장합니다. 동적 스타일: props를 사용하여 컴포넌트의 상태에 따라 동적으로 스타일을 …

April 05, 2021
FRONTEND
iPhone에서 Input Focus 시 Zoom 문제 해결하기

모바일 웹 개발을 하다 보면 iPhone에서 필드에 포커스를 줄 때 화면이 확대되는 현상을 종종 겪게 됩니다. 특히 작은 화면에서 의도치 않은 확대는 사용자 경험을 저하시키며 불편함을 초래합니다. 이번 글에서는 이 문제의 원인과 다양한 해결책, 그리고 가장 최적화된 방법에 대해 자세히 알아보겠습니다. 문제의 원인 이 문제의 원인은 주로 때문입니다. 가장 많이 득표한 스택오버플로우 답변에 따르면, Safari는 필드의 가 16px 미만인 경우 자동으로 확대를 트리거합니다. 이는 사용자가 작은 글씨를 쉽게 보지 못할 것을 우려하여 설계된 기능입니다. 가 16px 미만인 한, 또는 같은 다른 단위가 사용되더라도 확대 현상은 동일하게 발생합니다. 기존 해결책 iPhone의 자동 확대 문제를 해결하기 위해 흔히 시도되는 방법은 다음과 같습니다. 를 16px로 설정하기 모든 입력 필드의 를 16px 이상으로 설정하면 확대 현상을 방지할 수 있습니다. 페이지 확대/축소 비활성화 메타 …

November 25, 2020
FRONTEND
iOS Safari에서 터치 이벤트 내 팝업 창 제한 문제 해결하기

모바일 웹 개발을 하다 보면 iOS Safari에서 이벤트 내에서 을 호출하여 팝업 창을 여는 것이 작동하지 않는 현상을 경험할 수 있습니다. 이는 iOS 9.0 이후 보안 및 사용자 경험을 고려한 변화 때문입니다. 이번 글에서는 이 문제의 원인과 해결 방법에 대해 자세히 알아보겠습니다. 문제 현상 iOS Safari에서 이벤트 내에서 을 사용해 팝업 창을 열 수 없습니다. 이로 인해 터치 기반 인터랙션에서 팝업을 여는 기능이 제한됩니다. 원인 iOS 9.0부터 이벤트 내에서 을 사용할 수 없게 된 이유는 보안 및 사용자 경험 향상을 위한 조치입니다. iOS 9.0 이전 버전에서는 이벤트 내에서 을 통해 팝업 창을 여는 것이 가능했습니다. 그러나 이 기능은 악성 스크립트가 사용자 동의 없이 팝업 창을 열 수 있는 보안 취약점을 유발할 수 있었습니다. 이러한 위험을 줄이기 위해 Apple은 iOS 9.0부터 이벤트 내에서 사용을 제한하였습니다. 대신, Apple은 개발자들…

March 06, 2020
FRONTEND
iOS 모바일에서 Click 이벤트 지연 문제 해결하기

웹 개발을 하다 보면 대부분 이벤트를 자주 사용하게 됩니다. 예를 들어: PC 환경에서는 이 코드로 전혀 문제가 없습니다. 하지만 iOS 모바일 기기에서 동일한 코드를 사용할 경우, 클릭에 대한 반응이 약간 느리다는 것을 느낄 수 있습니다. 무엇이 문제일까요? 문제의 원인: iOS의 Click 이벤트 지연 iOS에서는 사용자가 화면을 터치했을 때 해당 동작이 더블 탭(줌)이나 스와이프 제스처와 같은 다른 동작이 아닌지 확인하기 위해 약 300ms의 지연을 추가합니다. 이러한 지연은 제스처 및 스와이프가 올바르게 작동하도록 하기 위한 조치입니다. 이 때문에 클릭 이벤트가 느리게 반응하는 문제가 발생합니다. 해결 방법: Touch 이벤트 사용 iOS에서 이벤트의 지연을 해결하기 위해서는 또는 이벤트를 사용하는 것이 좋습니다. 이 이벤트들은 이벤트와 달리 300ms의 지연 없이 즉시 실행됩니다. 아래는 그 예시입니다: 이렇게 하면 사용자가 터치했을 때 즉각적인 반응을 얻을 수 …

February 07, 2020
FRONTEND
Parcel 기초 세팅

오늘은 웹 어플리케이션 번들러 3대장중 하나인 parcel의 세팅 방법에 대해 알아보겠습니다. 물론 알아볼 것도 없이 parcel 홈페이지가 워낙 번역이 잘되어 있긴 합니다 ㅎㅎ;; 그래도 세팅이 어려운 분들을 위해 작성해봅니다. 시작하기 먼저 parcel을 실행하려면 parcel을 설치해야겠죠? Yarn: npm: 그 다음 그런 다음 index.html 실행 이런식으로 실행하면 parcel이 자동으로 다시 빌드하고 핫리로드도 지원합니다. 그냥 진입점 파일만 지정해주면 됩니다. 개발 환경 parcel은 옵션을 건드릴게 없습니다. 그게 장점이라면 장점이죠. 굳이 개발할 때 넣을 옵션이 있다면 —open 이런식으로 끝부분에 명령어를 넣어주면 실행하는 순간 브라우저창이 열리게 됩니다. 프로덕션 parcel을 빌드하면 기본적으로 dist폴더가 생성되며 그 안에 빌드된 파일이 저장됩니다. dist폴더명을 다른 것으로 하고 싶을 땐 —out-dir 로 하시면 폴더명이 build로…

December 26, 2019
FRONTEND
Swiper.js 슬라이더 안에 youtube 영상 넣기

오늘은 swiper.js로 만든 슬라이더들안에 youtube영상을 넣어보는 것을 알아보고자 한다. 기본적인 swiper를 생성하는 방법은 이 링크로 들어가면 자세히 알 수 있다. index.html youtube.js 기본적인 yotube 동영상을 생성하는 방법은 이 링크로 들어가면 자세히 알 수 있다. 이것으로 swiper안에 youtube넣기를 마치겠습니다 :) index.html youtube.js

December 06, 2019
FRONTEND
$(this).index()를 javascript로 만들기

jquery를 쓰다보면 현재 클릭한 요소의 인덱스 값을 구하는 것을 많이 쓰는데 코드로 보면 다음과 같다. 어떻게 구현하는 걸까? 생각해보자. 우선 현재 클릭한 요소의 부모 요소부터 찾아야 할 듯하다. 함수로 만들어 보겠다 이런식으로하면 element의 부모 요소를 찾을 것이다. 그리고 부모 요소 중 element는 몇 번째 자식인지 찾아야 한다. 그러려면 Array객체의 메서드 중 indexOf() 메서드가 유용하다. 1차로 element의 인덱스 값을 구하는 함수가 완성이 되었다. 함수를 살펴보면 이라고 되어 있는데 indexOf는 Array객체의 메서드라서 parentNode.children같은 유사 배열엔 적용되지 않는다.(크롬은 되는데 그놈의 IE ㅠㅠ) mdn을 찾아보면 indexOf 사용법이 이렇게 적혀 있다. arr.indexOf(searchElement[, fromIndex]) searchElement 배열에서 찾을 요소입니다. fromIndex Optional 검…

October 20, 2019
FRONTEND
IE에서 AJAX 요청 캐싱 문제 해결하기

문제 정의 인터넷 익스플로러(IE)에서 방식으로 AJAX 요청을 보낼 때, 요청이 캐싱되어 기대한 대로 작동하지 않는 문제가 발생할 수 있습니다. 특히, 서버에서 제공하는 최신 데이터를 반복적으로 받아와야 하는 경우, 캐싱으로 인해 불필요하게 오래된 데이터를 받게 되어 문제가 발생합니다. 이 문제는 IE가 브라우저 캐싱을 강하게 적용하기 때문에 생깁니다. 이러한 캐싱은 브라우저 성능을 높이기 위한 의도이지만, 최신 데이터를 필요로 하는 AJAX 요청에서는 오히려 문제를 일으킬 수 있습니다. 이 글에서는 이 문제를 해결하기 위한 방법을 소개합니다. jQuery를 이용한 해결 방법 jQuery에서는 메서드에서 옵션을 통해 쉽게 이 문제를 해결할 수 있습니다. 예를 들어, 아래와 같이 를 로 설정하면 됩니다. jQuery 공식 문서에 따르면, 이 옵션을 사용하면 요청 시 URL에 타임스탬프를 추가하여 요청을 새롭게 만듭니다. 즉, 각 요청마다 고유한 URL을 가지게 하여 브라우저…

August 09, 2019
FRONTEND
input 입력 시 한글만 입력하게 하고 싶을 때

입력 폼 개발 시 사용자가 input에 한글만 적게 하고 싶을 때가 있다. 처음엔 이런식으로 하면 될 줄 알았지만 크롬에선 정상 작동되는데 IE에서는 정상적으로 작동하지 않았다 (망할 IE 망했으면…); 그때 여러 구글링을 통해 알아본 결과 숫자나 영어는 123, abc 이렇게 적히는 반면 한글은 ㄱ ㅏ ㅁ 을 합쳐서 감으로 만들어야 하기 때문에 keyup을 하면 안된다는 것이었다. 그래서 위 코드를 수정한 것이 keypress이다. keypress로 적용하니 정상 작동하였다. 결론 한글 입력 시 이벤트를 걸려면 keyup 말고 keypress !!!! 입력 폼 개발 시 사용자가 input에 한글만 적게 하고 싶을 때가 있다.

July 14, 2019
FRONTEND
image 높이 값 불러올 때 주의점

프론트엔드 개발자라면 이미지를 불러와 높이 값에 따라 레이아웃을 변경해야 할 때가 있을 것입니다. 예를 들어, 다음과 같은 코드를 사용할 수 있습니다: 하지만 결론적으로 위의 코드는 제대로 작동하지 않습니다. 왜 그럴까요? 문제의 원인: 이미지 로딩 타이밍 이 코드가 작동하지 않는 이유는 이미지가 로딩되기 전에 를 구하려고 하기 때문입니다. 이미지가 로드되지 않은 상태에서는 값이 정확하지 않거나 0으로 반환될 수 있습니다. 따라서 이미지의 크기를 기반으로 레이아웃을 변경하는 경우, 이미지가 완전히 로드된 이후에 높이 값을 계산해야 합니다. 해결 방법: 이미지 로드 후 높이 값 설정 위 코드가 정상적으로 작동하도록 하려면, 이미지가 로드된 후에 높이 값을 설정해야 합니다. 이를 위해 이벤트를 사용하여 이미지가 완전히 로드된 이후에 원하는 작업을 수행할 수 있도록 합니다: 위 코드에서는 콜백을 사용하여 이미지가 완전히 로드된 후에 의 높이를 이미지의 높이에 맞춰 설정합니다. 이…

June 29, 2019
FRONTEND
이미지에 CSS translate 사용 시 주의사항

프론트엔드 개발을 하다 보면 태그에 CSS 를 적용할 때 이미지가 흐릿해지는 현상을 경험할 수 있습니다. 이 문제는 이미지의 가로 또는 세로 크기와 관련이 있으며, 이에 대한 간단한 해결 방법을 제공하고자 합니다. 이미지 흐릿해짐 방지하기 태그에 CSS 를 적용할 때 이미지의 가로 또는 세로 크기가 홀수인 경우, 이미지가 흐릿해질 수 있습니다. 예를 들어, 를 적용할 때 이미지의 가로 크기가 홀수이면 이미지가 정확하게 픽셀 단위에 맞춰지지 않아 흐릿하게 보일 수 있습니다. 비슷하게, 를 적용할 때 세로 크기가 홀수인 경우에도 같은 현상이 발생합니다. 해결 방법 짝수 크기 유지: 를 사용하는 경우, 이미지의 가로 크기는 짝수여야 하고, 를 사용하는 경우에는 세로 크기를 짝수로 유지해야 합니다. 이렇게 하면 이미지가 픽셀 단위에 맞춰져 흐릿해지는 현상을 방지할 수 있습니다. 이미지를 배경으로 사용: 이 문제를 간단하게 해결하려면 이미지를 태그 대신 CSS의 속성을 사용해 배경으…

May 25, 2018
FRONTEND