← 홈

⚛️React

⌘K
🤖
Claude Code AI 도구
🤗
Hugging Face AI 도구
🦜
LangChain AI 도구
🧠
Keras AI 도구
🦙
Ollama AI 도구
🐍
Python 프로그래밍 언어
🟨
JavaScript 프로그래밍 언어
🔷
TypeScript 프로그래밍 언어
⚛️
React 프로그래밍 언어
🐹
Go 프로그래밍 언어
🦀
Rust 프로그래밍 언어
📊
MATLAB 프로그래밍 언어
🗄️
SQL 프로그래밍 언어
⚙️
C/C++ 프로그래밍 언어
Java 프로그래밍 언어
🟣
C# 프로그래밍 언어
🍎
Swift 프로그래밍 언어
🟠
Kotlin 프로그래밍 언어
Next.js 프로그래밍 언어
💚
Vue.js 프로그래밍 언어
🔥
Svelte 프로그래밍 언어
🎨
Tailwind CSS 프로그래밍 언어
💚
Node.js 프로그래밍 언어
🌐
HTML 프로그래밍 언어
🎨
CSS/SCSS 프로그래밍 언어
🐘
PHP 프로그래밍 언어
💎
Ruby 프로그래밍 언어
🔴
Scala 프로그래밍 언어
📊
R 프로그래밍 언어
🎯
Dart 프로그래밍 언어
💧
Elixir 프로그래밍 언어
🌙
Lua 프로그래밍 언어
🐪
Perl 프로그래밍 언어
🅰️
Angular 프로그래밍 언어
🚂
Express.js 프로그래밍 언어
🐱
NestJS 프로그래밍 언어
🛤️
Ruby on Rails 프로그래밍 언어
◼️
GraphQL 프로그래밍 언어
🟪
Haskell 프로그래밍 언어
💚
Nuxt.js 프로그래밍 언어
🔷
SolidJS 프로그래밍 언어
htmx 프로그래밍 언어
💻
VS Code 개발 도구
🧠
PyCharm 개발 도구
📓
Jupyter 개발 도구
🧠
IntelliJ IDEA 개발 도구
💚
Neovim 개발 도구
🔮
Emacs 개발 도구
🔀
Git DevOps & CLI
🐳
Docker DevOps & CLI
☸️
Kubernetes DevOps & CLI
☁️
AWS CLI DevOps & CLI
🔄
GitHub Actions DevOps & CLI
🐧
Linux 명령어 DevOps & CLI
💻
Bash 스크립팅 DevOps & CLI
🌐
Nginx DevOps & CLI
📝
Vim DevOps & CLI
🔨
Makefile DevOps & CLI
🧪
Pytest DevOps & CLI
🪟
Windows DevOps & CLI
📦
패키지 매니저 DevOps & CLI
🍎
macOS DevOps & CLI
🏗️
Terraform DevOps & CLI
🔧
Ansible DevOps & CLI
Helm DevOps & CLI
🔨
Jenkins DevOps & CLI
🔥
Prometheus DevOps & CLI
📊
Grafana DevOps & CLI
💻
Zsh DevOps & CLI
🐟
Fish Shell DevOps & CLI
💙
PowerShell DevOps & CLI
🔄
Argo CD DevOps & CLI
🔀
Traefik DevOps & CLI
☁️
Azure CLI DevOps & CLI
☁️
Google Cloud CLI DevOps & CLI
📟
tmux DevOps & CLI
🔧
jq DevOps & CLI
✂️
sed DevOps & CLI
📊
awk DevOps & CLI
🌊
Apache Airflow DevOps & CLI
🔢
NumPy 데이터베이스 & 데이터
🐼
Pandas 데이터베이스 & 데이터
🔥
PyTorch 데이터베이스 & 데이터
🧠
TensorFlow 데이터베이스 & 데이터
📈
Matplotlib 데이터베이스 & 데이터
🐘
PostgreSQL 데이터베이스 & 데이터
🐬
MySQL 데이터베이스 & 데이터
🍃
MongoDB 데이터베이스 & 데이터
🔴
Redis 데이터베이스 & 데이터
🔍
Elasticsearch 데이터베이스 & 데이터
🤖
Scikit-learn 데이터베이스 & 데이터
👁️
OpenCV 데이터베이스 & 데이터
Apache Spark 데이터베이스 & 데이터
🪶
SQLite 데이터베이스 & 데이터
Supabase 데이터베이스 & 데이터
🔵
Neo4j 데이터베이스 & 데이터
📨
Apache Kafka 데이터베이스 & 데이터
🐰
RabbitMQ 데이터베이스 & 데이터
🔤
Regex 유틸리티
📝
Markdown 유틸리티
📄
LaTeX 유틸리티
🔐
SSH & GPG 유틸리티
🌐
curl & HTTP 유틸리티
📜
reStructuredText 유틸리티
🚀
Postman 유틸리티
🎬
FFmpeg 유틸리티
🖼️
ImageMagick 유틸리티
🔍
ripgrep 유틸리티
🔍
fzf 유틸리티
📗
Microsoft Excel 오피스 애플리케이션
📘
Microsoft Word 오피스 애플리케이션
📙
Microsoft PowerPoint 오피스 애플리케이션
📝
한컴 한글 한컴오피스
📽️
한컴 한쇼 한컴오피스
📊
한컴 한셀 한컴오피스
📄
Google 문서 Google Workspace
📊
Google 스프레드시트 Google Workspace
📽️
Google 프레젠테이션 Google Workspace
🔌
Cadence Virtuoso EDA & 하드웨어
⚙️
Synopsys EDA EDA & 하드웨어
💎
Verilog & VHDL EDA & 하드웨어
LTSpice EDA & 하드웨어
🔧
KiCad EDA & 하드웨어
📝
Notion 생산성 도구
💎
Obsidian 생산성 도구
💬
Slack 생산성 도구
🎮
Discord 생산성 도구
🎨
Figma 디자인 도구
📘
Confluence Atlassian
📋
Jira Atlassian
🃏
Jest 테스팅
Vitest 테스팅
🎭
Playwright 테스팅
🌲
Cypress 테스팅
🌐
Selenium 테스팅
💙
Flutter 모바일 개발
📱
React Native 모바일 개발
🍎
SwiftUI 모바일 개발
📱
Expo 모바일 개발
🐍
Django 웹 프레임워크
FastAPI 웹 프레임워크
🌶️
Flask 웹 프레임워크
🍃
Spring Boot 웹 프레임워크
🍸
Gin 웹 프레임워크
Vite 빌드 도구
📦
Webpack 빌드 도구
esbuild 빌드 도구
🐘
Gradle 빌드 도구
🪶
Maven 빌드 도구
🔧
CMake 빌드 도구
🎮
Unity 게임 개발
🤖
Godot 게임 개발
🔌
Arduino 임베디드 & IoT
🔍
Nmap 보안
🐕
Datadog 모니터링
📖
Swagger/OpenAPI 문서화
검색 결과가 없습니다
EN KO

