Spring Cloud 기반의 마이크로서비스 아키텍처 프로젝트입니다.
Notion
https://canary-marquis-2c0.notion.site/MSA-21fdf07bd8c780c2bf9ef217e9fed606?source=copy_link
msa/
├── eureka-server/ # 서비스 디스커버리 서버 (8761)
├── gateway-service/ # API 게이트웨이 (8080)
├── account-service/ # 계정 서비스 (8081)
├── board-service/ # 게시판 서비스 (8082)
├── information-service/ # 정보 서비스 (8084)
├── qna-service/ # QnA 서비스 (8085)
├── gathering-service/ # 프로젝트 팀모집 서비스 (8086)
└── review-service/ # 리뷰 서비스 (8087)
| 서비스명 | 포트 | 담당자 |
|---|---|---|
| Eureka Server | 8761 | - |
| API Gateway | 8080 | - |
| Account Service | 8081 | 정은선 |
| Board Service | 8082 | 김정범 |
| Information Service | 8084 | 김지한 |
| QnA Service | 8085 | 김지한 |
| Gathering Service | 8086 | 최현수 |
| Review Service | 8087 | 김혜인 |
✅ 계정(Account) 관련
회원 가입, 로그인, 로그아웃 기능 제공
사용자 정보 조회 및 수정 (비밀번호, 닉네임, 교육기관 등)
서비스 간 사용자 정보 연동 (/gathering-info, /review-info)
토큰 재발급 및 인증 관련 처리
포인트 시스템 제공 (조회, 업데이트)
회원 탈퇴 처리
✅ 교육 기관(Institutions) 관리
교육 기관 등록, 조회, 수정, 삭제
전체 목록 및 특정 기관 상세 조회
✅ 교육과정(Training) 관리
교육과정 등록, 조회, 수정, 삭제
전체 목록 및 개별 과정 조회 가능
✅ 게시판(Board) 기능
게시판에 게시글 생성 및 전체 목록 조회
특정 게시판 또는 특정 게시글 조회
게시글 추천수 증가, 인기 게시글 확인
게시글 수정 및 삭제 가능
특정 게시글에 댓글 작성
특정 게시글의 전체 댓글 목록 조회
✅ 리뷰(Review) 기능
리뷰 생성, 수정, 삭제
모든 리뷰 또는 특정 교육과정/사용자의 리뷰 조회
사용자 기반 리뷰 조회 시 권한 검사 포함
✅ 모임(Gathering) 기능
모임 생성 및 전체 목록 조회
특정 모임 상세 조회 및 수정, 삭제 가능
신청 시 알림 및 모임 참여 및 탈퇴 처리
참가 조건 확인 및 모임 완료 처리
특정 사용자의 모임 목록 조회 가능
Account 서비스와 연동하여 사용자 정보 요청
✅ Q&A 기능
질문 생성 및 전체 목록 조회
특정 질문 상세 조회 및 수정, 삭제 가능
질문에 대한 답변 등록 및 내 답변 목록 조회
질문 추천 기능 및 사용자별 질문 이력 조회 가능
< 메인(randing) 페이지 >
< 리뷰 페이지 >
< 훈련기관 정보 제공 페이지 (+ 검색 기능) >
< 훈련교육기관 정보 제공 페이지 (+ 검색 기능) >
< 커뮤니티 게시판 >
< 모임 >
< 마이페이지 >
< Q&A >
CREATE USER IF NOT EXISTS 'msa'@'localhost' IDENTIFIED BY '123';CREATE DATABASE IF NOT EXISTS msa CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT ALL PRIVILEGES ON msa.* TO 'msa'@'localhost';CREATE DATABASE IF NOT EXISTS msa_account CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL PRIVILEGES ON msa_account.* TO 'msa'@'localhost';CREATE DATABASE IF NOT EXISTS msa_information CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL PRIVILEGES ON msa_information.* TO 'msa'@'localhost';CREATE DATABASE IF NOT EXISTS msa_qna CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL PRIVILEGES ON msa_qna.* TO 'msa'@'localhost';CREATE DATABASE IF NOT EXISTS msa_board CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL PRIVILEGES ON msa_board.* TO 'msa'@'localhost';CREATE DATABASE IF NOT EXISTS msa_review CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL PRIVILEGES ON msa_review.* TO 'msa'@'localhost';CREATE DATABASE IF NOT EXISTS msa_gathering CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT ALL PRIVILEGES ON msa_gathering.* TO 'msa'@'localhost';INSERT INTO training (name, ncs_type, period, start_date, end_date, institution_id, created_at) VALUES
('클라우드 AWS 엔지니어 양성과정', 'CLOUD', 6, '2024-03-01', '2024-08-31', (SELECT id FROM institution WHERE name = '서울IT교육원'), NOW()),
('AI 머신러닝 개발자 과정', 'AI', 4, '2024-04-01', '2024-07-31', (SELECT id FROM institution WHERE name = '부산기술대학교'), NOW()),
('빅데이터 분석 전문가 과정', 'BIG_DATA', 5, '2024-02-15', '2024-07-14', (SELECT id FROM institution WHERE name = '대구소프트웨어마이스터고'), NOW()),
-- 추가 교육 과정들...
('자연어처리 AI 개발과정', 'AI', 7, '2024-05-01', '2024-11-30', (SELECT id FROM institution WHERE name = '포항공과대학교'), NOW());- Spring Boot: 3.5.3
- Spring Cloud: 2025.0.0
- Java: 17
- Spring Cloud Netflix Eureka: 서비스 디스커버리
- Spring Cloud Gateway: API 게이트웨이
- Spring Data JPA: 데이터 접근
- MySQL: 데이터베이스
- Gradle: 빌드 도구
- Java 17 이상
- MySQL 8.0 이상
- IDE (IntelliJ IDEA, Eclipse, VS Code 등)
- MySQL 서버를 실행합니다.
- 위의 데이터베이스 설정 섹션의 SQL 명령어를 실행하여 데이터베이스와 사용자를 생성합니다.
cd eureka-server
./gradlew bootRuncd ../gateway-service
./gradlew bootRun각 서비스 디렉토리에서 다음 명령어로 실행합니다:
./gradlew bootRunAPI Gateway는 다음 경로로 요청을 각 서비스로 라우팅합니다:
/api/account/**→ Account Service (8081)/api/board/**→ Board Service (8082)/api/info/**→ Information Service (8084)/api/qna/**→ QnA Service (8085)/api/gathering/**→ Gathering Service (8086)/api/review/**→ Review Service (8087)
-
새 모듈 생성
settings.gradle에 새 모듈 추가build.gradle파일 생성
-
의존성 추가 (
build.gradle):dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' runtimeOnly 'com.mysql:mysql-connector-j' }
-
application.yml 설정
server: port: 808X # 사용할 포트 번호 spring: application: name: your-service-name datasource: url: jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC username: msa password: 123 eureka: client: service-url: defaultZone: http://localhost:8761/eureka/
-
API Gateway에 라우팅 추가 (
gateway-service의application.yml):spring: cloud: gateway: routes: - id: your-service uri: lb://YOUR-SERVICE-NAME predicates: - Path=/api/your-path/**


