소개 및 Academic Suite의 기초
Source: Dev.to
개요
이 장은 전체 책의 초기 기반을 제공합니다. 목표는 문제 상황부터 선택한 기술, 그리고 책 전반에 걸쳐 개발될 프로젝트 구조에 이르기까지 Academic Suite 시스템에 대한 기술적 개요를 제시하는 것입니다. 독자 안내에 초점을 맞춘 서문과 달리, 이 장은 기술 영역으로 들어가 시스템 구현의 출발점이 됩니다.
Academic Suite는 학교와 대학의 온라인 시험 관리를 주된 목적으로 하는 학습 관리 시스템(LMS)입니다.
온라인 시험 시스템의 핵심 과제
- 고동시성
- 데이터 무결성
- 보안 및 부정행위 방지
- 실시간 모니터링
이러한 과제들은 Academic Suite의 아키텍처 결정에 영향을 미치며, 신뢰성과 개발 용이성을 강조합니다.
기술 스택
백엔드 (Go)
- 언어: Go (Golang) v1.24.0
- 웹 프레임워크: Fiber v2 (fasthttp 기반, 높은 성능)
- ORM: GORM
- 인증: JWT (JSON Web Token)
Go를 선택한 이유:
Goroutine은 가볍고 효율적이어서 동시성이 높은 온라인 시험의 부하를 처리하기에 적합합니다. 또한 Go는 명시적이고 유지보수하기 쉬운 코드를 장려합니다.
프론트엔드 (React)
- UI 프레임워크: React 18
- 빌드 도구: Vite 6
- 언어: TypeScript 5
- 스타일링: Tailwind CSS 3.4
- UI 컴포넌트: shadcn/ui
- 상태 관리: Zustand
- 데이터 패칭: TanStack Query (React Query)
이 스택은 네트워크 상황이 좋지 않아도 사용 가능한 반응형·안정적인 시험 인터페이스를 지원합니다.
모노레포 구성
Academic Suite는 모노레포 방식을 사용해 백엔드와 프론트엔드를 동일 저장소에 두면서도 역할을 구분합니다. 이를 통해 다음을 가능하게 합니다:
- 프론트엔드와 백엔드 개발 동기화
- 버전 관리 및 배포 간소화
- 전체 시스템을 한 눈에 볼 수 있는 단일 저장소
프로젝트 디렉터리 구조
academic-suite/
├── backend/ # Source code API (Go)
│ ├── handlers/ # HTTP handlers / controllers
│ ├── models/ # Database schema (structs)
│ ├── routes/ # API endpoint definitions
│ ├── go.mod # Go dependencies
│ └── main.go # Backend application entry point
│
├── frontend/ # UI source code (React)
│ └── src/
│ ├── components/ # Reusable UI components
│ ├── pages/ # Application pages
│ ├── hooks/ # Custom React hooks
│ └── lib/ # Utilities (API client, helpers)
│ ├── package.json # Frontend dependencies
│ └── vite.config.ts # Build configuration
│
├── book/ # Technical documentation (this book)
└── MANUAL.md # Concise user guide
이 구조는 책 전반에 걸쳐 일관되게 사용되어 코드의 정돈과 가독성을 유지합니다.
개발 환경 전제 조건
- Go 1.24 이상
- PostgreSQL (프로덕션 권장) 또는 SQLite (개발용)
- Node.js v18+ 또는 Bun v1.0+
- Git
구현 단계에 들어가기 전에 위 도구들이 설치되어 있는지 확인하십시오.
요약 및 다음 단계
이번 장에서 다룬 내용:
- Academic Suite의 배경 및 목적
- 온라인 시험 시스템의 주요 과제
- 백엔드와 프론트엔드에 선택된 기술 스택
- 모노레포 조직 방식 및 디렉터리 레이아웃
- 필수 개발 환경 설정
2장에서는 시스템의 가장 중요한 기반인 데이터베이스 설계를 시작합니다. 여기서는 시험 데이터, 사용자, 채점 결과가 일관되고 효율적으로 관리되는 방식을 정의합니다.