Skip to content

siiion/Codify-Frontend

 
 

Repository files navigation

Codify FE

학생 제출 코드의 유사도를 분석해
공정하고 효율적인 표절 판단을 돕는 교수자용 웹 서비스 (Frontend)

React TypeScript Vite TailwindCSS Zustand React Query MSW Vercel


Codify Poster
Codify - 학생 제출 코드의 유사도를 분석해 공정하고 효율적인 표절 판단을 돕는 서비스

📋 목차

🔍 프로젝트 소개

🛠️ 기술 정보

💡 주요 화면 & FE 구현 포인트

📈 결과 및 회고


📖 프로젝트 개요

Codify FE는 교수자를 위한 프로그래밍 과제 표절 검사 서비스의
프론트엔드 전용 레포지토리입니다.

백엔드에서 분석한 코드 유사도 결과를
React 기반의 인터페이스로 직관적으로 시각화하며,

  • 파이차트(Recharts)
  • 네트워크 그래프(vis-network)
  • GitHub Diff 스타일 코드 비교 UI

를 통해 교수자가 빠르게 의심 구간을 확인할 수 있도록 돕습니다.

프론트엔드는 특히 다음 목표에 초점을 두고 설계되었습니다.

  • 교수자의 실제 평가 흐름을 반영한 화면 전환
  • 여러 과목·과제·주차를 넘나드는 상태 관리
  • 복잡한 분석 결과를 이해하기 쉬운 UI로 재가공

✨ 주요 기능 (Frontend 관점)

🧭 과제 검사 전체 워크플로우 UI

  • 과목 선택 → 과제명 입력 → 주차 설정 → 파일 업로드 → 결과 분석까지
    끊김 없는 단일 SPA 흐름 제공
  • 캘린더 기반 기간 선택 시 자동으로 N주차 계산 & 강조 표시
  • Zustand로 유지되는 글로벌 상태 덕분에 페이지 이동 간 데이터 유실 없음

📊 1차 필터링 결과 파이차트

  • 임계값을 기준으로 “유사도 낮음 / 높음” 두 구역으로 분류해 시각화
  • 호버 시 학생 리스트를 툴팁으로 표시
  • ROC 기반 Threshold 설명을 함께 표시하여 교수자의 판단을 보조

🕸️ 유사도 네트워크 그래프

  • 각 제출 파일을 노드(node), 유사도가 있는 쌍을 엣지(edge)로 표현
  • 엣지 굵기·투명도·색상을 유사도 값에 따라 매핑
  • 노드/엣지 Hover 시 오른쪽 패널에서 파일 이름·제출 시간·유사도 등을 표시
  • physics: false 옵션 적용 → 그래프가 흔들리거나 나는 현상 없이 안정적으로 고정됨

🧾 GitHub Diff 스타일 코드 비교

  • /compare/:from/:to 페이지에서 선택된 두 코드 비교
  • 줄 단위 색상 하이라이트로 유사도 유형 표시
  • 각 줄 번호 Hover 시 “유사한 코드를 가진 다른 학생 목록” 툴팁 표시
  • “검사 종료 / 결과 저장” 버튼을 하단에 배치해 워크플로우 마무리 용이

📚 분석 기록 & 누적 네트워크 토폴로지

  • 저장된 분석 결과를 리스트/카드 형태로 관리
  • 정렬 옵션: 최신순 / 유사도 높은 순
  • network / pair 타입별로 상세 정보 제공
  • 누적 네트워크 토폴로지를 시각화하여 학기 전체에서 반복되는 패턴 확인 가능

🧪 MSW 기반 API 모킹

  • 분석 결과/코드 비교/과제 생성 등을 모두 프론트에서 Mocking 가능 (개발 과정)
  • 백엔드 완성 전에 UI/UX 개발 및 교수자 피드백 수집 가능
  • 개발 속도를 크게 높인 핵심 요소

