[ 개선하게 된 배경 ]
Spring Boot 팀 프로젝트를 진행하면서
작업한 코드는 그날그날 커밋해서
원격에 올리는 운영을 하고 있었다.
문제는 기능 개발이 진행 중인 컨트롤러가
develop에 계속 반영되면서 미완성 코드들끼리
충돌하거나 컴파일/빈 등록 단계에서 오류가 나서
부트 실행 자체가 막히는 날이 생겼다는 점이다.
부트가 실행되지 않으면 뷰(JSP/CSS/JS) 수정이
아무리 잘 되어도 화면에서 테스트할 방법이 없다.
결국 프론트 작업이 '백엔드 미완성 코드의 영향'을
직접적으로 받아버리는 상황이 반복됐다.
이 문제를 해결하기 위해
'V를 정상적으로 테스트 가능한 상태'를
항상 유지하는 전용 브랜치가 필요했고,
그래서 'viewdevelop'을 추가했다.
문제가 터지는 구조
기존 운영은 대략 이런 흐름이었다.
- develop: 팀 통합 브랜치
- feature/이름: 개인 작업 브랜치
- 각자 feature에서 작업 후 PR로 develop에 합침
이 방식 자체는 정석인데
팀이 하루 작업분을 모두 커밋해서 올리는
방식을 택하면 아래 문제가 쉽게 발생한다.
- 컨트롤러/서비스가 아직
미완성인데도 develop에 올라감 - 미완성 컨트롤러끼리 컴파일/DI/매핑
충돌이 나서 부트 실행이 실패함 - 프론트는 뷰 확인이 급한데,
실행이 안 돼서 테스트가 멈춤
핵심은 '프론트 테스트 가능 상태'가
develop의 안정성과 묶여버렸다는 점이다.
해결 전략: 실행 가능한 V 통합 브랜치 분리
viewdevelop의 목적은 단순하다.
- viewdevelop
V(뷰) 테스트가 가능한 상태를 유지하는 브랜치 - develop
전체 통합 브랜치(Controller/Service 포함,
중간 미완성 코드가 섞일 수 있음)
즉, 프론트 작업은 viewdevelop을 기준으로 진행한다.
백엔드 기능 개발은 develop을 기준으로 진행한다.
이렇게 하면 develop이 잠깐 깨지더라도
프론트는 viewdevelop에서 계속 작업/테스트가 가능하다.
여기서 중요한 전제는 이것이다.
- viewdevelop은 '뷰/정적 리소스만'
들어가는 브랜치로 운영한다. - 컨트롤러/서비스 변경이 섞이면
viewdevelop의 목적이 무너진다.
형상관리 규칙 변경 사항
기존 'main/develop/feature' 구조는 유지하되,
프론트 작업자가 사용할 통합 브랜치로
viewdevelop을 추가했다.
- main: 최종 배포 브랜치
- develop: 전체 통합 브랜치
(백엔드 포함, 일시적으로 깨질 수 있음) - viewdevelop: 뷰 통합 브랜치
(항상 부트 실행 가능 상태 유지) - feature/이름: 개인 작업 브랜치(고정)
그리고 프론트 작업 흐름은 develop 대신
viewdevelop을 기준으로 돌아가게 된다.
'V용 브랜치 운영 루틴' 최종본
| [ V용 브랜치 운영 루틴 (viewdevelop) * 기본 원칙 ] viewdevelop: V(뷰) 통합 브랜치 (부트 실행 가능한 상태 유지용) develop: 전체 통합 브랜치(Controller/Service 포함, 중간 미완성 코드 섞일 수 있음) main: 최종 배포 브랜치 feature/이름-기능: 개인 작업 브랜치 |
| 1. 매일 작업 시작 루틴 |
| ▶ viewdevelop 최신화 |
| git checkout viewdevelop |
| git pull origin viewdevelop |
| ▶ 내 feature로 이동 |
| git checkout feature/seunghwan |
| ▶ 내 feature에 viewdevelop 반영 |
| git merge viewdevelop |
| 2. 작업 중 루틴 (V 작업자) |
| ▶ 기능 단위로 자주 커밋하고 push |
| 커밋 범위: JSP / HTML / CSS / JS / 이미지 / static 리소스 중심 |
| git add -A |
| git commit -m "view: ..." |
| git push origin feature/seunghwan |
| 3. viewdevelop로 합치기(PR) 루틴 (V 작업자) |
| ▶ PR 올리기 직전, 마지막 동기화(필수) |
| git checkout viewdevelop |
| git pull origin viewdevelop |
| git checkout feature/seunghwan |
| git merge viewdevelop |
| git push origin feature/seunghwan |
| ▶ 그 다음 GitHub에서 PR 생성 |
| base: viewdevelop |
| compare: feature/seunghwan |
| ▶ 리뷰 후 merge |
| 이때 컨트롤러/서비스 파일 변경이 PR에 섞이면 merge 금지 |
| (뷰 커밋 분리 or 불필요 변경 되돌리고 다시 PR) |
| 4. viewdevelop의 변경을 develop로 반영하는 루틴 (중요) |
| 목표: viewdevelop 전체를 merge하는 게 아니라, develop에 “뷰만” 안전하게 반영한다. |
| 방식: viewdevelop을 develop에 PR로 올린다. (단, viewdevelop은 뷰/정적만 포함) |
| ▶ viewdevelop 최신화 |
| git checkout viewdevelop |
| git pull origin viewdevelop |
| ▶ GitHub에서 PR 생성 |
| base: develop |
| compare: viewdevelop |
| ▶ merge 전 체크(필수) |
| Files changed에 src/main/java/... 변경이 있으면 merge 금지 |
| 뷰/정적 경로만 있으면 merge |
| 5. PR 머지 후 팀 공통 루틴 (V 작업자) |
| ▶ 누가 viewdevelop에 PR을 머지했든, 다음 작업 전 viewdevelop pull |
| git checkout viewdevelop |
| git pull origin viewdevelop |
| 6. 충돌을 줄이는 V 팀 규칙 |
| ▶ 같은 JSP/같은 CSS 파일 크게 건드릴 예정이면 작업 시작 전에 공유 |
| ▶ viewdevelop PR도 작게/자주(오래 끌면 충돌 급상승) |
| ▶ PR 올리기 전 feature에 viewdevelop merge는 필수 |
| ▶ viewdevelop에는 컨트롤러/서비스 파일 변경 금지(섞이면 PR reject) |
운영 중 추가로 정리한 이슈: 업로드 폴더 추적 제거
프로젝트를 진행하다 보면
런타임 중 생성되는 업로드 파일(이미지 등)이
리포지토리에 섞이는 문제가 자주 생긴다.
이건 팀 작업에서 충돌과 오염의 주요 원인이다.
그래서 아래 규칙을 강제했다.
- upload 폴더는 커밋 대상이 아니다.
- 이미 추적되고 있었다면 추적을 끊는다.
.gitignore에 포함
- /uploads/
- /src/main/webapp/upload/
그리고 이미 추적되던 파일은
'추적 해제 커밋'으로 정리한 뒤,
viewdevelop과 develop에 모두 반영했다.
이 과정을 거치면 이후에는 upload 폴더가
PR에 섞일 확률이 크게 줄어든다.
결과
viewdevelop 도입 이후 기대 효과는 명확하다.
- develop이 일시적으로 깨져도
프론트 테스트는 계속 가능 - 프론트 작업자는 실행 가능한 구버전 컨트롤러
기반으로 화면을 안정적으로 확인 - viewdevelop을 develop에 반영할 때도
경로 체크로 사고 방지 - 업로드 폴더 같은 런타임 파일 오염도 구조적으로 차단
[ 마무리 체크리스트 ]
- 프론트 작업 시작은
develop이 아니라 viewdevelop에서 pull - viewdevelop PR에는
src/main/java 변경이 들어가면 무조건 reject - viewdevelop → develop PR은
Files changed 경로 체크 후 머지 - upload 폴더는 .gitignore로 차단
+ 이미 추적된 파일은 추적 해제 커밋으로 정리
이렇게 운영하면 '부트 실행 가능 상태'가
프론트 작업의 기본 전제가 되고,
백엔드 개발 진행 상황에 프론트가 끌려가지 않게 된다
'개주 훈련일지 > 🏋️ 전집중 호흡 훈련' 카테고리의 다른 글
| 애니 리스트에 연도/분기 필터 추가하기 (비동기: 정렬·필터·페이징 / 동기: 검색) (0) | 2026.02.15 |
|---|---|
| 관리자 대시보드 제작기: 더미 데이터 기반 화면을 서버 연동 구조로 전환하기 (0) | 2026.02.14 |
| AI 추천 서비스 준비: 챗봇 UI(위젯) 만들기 (0) | 2026.02.13 |
| 관리자 대시보드 제작기: 캐시 충전 데이터로 인사이트 만들기 (0) | 2026.02.12 |
| Git) 팀 프로젝트 협업 루틴 만들기 (develop 브랜치 기반 체크리스트) (0) | 2026.02.10 |