-
멀티 모듈 구현 시 발생했던 git 관련 이슈Back-End/Spring 2023. 8. 6. 15:38728x90
문제
N-surfer는 단일 모듈 구조로 이루어져있었다.
하지만 프로젝트에 기능이 추가되면서, 유저의 뱃지 획득과 관련하여 batch 작업을 적용해야 할 필요성이 생겼고
결과적으로 프로젝트 간 엔티티의 정합성을 쉽게 맞출 수 있고, 하나의 레포지토리에서 편리하게 두 프로젝트를 관리할 수 있는 멀티 모듈을 사용하기로 했다.
(멀티 모듈이란?? -> https://hudi.blog/why-use-multi-module/ )
따라서, 다음과 같이 프로젝트를 구성하였다.
총 2개의 모듈(business, batch)을 구성하였고, 기존의 모든 business 로직은 'business' 모듈에 넣었다.
그리고 앞으로 추가할 batch 작업 관련 로직을 위한 batch 모듈을 추가하였다.
여기서 문제는 형상 관리였다.
intellij 내부 명령어를 통해 두 개의 모듈을 만들고, 해당 모듈들을 n-surfer의 submodule로 설정하였는데
이 두 모듈이 자동적으로 git 기능이 활성화 된 상황(.git 폴더가 존재하는 상황)이었기에, 루트 디렉토리에서 이 두 모듈의 변화를 추적하지 못하는 문제가 발생했다.
결과적으로 기존 레포지토리의 Master 브랜치는 모든 클래스파일이 사라져버린 상태가 되었다.ㅠㅠ
(물론 원격 저장소에서의 상태였을 뿐, 파일 시스템 자체적으로는 기존의 구조대로 파일들이 잘 남아있는 상황이다. ㅎㅎ)
해결
터미널(or 쉘, 윈도우면 cmd)창을 열고 batch 디렉토리와 business 디렉토리에 접근하여 각각 다음 명령어를 실행 해 주면 된다.
rm -rf .git // 형상 관리 관련 모든 정보가 저장되어있는 .git을 제거 rm -rf .gitignore git rm --cached . -rf // 현재 디렉토리 스테이지의 파일 제거
추가로 git 관련 명령어들을 터미널에서 수행하지 않고 intellij의 git tab을 애용하는 유저인 경우, version controll -> Directory Mappings에 가서 더 이상 git이 동작하지 않는 디렉토리를 제거 해 준다.(필자의 경우, business 디렉토리와 batch 디렉토리였다.)
해당 작업을 완료하면, 다음과 같이 여러 개의 브랜치에 관한 정보가 나오는 화면에서
단일 브랜치의 정보만 나오도록 git 탭이 변하게 된다.
물론 해당 방법은 멀티 모듈을 적용 시, 단일 레포지토리에서 모든 모듈을 관리하고 싶을 때 사용하는 방법이다.
만약 모듈별로 원격 저장소를 따로 두고 싶다면, 다음 글들을 읽어보면 도움이 될 것이다.
https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-%EC%84%9C%EB%B8%8C%EB%AA%A8%EB%93%88
https://tecoble.techcourse.co.kr/post/2021-07-31-git-submodule/
'Back-End > Spring' 카테고리의 다른 글
Spring AOP가 적용된 커스텀 어노테이션 및 Bean 사용 시 유의점 (0) 2024.04.12 Stream을 List로 변환하는 2가지의 방법(Collectors.toList(), Stream.toList()) (1) 2023.04.18 nGrinder를 활용한 어플리케이션 성능테스트 (0) 2023.01.06 Spring Rest docs를 활용한 API 명세를 openapi3를 활용하여 swagger로 변환하기 (0) 2022.12.13 Spring Security cors 이슈 (0) 2022.10.21