오늘은 팀 프로젝트를 진행하며 **형상 관리자(Configuration Manager)**로서 겪었던 Git 이슈들과, 프론트/백엔드 초기 세팅 과정에서 해결한 문제들을 정리해 본다.
1. 🛠️ Git 형상 관리: .gitignore가 중요한 이유
프로젝트 초반, 팀원들의 개발 환경(IDE, OS) 차이와 민감한 정보 파일 때문에 Git 충돌이 빈번하게 발생했다. 특히 Gradle 빌드 파일들이 계속 충돌을 일으켜 배포 흐름이 끊기는 문제가 있었다.
🚨 문제 상황 (Trouble)
- 보안 이슈: DB 비밀번호 등이 담긴 application_secret.yaml 파일이 실수로 원격 저장소(Remote Repo)에 올라갈 뻔함.
- 빌드 충돌: 팀원마다 로컬 경로가 다른데 .gradle/ 캐시 파일이나 build/ 폴더까지 커밋되어, Pull 받을 때마다 충돌(Conflict) 발생.
- Push 거부: non-fast-forward 에러가 계속 뜸.
✅ 해결 과정 (Shooting)
가장 먼저 .gitignore 파일을 재정비했다. Gradle 관련 캐시 파일과 빌드 결과물은 절대 공유되면 안 되기 때문에 아래 내용을 명시적으로 추가했다.
Bash
# .gitignore 설정 추가
# Gradle 캐시 및 빌드 파일 무시
.gradle/
**/.gradle/
build/
# 보안 파일 무시 (Local only)
application_secret.yaml
💡 이미 올라간 파일 처리하기 이미 원격 저장소에 잘못 올라간 파일들은 .gitignore에 추가해도 계속 추적되는 문제가 있었다. 이를 해결하기 위해 캐시 삭제 명령어를 사용했다.
Bash
# 원격 저장소에서는 지우되, 로컬 파일은 유지하기
git rm --cached -r .gradle/
git rm --cached application_secret.yaml
git commit -m "Fix: 보안 파일 및 빌드 캐시 트래킹 제거"
이후 팀원들에게 "Pull -> Conflict 해결 -> Push" 워크플로우를 전파하여 non-fast-forward 문제를 예방했다.
2. 🎨 Frontend: 사용자 권한(Role)별 사이드바 분리
우리 서비스는 항공사 직원, 관리자, 슈퍼 관리자 등 **권한(Role)**에 따라 접근 가능한 메뉴가 엄격히 나뉘어야 한다.
- 구현: 기존에 하나로 뭉쳐있던 사이드바(Sidebar) 컴포넌트를 리팩토링했다. 로그인 시 받아온 User Role 정보를 확인해 조건부 렌더링(Conditional Rendering)을 적용했다.
- 트러블 슈팅: 로그인 버튼을 누르면 자꾸 페이지가 새로고침 되어 Redux/Context 상태가 날아가는 현상이 있었다. <form> 태그의 기본 동작 때문이었는데, e.preventDefault()를 추가하여 비동기 로그인 로직이 정상적으로 수행되도록 수정했다.
3. ⚙️ Backend: Spring Boot 시크릿 관리
백엔드 초기 세팅 중 가장 신경 쓴 부분은 보안이다.
- YAML 분리: DB 접속 정보(URL, Username, Password)는 노출되면 안 되므로 application.yaml(공통 설정)과 application_secret.yaml(비밀 설정)로 파일을 분리했다.
- 연동: 위에서 설정한 .gitignore 덕분에 secret 파일은 로컬에만 존재하게 되어, GitHub에는 안전한 껍데기 설정만 올라가게 되었다. 이를 통해 협업 시 보안 사고를 원천 차단할 수 있었다.
📝 오늘의 회고
처음에는 .gitignore 설정이 사소해 보였지만, 제대로 설정하지 않았을 때 팀 전체의 생산성이 얼마나 떨어지는지(충돌 해결하느라 시간 낭비...) 뼈저리게 느꼈다. "개발의 시작은 환경 설정부터"라는 말을 실감한 하루였다.
'Projects > Team Projects' 카테고리의 다른 글
| [Control Tower] 개발 효율은 AI로, 팀 성장은 믿음으로 (Cursor, DDD, Git 회고) (0) | 2026.01.23 |
|---|---|
| [Control Tower] 프론트엔드 혼자서 이틀 만에 백엔드 API 명세서 역설계하기 (feat. AI) (0) | 2026.01.22 |
| [Control Tower] Cursor와 Figma를 활용한 효율적인 UI/UX 프로토타이핑 (0) | 2026.01.13 |
| [Control Tower] Day 4: 깃허브 이슈 & PR, 노션에 '무료로' 자동 동기화하기 (삽질기 포함) (0) | 2026.01.09 |
| [Control Tower] Day 1-2: 팀 빌딩, 항공사 HR SaaS 기획, 그리고 협업 환경 구축기 (0) | 2026.01.07 |