광운대학교 중앙 컴퓨터 학술동아리 COM's의 공식 웹사이트입니다.
동아리 소개, 모집 안내, 공지사항, 자료실, 커뮤니티, 회원 관리 기능을 제공하며, React 프론트엔드와 Spring Boot 백엔드를 한 저장소에서 함께 관리합니다.
- 동아리 소개, 활동, 프로젝트, 모집 안내
- 회원가입, 로그인, 로그아웃, 비밀번호 변경/재설정
- 가입 가능 명부 기반 회원가입 및 이메일 인증
- 공지사항 조회, 작성, 수정, 삭제
- 회원 전용 자료실 파일 업로드/다운로드
- 회원 전용 커뮤니티 게시글, 이미지, 댓글, 추천/비추천
- 모집 지원서 제출 및 메일 알림
- 관리자 회원 관리, 권한 관리, 차단 학생 관리
- 사이트 폰트 업로드 및 활성화
| 구분 | 기술 |
|---|---|
| Frontend | React 19, Vite 8, React Router 7, Tailwind CSS 4 |
| Backend | Java 21, Spring Boot 4, Gradle |
| Security | Spring Security, JWT, HttpOnly Cookie, BCrypt |
| Database | H2, PostgreSQL, Flyway |
| Infra | Docker, Docker Compose, Nginx, GitHub Actions |
coms-website/
|-- src/ # React frontend
| |-- assets/ # 이미지, 로고, 폰트
| |-- components/ # 공통 컴포넌트
| |-- contexts/ # 인증 컨텍스트
| |-- pages/ # 화면 단위 컴포넌트
| `-- services/ # API 요청 모듈
|-- public/ # 정적 파일
|-- backend/ # Spring Boot backend
| |-- src/main/java/com/coms/backend/
| | |-- controller/ # REST API
| | |-- service/ # 비즈니스 로직
| | |-- repository/ # JPA Repository
| | |-- domain/ # Entity
| | |-- dto/ # Request/Response DTO
| | |-- security/ # JWT, 인증 필터
| | `-- config/ # 보안, 시간, Flyway 설정
| `-- src/main/resources/
| `-- db/migration/ # Flyway migration
|-- scripts/ # Windows 보조 스크립트
|-- docker-compose.yml
|-- Dockerfile.frontend
`-- nginx.frontend.conf
git clone https://github.com/kw-coms/coms-website.git
cd coms-websiteCopy-Item .env.example .env운영 환경에서는 .env의 JWT_SECRET, DB_PASSWORD, CORS_ALLOWED_ORIGINS, SMTP 관련 값을 반드시 실제 값으로 변경해야 합니다.
cd backend
$env:SPRING_PROFILES_ACTIVE = "dev"
.\gradlew.bat bootRun개발 프로필은 H2 파일 DB를 사용합니다. 서버는 기본적으로 http://localhost:8080에서 실행됩니다.
로컬 JDK가 .tools\jdk-21.0.11+10에 준비되어 있다면 루트에서 다음 스크립트를 사용할 수 있습니다.
.\scripts\start-backend.ps1새 터미널에서 실행합니다.
npm ci
npm run dev프론트엔드는 http://localhost:3000에서 실행됩니다. Vite 개발 서버는 /api 요청을 http://localhost:8080으로 프록시합니다.
npm run lint
npm run buildcd backend
.\gradlew.bat test또는 루트에서 다음 스크립트를 사용할 수 있습니다.
.\scripts\test-backend.ps1docker compose --env-file .env up -d --build기본 포트는 다음과 같습니다.
| 서비스 | 주소 |
|---|---|
| Frontend | http://127.0.0.1:3000 |
| Backend | http://127.0.0.1:8080 |
| Health Check | http://127.0.0.1:8080/actuator/health |
프론트엔드 Docker 빌드는 Vite 빌드 시점의 .env 값을 사용합니다. 로컬 Docker에서 프론트엔드가 백엔드에 직접 접근해야 한다면 VITE_API_BASE_URL=http://localhost:8080/api처럼 설정한 뒤 다시 빌드하세요. 운영 환경에서는 보통 reverse proxy가 /api를 백엔드로 전달하도록 구성합니다.
| 영역 | 경로 | 권한 |
|---|---|---|
| 인증 | /api/auth/** |
일부 공개, 일부 회원 |
| 모집 지원 | POST /api/recruit/apply |
공개 |
| 공지사항 조회 | GET /api/notices/** |
공개 |
| 공지사항 관리 | POST, PUT, DELETE /api/notices/** |
관리자 |
| 자료실 | /api/files/** |
회원 |
| 커뮤니티 | /api/community/posts/** |
회원 |
| 커뮤니티 링크 미리보기 | GET /api/community/posts/{id}/share, GET /api/community/posts/{id}/share-data, GET /api/community/posts/{id}/share-image |
공개 |
| 알림 | /api/notifications/** |
회원 |
| 폰트 조회 | GET /api/fonts/** |
공개 |
| 관리자 | /api/admin/** |
관리자 |
| 상태 확인 | /actuator/health, /actuator/info |
공개 |
| 변수 | 설명 |
|---|---|
VITE_API_BASE_URL |
프론트엔드 API base URL |
PUBLIC_BASE_URL |
공유 미리보기용 공개 사이트 URL |
SPRING_PROFILES_ACTIVE |
Spring profile |
JWT_SECRET |
JWT 서명 secret |
DB_HOST, DB_PORT, DB_NAME |
DB 접속 정보 |
DB_USER, DB_PASSWORD |
DB 계정 |
COOKIE_SECURE |
HTTPS 쿠키 보안 옵션 |
COOKIE_SAME_SITE |
쿠키 SameSite 정책 (Lax 기본값; 모바일 앱 연동 시 None 필요) |
CORS_ALLOWED_ORIGINS |
허용할 origin 목록 |
MAIL_ENABLED |
메일 발송 사용 여부 |
MAIL_LOG_VERIFICATION_CODES |
인증 코드 로그 출력 여부 |
MAIL_FROM, RECRUIT_MAIL_TO |
발신/수신 메일 주소 |
SMTP_HOST, SMTP_PORT |
SMTP 서버 |
SMTP_USERNAME, SMTP_PASSWORD |
SMTP 계정 |
SPRING_JPA_HIBERNATE_DDL_AUTO |
JPA DDL 옵션 |
H2_CONSOLE_ENABLED |
H2 console 사용 여부 |
BOOTSTRAP_SECRET |
bootstrap API 보호용 secret |
main 브랜치에 push하거나 GitHub Actions에서 수동 실행하면 .github/workflows/deploy.yml이 서버에 접속해 Docker Compose로 서비스를 배포합니다.
필요한 GitHub Secrets:
DEPLOY_HOSTDEPLOY_USERDEPLOY_PORTDEPLOY_SSH_KEYDEPLOY_PATHPUBLIC_BASE_URL
서버에는 git, Docker, Docker Compose가 설치되어 있어야 하며, 최초 배포 전 DEPLOY_PATH/.env 파일을 준비해야 합니다.
- 운영에서는
JWT_SECRET과DB_PASSWORD를 기본값으로 두지 않습니다. - 운영에서는
COOKIE_SECURE=true를 유지합니다. - Capacitor 모바일 앱 연동 시:
COOKIE_SAME_SITE=None과COOKIE_SECURE=true를 설정하고,CORS_ALLOWED_ORIGINS에https://localhost(Android)와capacitor://localhost(iOS)를 추가해야 합니다.SameSite=None은 반드시 HTTPS(Secure=true)와 함께 사용해야 합니다. - 운영에서는
MAIL_LOG_VERIFICATION_CODES=false를 유지합니다. - PostgreSQL 스키마는 Flyway migration으로 관리합니다.
- 운영 reverse proxy는
/api와/actuator요청을 백엔드로 전달해야 합니다. - DB volume과 업로드 파일 volume은 정기적으로 백업합니다.
