팩토리얼 Backend Repository
- Java 17 (Amazon Corretto)
- Spring Boot 3.4.4
- Gradle
- MySQL
- Kafka, MQTT, AWS SQS, FCM, WebSocket, JPA, Flyway, Swagger, Docker, Jenkins, ArgoCD
- CI/CD: Jenkins + Docker + AWS ECR + ArgoCD
- 모놀리식 구조
./gradlew clean build -x test
./gradlew bootRun- Kafka Consumer: 센서/웨어러블/설비 토픽 수신, DTO 파싱, 이벤트 위임
- MQTT Client: AWS IoT Shadow 연동, 인증서 기반 연결, 재시도/예외처리
- FCM Push: Firebase Cloud Messaging, 비동기 푸시, 예외/토큰 검증
- AWS SQS Listener: S3 이벤트 등 비동기 메시지 처리
- 메일 발송: JavaMailSender, 일/월간 리포트 첨부, CSV 변환
- WebSocket: STOMP 기반 실시간 알림
- Flyway: DB 마이그레이션 자동화
- Swagger: API 문서 자동화 (
/swagger-ui.html) - 테스트: JUnit5, Mockito, 통합/단위 테스트
| 경로/폴더명 | 설명 |
|---|---|
src/main/java/com/factoreal/backend/ |
백엔드 전체 소스 루트 |
├─ controller/ |
REST API 엔드포인트, @RestController, @RequestMapping 등 |
├─ domain/ |
JPA 엔티티, 도메인 서비스, DTO, 레포지토리 등 핵심 비즈니스 로직 |
├─ messaging/ |
Kafka, MQTT, FCM, SQS, WebSocket 등 메시징 연동 계층 |
│ ├─ kafka/consumer/ |
Kafka Consumer, 메시지 파싱 및 위임 |
│ ├─ mqtt/ |
MQTT 연결, Shadow Subscription 등 |
│ ├─ fcm/application/ |
FCM 푸시 발송 서비스 |
│ ├─ sqs/listener/ |
AWS SQS 이벤트 리스너 |
│ ├─ common/util/ |
메시징 관련 공통 유틸 |
├─ global/config/ |
전역 설정 (Mail, Swagger, Kafka, MQTT, Firebase 등) |
├─ global/fileUtil/ |
CSV 등 파일 유틸리티 |
├─ util/ |
공통 유틸, 상수, 헬퍼 함수 등 |
src/main/resources/ |
환경설정, 마이그레이션, 인증서, FCM 키 등 |
├─ application.yml |
메인 환경설정 (yml 사용, properties 미사용) |
├─ application-local.yml |
로컬 개발용 설정 |
├─ application-cloud.yml |
클라우드/운영 환경 설정 |
├─ db/migration/ |
Flyway 마이그레이션 SQL |
├─ fcm_root_key/ |
FCM 서비스 계정 키 (json) |
src/test/java/ |
단위/통합 테스트 코드 |
- 모든 민감 정보는 환경 변수 또는
.env파일로 관리 - 주요 환경 변수 예시:
MAIL_SERVER_USERNAME,MAIL_SERVER_PASSWORDFIREBASE_JSON_BASE64AWS_IAM_ACCESS_KEY,AWS_IAM_SECRET_KEYGRAFANA_URL_OUTERspring.datasource.*,spring.kafka.*,spring.mail.*등
git pull
./gradlew clean build --refresh-dependencies -x test| 파일 | 수정 시 규칙 |
|---|---|
application.properties |
예: # MQTT 브로커 주소 수정 by 승희 |
build.gradle |
|
application.yml |
❌ 사용하지 않음. 모든 설정은 .properties로 통일 |
config/ 클래스 |
새로운 설정 파일 추가 시 파일명은 XXConfig.java 로 명명예: MqttConfig.java, KafkaConfig.java |
[type] | sprint | JIRA-KEY | 기능 요약 | 담당자
- type: feat, fix, docs, config, refactor, test, chore, style 등
- sprint: sprint0, sprint1, ...
- JIRA-KEY: JIRA이슈번호 또는 없음
- 기능 요약: 핵심 변경 내용
- 담당자: 실명
feat | sprint0 | 없음 | 센서 등록 API 구현 | 유승희
feat | sprint0 | IOT-123 | 센서 등록 API 구현 | 유승희
fix | sprint1 | IOT-210 | MQTT 수신 실패 예외 처리 | 윤다인
config | sprint0 | IOT-001 | H2 DB 설정 추가 | 김우영
docs | sprint1 | IOT-999 | README 초안 작성 | 정민석
| 항목 | 내용 | 예시 |
|---|---|---|
type |
작업 유형 | feat, fix, docs, config, refactor, test, chore, style |
sprint |
스프린트 구분 | sprint0, sprint1, sprint2 등 |
JIRA-KEY |
연동 이슈 번호 | IOT-123 , 없음 |
| 기능 요약 | 핵심 변경 내용 | 예: 센서 등록 API 구현 |
| 담당자 | 개발자 실명 or 닉네임 | 예: 유승희 |
git commit -m "feat | sprint1 | IOT-112 | 작업자 센서 조회 API 추가 | 유승희"
git commit -m "fix | sprint0 | IOT-009 | H2 연결 오류 수정 | 윤다인"
git commit -m "config | sprint0 | IOT-000 | Spring Boot 3.4.4 적용 | 김우영"
git commit -m "chore | sprint1 | IOT-999 | 커밋 컨벤션 README 정리 | 정민석"| 유형 | URL |
|---|---|
| Swagger | http://localhost:8080/swagger-ui.html |
| Grafana | (운영 환경) 환경 변수 참조 |
.env,src/main/resources/certs/, FCM 키 등 민감 파일은 git에 커밋 금지.gitignore에 이미 포함되어 있음- 환경 변수/비밀키는 운영 서버 또는 CI/CD에서 안전하게 주입
- 새로운 설정 파일: 반드시
XXConfig.java네이밍 - 테스트 코드:
src/test/java/에 JUnit5 기반 작성 - DB 마이그레이션: Flyway SQL은
src/main/resources/db/migration/에 추가 - Slack/ArgoCD 연동: Jenkinsfile 참고