🌐 웹개발

Frontend

프론트엔드

프론트엔드는 사용자가 직접 보고 상호작용하는 웹 애플리케이션의 클라이언트 측 영역입니다. HTML, CSS, JavaScript를 기반으로 React, Vue, Angular 등의 프레임워크로 현대적인 UI를 구축합니다.

📖 상세 설명

프론트엔드(Frontend)는 웹 애플리케이션에서 사용자가 직접 보고 상호작용하는 모든 부분을 의미합니다. 브라우저에서 실행되는 코드로, HTML로 구조를, CSS로 스타일을, JavaScript로 동작을 구현합니다. "클라이언트 사이드(Client-side)"라고도 불리며, 서버에서 처리되는 백엔드와 대비됩니다.

현대 프론트엔드 개발의 핵심은 컴포넌트 기반 아키텍처입니다. React, Vue, Angular, Svelte 같은 프레임워크들은 UI를 재사용 가능한 컴포넌트로 분리하여 복잡한 인터페이스를 관리합니다. 상태 관리(Redux, Zustand, Pinia)와 라우팅, 폼 처리 등 다양한 생태계가 발전해 있습니다.

프론트엔드 개발자는 단순히 디자인을 구현하는 것을 넘어, 성능 최적화, 접근성(a11y), SEO, 반응형 디자인, 크로스 브라우저 호환성까지 고려해야 합니다. Core Web Vitals(LCP, FID, CLS) 같은 성능 지표가 검색 순위에 영향을 미치면서, 기술적 품질의 중요성이 더욱 커졌습니다.

최근 트렌드는 서버 컴포넌트, 하이브리드 렌더링(SSR/SSG/ISR), Edge Computing으로 서버와 클라이언트의 경계가 흐려지고 있습니다. Next.js, Nuxt, SvelteKit 같은 메타 프레임워크가 풀스택에 가까운 개발 경험을 제공하며, 프론트엔드 개발자의 역할이 확장되고 있습니다.

💻 코드 예제

// React 컴포넌트 예제 - 사용자 프로필 카드
import { useState, useEffect } from 'react';
import styles from './ProfileCard.module.css';

interface User {
  id: number;
  name: string;
  email: string;
  avatar: string;
}

export function ProfileCard({ userId }: { userId: number }) {
  const [user, setUser] = useState<User | null>(null);
  const [isLoading, setIsLoading] = useState(true);

  useEffect(() => {
    async function fetchUser() {
      try {
        const response = await fetch(`/api/users/${userId}`);
        const data = await response.json();
        setUser(data);
      } finally {
        setIsLoading(false);
      }
    }
    fetchUser();
  }, [userId]);

  if (isLoading) return <div className={styles.skeleton} />;
  if (!user) return <div>사용자를 찾을 수 없습니다</div>;

  return (
    <article className={styles.card}>
      <img
        src={user.avatar}
        alt={`${user.name}의 프로필`}
        className={styles.avatar}
        loading="lazy"
      />
      <h2 className={styles.name}>{user.name}</h2>
      <p className={styles.email}>{user.email}</p>
    </article>
  );
}

/* ProfileCard.module.css */
.card {
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: 2rem;
  border-radius: 12px;
  background: var(--card-bg);
  box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
  transition: transform 0.2s ease;
}

.card:hover {
  transform: translateY(-4px);
}

.avatar {
  width: 80px;
  height: 80px;
  border-radius: 50%;
  object-fit: cover;
  margin-bottom: 1rem;
}

.name {
  font-size: 1.25rem;
  font-weight: 600;
  margin-bottom: 0.5rem;
}

.email {
  color: var(--text-secondary);
  font-size: 0.9rem;
}

/* 반응형 디자인 */
@media (max-width: 768px) {
  .card {
    padding: 1.5rem;
  }
}

/* 다크 모드 지원 */
@media (prefers-color-scheme: dark) {
  .card {
    --card-bg: #1e293b;
    --text-secondary: #94a3b8;
  }
}

🗣️ 실무 대화 예시

👨‍💼 기술 면접관
"프론트엔드 개발에서 가장 중요하게 생각하는 것은 무엇인가요?"
👨‍💻 지원자
"사용자 경험입니다. 기술적으로는 성능(Core Web Vitals), 접근성(스크린 리더 호환, 키보드 네비게이션), 그리고 반응형 디자인을 중시합니다. 화려한 애니메이션보다 로딩 속도와 인터랙션 반응성이 실제 사용자 만족도에 더 큰 영향을 미칩니다."
👩‍💼 PM
"이번 프로젝트 프론트엔드 기술 스택은 어떻게 결정할까요?"
👨‍💻 프론트엔드 리드
"팀 경험도와 프로젝트 요구사항을 고려해야 해요. SEO가 중요하면 Next.js나 Nuxt로 SSR을, 대시보드 같은 내부 도구면 SPA로 충분합니다. TypeScript는 필수로 가져가고, 상태 관리는 규모에 따라 Context API나 Zustand 중 선택하면 될 것 같아요."

⚠️ 주의사항

🔗 관련 용어

📚 더 배우기