이 프로젝트는 숙명여자대학교 프로그래밍 중앙 동아리 SOLUX의 공식 웹사이트입니다. React 기반의 Next.js 프레임워크를 사용하여 구축되었으며, 모던한 웹 기술을 활용하여 동아리의 활동, 프로젝트, 리크루팅 정보를 제공합니다.
- Next.js 16 (App Router): 최신 React 기능을 활용한 웹 프레임워크
- TypeScript: 정적 타입 지정을 통한 안정적인 개발 환경
- Supabase: 백엔드 데이터베이스 및 스토리지 (PostgreSQL 기반)
- Tailwind CSS: 유틸리티 퍼스트 CSS 프레임워크
- Framer Motion: 부드러운 애니메이션 구현
- Three.js (@react-three/fiber): 3D 인터랙티브 그래픽 요소 (히어로 섹션 등)
- Lucide React: 깔끔한 아이콘 라이브러리
프로젝트는 기능과 역할에 따라 명확하게 분리되어 있습니다. 리팩토링을 통해 Next.js에 익숙하지 않은 개발자도 쉽게 이해할 수 있도록 구조화했습니다.
smsolux-next/
├── public/ # 정적 파일 (이미지, 폰트 등)
├── src/
│ ├── app/ # Next.js App Router 페이지 (라우팅)
│ │ ├── layout.tsx # 전역 레이아웃
│ │ ├── page.tsx # 메인 페이지
│ │ ├── activity/ # 활동 소개 페이지
│ │ ├── project/ # 프로젝트 아카이브 페이지
│ │ ├── recruit/ # 리크루팅 페이지
│ │ └── about/ # 동아리 소개 페이지
│ │
│ ├── components/ # UI 컴포넌트 모음
│ │ ├── common/ # 공통 사용 컴포넌트 (버튼, 배지 등)
│ │ ├── layout/ # 레이아웃 관련 컴포넌트 (헤더, 푸터)
│ │ ├── home/ # 메인 페이지 전용 컴포넌트 섹션
│ │ └── ... # 기타 기능별 컴포넌트
│ │
│ ├── constants/ # 상수 데이터 매니지먼트 (텍스트, 메뉴 등)
│ │ └── activities.tsx # 활동 데이터 등 UI에서 분리된 정적 데이터
│ │
│ ├── lib/ # 외부 라이브러리 설정 (Supabase 클라이언트 등)
│ ├── types/ # TypeScript 타입 정의 (Project, Activity 등)
│ └── utils/ # 유틸리티 함수 (데이터 변환 등 로직 분리)
│
└── ...config files # 설정 파일들 (tailwind, next.config, etc.)
git clone <repository-url>
cd smsolux-next
npm install프로젝트 루트에 .env.local 파일을 생성하고 Supabase 관련 키를 입력해야 합니다.
NEXT_PUBLIC_SUPABASE_URL=your_supabase_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_keynpm run dev브라우저에서 http://localhost:3000을 열어 확인하세요.
이 프로젝트는 유지보수성을 높이기 위해 다음과 같은 원칙으로 리팩토링 되었습니다:
- 관심사의 분리 (Separation of Concerns):
- 데이터(Logic)와 화면(UI)을 분리했습니다. 예를 들어, 복잡한 데이터 변환 로직은
src/utils로, 정적인 텍스트 데이터는src/constants로 이동했습니다.
- 데이터(Logic)와 화면(UI)을 분리했습니다. 예를 들어, 복잡한 데이터 변환 로직은
- 컴포넌트 구조화:
components폴더를layout,home,common등으로 세분화하여 찾기 쉽게 정리했습니다.
- Client vs Server:
- Next.js의 App Router 특성을 살려, 데이터 페칭은 서버 컴포넌트(
page.tsx)에서 수행하고, 인터랙션이 필요한 부분만 클라이언트 컴포넌트(...Client.tsx)로 분리했습니다.
- Next.js의 App Router 특성을 살려, 데이터 페칭은 서버 컴포넌트(
Made with 💙 by SOLUX