fsd 아키텍처을 사용해보자 1 - memo app
Next.js 2025. 3. 22. 12:51프로젝트 개요
fsd 아키텍처에 대한 고려
메모 앱을 구성하면서 fsd 아키텍처의 내용을 학습
pnpm을 사용하여 Next.js 프로젝트 시작
> pnpm create next-app
...
✔ What is your project named? … test-fsd
✔ Would you like to use TypeScript? … No / Yes
✔ Would you like to use ESLint? … No / Yes
✔ Would you like to use Tailwind CSS? … No / Yes
✔ Would you like your code inside a `src/` directory? … No / Yes
✔ Would you like to use App Router? (recommended) … No / Yes
✔ Would you like to use Turbopack for `next dev`? … No / Yes
✔ Would you like to customize the import alias (`@/*` by default)? … No / Yes
app라우터를 사용하고 src 디렉터리를 사용한다.
src/에 fsd 아키텍처의 layouts를 구성한다.
그리고 next.js이므로 /src/app을 routing 폴더로 사용한다.
src/
--app
--features
--widgets
--shared
----ui
----style
----config
----lib
css를 사용하기 위해 tailwindcss를 사용
그리고 1픽셀 단위로 spacing을 사용하기 위해 아래 사이트를 참고하여, theme를 설정한다.
https://tailwindcss.com/docs/padding#customizing-your-theme
@theme {
--spacing: 1px;
}
tailwindcss에서 컴포넌트를 구성하기 위해 cva를 사용한다.
cva는 tailwindcss의 스타일을 유연하게 관리할 수 있도록 도와주는 유틸리티 라이브러리로, 컴포넌트의 variant를 지정할 수 있다.
그리고 이와 동시에 className과 cva의 tailwindcss의 클래스 명 중복과 충돌을 방지하기 위해 clsx와 tailwind-merge를 사용하여 cn함수를 구성한다.
또한 fsd 아키텍처를 만족시키기 위해 /shared/lib/utils.js 에 선언한다.
import clsx from "clsx";
import { twMerge } from "tailwind-merge";
// className 병합 + Tailwind 우선순위 충돌 방지
export function cn(...inputs) {
return twMerge(clsx(inputs));
}
shared 레이어의 요소들은 모든 레이어에서 사용이 가능하다.
따라서 아키텍처 전반적인 소스코드에서 사용하기 위한 유틸리티 함수이기에 cn함수는 shared의 레이어에 있는 것이 좋을 것 같다.
여기까지 프로젝트 시작을 위한 기본적인 구성을 마련했다.
next.js with bun (0) | 2024.11.21 |
---|---|
로그인 페이지 구성 with TailwindCSS (0) | 2023.11.07 |
Next.js 개요 및 프로젝트 구조 (2) | 2023.08.28 |
Next.js 13에서 tailwindcss를 사용하여 동적 스타일링 컴포넌트 구성하기 (0) | 2023.08.27 |
Next.js 13에서 tailwindcss가 적용되지 않는 오류 해결 (1) | 2023.08.26 |