15주차에는 본격적으로 프로젝트가 시작되었습니다.

한화비전 체험관

월요일에는 최종 프로젝트 팀 발표와 함께 아이디어 구상을 위한 회의가 주어졌습니다!

처음 팀이 발표되었을때 살짝의 헤프닝이 있었는데요 .. 예상과 다른 팀으로 발표가 되었고 살짝 기쁠 뻔 했지만 얼굴이 허옇게 질린 정근 쨔응의 분주한 노력으로 인해 팀은 정상화되었습니다.

한화 비전 체험관에서는 현재 한화비전의 기술력과 타겟 국가 및 서비스를 위주로 체험해 볼 수 있었는데요 ... 주제를 정하면서 많은 도움이 되었던 것 같습니다. 상세한 체험기는 또 기밀이라 이게 암튼 크흠 ..ㅠ

프로젝트.

15주차에는 주로 기획 위주로 팀원들과 많은 얘기를 나누었습니다. 처음에는 그냥 해보고 싶은 아이디어 위주로 제가 많은 의견을 제시했지만 VEDA PM님께 피드백을 받으며 양쪽 어깨가 다 부서져버렸습니다.🤪🤪

AI개발이 아니면서 한화 비전의 CCTV를 활용할 수 있는 프로젝트 .

그러면서 임베디드 교육 목적에 충실하게 임베디드 요소를 녹여낼 수 있는 무언가 .

사실상 6회차의 조들 중에서는 가장 주제를 늦게 선정한 팀이었습니다.

주제는 다음 주차 기록에 공개하겠으니 궁금한 사람은 1주일 기다리시라!!!

아무튼 재미있는 요소들과 조금은 구현이 힘들 것 같은 요소들을 섞어서 기획서를 제출하고 나니 이번주는 다소 내용이 빈약하다고 할 것 같습니다.

그래서 협업을 위한 깃허브 사용법을 정리해보도록 하겠습니다.
반응이 좋다면 Jira 까지도 ...

git으로 협업하기 .

1. Monorepo vs Multi-Repo? → 우리는 Monorepo 선택

처음에는 각자 repo를 따로 만들었습니다.
(QT Client repo, Server repo, STM32 repo…).
근데 실제로 코드를 통합 테스트하려면 repo 4개를 다 클론해야 하고, 공통 프로토콜 바뀌면 4개의 코드를 모두 변경해야한다는 문제가 발생할 수 있었습니다.

그래서 결정했습니다.

하나의 monorepo로 통합하자!
현재 repo 구조 예시:

Project/
├── hardware/
│   └── stm32-rfid-laser/          # STM32CubeIDE 프로젝트
├── server/                        # Raspberry Pi Python 서버 + OpenCV
├── client/                        # QT C++ 클라이언트
├── shared/                        # 공통 프로토콜, config, utils
├── docs/                          # 기획서, 아키텍처 다이어그램
├── tests/                         # 통합 테스트
└── .github/workflows/             # CI/CD

하나의 repo에서 전체 시스템을 볼 수 있어서 디버깅도, 리팩토링도 훨씬 수월해졌습니다.

2. 브랜치 전략: GitHub Flow (develop 브랜치 없음!)

팀이 작아서 복잡한 브랜치 전략을 적용하기로 했습니다.

규칙 요약

main 브랜치 = 항상 배포 가능 + protected (직접 push 금지)
모든 작업은 새 브랜치에서 시작

브랜치 이름 형식: {type}/{이슈번호}-{짧은-설명}
타입예시
feature/feature/123-camera-age-gender-analysis
fix/fix/89-server-uart-timeout
refactor/refactor/67-simplify-rtsp-handler
docs/docs/112-update-architecture-diagram
chore/chore/15-setup-github-actions

3. 커밋 메시지: Conventional Commits

커밋 메시를 통일해 팀원간의 원활한 git code 리뷰를 위해서 Conventional Commits를 도입했습니다.

기본 형식:

<type>[scope]: <짧은 설명>


[본문 - 자세한 설명]

[footer - Closes #123 등]

주요 타입

  • feat : 새로운 기능
  • fix : 버그 수정
  • refactor : 코드 구조 개선
  • docs : 문서 수정
  • test : 테스트 추가
  • chore : 빌드/설정/잡일

예시:

feat(server): implement age-gender validation logic

- Load pre-trained AgeNet & GenderNet models
- Compare RFID card type with camera result
- Add configurable threshold in config.yaml

Closes #123

chore 예시 (monorepo 초기 세팅):

chore(repo): bootstrap SFEPS monorepo

Initialize directory structure for hardware, server, client, shared, docs, tests.
Add CONTRIBUTING.md with branch & commit rules.
Create .github/workflows skeleton.

4. main 브랜치 보호 (Branch Protection Rule)

GitHub Settings → Branches → Add branch protection rule

  • Branch name pattern: main
  • Require a pull request before merging → 체크 (직접 push 차단!)
  • Require approvals → 1명 이상
  • Dismiss stale approvals when new commits are pushed → 체크

main은 최대한 보호호가 위해서 protection rule을 설정했습니다.

5. Pull Request & Merge 규칙

  1. 이슈 생성 → assignee 지정
  2. 브랜치 생성 → 작업
  3. PR 생성 → 제목은 Conventional Commits 스타일로
  4. 최소 1명 리뷰 → Approve 후 Squash & Merge 추천 (히스토리 깔끔)
  5. 브랜치 자동 삭제 체크

이렇게 공통의 rule을 프로젝트를 본격적으로 시작하기 전에 합의했는데요..

앞으로 프로젝트를 진행해나가면서 어떤 어려움이 있는지 가장 어려운 것은 무엇인지 git으로 협업하는 방법을 더 업데이트하도록 하겠습니다.

미우나 고우나 팀원이겠죠.....?
프로젝트가 시작한지 2주차를 접어들어가는 이 시점에도 묵묵히 git을 공부하는 한 친구가 있습니다. .. 미운 놈 떡하나 더 준다고...
내일은 그에게 떡을 줘야겠어요. 😩😩

profile
세상의 어려운 문제를 해결하자

1개의 댓글

comment-user-thumbnail
2026년 2월 10일

누군지 모르겠지만 팀을 위해 git을 열심히 공부하는 모습. 멋있네요

답글 달기