🧑‍🏫 교수자 사용 흐름

  1. 과목 선택 & 과제명/주차 설정
    캘린더 기반 자동 주차 계산 및 입력 흐름 제공

  2. 파일 업로드
    학생 제출물 압축 파일 또는 개별 파일 업로드

  3. 1차 필터링 결과 확인 (파이차트)
    임계값 대비 의심 비율과 학생 목록을 시각적으로 확인

  4. 네트워크 그래프 탐색
    유사도가 높은 학생 쌍을 시각적으로 탐색
    Hover 시 텍스트 정보 확인, 클릭 시 상세 비교 이동

  5. 코드 비교 화면 이동 (ComparePage)
    GitHub Diff UI로 라인 단위 유사도 확인

  6. 결과 저장
    분석 결과를 저장하고, 대시보드에서 누적 기록을 다시 확인 가능


📦 기술 스택

⚙️ Core

  • React — SPA 기반 UI 구성
  • TypeScript — 정적 타입으로 안전성 확보
  • Vite — 빠른 번들링 & 개발 서버

🗂 상태 · 서버 데이터 관리

  • Zustand
    • 과목/과제/주차 상태
    • 업로드 파일 목록
    • 선택된 비교 쌍
    • 저장된 기록 등 UI 중심 전역 상태 관리
  • React Query
    • 분석 결과 / 코드 비교 / 대시보드 등 서버 상태 관리
    • 캐싱, 로딩, 에러 핸들링, 자동 refetch 처리

🎨 스타일 & UI 컴포넌트

  • TailwindCSS — 전체 스타일 시스템
  • 자체 제작 컴포넌트
    • Button, Modal, Select, Tooltip, Layout 등 서비스 전반 통일된 UI

📊 시각화

  • vis-network
    • 유사도 네트워크 그래프 구현
    • 노드/엣지 커스터마이징 및 hover/interaction 처리
  • Recharts
    • 1차 필터링 파이차트 및 통계 그래프 구현

🧪 개발 · 협업

  • MSW (Mock Service Worker) — API 모킹 및 개발 편의성 극대화
  • Git & GitHub — PR 기반 협업
  • Figma — 화면 설계 및 UI 가이드
  • Vercel — 프론트엔드 배포 및 Preview 환경

🏗️ 프론트엔드 아키텍처

Codify FE는 다음 원칙을 기반으로 설계되었습니다:

  • Feature 기반 구조
    과목/과제/업로드/결과/비교/대시보드 등
    “도메인 단위”로 화면과 로직을 독립 구성.

  • UI 컴포넌트와 Feature 분리
    재사용 가능한 UI는 /components,
    페이지 및 화면 로직은 /features.

  • Zustand + React Query 조합

    • UI/플로우 중심 데이터는 Zustand
    • 서버 응답 기반 데이터는 React Query
      → 클라이언트/서버 상태가 명확히 분리됨.
  • 서비스 계층 구조
    /services에서 axios 인스턴스 + API 래퍼를 통일해 관리.

  • Mock 기반 개발
    /mocks에 각 API별 더미 응답을 갖춰
    UI 개발을 백엔드와 독립적으로 수행 가능.


📂 폴더 구조 (요약)

src/
├── components/         # 공통 UI 컴포넌트 (Button, Modal, Tooltip 등)
│   └── layout/         # Header, Footer, Content 등 레이아웃 요소
├── features/           # 각 도메인/페이지 단위 화면 및 로직
│   ├── Account/
│   ├── Assignment/
│   ├── Upload/
│   ├── Similarity/
│   ├── Result/
│   ├── Compare/
│   ├── Dashboard/
│   └── Home/
├── stores/             # Zustand 전역 상태 (과제/과목/파일/저장기록 등)
├── services/           # axios 기반 API 호출 모듈
├── hooks/              # React Query + 비즈니스 로직 훅
├── mocks/              # MSW 기반 Mock API 응답
├── constants/          # 더미 데이터
├── utils/              # 날짜/포맷/네트워크 계산 등 유틸 함수
├── types/              # 타입 정의
└── App.tsx, main.tsx   # 라우팅 및 엔트리

💡 주요 화면 & FE 구현 포인트

📊 유사도 분석 결과 시각화

🍰 파이차트 (Recharts)

  • 1차 필터링 결과를 임계값 미만 / 임계값 이상 두 영역으로 시각적으로 구분
  • 구역 Hover 시 해당 영역에 속한 학생 목록을 툴팁으로 표시
  • ROC 기반 Threshold 설명을 오른쪽 텍스트 영역에 배치해 교수자의 판단을 보조

