---
# System prepended metadata

title: Week7 S4

---

# Week7 S4

## 🍎 캠퍼.sorted { $0.id < $1.id }

| 캠퍼 | 이모지 |설명 |
| :-: | :--: | :-: |
| `S002 강민상` | 💻 | 스타벅스시러 (관악 보이~) |
| `S005 김두연` | 👻 | 👻👻👻👻👻정아 깐부 ㅎㅎ (부천 보이~) |
| `S012 김우재` | 💻 | 드립 천재 (수원 보이~) |
| `S014 김태훈` | 😍 | 재밌는 부캠 기폭제 (인천 보이~) |
| `S018 박영광` | 🎃 | 부캠 핵인싸 아웃풋 (광진 보이~) |
| `S021 박정아` | 😚 | 리드미 걸~ (보라매 걸~) |
| `S036 이나정` | ✈️ | 바다보면서 코딩중 (제주 걸~) |
| `S047 이청수` | 🐱 | 고양님 모시는 중 (안산 보이~) |

</br></br>

## 🛀🏻 @required 쉬는시간

- [x] 14:15 ~ 14:30
- [x] 15:30 ~ 15:45
- [x] 16:10 ~ 16:30

</br></br>

## 💡 주제

### 1. 협업

#### 협업 방법

- Jira(L?) 를 사용하는 팀도 있음(Atlassian)
    - 거창해서 굳이 둘이서 하기엔 별로였던 것 같다
- public하게 할땐 깃허브 관리를 잘 하면 좋겠으나 이번 프로젝트는 private이라 노션을 활용하는 팀이 많았다.
- ```민상 & 영광``` : 우리팀은 2명이고 규모도 작기 떄문에 github project, issues를 사용하기로 했었습니다. 또한 일정 관리를 노션을 사용했습니다.
- ```나정 & 태훈``` : 노션에 큰 계획을 정리하고 체크하면서 진행했습니다. 개발은 한시간 단위로 개발 후 코드 합치는 식으로 협업
- ```우재 & 청수``` : driver, navigater 를 3, 4시간 단위로 반복했습니다.
- ```두연 & 정아``` : Notion의 timeline 가능을 이용하여 계획을 세웠고 해당하는 페이지에 학습한 내용을 남겼습니다. 또한, 서로가 그때그때 정한 기능을 기준으로 합치는 식으로 협업하였습니다.

#### StoryBoard 분리? (reference?)

- ```민상 & 영광``` : 스토리 보드로 쓰는편! 스토리 보드를 조금이라도 수정시 git conflict가 나기 때문에 스토리보드는 민상님이 담당하였습니다.
- ```나정 & 태훈``` : storyboard reference 시도해봤지만 실패 ㅠ
- ```우재 & 청수``` : 스토리보드를 건드리는 작업은 짝프로그래밍으로 하고 로직만 각자 작업
- ```두연 & 정아``` : 100% 코드로만 구현해보는 것을 도전중입니다 (👍 리스펙...),
    - SnapKit 사용하다가 (리뷰를 듣고) 기본 autolayout 으로 사용하고 있습니다.

#### 화면단위, 기능단위? 어떤 단위로 나눠서 작업했는지

- ```민상 & 영광``` : 메인 화면에서는 서로 같이 짜고 그 이후에 중복되는 작업들은 나눠서 했습니다.
- ```나정 & 태훈``` : Model, View Model 를 한명이 작업하면 한명이 View Controller 와 UI 를 작업했습니다.
- ```우재 & 청수``` : 페어 프로그래밍 위주로 진행하다가 각자 컨디션 따라서 특정 기능을 전담해서 진행했습니다.
- ```두연 & 정아``` : 한명이 화면 작업을 할 때 한명은 기능 작업을 하기도 했고, 각자 같은 화면에 다른 기능을 작업하기도 했습니다! 기능 작업, 분리 작업으로 나누기도 했구요!

</br>

### 2. Kingfisher, Alamofire 사용한 이유

- ```민상 & 영광``` : 둘 다 사용한 이유는 안써봤었기 때문. 이미지 캐시 관리를 해주기 때문에 사용해봤다. 또한, 현업에서 많이 사용하기도 하고 확장 가능성 때문에 사용하게 되었다.
- ```나정 & 태훈``` : 편하게 다운로드 하기 위하여 사용함.
    - 킹피셔의 imagedownload 사용(Disk Cache), default method 를 사용하면 문제가 발생하기도 해서 용량이 큰 이미지는 Disk 로 하는게 좋을 듯 (사용 메모리가 기가 단위로 가다가 앱이 죽었던 경험이...ㅠ)
    - 1. Alamofire 2. Kingfisher 3. Snapkit 순으로 많이 사용하는 라이브러리라고 생각
- ```우재 & 청수``` : 학습을 위해서 직접 구현하자는 의견(청수)과 새로운 라이브러리에 궁금증이 있으니 사용해보자는 의견(우재)이 갈렸음.
    - 온반 앱에서 이미 URLSession으로 직접 구현을 해보기도 했고 라이브러리를 사용해보는것 자체도 좋은 경험이라고 결론을 내려서 결국 라이브러리를 사용함
- ```두연 & 정아``` : 저희도 둘 다 안써봐서 사용해보고자 함. 추가로 현업에서 사용하는 곳도 꽤 있다는 이유도 있었습니다!

</br>

### 3. 깃허브

#### conflict 해결

- ```민상 & 영광``` : 같은 브랜치를 로컬에서 push & merge
- ```나정 & 태훈``` : github 웹 에디터로 수정, local에서 rebase 에러 나면 cmd로 확인후 xcode에서 수정, [깃 Fork](https://git-fork.com/) 어플사용
- ```우재 & 청수``` : 짝 프로그래밍이 메인이어서 충돌날일이 거의 없었음. 충돌이 나면 [깃크라켄](https://www.gitkraken.com)을 사용하여 해결
- ```두연 & 정아``` : local에서 develop branch fetch rebase하고 각자 기능별 feat 브랜치로 작업하였습니다. xcode에서 수정 후 fetch & rebase하여 conflict를 해결하고 push. 그 후 develop으로 pr을 보내 rebase and merge했다.

#### 브랜치 전략

- ```민상 & 영광``` : origin 의 하나의 브랜치를 local 에서 push, pull 하는 방식을 적용
- ```나정 & 태훈``` : 하나의 브랜치를 main처럼 사용하고 origin 으로 pr 을 날리는 방식 사용
- ```우재 & 청수``` : 하나의 원격브랜치를 각각 로컬 브랜치에 받아와서 pull, push를 반복
- ```두연 & 정아``` : S08A, develop, feat으로 나누어 기능별 feat에서 작업 후 develop으로 pr을 보내서 합쳤습니다! 이렇게하면 동시작업도 편하더라구요! 

#### Rebase and merge 외않되... 

- `pull`이 아니라 `fetch & rebase` 후 conflict 해결하면 되긴하는데 `pull(fetch + merge)`과 `fetch + rebase` 이 둘의 차이가 아닐지싶네요!
- fetch & rebase 안하고 계쏙 커밋하다가 나중에 fetch & rebase해도 먹히나요? 
    - 일단 작업 후 commit하고 fetch & rebase해도 됩니다!! 그래도 작업 시작 전에 하면 더 좋지 않을까요?? 🤔

</br></br>

### 4. 프로젝트 구조

#### 디자인 패턴 사용 (JK-iOS Clean Architecture)

- ```민상 & 영광``` : MVC 패턴 
- ```나정 & 태훈``` : MVVM 패턴
- ```우재 & 청수``` : MVC -> MVVM 패턴
    - Repository는 reachability에 따라 data source(remote/local)를 알아서 결정하는 객체인 것 같습니다.
    - 이번 프로젝트는 그런 요구사항이 없어 repository를 거치지 않고 유즈케이스를 통해 네트워크 요청을 주고받는 방식으로 구현했습니다.
- ```두연 & 정아``` : MVC -> JK-iOS Clean Architecture 패턴
    - 현재 Repository가 Network, Storage를 의존하는데 반대로 의존하게 하려면 어떻게 해야할지 모르겠습니다.

#### Cocoapods vs SPM vs Carthage 선택 기준

- ```민상 & 영광``` : Cocoapods, M1 이슈도 없고 제일 쉬울 것 같아서 선택하였다.
- ```나정 & 태훈``` : Cocoapods, 저희 프로젝트에 가장 적절한 패키지 매니저라는 생각이 들었습니다.
- ```우재 & 청수``` : SPM, Cocoapods을 사용할 때 M1 이슈가 생겨서 변경했는데 SPM은 문제가 생기지 않았다.
    - 장점: 설치가 간단함, xcworkspace를 사용하지 않고 xcodeproj로 바로 사용 가능
    - 단점: Cocoapods은 지원하지만 SPM은 지원하지 않는 패키지가 있었음
    - pod은 모든 타겟에 import되는데 swiftPackage는 원하는 타겟만 import 된다?!
- ```두연 & 정아``` : Cocoapods, 옛날이야기일 수 있지만.. SPM에는 지원하지 않는 패키지가 많다는 이야기에 Cocoapods을 이용해야겠다 생각했습니다.

</br></br>

## 🐂 소감 

- `S002 강민상` 🧑🏻‍💻 : 페어프로그래밍을 처음 해봤는데 덕분에 깐부치킨도 같이 먹을 친구가 생겨 매우 좋았습니다.
- `S005 김두연` 👻 : 저도 깐부랑 같이 프로젝트 해서 너무 재미있는 한주였습니다! 저두 다음주 기대되요~~~
- `S012 김우재` 💻: 여러번의 디버깅을 통해 남의 코드를 분석하는 능력을 기르게 되었습니다!!
- `S036 이나정` ✈️ : 짝프로그래밍을 처음으로 해볼 수 있는 시간이었습니다. 협업은 해볼수록 느는것 같아요! 재미있었습니다.
- `S014 김태훈` 😍 : 재미있는 시간이였습니다~
- `S018 박영광` 🎃 : 아싸 금요일 주말에 쉬지롱~ `캠퍼.map { $0.소감 }`
- `S021 박정아` 😚 : 깐부랑 재미있는 프로젝트~ 너무 재밌었습니다! 다음도주도 너무 기대되네요!! 
- `S047 이청수` 🐱 : 부캠에서의 첫 협업이었는데 깐부 프로그래밍이 정말 재밌을 수 있다는걸 깨달았습니다!

</br></br>

## 🍯 꿀팁

- 카카오, 뱅크샐러드, 인스타그램 어플 들어가면 ```오픈소스 라이브러리``` 확인 가능
- Git 관리툴 
    - [깃 Fork](https://git-fork.com)
    - [깃크라켄](https://www.gitkraken.com) 
