본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.
본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.
이미지 로딩 중...

CodeDeck AI
2025. 11. 8. · 15 Views
shadcn/ui 컴포넌트 라이브러리 완벽 가이드
shadcn/ui는 Tailwind CSS와 Radix UI를 기반으로 한 재사용 가능한 컴포넌트 라이브러리입니다. 복사하여 붙여넣는 방식으로 작동하며, 완전히 커스터마이징 가능한 UI 컴포넌트를 제공합니다.
들어가며
이 글에서는 shadcn/ui 컴포넌트 라이브러리 완벽 가이드에 대해 상세히 알아보겠습니다. 총 12가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.
목차
- shadcn/ui_설치_및_초기화
- Button_컴포넌트_추가
- Button_Variants_사용하기
- Card_컴포넌트_구조
- Input_컴포넌트_사용
- Dialog_컴포넌트_활용
- Form_컴포넌트와_react-hook-form_통합
- Select_컴포넌트_사용
- Toast_알림_표시
- Theme_커스터마이징
- Accordion_컴포넌트_구현
- Badge_컴포넌트로_태그_표시
1. shadcn/ui 설치 및 초기화
개요
shadcn/ui를 프로젝트에 설치하고 초기 설정을 진행합니다. CLI를 통해 간단하게 초기화할 수 있습니다.
코드 예제
npx shadcn-ui@latest init
# 설정 옵션 선택
# - TypeScript 사용 여부
# - 스타일 (New York / Default)
# - 색상 테마 선택
설명
init 명령어로 shadcn/ui를 설정하면 components.json 파일이 생성되고, 필요한 의존성이 자동으로 설치됩니다.
2. Button 컴포넌트 추가
개요
shadcn/ui의 Button 컴포넌트를 프로젝트에 추가합니다. 컴포넌트는 소스 코드로 추가되어 자유롭게 수정 가능합니다.
코드 예제
npx shadcn-ui@latest add button
// 사용 예시
import { Button } from "@/components/ui/button"
export default function App() {
return <Button>클릭하세요</Button>
}
설명
add 명령어로 컴포넌트를 추가하면 components/ui 폴더에 소스 코드가 복사되어, npm 패키지가 아닌 직접 수정 가능한 코드로 관리됩니다.
3. Button Variants 사용하기
개요
Button 컴포넌트는 다양한 variant를 제공하여 여러 스타일을 쉽게 적용할 수 있습니다.
코드 예제
import { Button } from "@/components/ui/button"
export default function ButtonDemo() {
return (
<div className="flex gap-2">
<Button variant="default">기본</Button>
<Button variant="destructive">삭제</Button>
<Button variant="outline">외곽선</Button>
<Button variant="ghost">고스트</Button>
</div>
)
}
설명
variant prop을 통해 버튼의 스타일을 변경할 수 있으며, class-variance-authority 라이브러리로 구현되어 있습니다.
4. Card 컴포넌트 구조
개요
Card 컴포넌트는 Header, Title, Description, Content, Footer로 구성된 레이아웃 컴포넌트입니다.
코드 예제
import {
Card, CardHeader, CardTitle,
CardDescription, CardContent
} from "@/components/ui/card"
export default function CardDemo() {
return (
<Card>
<CardHeader>
<CardTitle>제목</CardTitle>
<CardDescription>설명 텍스트</CardDescription>
</CardHeader>
<CardContent>카드 내용</CardContent>
</Card>
)
}
설명
Card 컴포넌트는 의미 있는 하위 컴포넌트로 구성되어 있어 일관된 레이아웃을 쉽게 만들 수 있습니다.
5. Input 컴포넌트 사용
개요
Input 컴포넌트는 Tailwind CSS 스타일이 적용된 기본 입력 필드입니다.
코드 예제
import { Input } from "@/components/ui/input"
import { Label } from "@/components/ui/label"
export default function InputDemo() {
return (
<div className="space-y-2">
<Label htmlFor="email">이메일</Label>
<Input type="email" id="email" placeholder="이메일 입력" />
</div>
)
}
설명
Input 컴포넌트는 HTML input 엘리먼트를 확장하여 모든 기본 props를 지원하며, 일관된 디자인 시스템을 제공합니다.
6. Dialog 컴포넌트 활용
개요
Dialog는 Radix UI를 기반으로 한 접근성이 좋은 모달 컴포넌트입니다.
코드 예제
import {
Dialog, DialogContent, DialogHeader,
DialogTitle, DialogTrigger
} from "@/components/ui/dialog"
export default function DialogDemo() {
return (
<Dialog>
<DialogTrigger>열기</DialogTrigger>
<DialogContent>
<DialogHeader>
<DialogTitle>다이얼로그 제목</DialogTitle>
</DialogHeader>
<p>다이얼로그 내용입니다.</p>
</DialogContent>
</Dialog>
)
}
설명
DialogTrigger로 열림을 제어하고, DialogContent 안에 내용을 배치하여 키보드 네비게이션과 스크린 리더를 지원하는 접근성 높은 모달을 만들 수 있습니다.
7. Form 컴포넌트와 react-hook-form 통합
개요
shadcn/ui의 Form 컴포넌트는 react-hook-form과 zod를 통합하여 강력한 폼 검증을 제공합니다.
코드 예제
import { useForm } from "react-hook-form"
import { zodResolver } from "@hookform/resolvers/zod"
import * as z from "zod"
import { Form, FormField, FormItem, FormLabel, FormControl } from "@/components/ui/form"
import { Input } from "@/components/ui/input"
const formSchema = z.object({
username: z.string().min(2, "2글자 이상 입력하세요")
})
export default function FormDemo() {
const form = useForm<z.infer<typeof formSchema>>({
resolver: zodResolver(formSchema)
})
return (
<Form {...form}>
<FormField name="username" render={({ field }) => (
<FormItem>
<FormLabel>사용자명</FormLabel>
<FormControl><Input {...field} /></FormControl>
</FormItem>
)} />
</Form>
)
}
설명
zod 스키마로 검증 규칙을 정의하고, react-hook-form으로 폼 상태를 관리하여 타입 안전한 폼을 쉽게 구현할 수 있습니다.
8. Select 컴포넌트 사용
개요
Select 컴포넌트는 접근성이 좋은 드롭다운 선택 메뉴를 제공합니다.
코드 예제
import {
Select, SelectContent, SelectItem,
SelectTrigger, SelectValue
} from "@/components/ui/select"
export default function SelectDemo() {
return (
<Select>
<SelectTrigger className="w-[180px]">
<SelectValue placeholder="선택하세요" />
</SelectTrigger>
<SelectContent>
<SelectItem value="react">React</SelectItem>
<SelectItem value="vue">Vue</SelectItem>
<SelectItem value="angular">Angular</SelectItem>
</SelectContent>
</Select>
)
}
설명
SelectTrigger로 선택 버튼을 만들고, SelectContent 안에 SelectItem으로 옵션을 추가하여 키보드로도 조작 가능한 선택 메뉴를 만듭니다.
9. Toast 알림 표시
개요
Toast 컴포넌트는 사용자에게 일시적인 알림 메시지를 표시합니다.
코드 예제
import { useToast } from "@/components/ui/use-toast"
import { Button } from "@/components/ui/button"
export default function ToastDemo() {
const { toast } = useToast()
return (
<Button onClick={() => {
toast({
title: "알림",
description: "작업이 완료되었습니다."
})
}}>
토스트 표시
</Button>
)
}
설명
useToast 훅을 사용하여 toast 함수를 호출하면 화면 하단에 알림이 표시되며, 자동으로 사라집니다.
10. Theme 커스터마이징
개요
shadcn/ui는 CSS 변수를 통해 전체 테마를 쉽게 커스터마이징할 수 있습니다.
코드 예제
/* globals.css */
@layer base {
:root {
--background: 0 0% 100%;
--foreground: 222.2 84% 4.9%;
--primary: 221.2 83.2% 53.3%;
--primary-foreground: 210 40% 98%;
--radius: 0.5rem;
}
}
/* 컴포넌트에서 자동으로 적용됨 */
설명
CSS 변수를 수정하면 모든 shadcn/ui 컴포넌트의 색상과 스타일이 자동으로 변경되어 일관된 디자인 시스템을 유지할 수 있습니다.
11. Accordion 컴포넌트 구현
개요
Accordion은 펼치고 접을 수 있는 콘텐츠 섹션을 만드는 컴포넌트입니다.
코드 예제
import {
Accordion, AccordionContent,
AccordionItem, AccordionTrigger
} from "@/components/ui/accordion"
export default function AccordionDemo() {
return (
<Accordion type="single" collapsible>
<AccordionItem value="item-1">
<AccordionTrigger>질문 1</AccordionTrigger>
<AccordionContent>답변 내용입니다.</AccordionContent>
</AccordionItem>
<AccordionItem value="item-2">
<AccordionTrigger>질문 2</AccordionTrigger>
<AccordionContent>또 다른 답변입니다.</AccordionContent>
</AccordionItem>
</Accordion>
)
}
설명
type="single"은 한 번에 하나만 열리도록 하고, collapsible 속성은 열린 항목을 다시 클릭해 닫을 수 있게 합니다.
12. Badge 컴포넌트로 태그 표시
개요
Badge는 상태나 카테고리를 표시하는 작은 라벨 컴포넌트입니다.
코드 예제
import { Badge } from "@/components/ui/badge"
export default function BadgeDemo() {
return (
<div className="flex gap-2">
<Badge>기본</Badge>
<Badge variant="secondary">보조</Badge>
<Badge variant="destructive">경고</Badge>
<Badge variant="outline">외곽선</Badge>
</div>
)
}
설명
Badge 컴포넌트는 다양한 variant를 제공하여 상태나 카테고리를 시각적으로 구분할 수 있으며, 간결한 정보 표시에 적합합니다.
마치며
이번 글에서는 shadcn/ui 컴포넌트 라이브러리 완벽 가이드에 대해 알아보았습니다. 총 12가지 개념을 다루었으며, 각각의 사용법과 예제를 살펴보았습니다.
관련 태그
#React #shadcn/ui #TailwindCSS #RadixUI #UIComponents
댓글 (0)
함께 보면 좋은 카드 뉴스
마이크로서비스 배포 완벽 가이드
Kubernetes를 활용한 마이크로서비스 배포의 핵심 개념부터 실전 운영까지, 초급 개발자도 쉽게 따라할 수 있는 완벽 가이드입니다. 실무에서 바로 적용 가능한 배포 전략과 노하우를 담았습니다.
Application Load Balancer 완벽 가이드
AWS의 Application Load Balancer를 처음 배우는 개발자를 위한 실전 가이드입니다. ALB 생성부터 ECS 연동, 헬스 체크, HTTPS 설정까지 실무에 필요한 모든 내용을 다룹니다. 초급 개발자도 쉽게 따라할 수 있도록 단계별로 설명합니다.
고객 상담 AI 시스템 완벽 구축 가이드
AWS Bedrock Agent와 Knowledge Base를 활용하여 실시간 고객 상담 AI 시스템을 구축하는 방법을 단계별로 학습합니다. RAG 기반 지식 검색부터 Guardrails 안전 장치, 프론트엔드 연동까지 실무에 바로 적용 가능한 완전한 시스템을 만들어봅니다.
에러 처리와 폴백 완벽 가이드
AWS API 호출 시 발생하는 에러를 처리하고 폴백 전략을 구현하는 방법을 다룹니다. ThrottlingException부터 서킷 브레이커 패턴까지, 실전에서 바로 활용할 수 있는 안정적인 에러 처리 기법을 배웁니다.
AWS Bedrock 인용과 출처 표시 완벽 가이드
AWS Bedrock의 Citation 기능을 활용하여 AI 응답의 신뢰도를 높이는 방법을 배웁니다. 출처 추출부터 UI 표시, 검증까지 실무에서 바로 사용할 수 있는 완전한 가이드입니다.