UniUnity 프로젝트의 k8s 레포지토리입니다.
마이크로서비스 아키텍처(MSA)를 기반으로 서비스가 독립적으로 배포 및 확장 가능하도록 설계되었습니다.
- 프로젝트 소개
- 기술 스택
- 팀원 소개
- 서비스 아키텍처
- 레포지토리 구성
- 쿠버네티스 설정
- Deployment
- Pod Health Check
- Ingress
- DB(Service / PVC)
- Secret
- 통신 방법
- 직접 통신
- 간접 통신
- CI/CD 파이프라인
- 데모 영상
UniUnity는 대학 상권 커뮤니티 서비스를 구축하기 위해 MSA(Microservices Architecture)를 적용한 프로젝트입니다.
RabbitMQ를 이용한 간접 통신과 JWT 기반 직접 통신을 통해 안정적이고 확장성 있는 백엔드 시스템을 설계했습니다.
주요 특징
- 서비스 단위로 분리된 MSA 구조
- RabbitMQ 기반 RPC 방식 비동기 메시징
- JWT 기반 인증 및 직접 통신(/auth/me)
- Kubernetes 환경에서의 배포 및 확장
- GitHub Actions를 이용한 CI/CD 자동화
| 구분 | 기술 |
|---|---|
| Language | Javascript |
| Framework | Node.js, Express |
| Database | MySQL |
| Messaging | RabbitMQ |
| Infra | Docker, Kubernetes(GKE), GCP |
| CI/CD | GitHub Actions, Docker Hub |
| Auth | JWT |
| 기타 | ConfigMap, Secret, Ingress |
| Team Leader | Team Member | Team Member |
|---|---|---|
![]() |
![]() |
![]() |
| 박지현 Partner-Service 담당 |
김근혜 User-Service 담당 |
오영서 Post-Reaction-Service 담당 |
| Team Member | Team Member | Team Member |
|---|---|---|
![]() |
![]() |
![]() |
| 이채현 Start-Service 담당 |
김시현 Post-Service 담당 |
이지원 Post-Reaction-Service 담당 |
Post-Service, Post-Reaction-Service
- 카데고리 및 회원 종류 별 게시글 작성 기능 구현
- Google Cloud를 사용한 이미지 저장
Partner-Servicc
- 카카오 지도를 사용한 제휴 가게 및 소상공인 가게 표시
- 각 학교별 제휴 가게 정보 저장 및 제휴 가게 업로드
- 공공데이터를 사용한 학교별 소상공인 가게 표시
User-Service
- JWT와 Cookie를 사용한 회원 기능 구현
- 회원 및 대학 정보 통신
Start-Service
- 서비스 메인 페이지 구현
- 학교별 페이지 이동 구현
UniUnity 서비스 전체 구성도입니다.
unimsa/
├── k8s/ # Kubernetes 관련 리소스
│ ├── db/ # DB Deployment, PVC, Service
│ ├── rabbitmq/ # RabbitMQ Deployment, Service
│ ├── ingress/ # Ingress Controller 설정
│ └── service/ # 각 서비스 Deployment, Service
│
├── service-repos/ # 개별 서비스 레포지토리
│ ├── user-service/
│ ├── partner-service/
│ ├── start-service/
│ └── post-service/
│
└── cicd/ # GitHub Actions 워크플로우
- 각 서비스는
Deployment.yaml기반으로 배포 initContainer를 활용하여 DB와 RabbitMQ 준비 여부 확인 후 서비스 실행
/ready→ DB, RabbitMQ 연결 상태 확인/health→ 파드 정상 동작 여부 확인readinessProbe,livenessProbe적용
- Nginx Ingress Controller 사용
- 도메인 기반 라우팅 (
uniunity.store) - 예시:
/mainpage→start-service
- MySQL DB 파드 및 PVC 구성 (1Gi)
- ClusterIP 타입으로 내부 서비스에서만 접근 가능
- 민감한 DB 접속 정보 및 RabbitMQ 계정 정보 관리
- ConfigMap과 분리하여 안전한 배포 지원
- JWT 기반 인증 (/auth/me)
- 브라우저 쿠키의 토큰을 검증 후 유저 정보 반환
- 서비스 간 직접 REST API 통신
- RabbitMQ RPC 패턴
- 요청 → 큐 발행 → 응답 큐 수신
correlationId를 활용해 요청-응답 매칭- 비동기 환경에서도 동기적 요청-응답 구조 구현
- 코드 푸시 → 자동 빌드 & Docker Hub 푸시
- 태그 형식:
YYYYMMDDHHMM
- GKE 로그인
- ConfigMap, Secret 적용
- DB, RabbitMQ 배포
- 서비스 Deployment 반영
- Ingress 적용
- 로그 확인





