SK Shieldus 미니프로젝트(2) 캡스톤 프로젝트 관리 플랫폼 개발 팀프로젝트
-
Backend: /backend (Spring Boot, JDK 17)
-
Frontend: /frontend (Vite/React)
-
Java 17 (JDK 17)
-
Node.js (권장: LTS 버전) / npm
-
MariaDB (프로젝트에서 사용 중인 버전 이상)
-
MariaDB 생성/권한: db/seed.sql 참고
-
backend/src/main/resources/application-local.properties 생성
-
Backend:
./mvnw spring-boot:run -Dspring-boot.run.profiles=local
- Frontend:
npm ci # 재현성을 위한 권장 설치(없다면 npm i) npm run dev # default: http://localhost:5173
-
Backend: ./mvnw spring-boot:run -Dspring-boot.run.profiles=local
-
Frontend:
- 개발: npm run dev
- 빌드: npm run build
- 빌드 미리보기: npm run preview
- node_modules는 Git에 커밋하지 않습니다. 용량이 크고, OS/아키텍처별 바이너리가 섞여 머지 충돌과 빌드 불안정이 생깁니다.
- 대신 package.json + lock 파일만 커밋합니다.
- npm: package-lock.json
- yarn: yarn.lock
- pnpm: pnpm-lock.yaml → 팀 전원이 동일 버전으로 재현 가능.
- 설치는 npm ci.
npm i <패키지명>@<버전>
- 변경된 package.json + package-lock.json 커밋/푸시 git add package.json package-lock.json git commit -m "deps: bump <패키지명> to <버전>"
플랫폼에서 제공하는 인증 관련 기능들:
- 기능: 가입한 이메일 주소를 통해 마스킹된 아이디 정보를 이메일로 발송
- 경로: 로그인 화면 > "아이디 찾기" 링크
- 보안: 계정 존재 여부와 관계없이 동일한 응답 제공
- 기능: 이메일을 통한 안전한 비밀번호 재설정
- 경로: 로그인 화면 > "비밀번호 재설정" 링크
- 프로세스:
- 이메일 입력 및 재설정 요청
- 이메일로 재설정 링크 발송 (1시간 유효)
- 링크 클릭 후 새 비밀번호 설정
- 비밀번호 변경 완료 및 알림 이메일 발송
POST /api/auth/forgot-id
- 아이디 찾기 요청
- Body: { "email": "user@example.com" }
POST /api/auth/password-reset/request
- 비밀번호 재설정 요청
- Body: { "emailOrUsername": "user@example.com" }
GET /api/auth/password-reset/validate?token=<TOKEN>
- 재설정 토큰 유효성 확인
POST /api/auth/password-reset/confirm
- 비밀번호 재설정 완료
- Body: { "token": "<TOKEN>", "newPassword": "newPass123" }
- Rate Limiting: 사용자당 시간당 3회, IP당 시간당 10회 제한
- 토큰 보안: 단발성 토큰, 1시간 만료, 해시 저장
- 계정 보호: 비밀번호 변경 시 모든 세션 무효화
- 정보 보호: 계정 존재 여부 노출 방지
# application.properties
app.mail.from=noreply@yourcompany.com
app.base-url=https://yourapp.com참고: 현재 이메일 발송 기능은 로그 출력으로 구현되어 있습니다. 실제 운영 환경에서는 SMTP 설정을 통한 실제 이메일 발송 구현이 필요합니다.
MariaDB [capstone]> SHOW CREATE TABLE professor_assignment_request\G
명령어 사용후
FOREIGN KEY (project_id) 확인 후 아래 명령어에 키 넣은 후 실행
SET FOREIGN_KEY_CHECKS = 0;
-- 1) 정확한 외래키 이름으로 드롭
ALTER TABLE professor_assignment_request
DROP FOREIGN KEY FOREIGN KEY (project_id);
-- 2) 컬럼을 NULL 허용으로 변경 ALTER TABLE professor_assignment_request MODIFY COLUMN project_id BIGINT NULL;
-- 3) FK 재생성 (사전요청 레코드 삭제 방지용으로 ON DELETE SET NULL 권장)
ALTER TABLE professor_assignment_request
ADD CONSTRAINT fk_par_project_nullable
FOREIGN KEY (project_id) REFERENCES project(id)
ON DELETE SET NULL;
SET FOREIGN_KEY_CHECKS = 1;
검증 방법
DESCRIBE professor_assignment_request; 실행 후 project_id의 Null = YES 값 이어야 함.