🧩 컴포넌트

📦 함수 컴포넌트

function Component() { return <div /> } 함수 컴포넌트
const Component = () => <div /> 화살표 함수 컴포넌트
export default Component 기본 내보내기
export { Component } 명명된 내보내기
<Component prop={value} /> 컴포넌트 사용
<Component>{children}</Component> 자식과 함께

📤 Props

function Comp({ prop1, prop2 }) {} props 구조 분해
function Comp({ prop = "default" }) {} 기본 prop 값
function Comp({ children }) {} children prop
<Comp {...props} /> props 스프레드
function Comp({ ...rest }) {} 나머지 props

📝 JSX

<div className="cls"> 클래스 속성
<label htmlFor="id"> for 속성
{expression} JSX 내 JS 표현식
{condition && <Comp />} 조건부 렌더링
{cond ? <A /> : <B />} 삼항 렌더링
{arr.map(x => <Item key={x.id} />)} 리스트 렌더링
<>{elements}</> Fragment (래퍼 없음)
<React.Fragment key={id}> 키가 있는 Fragment
style={{ color: "red" }} 인라인 스타일
dangerouslySetInnerHTML={{ __html: html }} 원시 HTML (주의!)

🪝

📊 상태 훅

const [state, setState] = useState(initial) 상태 변수
setState(newValue) 상태 업데이트
setState(prev => prev + 1) 함수형 업데이트
useState(() => expensiveCalc()) 지연 초기 상태
const [state, dispatch] = useReducer(reducer, init) 리듀서 상태

이펙트 훅

useEffect(() => { ... }) 모든 렌더 후 실행
useEffect(() => { ... }, []) 마운트 시 한 번 실행
useEffect(() => { ... }, [dep]) dep 변경 시 실행
useEffect(() => { return () => cleanup }) 정리 함수
useLayoutEffect(() => { ... }) DOM 업데이트 후 동기

🔗 Ref & Memo 훅

const ref = useRef(initialValue) 가변 ref
<input ref={ref} /> DOM ref
ref.current ref 값 접근
const memo = useMemo(() => calc, [deps]) 값 메모이제이션
const fn = useCallback(() => {}, [deps]) 함수 메모이제이션

🌐 컨텍스트 훅

