Skip to content

Repository files navigation

Image

건설 현장을 더 스마트하게, 더 안전하게

인력 배치, 공정 분석, 문서 자동화, ESG 지표까지
건설 현장 운영 데이터를 하나로 연결하는 통합 관리 플랫폼입니다.


팀원

김민규 전민주 이한별 전성훈 최승우
김민규 전민주 이한별 전성훈 최승우
@luel1018 @minju0077 @sole0714 @1jshun @sw-oo

Java Spring Boot Kubernetes Blue Green


홈페이지 · Swagger UI · 무중단 배포 시연 · API 명세서


프로젝트 소개

DnDn은 건설 현장에서 발생하는 인력, 근태, 안전, 공정, 문서, 환경 데이터를 실시간으로 수집하고 관리하는 플랫폼입니다.
현장 소장과 관리자는 근로자 현황, 게이트 혼잡도, 공정 진행률, 일일 보고, ESG 지표를 한 화면에서 확인하고 데이터 기반으로 의사결정할 수 있습니다.


기술 스택

백엔드

구분 기술
언어 Java
프레임워크 Spring Boot Spring Security Spring Cloud
데이터 JPA MariaDB Redis Elasticsearch
메시징 Kafka
AI·파일 OpenAI AWS S3 Apache POI KMA AirKorea
API Swagger JWT

인프라

구분 기술
CI/CD Jenkins Kaniko Docker Hub
실행 환경 Docker Kubernetes
게이트웨이 Nginx Ingress
모니터링 Actuator Prometheus Grafana
Storage Class Longhorn

협업

분류 기술
Version Control Git GitHub
API Test Postman
Design / Docs Figma Notion
Communication Discord

시스템 아키텍처

imaasdge

프로젝트 문서

프로젝트 기획서, WBS, 요구사항 명세서, 화면 설계서, API 영상, ERD 등 상세 문서는 Wiki에서 확인할 수 있습니다.

문서 링크
DnDn Backend Wiki Wiki 바로 가기

모듈 구성

모듈 역할
dndn-core 인증, 근로자, 게이트, 인력 배치, 공정표, 작업 계획, 일보, ESG, 날씨 등 핵심 도메인 API
dndn-document-management 문서 업로드, 문서 검색, Elasticsearch 연동, 문서 이벤트 처리
dndn-gateway Spring Cloud Gateway 기반 라우팅, Eureka 연동, JWT 처리
dndn-discovery Eureka Server 기반 서비스 디스커버리

백엔드 핵심 설계

항목 적용 기술 도입 이유
인증 JWT, Spring Security 서버 세션을 사용하지 않는 Stateless 인증 구조를 구성했습니다. Access Token에는 사용자 식별자와 역할 정보를 담고, 요청마다 JWT를 검증해 인증 상태를 복원합니다.
인가 RBAC + 도메인 권한 검증 ADMIN, HEADQUARTOR, SITE_MANAGER, SITE_DIRECTOR, SECTION_LEADER, SECTION_SUPERVISOR 역할 기반 접근 제어를 적용했습니다. 일부 기능은 역할뿐 아니라 현장 코드와 공종 범위까지 확인해 실제 업무 권한에 맞게 접근을 제한합니다.
API Gateway Spring Cloud Gateway GlobalFilter /api/msa/** 요청은 Gateway에서 JWT를 먼저 검증하고, 검증된 사용자 정보를 X-User-Idx, X-User-Role, X-User-LoginId 헤더로 하위 서비스에 전달합니다.
Kafka 서비스 간 비동기 이벤트 연동 Core에서 문서 업로드, 작업 지시 변경, 공사 일보 변경 이벤트를 발행하고 Document Management가 이를 소비해 문서 검색 인덱스를 갱신합니다. Core 트랜잭션과 검색 인덱싱을 분리해 장애 전파를 줄였습니다.
Elasticsearch 문서 통합 검색 공정표, 작업 지시, 공사 일보 등 문서성 데이터를 여러 필드 기준으로 검색해야 했기 때문에 Elasticsearch를 도입했습니다. 키워드 검색은 ES를 사용하고, ES 장애 시 RDB 검색으로 fallback하도록 구성했습니다.
Redis 캐시, 분산락 ESG 대시보드처럼 반복 조회되는 데이터를 캐싱하고, 다중 Pod 환경에서 스케줄러가 중복 실행되지 않도록 Redisson 기반 분산락을 사용했습니다.
Batch Kubernetes CronJob / Job Trigger 인력 동기화처럼 오래 걸리거나 주기적으로 실행되는 작업은 API 서버 내부 요청 흐름과 분리했습니다. Core API에서 Kubernetes CronJob 기반 Job을 수동 트리거할 수 있도록 구성했습니다.

무중단 배포

DnDn 백엔드는 Kubernetes 환경에서 Nginx Ingress를 통해 외부 트래픽을 받고, Jenkins와 Kaniko를 이용해 Blue-Green 방식으로 배포됩니다.

Jenkins 빌드 시작
    ↓
Kaniko로 이미지 빌드 → Docker Hub Push
    ↓
현재 Active 색 감지 (Ingress service name 기준)
    ↓
비활성 Deployment에 새 이미지 set + replicas 확장
    ↓
rollout status 대기 (파드 준비 완료 확인)
    ↓
Ingress 전환 (backend-service-blue ↔ backend-service-green)
    ↓
이전 Deployment replicas=0 으로 축소

Blue-Green을 선택한 이유

대상 선택 이유
Core 로그인, 인증, 프로젝트 등 사용자 흐름의 중심 API입니다. 새 버전이 정상 기동되기 전에 기존 버전이 내려가면 서비스 전체가 영향받기 때문에, inactive 환경에서 먼저 검증한 뒤 트래픽을 전환하는 Blue-Green 구조가 필요했습니다.
Document Management MariaDB, Kafka, Elasticsearch, S3, Eureka 등 외부 의존성이 많아 배포 시 환경변수 누락, 인증서 Secret 누락, DB 접속 지연, Kafka 설정 문제 등이 발생할 수 있습니다. 새 버전을 기존 Pod에 바로 덮어쓰지 않고 inactive 버전에 먼저 올려 정상 여부를 확인한 뒤 트래픽을 넘기기 위해 Blue-Green을 선택했습니다.

전환 방식

Ingress와 Gateway는 blue/green Deployment를 직접 바라보지 않습니다.
항상 고정된 Kubernetes Service를 바라보며, 실제 버전 전환은 Service의 selector만 변경해 처리합니다.


Copyright © 2026 Intelli_J Team. All rights reserved.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages