블로그에 글을 얼마만에 쓰는 건지 모르겠다 한동안 회사에 적응하고 회사에 Tuist를 도입하는 담당자가 되어서(내가 해보겠다고 지원했다)
무사히 마무리를 하고 그 도입기? 같은것을 간단하게 적어볼려고한다.
iOS 프로젝트를 팀단위로 관리하고 있는조직이라면 다들 .xcodeproj의 깃 컨플릭으로 고생해본적 있을 것이다.
그래서 많은 iOS 개발자들이 이러한 불편한점을 개선하기위해 많은 기술들이 연구및 도입이 되고있었고 과거에는 XcodeGen
요즘은 한국에서 Tuist 라는 (민소네님이 적극적으로 홍보한) 프로젝트 관리 툴이 사용으로 .xcodeproj의 깃 컨플릭 을 해결한 팀들이 많다고 들었다.
나도 이번에 새로운 회사에 들어가 랜딩기간의 프로젝트 일환으로 특정기능들을 리팩토링하고, 특정페이지 전체를 리팩토링하는 랜딩 프로젝트 과제로 진행을 했는데 해당 리팩토링을 프로젝트에 머지하는데 상당히 큰 고생을 했다. 내가 깃에서 브렌치를 땃을때의 시점에서 꾸준히 프로젝트가 개발이 되어 왔고 QA쪽 일정까지 잡기위해 내가 리팩토링한 부분이 머지가 되는데 시간이 2주 3주정도 딜레이 되고
2주 3주정도 딜레이 된건을 머지하려고 하니 기존의 프로젝트에서 추가된 feature이 많아 머지를 할때 xcodeproj가 이전의 상태와너무달라 깃크라켄으로 컨플릭을 잡을만한 양이 아니였고 해당 컨플릭을 잡는데 엄청난 고생을 했다.
그래서 이런 문제를 직접적으로 겪고 팀내에서도 깃 머지에대한 컨플릭이 꽤 큰 이슈가되어있었기에 평소에 관심이 많았던 Tuist를 랜딩 프로젝트기간동안 검토해 보겠다고 말씀을 드렸고 프로젝트의 전체를 건드리고, 실제 성공을 할지 얼마나 걸릴지가 애매한 좀 리스크가 큰 작업이였지만 팀내의 자유로운 분위기로 Tuist도입 검토를 기꺼이 허락해 주셨고 본격적으로 Tuist도입을 검토해 보았다.
기존의 프로젝트가 모듈화가 아예 안되어있었다면 Tuist를 도입하기에 오히려 편했을거였고, 라이브러리 관리가 SPM으로 되어있었다면 좀 더 편했을텐데 아쉽게도 회사의 프로젝트는 일부 피쳐들이 모듈화가 되어있었고 라이브러리 관리는 Cocoapod으로 되어있어 작업을 해야할 것들이 조금 많았다.
그래서 작업을 시작하기위해 우선적으로 작업을 어떤식으로 진행해야할지 우선순위에 맞춰 작업을 진행하였고
- 프로젝트의 모듈 구조를 어떻게 잡을지 정리
- 기존의 라이브러리들 정리 및 삭제
- 라이브러리 이전 작업 ex SPM, Carthage 을 지원해 주지 않는 라이브러리 많은 의존성을 가지고 있는 라이브러리
- 기존의 프로젝트에서 잡아 주지 않았던 import 오류 찾기
크게 이 4가지 작업을 거쳐 Tuist를 도입을 하였고 QA를 거쳐 회사 프로젝트에 Tuist를 도입하는데 성공하였다.
QA 기간까지 포함하여 2달의 기간을 거쳐 Tuist를 도입하는데 성공하였고 현재 Tuist를 도입한 프로젝트가 앱스토어에 출시가 되어있다.
Tuist를 도입하게 되면서 많은 고난과 역경들이 있었는데 이게 프로젝트의 초기부터 Tuist를 도입한것이 아닌 만들어지고 이미 많은 코드들이 들어있는 프로젝트에 Tuist를 도입하다보니 라이브러리 의존성문제, Object-c가 들어있는 라이브러리들의 문제 의존성 문제등 좀 모듈간의 얽혀있는 문제들을 풀어내는게 많이 힘들었는데 그럴때마다 팀원들에게 도움을 요청했고 팀원들이 주는 의견을 기반으로 새로운 아이디어가 생기면서 문제를 하나씩 해결해 갔덨것 같다.
그중 가장 기억에 남는 문제가 Firebase, Realm 라이브러리와 InfiniteLayout 라이브러리의 Object-c 파일을 찾지못하고 해더를 찾지 못하는 이슈가 약 2주동안 해결하는데 큰시간을 썼던게 기억이 났다 (해결은 라이브러리를 관리하는 다이나믹 라이브러리 디팬던시 모듈을 만들어 해결하였다) 역시나 민소네님의 블로그에서 봤던 자료를 기반으로 해결하였고 해당 문제를 해결하고나서부터는 크게 어려운 문제는 없었던거 같다.
Tuist를 도입의 과정을 자세하게 설명을 하면 좋겠지만 해당 내용은 회사 기술블로그에 작성할 수도 있으니 나중에 작성하게 된다면 링크를 걸도록 하겠다.
Tuist를 도입하고 나서 생긴 장점
1. 지긋지긋한 .xcodeproj의 깃 컨플릭으로 부터 해결되었다.
Tuist를 도입하고 나서부터 여러 피쳐들을 하나의 버전에 합치는 과정에서 깃 컨플릭에 대한 소요시간이 0으로 줄어 들었고
줄어든 깃 컨플릭의 해결시간은 더 많은 개발을 할 수 있도록 하게 되었다 이 부분에서는 진짜 Tuist 짱짱맨이라고 팀원들이 말을 해주었다.
2. 모듈 관리에 편하다.
Tuist를 사용하기전에는 모듈을 추가하고 삭제하는것 자체가 .xcodeproj에 영향을 주기 때문에 모듈을 추가하고 삭제하기가 상당히 부담스러웠었고 모듈별로 셋팅들을 하다보면 누락되어잇는 빌드셋팅값 config값 등을 놓치는 경우가 생겻는데 이제 Tuist로 모두 코드로 작성하기에 모듈을 추가하고 삭제하고 관리하기에 너무 편해졌다.
3. 원하는 목적에 따라 프로젝트를 만들수 있다.
프로젝트를 개발하다보면 라이브러리가 개발에서만 사용하는 라이브러리 실서버 배포에서 사용하는 라이브러리 등이 나눠지는 경우가 있는데 이전에는 이런 부분을 직접 추가 삭제 하면 너무 번거로웠기에 어쩔수없이 프로젝트파일에 전부다 넣고 사용하거나 하는 경우가 있었다.
하지만 이제 tuist generate 해줄때 빌드 옵션으로 선택을 해주면 개발, 배포에 맞춰 라이브러리를 사용하는 프로젝트를 만들 수 있다.
Tuist를 도입하고 나서 생긴 단점
단점이라고 하기에는 좀 그렇긴한데 Tuist가 도입이 되면서 힘들었던점을 뽑아본다.
1. 기존의 프로젝트 기반으로 개발이 진행되고 있던 피처들을 Tuist로 전환하는데 소요 시간이 된다.
아무래도 Tuist를 도입하면서 프로젝트의 폴더구조를 Tuist에 맞게 변경하는 작업이 필요했는데 기존의 프로젝트는 정리가 그렇게 잘 되어 있지 않았고 내가 Tuist를 도입하면서 폴더구조를 셋팅하엿는데 기존의 나가있는 피처들은 그 이전의 폴더구조를 가지고 있어서 나가있는 피처들을 Tuist로 전환하는데 소요하는 적지않게 걸렸다.
2. Tuist 의 진입장벽
나같은 경우 Tuist를 직접 도입하면서 Tuist 공식문서를 여러번 읽어보고 함수들도 뜯어보면서 연구했기에 Tuist라는 자체에 큰 부담 감이 없어진 상태인데 기존의 팀원들은 아무래도 상대적으로 Tuist에 대해 가진 지식이 부족하고 자료가 부족하기에 Tuist로 프로젝트를 셋팅하면 조금 어려움이 있어한다 이건 어쩔수 없는 허들이라 생각하지만 기존의 팀원들은 Tuist로 셋팅하거나 하는게 좀 힘들어하여 많은 문의가 들어온다.
3. Tuist 자료의 부족
Tuist가 아직 전세계적으로 iOS 개발자들이 모두 사용하는 기술이 아니기 때문에 그리고 생긴지 그렇게 오래 되지 않은 기술이기에
다른 기술들에 비해 상대적으로 자료가 많이 부족하다 그래서 자료를 찾기가 몹시 힘들고 이게 Tuist에서 나오는 문제인지 아님 내가 프로젝트 셋팅을 잘못해서 생기는 문제인지 등을 파악 하기가 힘들어서 모듈간의 오류가 생기면 많은 삽질을 하게 된다.
기억에 남는 가장 대표적인 문제는 Realm 라이브러리를 Tuist dependency spm 으로 가져올려고하면 특정 클래스 하나를 못가져 오는 오류가 있다고 하는데 알려지지 않아 오류를 찾는데 꽤 많은 시간을 소요 하였다.
그럼에도 불구하고 Tuist는 신이다.
위의 글의 장단점을 생각해보면서 Tuist가 프로젝트 메인기술로 잡힌지 약 2달정도 시간이 지났는데 Tuist를 사용중인 팀원들의
반응은 극찬이다. Tuist를 도입함으로써 프로젝트파일을 좀 더 유연하게 관리할수 있었고 무엇보다 앞으로의 팀의 개발방향성인 피처단위 개발 모듈화 개발에 적합화 되어있는 기술이다 보니 더 늦어졌으면 큰일이였던 기술이였던 것 같다. 그리고 가장 하이라이트는
.xcodeproj의 깃 컨플릭이 해결되었다 라는거 자체로도 Tuist는 정말 도입할만한 가치가 있는 기술인 것 같다.
소감
Tuist를 도입하게 되면 프로젝트의 전반적인 셋팅을 변경하게되는 큰 리스크가 있는 작업이기에 랜딩중인 주니어 개발자에게 해당 프로젝트를 맡긴다는게 팀이 큰 리스크를 가지고있는데 기꺼이 허락해준 자유로운 팀분위기와 적극적으로 도와준 동료들에게 감사의 인사를 전한다.
그리고 iOS 개발자로써 7~8년된 프로젝트에 "Tuist를 처음부터 도입해보았어요"
라는 큰 커리어를 쌓을수 있어서 행복했다.
'Swift 기술 공부' 카테고리의 다른 글
Fastlane , Github Action 이용하기 (2) | 2022.05.25 |
---|