🕸️ 네트워크 그래프 (vis-network)

  • 학생 제출물을 노드(node), 유사도 있는 쌍을 **엣지(edge)**로 표현
  • 엣지 스타일(굵기, 투명도, 색상)은 유사도 값에 따라 동적으로 매핑
  • 노드/엣지 Hover 시 오른쪽 정보 패널에
    파일명, 제출 시간, 유사도 값을 표시
  • physics: false 설정을 통해 그래프가 흔들리거나 레이아웃이 변하지 않도록 고정
파이차트네트워크 그래프
스크린샷 2025-11-14 오후 5 56 02 스크린샷 2025-11-14 오후 5 56 11

🧾 코드 비교(Compare) 화면

ResultPage의 네트워크 그래프에서 특정 엣지를 클릭하면
/compare/:from/:to 페이지로 이동하여 두 파일의 코드를 비교할 수 있습니다.

  • GitHub Diff Viewer 스타일의 좌·우 2단 코드 비교 인터페이스
  • 각 유사 코드 라인은 배경색으로 시각적 구분
  • 각 줄 번호 Hover 시 “이 라인과 유사한 다른 제출자 목록”을 툴팁으로 제공
  • 하단에는 검사 종료하기 / 결과 저장하기 버튼을 배치해 교수자의 워크플로우를 자연스럽게 마무리
코드 비교 화면
스크린샷 2025-11-14 오후 5 56 26

📚 분석 기록 & 대시보드

  • 저장된 분석 결과를 카드 / 리스트 형태로 표시
  • 정렬 옵션 제공:
    • 최신순
    • 유사도 높은 순
  • 카드에는 과제명, 주차, 분석 날짜, 미리보기 그래프/코드 비교 정보 표시
  • 클릭 시 상세 페이지로 이동

또한 대시보드에는 여러 과제를 통합한 누적 네트워크 토폴로지를 제공하여 시간이 지나도 반복되는 유사 패턴을 파악할 수 있습니다.

누적 네트워크 그래프저장된 분석 기록 목록
스크린샷 2025-11-14 오후 5 57 25 스크린샷 2025-11-14 오후 5 57 31

📈 결과 및 회고

✅ 프론트엔드 측 성과

  • 데이터 시각화 경험 강화

    • vis-network, Recharts를 실제 교육 도메인에 맞게 커스터마이징
    • 그래프와 텍스트 설명의 조합을 통해 UX 가독성 극대화
  • 안정적인 상태 관리 패턴 구축

    • Zustand(클라이언트 상태) + React Query(서버 상태) 조합을 정립
    • 업로드 → 분석 → 결과 → 저장 → 대시보드 전체 흐름에서 상태 충돌 없이 자연스럽게 이어짐
  • MSW 기반 프론트엔드 주도 개발 방식 정착

    • 백엔드 API가 완성되지 않은 상태에서도 UI 개발을 선행
    • 모킹 데이터로 회의 및 시연 반복 → 전체 개발 속도 향상

🔍 배운 점 & 향후 개선

배운 점

  • 실제 교수자 피드백을 반영하면서 시각화 자체보다, 사용자가 이해할 수 있도록 주변 설명을 강화하는 것의 중요성을 확인
  • Feature 단위로 폴더를 분리하고 UI/상태/훅을 정리한 구조가 장기 유지보수에 유리함을 체감

향후 개선 방향

  • 대규모 강의에서도 부드러운 네트워크 렌더링
    • 300~500명 수준에서도 성능 저하 없는 레이아웃 계산 방식 탐색
  • 코드 비교 기능 고도화
    • 언어별 코드 하이라이팅
    • 라인 단위 검색/필터 등 추가 기능
  • 교수자 맞춤형 대시보드 확장
    • 과목별/학기별 유사도 추세
    • 반복적으로 의심되는 파일 패턴 분석
  • 테스트 코드/E2E 도입으로 품질 향상
    • vitest / Cypress 기반 자동화 테스트 도입 검토

About

Codify 프론트엔드 레포지토리입니다.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • TypeScript 98.8%
  • Other 1.2%