const MyContext = createContext(default) 컨텍스트 생성
<MyContext.Provider value={val}> 컨텍스트 제공
const value = useContext(MyContext) 컨텍스트 소비

🔧 기타 훅

const id = useId() 고유 ID 생성
const [isPending, startTransition] = useTransition() 비긴급 업데이트 표시
const deferredValue = useDeferredValue(value) 값 업데이트 지연
useSyncExternalStore(subscribe, getSnapshot) 외부 스토어 구독
useImperativeHandle(ref, () => ({ method })) ref 핸들 커스터마이즈
useDebugValue(value) DevTools 디버그 라벨

🎨 패턴

🪝 커스텀 훅

function useCustomHook() { ... } 커스텀 훅 (use 접두사)
return [state, actions] 상태와 액션 반환
return { data, loading, error } 객체 반환

📝 커스텀 훅 예제

// useFetch 커스텀 훅
function useFetch(url) {
const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);

useEffect(() => {
const controller = new AbortController();

fetch(url, { signal: controller.signal })
.then(res => res.json())
.then(setData)
.catch(setError)
.finally(() => setLoading(false));

return () => controller.abort();
}, [url]);

return { data, loading, error };
}

// 사용법
const { data, loading, error } = useFetch('/api/data');

🧩 컴포넌트 패턴

React.memo(Component) 컴포넌트 메모이제이션
React.lazy(() => import("./Comp")) 컴포넌트 지연 로드
<Suspense fallback={<Loading />}> Suspense 경계
<ErrorBoundary fallback={<Error />}> 에러 경계
forwardRef((props, ref) => ...) 자식에 ref 전달
createPortal(children, container) DOM 트리 외부 렌더

🎪 이벤트 & 폼

🖱️ 이벤트 처리

onClick={handleClick} 클릭 핸들러
onClick={() => handleClick(id)} 인자와 함께
onChange={e => setValue(e.target.value)} 입력 변경
onSubmit={handleSubmit} 폼 제출
onKeyDown={e => e.key === "Enter" && ...} 키보드 이벤트
onFocus / onBlur 포커스 이벤트
onMouseEnter / onMouseLeave 마우스 이벤트
e.preventDefault() 기본 동작 방지
e.stopPropagation() 전파 중지

📋

<input value={val} onChange={...} /> 제어 입력
<input defaultValue={val} ref={ref} /> 비제어 입력
<select value={val}> 제어 select
<textarea value={val}> 제어 textarea
<input type="checkbox" checked={bool}> 제어 체크박스
e.target.value / e.target.checked 입력 값 가져오기

📊 상태 관리

🔄 useReducer

const [state, dispatch] = useReducer(reducer, init) 리듀서 설정
dispatch({ type: "ACTION", payload }) 액션 디스패치
function reducer(state, action) { switch... } 리듀서 함수

📝 리듀서 예제

const initialState = { count: 0 };

function reducer(state, action) {
switch (action.type) {
case 'increment':
return { count: state.count + 1 };
case 'decrement':
return { count: state.count - 1 };
case 'reset':
return initialState;
default:
throw new Error('알 수 없는 액션');
}
}

function Counter() {
const [state, dispatch] = useReducer(reducer, initialState);
return (
<>
카운트: {state.count}



);
}

성능

🚀 최적화

React.memo(Component) props 같으면 재렌더 스킵
React.memo(Comp, areEqual) 커스텀 비교
useMemo(() => value, [deps]) 비용 큰 계산 캐시
useCallback(() => fn, [deps]) 함수 참조 캐시
React.lazy(() => import(...)) 코드 분할
<Suspense fallback={...}> 로딩 경계
startTransition(() => setState(...)) 논블로킹 업데이트
useDeferredValue(value) 비용 큰 재렌더 지연

💡 성능 팁

  • 리스트 아이템에 항상 고유한 key prop 사용
  • 상태를 사용하는 곳에 최대한 가깝게 배치
  • 비용 큰 순수 컴포넌트에 React.memo 사용
  • 메모이제이션된 자식에 전달 시 useCallback으로 이벤트 핸들러 래핑
  • 단순 값이 아닌 비용 큰 계산에 useMemo 사용

💡

🚀 모범 사례

  • 컴포넌트를 작고 단일 책임에 집중되게 유지
  • 컴포넌트 간 공유가 필요할 때만 상태 끌어올리기
  • 커스텀 훅으로 상태 로직 추출 및 재사용
  • 가능하면 JSX 내 인라인 함수 정의 피하기
  • 메모리 누수 방지를 위해 useEffect 정리 사용
  • 훅에서 의존성 배열 잊지 않기
  • 디버깅에 React DevTools 사용
  • 데이터가 많은 페이지에 React Server Components 고려